Performance-субботник. Чистим сайты после обновления с Drupal 5 на 6 и с 6 на 7

Пнд, 18/07/2011 - 18:21

Немного теории

Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, сбалансированного дерева.
Википедия

Для тех кто не понял

Индекс в таблицах базы данных, это как предметный указатель в книге. Если не было бы предметного указателя, то вы бы листали всю книгу и просматривали текст каждой страницы в поисках какого-то определённого слова. В случае присутствия предметного указателя, вы быстро пробегаетесь по указателю, находите нужное слово и страницу и экономите время. Индекс в базах данных работает так же.

И чего ты этим сказать хотел?

Ещё работая в IT-Patrol была замечена интересная статистика, а именно:
старые сайты имели большие показатели неиндексированного чтения и проблемы с производительностью. Естественно, в голове это не совсем укладывалось, так как с виду вполне себе обычный сайт, но работает медленно и даёт нехилую нагрузку по БД.
Изначально это связывалось с кривыми модулями и другими физическими ущербностями.
Потом при обновлении fermer.ru я столкнулся с тем, что отпали индексы по fid в таблице files.
Время шло, вышла семёрка, начались апдейты на неё, при апдейте hr-portal.ru было замечено отпадение индексов и даже то, что некоторые индексы давно отсутствовали, но портал более менее нормально работал на шестёрке.
Дело в том, что между версиями меняется структура БД и при накладках во время апдейта, старый индекс удаляется за ненадобностью, а новый не создаётся, например, из-за дублей, так бывает в таблице blocks.
В итоге мы получаем с виду работающий сайт, но внутри имеем вот такие грабли

Как диагностировать?

Очень просто, Устанавливаем модуль  Schema
Сразу хотелось бы предупредить что в версии модуля для Drupal 7 наблюдается баг с префиксами БД, данные которые даёт модуль по БД с префиксом некорректны.
Идём в admin/build/schema/report
Перед нами предстанет страница подобная этой

Легенда:
На желтом фоне пишутся предупреждения, в большинстве случаев они говорят о том, что авторы некоторых модулей не читали раздел про типы полей на api.drupal.org.
Филдсет Match несёт информацию о таблицах которые совпадают со схемой.
Mismatch сообщает нам о таблицах в которых проблемы со схемой.
Extra это таблицы в БД, которые не связаны схемой ни с одним модулем.

Рассмотрим подробнее Mismatch.


primary key: missing in database
Говорит о том, что потерян первичный индекс.
Ещё возможен вариант потери обычного индекса, например:

indexes content_type_uid: missing in database

И чего мне теперь делать, я же спать не буду?!

Вооружаемся текстовым редактором, просматриваем install-файлы модулей, смотрим там hook_schema() и восстанавливаем индексы соответствующими запросами:
ADD INDEX [index_name] (index_col_name,...)
или ADD PRIMARY KEY (index_col_name,...)
или ADD UNIQUE [index_name] (index_col_name,...)
или ADD FULLTEXT [index_name] (index_col_name,...)
Не забываем, что индексы бывают разных типов - составные, уникальные, простые и т.п.

ПЧП, КСС, это всё сложно для меня, может вы сможете помочь?

Я помогу вам за 1000р или эквивалент, я приведу отпавшие индексы в порядок и добавлю свои наработки.
И кстати, если вы клиент Патруля более трёх месяцев, то на вас распространяется 50% скидка, если вы пришли на IT-Patrol менее 3 месяцев назад, то стоимость составит 750р за проблемный сайт, просто напишите в техническую поддержку.

0 Спасибо

Комментарии

Аватар пользователя Valeratal
5 лет 1 month назад Valeratal #

спасибо, полезно

0 Спасибо
Аватар пользователя Romsla
5 лет 1 month назад Romsla #

Интересно, добавил.

0 Спасибо
Аватар пользователя Andruxa
5 лет 1 month назад Andruxa #
RxB написал:
старые сайты имели большие показатели неиндексированного чтения и проблемы с производительностью.

