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

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

Индекс (англ. 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р за проблемный сайт, просто напишите в техническую поддержку.

Прикрепленный файл Размер
schema.png 30.24 кб
missingindex.png 22.48 кб
missingindex2.png 13.54 кб

Источник: http://www.drupal.ru/node/65583

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

Чтобы комментировать, необходимо войти в систему.

© 2009 Обзор CMS