Оказалось достаточно включить лог запросов, которые не используют индексы 😃 . log-queries-not-using-indexes называется, если в конфиге. Были запросы, которые выполнялись ВСЕГДА быстрее секунды, но при этом сканировали полностью таблицу на 70 000 строк.
Это было 3 мода под воблу одного и того же человека 😦 . Я фигею, дорогая редакция… За несколько лет никто не исправил. А потом люди ставят какой-нибудь коряво писанный кеш и ссут кипятком, что у них все ускорилось. Лечат головную боль топором.
И главное не сказать, чтобы моды были откровенным дерьмом (такое не ставлю из принципа). Написаны они относительно неплохо. Но на больших досках явно по-человечески не обкатывались.
После добавления индексов, mysql в топе сразу уехал вниз, а наверху остались только php-процессы. Нагрузка тоже упала некисло. Раза в полтора точно.
Осталось понять, почему MEMORY-таблица сессий упорно отказывается использовать индексы для выборки и сортировок. Там правда 1500 записей всего, из которых регулярно выбирается 500-700. Возможно, оптимизатор mysql забивает на индексы, потому что без них быстрее получается. Я как бы против ничего не имею, но плохо то, что валится мусор в лог медленных запросов и в статистику.
Из заделов на будущее - надо сделать автоматическую разбивку длинных тем. Уже есть такие, в которых по 10 тысяч постов, ну и ясен пень, там fullscan на перелистывании. Отчасти конечно спасает querycache, но это все равно не дело.
Да, кстати, странная какашка с подскакиванием числа mysql-коннектов до максимума пропала сама собой. Сдается мне, в федоре у php был кривой не только libxml. Сыт этим бета-тестингом по самое немогу. Буду разучивать debian-овские сборки. Зря я убунту похоже ругал, надо было сразу с aptitude и sysvconfig разобраться.
Я предупреждал - индексы наше фсио 😃 А хинтов оптимизации у мышцы нет (как у оракла) ?
Ну там относительно прописные истины.
Главный хинт оптимизации непосредственно под воблу - не ставить чужих аддонов. Сама-то вобла прямыми руками написана. Не считая перелистывания длинных топиков - но это у всех так.
Осталось понять, почему MEMORY-таблица сессий упорно отказывается использовать индексы для выборки и сортировок. Там правда 1500 записей всего, из которых регулярно выбирается 500-700. Возможно, оптимизатор mysql забивает на индексы, потому что без них быстрее получается.
В таких таблицах по умолчанию используется другой тип индекса - HASH. Который умеет только искать конкретное значение, но зато очень-очень быстро.
По идее можно сделать и BTREE индекс, но для такого кол-ва записей это особого смысла не имеет.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"39c21abc3df9550077797d18":{"_id":"39c21abc3df9550077797d18","hid":349,"name":"Vitaly","nick":"Vitaly","avatar_id":null,"css":""},"43421f8a3df955007778eeab":{"_id":"43421f8a3df955007778eeab","hid":9449,"name":"kmike","nick":"kmike","avatar_id":null,"css":""},"44e896f03df95500777897b0":{"_id":"44e896f03df95500777897b0","hid":16248,"name":"lelik","nick":"lelik","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"49d8d05699707300770f8d7c","hid":6378,"title":"Нашел, кто гадил в мой mysql-cервер","html":"<p>Оказалось достаточно включить лог запросов, которые не используют индексы <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span> . log-queries-not-using-indexes называется, если в конфиге. Были запросы, которые выполнялись ВСЕГДА быстрее секунды, но при этом сканировали полностью таблицу на 70 000 строк.</p>\n<p>Это было 3 мода под воблу одного и того же человека <span class=\"emoji emoji-frowning\" data-nd-emoji-src=\":frowning:\">😦</span> . Я фигею, дорогая редакция… За несколько лет никто не исправил. А потом люди ставят какой-нибудь коряво писанный кеш и ссут кипятком, что у них все ускорилось. Лечат головную боль топором.</p>\n<p>И главное не сказать, чтобы моды были откровенным дерьмом (такое не ставлю из принципа). Написаны они относительно неплохо. Но на больших досках явно по-человечески не обкатывались.</p>\n<p>После добавления индексов, mysql в топе сразу уехал вниз, а наверху остались только php-процессы. Нагрузка тоже упала некисло. Раза в полтора точно.</p>\n<!--cut-->\n<p>Осталось понять, почему MEMORY-таблица сессий упорно отказывается использовать индексы для выборки и сортировок. Там правда 1500 записей всего, из которых регулярно выбирается 500-700. Возможно, оптимизатор mysql забивает на индексы, потому что без них быстрее получается. Я как бы против ничего не имею, но плохо то, что валится мусор в лог медленных запросов и в статистику.</p>\n<p>Из заделов на будущее - надо сделать автоматическую разбивку длинных тем. Уже есть такие, в которых по 10 тысяч постов, ну и ясен пень, там fullscan на перелистывании. Отчасти конечно спасает querycache, но это все равно не дело.</p>\n<p>Да, кстати, странная какашка с подскакиванием числа mysql-коннектов до максимума пропала сама собой. Сдается мне, в федоре у php был кривой не только libxml. Сыт этим бета-тестингом по самое немогу. Буду разучивать debian-овские сборки. Зря я убунту похоже ругал, надо было сразу с aptitude и sysvconfig разобраться.</p>\n","user":"39c21abc3df9550077797d18","ts":"2009-04-05T15:37:58.000Z","st":1,"cache":{"comment_count":3,"last_comment":"49f72b3f9970730077181733","last_comment_hid":3,"last_ts":"2009-04-28T16:13:51.000Z","last_user":"43421f8a3df955007778eeab"},"views":927,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}