в закладки
может, и мой сайт когда-нибудь доживет до таких вещей

0 Спасибо
Аватар пользователя Cyber
5 лет 1 month назад Cyber #

Ага. Спасибо огромное, кое что прояснило.

Кстати там вкладка есть SQL. Иногда помогает тупым копипастом и правкой запроса с последующим скармливанием в консоль или phpMyAdmin.

0 Спасибо
Аватар пользователя vitg
5 лет 1 month назад vitg #

Спасибо, интересно.

0 Спасибо
Аватар пользователя q2_faith
5 лет 1 month назад q2_faith #

огромное спасибо) в закладки)

0 Спасибо
Аватар пользователя mak-vardugin
5 лет 1 month назад mak-vardugin #

пригодиться, как раз есть чего почистить, подзасрался один проэктик старый.

0 Спасибо
Аватар пользователя sin@drupal.org
5 лет 1 month назад sin@drupal.org #

Отличный пост, спасибо! Не знал этот модуль, как раз сейчас перевожу D5->D6, попробую.

Кстати если в ходе апгрейда Drupal индекс не удается создать, то об этом написано в логе Drupal.

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
5 лет 1 month назад Виктор Степаньк... #
sin@drupal.org написал:

Кстати если в ходе апгрейда Drupal индекс не удается создать, то об этом написано в логе Drupal.

Кто ж их читает-то?

0 Спасибо
Аватар пользователя seaji
5 лет 1 month назад seaji #

Еще маленький хинт
Смотрите медленные запросы к базе данных и дорисовываете свои индексы.
В некоторых частный случаях помогает.

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
5 лет 1 month назад Виктор Степаньк... #

Капитан, перелогиньтесь.
Совет звучит как "Занимайтесь оптимизацией, будет счастье".
К тому же, если речь про обычный мускуль с обычным slow-log, то это не самый лучший вариант для тюнинга, бездумное раскидывание индексов тоже не всегда приводит к нужному результату

0 Спасибо
Аватар пользователя seaji
5 лет 1 month назад seaji #

Любой джедай должен уметь дорисовать индекс.

0 Спасибо
Аватар пользователя seaji
5 лет 1 month назад seaji #

Эх, была не была.
Расскажу страшную сказку на ночь.
Однажды, в незапамятные времена, один супер-гуру в Друпал решил супер-мега оптимизировать Друпал. И он сделал во все базе данных данные с типом материала пречислимым полем. Перечислимые поля супер мега индексируются, и запросов таких хватает, значи имеем мега-выиигрыщ.
И все работало супер, шло время, недели складывались в месяца. Супер-гуру уже давно забыл о этом сайтике. Как вдруг....
Его попросили добавить новый тип материала на сайт...
Тип добавился, но новые материалы так и не создались....
Супер-гуру посыпал голову пеплом, пока не всмотнил, про тип поля.

0 Спасибо
Аватар пользователя Niklan
5 лет 1 month назад Niklan #

Очень интересное предложение. Какраз то что искал.
Являясь пользователем drupalhosting что я должен буду предоставить Вам для работы, а также как пройдет оплата услуги?
Т.е. Вы зайдете в бд и все приведете в нужный вид и почините кривые таблицы, я правильно понял?
Ах да, сроки?

0 Спасибо
Аватар пользователя Softovick
5 лет 1 month назад Softovick #
Niklan написал:
Очень интересное предложение. Какраз то что искал.
Являясь пользователем drupalhosting что я должен буду предоставить Вам для работы, а также как пройдет оплата услуги?
Т.е. Вы зайдете в бд и все приведете в нужный вид и почините кривые таблицы, я правильно понял?
Ах да, сроки?

RxB написал:
просто напишите в техническую поддержку.

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
5 лет 1 month назад Виктор Степаньк... #
Niklan написал:
Являясь пользователем drupalhosting что я должен буду предоставить Вам для работы, а также как пройдет оплата услуги?

