
Ad.x ??
09.09.2017
10:48:18
на ней индекс, соответственно при каждом просмотре он перестраивается, верно?

Alexey
09.09.2017
10:48:48
обновляется, не перестраивается
это значит, что в индексном дереве нужно найти старое значение, пометить его как удалённое, затем добавить в дерево новое значение

Ad.x ??
09.09.2017
10:52:13
короче с этими generated column появилось очень много
SQLSTATE[HY000] [2002] No such file or directory

Google

Ad.x ??
09.09.2017
10:53:05
и другие сайты на сервере тоже крашатся на запросах, мускул чот прочитать походу не может

Alexey
09.09.2017
10:54:03
в error log смотри. думаю, это не про generated columns

Ad.x ??
09.09.2017
11:19:31
ебать приколы с этими колонками... сервер ушатали за 10 минут в ноль )

Alexey
09.09.2017
11:21:31
я совсем недавно гонял разные бенчмарки с generated columns. несколько недель, разные тесты, сотни тысяч запросов в секунду — никаких приколов

Ad.x ??
09.09.2017
11:22:06
они пересчитывались постоянно ?

Alexey
09.09.2017
11:22:16
да

Ad.x ??
09.09.2017
11:22:19
данные в этих колонках

Alexey
09.09.2017
11:22:30
и индексы по ним тоже были

Ad.x ??
09.09.2017
11:30:02
https://pastebin.com/WSDF8fAA
Селал так, выкатил на проду и все померло
при каждом визите посетителей обновляются либо
current_shows
либо
current_clicks
их не много, порядка 15тыщ в час
как так умерло все нипанять ))

Alexey
09.09.2017
11:32:20
а индексы-то где?

Google

Ad.x ??
09.09.2017
11:33:11
https://pastebin.com/AG80RAbd
тут
ADD KEY `category_id_2` (`category_id`,`best_image`,`tested_image`,`ctr`);
составной по сортировке идет эта колонка
До кучи, этот generated column показывает погоду при делении.

Alexey
09.09.2017
14:38:53

Ad.x ??
09.09.2017
14:39:44
Версия сервера: 5.7.14-7-log - Percona Server (GPL), Release 7, Revision 083e298

Alexey
09.09.2017
15:01:08
а покажи запрос, которым ты вот этот скриншот сверху получил?

Ad.x ??
09.09.2017
15:02:54
простая сортировка:
SELECT * FROM `videos_stats` ORDER BY `videos_stats`.`ctr` DESC
когда колонка нормальная считает правильно, а когда делаешь динамической, то считает этот цтр как на скрине
может версия корявая, может типы должны совпадать... завтро попробую потестить сначала с типами, потом с версией ))

Alexey
09.09.2017
15:08:01
там ctr идут с определённым шагом 1/2, 1/2.5, 1/3, 1/3.5 и т.д. и меня терзают смутные сомнения, что где-то ты намудрил или не всё рассказываешь

