Size: a a a

2020 April 14

NI

Nickolay Ihalainen in ru_mysql
и поэтому больше пяти узлов ни у кого нет на галере
источник

ЕО

Евгений Овчинников in ru_mysql
Nickolay Ihalainen
на галере нет менеджера блокировок глобального. поэтому долбить в одну и ту же строчку с разных узлов нельзя из соображений производительности (будет много ролбеков). поэтому надо пользоваться блокировками одного узла (если все текущие изменения идут на текущий узел).
да это понятно из доки, режим оптимистичной блокировки, когда блокировка не распространяется на другие узлы
источник

ЕО

Евгений Овчинников in ru_mysql
Nickolay Ihalainen
т.к. все изменения надо применять на всех узлах одновременно и на всех узлах полная копия, не получается увеличить скорость за счёт применения DML одновременно на разных узлах. Поэтому надо делать rwsplit
апдейты на разных узлах бессмысленны, а селекты нужно распределять по всем
источник

NI

Nickolay Ihalainen in ru_mysql
в точку!
источник

ЕО

Евгений Овчинников in ru_mysql
у меня ситуация такая что сейчас я всё и селекты и апдейты направляю на один сервер
источник

ЕО

Евгений Овчинников in ru_mysql
и дедлоков на порядок больше чем было до галеры
источник

NI

Nickolay Ihalainen in ru_mysql
тогда проблема с дедлоками связана с тем что стало больше параллельных запросов
источник

ЕО

Евгений Овчинников in ru_mysql
вот что мне сделать чтобы с этим разобраться?
источник

NI

Nickolay Ihalainen in ru_mysql
скорее всего надо смотреть в сторону нормализации базы и выкидывания полей типа last_updated из mariadb чтобы избежать горячих строчек
источник

NI

Nickolay Ihalainen in ru_mysql
т.к. рано или подно оно завалит даже одиночный инстанс
источник

ЕО

Евгений Овчинников in ru_mysql
я читал что все таблицы должны быть с primary_key проверил - ок, движок innodb - ok, за исключением базы mysql, я так понимаю она вообще не учавствует никак
источник

NI

Nickolay Ihalainen in ru_mysql
не я не про это: вот есть у нас микросервисы, приходит запрос от клиента и параллельно уходит в 10 микросервисов. Каждый из микросервисов делает дело и выставляет дату в last_access_date
источник

ЕО

Евгений Овчинников in ru_mysql
даже query_cache отключил
источник

NI

Nickolay Ihalainen in ru_mysql
получаем в случае одного сервака всё более-менее мгновенно срабатывает, пока клиентов мало (не миллионы на инстанс в сутки).
источник

NI

Nickolay Ihalainen in ru_mysql
когда у нас появляется галера, даже с одним писателем каждая транзакция требует сертификации. Да сертификации приходят пачками, но у нас теперь дольше висят запросы и после точки синхронизации, следующие транзакции могут начать менять те же строчки в двух и более табличках в разном порядке, а это дедлок
источник

NI

Nickolay Ihalainen in ru_mysql
т.е. было^
a1 => a2 => a3  ; b1 => b2 => b3 используя один процессор.
а стало:
a1 зависло на сертификации в это время уже пошло b1, в результате a2 и b2 завершились одновременно и a3 и b3 заработали параллельно. а так как a3 обновляет сначала users а потом posts. а b3 обновляет сначала posts а потом users и это дедлок
источник

ЕО

Евгений Овчинников in ru_mysql
спасибо, ушел думать
источник

ЕК

Евгений Кочергин in ru_mysql
Nickolay Ihalainen
скорее всего надо смотреть в сторону нормализации базы и выкидывания полей типа last_updated из mariadb чтобы избежать горячих строчек
а как тогда быть когда надо знать когда строка была обновлена ?
источник

NI

Nickolay Ihalainen in ru_mysql
обязательно проверять ошибки и посылать повторно транзакцию. печатать дедлоки в error-log и разбираться как они произошли
источник

AK

Alexey Kopytov in ru_mysql
Эд
кто разговаривал с English native speakers, кто-либо из них произносил MySql как Май сиквл?
Американцы почти все говорят my-sequel, им так привычнее. И китайцы тоже так произносят, им так язык удобнее выворачивать. my-s-q-l произносит жалкая кучка старперов типа меня, которые знают, как Монти произносит )
источник