Создайте тикет на support@drupalhosting.ru, где обозначьте своё желание.
От вас нужен будет админский пароль, в БД я зайду по данным из друпала.
Оплата происходит списанием с личного счёта в Drupalhosting по окончанию работ, возможен вариант постоплаты в течении нескольких дней.
Сроки - если сегодня напишите, то сегодня вечером уже будете с индексами

0 Спасибо
Аватар пользователя vitg
5 лет 1 month назад vitg #
RxB написал:
Extra это таблицы в БД, которые не связаны схемой ни с одним модулем.

Эти таблицы лишние?

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
5 лет 1 month назад Виктор Степаньк... #
vitg написал:

Эти таблицы лишние?

В большинстве случаев да, это, например, таблицы от некорректно удалённых модулей.
Но надо быть осторожным, возможно что разработчик модуля просто не знал или не хотел использовать схему, поэтому не стал описывать таблицу.

0 Спасибо
Аватар пользователя achadidi
5 лет 1 month назад achadidi #

Спасибо! грабли очень заинтересовали, не знала откуда что берется.

0 Спасибо
Аватар пользователя Niklan
5 лет 1 month назад Niklan #

Заказал. Почистили базу от левых таблиц, поправили мои косяки после переноса с 6 на 7 версии.
Остался доволен и ценой и работой! Рекомендую на хостинге добавить данную и подобные функции за отделную плату на постоянной основе.

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
5 лет 1 month назад Виктор Степаньк... #
Niklan написал:
на постоянной основе.

Такая услуга существует ещё со времён "старого" патруля

0 Спасибо
Аватар пользователя Cyber
5 лет 1 month назад Cyber #
Niklan написал:
Заказал. Почистили базу от левых таблиц, поправили мои косяки после переноса с 6 на 7 версии.
Остался доволен и ценой и работой! Рекомендую на хостинге добавить данную и подобные функции за отделную плату на постоянной основе.

Земляк, стукнись в скайп.

0 Спасибо
Аватар пользователя Dimm
5 лет 1 month назад Dimm #

Спасибо! Буду чистить.

0 Спасибо
Аватар пользователя direqtor
5 лет 1 month назад direqtor #

Маладца. Людей не знающих о модулях devel и schema тут надо сразу запинывать.

0 Спасибо
Аватар пользователя ingumsky@drupal.org
5 лет 1 month назад ingumsky@drupal.org #

Полезно. Спасибо!

0 Спасибо
Аватар пользователя Geldora
5 лет 1 month назад Geldora #

Только вернулась с отпуска, из-за этого поднимаю тему :)

В общем, мне РхБ делал такую штуку, как старому клиенту хостинга, и даже бесплатно ;) Сайт - визуально стал легче работать. Но главное, нагрузка на хостинге снизилась чуть-ли не в разы! Доходила до десятков процентов от можности процессора, сейчас вернулась к нормальным 2-3%. Вот.

Мне кажется, нужно обязательно чистить так сайты, особенно, если переход с 5ки на 6ку делался не специалистом. И обязательно нужно чистить все перед переходом на 7ку.

0 Спасибо
Аватар пользователя vitg
9 months 3 недели назад vitg #

Если есть несовпадающие индексы, то на вкладке compare (сравнить) они должны сами появиться? (перешел на 7.x)

Получается, что на прикрепленном скриншоте все нормально с БД?

0 Спасибо
Аватар пользователя Виктор Степаньков ака RxB
4 года 10 months назад Виктор Степаньк... #
vitg написал:

Получается, что на прикрепленном скриншоте все нормально с БД?

Да

0 Спасибо
Аватар пользователя vitg
4 года 10 months назад vitg #

Спасибо.

0 Спасибо
Аватар пользователя Nup
4 года 6 months назад Nup #

давно думал есть ли такой модуль =) оказывается есть! =)
Спасибо! займусь чисткой 8)

0 Спасибо
Аватар пользователя 0legka
4 года 6 months назад 0legka #

+

0 Спасибо