Ad.x ??
09.09.2017
15:09:17
ну схема есть же
все по ней, ниче лишнего
ctr` DOUBLE AS (`total_clicks` / `total_shows`)
как тут можно намудрить? )

Alexey
09.09.2017
15:11:53
покажи show create table videos_stats и SELECT * FROM videos_stats LIMIT 1, лучше из консоли, без GUI

Ad.x ??
09.09.2017
15:12:57
минут через 20-30, отойти надо
т.е. целые числа вроде нормально посчитало
по крайней мере тотал клики и тотал показы, а вот их разницу похерило

Alexey
09.09.2017
15:49:15

Google

Ad.x ??
09.09.2017
15:50:32
точно
вот так-вот... замылился глаз и не те колонки поставил, и все пошло косо криво
но память все равно утекла почему-то
на проде

Alexey
09.09.2017
15:54:17
скорее всего, generated columns там тоже ни при чём

Ad.x ??
09.09.2017
15:57:42
попробую еще раз завтро на проде )) в ночь ставить как-то стремно

Karice
10.09.2017
05:46:37
t.me/telegidka1 — каталог самых полезных и интересных каналов в телеграм.

Yaroslav
10.09.2017
05:47:13

Oliver
10.09.2017
09:14:29
Всем привет. Почему REPLACE INTO не работает ?
Всмысле не заменят, а всегда добавляет новые строки.

Fike
10.09.2017
09:15:34
> REPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE index. Otherwise, it becomes equivalent to INSERT, because there is no index to be used to determine whether a new row duplicates another.
либо же у тебя этот самый индекс не совпадает

Oliver
10.09.2017
09:17:02
Есть и то и то - и индекс совподает)
Тупа жму кнопку.

Lucky
10.09.2017
09:18:54
Значит primary key таки не совпадает.

Fike
10.09.2017
09:19:26
etki@vortex ~ $ docker run --rm -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7
---
etki@vortex ~ $ docker exec mysql mysql -uroot -proot -e 'CREATE DATABASE proof;'
etki@vortex ~ $ docker exec mysql mysql -uroot -proot -e 'CREATE TABLE proof.proof (id int PRIMARY KEY AUTO_INCREMENT, value TEXT);'
etki@vortex ~ $ docker exec mysql mysql -uroot -proot -e 'REPLACE INTO proof.proof (id, value) VALUES (1, "test");'
etki@vortex ~ $ docker exec mysql mysql -uroot -proot -e 'REPLACE INTO proof.proof (id, value) VALUES (1, "test2");'
etki@vortex ~ $ docker exec mysql mysql -uroot -proot -e 'SELECT * FROM proof.proof;'
id value
1 test2
etki@vortex ~ $

Oliver
10.09.2017
09:20:39
Как это ? id - prime key/ text - uniq
Жму кнопку, при это не чего не меняется! Только запрос.

Fike
10.09.2017
09:20:53
ничего
во-вторых, если у вас GUI, то, возможно, стоит перезапустить select-запрос

Oliver
10.09.2017
09:22:41

Google

Fike
10.09.2017
09:23:01
я понятия не имею, с чем вы там работаете
видимо, нажать другую кнопку

Oliver
10.09.2017
09:24:17
Всмысле с чем ?))
mysql(innoDB) + php

Fike
10.09.2017
09:24:41
а кнопку кто рисует?

Oliver
10.09.2017
09:25:30
Кнопку рисует xcode)
Толчнее swift.
Просто вызываю php файл с запросом и передаю пару значений через post.

Magic
10.09.2017
09:26:16

Oliver
10.09.2017
09:27:24

Fike
10.09.2017
09:27:33
то есть у тебя изменения происходят на сервере, но ты не обновляешь данные на клиенте?
давай-ка пинпоинтнем проблему
зайди в консоль мускула и руками там этот запрос выполни

Oliver
10.09.2017
09:28:34
Щас попробую..
Упростил запрос до некуда:
REPLACE INTO table1 SET text = 'text'
Каждый раз новая строка)))

Magic
10.09.2017
09:31:45
стоп
ты что хочешь сделать?

Fike
10.09.2017
09:32:07
каким образом он тебе заменить должен?
по каким признакам?
> REPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE index. Otherwise, it becomes equivalent to INSERT, because there is no index to be used to determine whether a new row duplicates another.

Oliver
10.09.2017
09:33:14

Google

Magic
10.09.2017
09:33:39
Если не трудно разжуйте на примере, я sql нубяра.
Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена
https://phpclub.ru/mysql/doc/replace.html
Следует учитывать, что, если не используются индексы UNIQUE или PRIMARY KEY, то применение команды REPLACE не имеет смысла, так как она работает просто как INSERT.

Fike
10.09.2017
09:34:46
без уникального признака - primary key / unique index - он это понять не в состоянии

Magic
10.09.2017
09:36:17
К вопросу, что ты хочешь сделать? заменить значения поля у уже существующей?

Oliver
10.09.2017
09:36:37
Что то я не пойму..
Вот моя таблица:
CREATE TABLE table1 (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
text text,
PRIMARY KEY (`id`),
KEY TEXT (`text`(128))
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;