Удаление миллиона записей из таблицы MySQL
удаление N записей из таблицы с M строками ортогонально кол-ву одновременных сессий к MySQL серверу.
может он каждую строчку по отдельности удалять собрался?
Поселктив айдишки и удаляя по 100К например.
Почти наверное идёт удаление не по primary, а вероятнее всего вообще не по ключу. Соответственно лочится вся табличка. Зверьки набегают, и ждут свои N сек, до того, чтобы получить lock wait timeout. Соответственно все коннекты заняты запросами, ждущими освобождения лока.
От такого как раз можно избавиться вначале поселектив, а потом удаляя по primary.
Да, надо было по id удалять. Дурак я.
Почти наверное идёт удаление не по primary, а вероятнее всего вообще не по ключу. Соответственно лочится вся табличка. Зверьки набегают, и ждут свои N сек, до того, чтобы получить lock wait timeout. Соответственно все коннекты заняты запросами, ждущими освобождения лока.Это про MyISAM или про InnoDB тоже?
Это про innodb, но в myisam наверное такое же поведение будет, с учётом того, что там вроде вообще нет построчных блокировок. С myisam'ом я нормально не работал, поэтому могу только предполагать.
MyISAM у меня была
ну значит хреновый из меня телепат
А зачем вы используете MyISAM? Я думал что он морально устарел и не имеет преимуществ по сравнению с InnoDB.
в майисаме есть, например фултекстовые ключи для поиска..
вроде в myisam лучше работать всякие лимиты при больших оффсетах и вытаскивание данных только по индексам. Это оттого что нет версионности (транзакций).
Есть какой-нибудь мануал где объясняются алгоритмы по которым работают блокировочные и версионные СУБД и на каких операциях какие выигрывают? Хочу систематизировать и навести порядок в голове.
Оставить комментарий
uncle17
как удалить один миллион из 15, не подвесив базу с ответом "Too many connections"?