Немного о локах
Бывает такая хрень когда локи жить мешают. Т.е. заходит какой то slow SELECT, локает таблицу, пока он там думает, приходит пачка INSERTов и ждут...
У меня количество INSERTов в такой пачке иногда достигало max_used_connections
Ну или мускуль просто падал не в состоянии обработать такой поток данных.
Либо наоборот. Приходит какой то UPDATE, а за ним пачка INSERTов. Ну вообще это разные ситуации и чтобы их разрулить, надо неплохо рубить в движке мускуля
Помочь могу следующие фишки
1. concurrent_insert - параметр такой. Что делать с одновременными инсертами? 1 - ждать пока снимется лок с предыдущего, 2 - всунуть запись в конец таблицы. 1 - лучше для избежания фрагментации динамических таблиц. 2 - для производительности
2. Если INSERT/UPDATE треды мешают жить SELECTам, то можно поюзать low-priority-updates. Тогда апдейты будут иметь более низкие права на лок, чем SELECT. Т.е. поменяются местами
А вообще при проблемах с локами советую проверить запросы на правильность индексов а так же перейти на таблицы INNODB, у которых лок не на уровне таблицы, а на уровне строки данных.
Кстати, локать таблицы еще может периодический бекап mysqldump. Думпать рабочую нагруженную базу не советую, поднимите лучше репликацию, и думпайте SLAVE сервер.
Так же полезно почитать офф документацию: Table locking issues
Комментариев нет:
Отправить комментарий