Как добавить индексы в базу данных WordPress?

21 мая 2012 г., 20:38:35
Просмотры: 17.3K
Голосов: 1

Я получил сообщение от Hostgator о приостановке моего аккаунта из-за нагрузки на их серверы. Это уже пятый раз, когда такое происходит. Я использую shared-хостинг.

Они сказали, что проблему можно решить, просто добавив новые индексы в базу данных или оптимизировав ее другими способами. Я использовал SQL-запросы и опцию "optimize" в phpMyAdmin для оптимизации базы данных, но это не помогло.

Я также установил Super Cache, как они рекомендовали, но это тоже не дало результата.

Теперь я хочу попробовать добавить индексы в базу данных. Как это сделать? Кто-нибудь знает, как это сделать, пожалуйста? Это срочно.

Спасибо.

1
Комментарии

Для оптимизации запросов сначала необходимо узнать, какие запросы выполняются. Начните с установки плагина Debug Bar, загрузите проблемную страницу, затем нажмите на ссылку Debug в правом верхнем углу панели администратора. Также вам нужно добавить define('SAVEQUERIES', true); в файл wp-config.php. Это позволит вам увидеть, какие запросы выполняются и сколько времени они занимают.

Otto Otto
22 мая 2012 г. 00:11:31
Все ответы на вопрос 3
7

База данных WordPress уже проиндексирована. Подробный список индексов по таблицам можно найти в этой статье кодекса: http://codex.wordpress.org/Database_Description

Даже если бы это было не так, для эффективного добавления индексов вам необходимо знать, какие запросы выполняются. То есть, быстрого решения не существует — вам пришлось бы изучить принципы работы индексирования, выявить медленные запросы и действовать исходя из этого.

Если у вас действительно есть проблемы с медленными запросами, скорее всего, это связано с плохо написанным плагином или файлом темы, которые вы используете. Попробуйте отключить все плагины и переключиться на стандартную тему, чтобы проверить, как это повлияет на производительность. Если ваш сайт всё ещё слишком нагружает ваш виртуальный хостинг (при использовании стандартной темы и без плагинов), вам следует сменить хостинг-провайдера.

21 мая 2012 г. 22:11:02
Комментарии

Я думаю, он знает, что индексация уже есть, но она недостаточно хорошая. Например, meta_value не проиндексировано, и почти все сайты с пользовательским поиском используют поиск по этим полям, который не индексируется, поэтому он медленный. Так что если вы пытаетесь сказать, что WP хорошо справился с этим — я не согласен. Конечно, мы не видим, по каким полям этот парень ищет, это бы нам помогло.

Tommixoft Tommixoft
21 мая 2012 г. 22:14:06

Судя по его вопросу, я не думаю, что он это знает. Похоже, он надеется, что есть какая-то команда "добавить индексы", которую можно выполнить для улучшения производительности, а я пытаюсь объяснить, что всё сложнее. Ему нужно понять свои запросы, прежде чем решать, можно ли улучшить их производительность дополнительными индексами. Похоже, он не в состоянии это сделать, так как буквально спрашивает, как добавить индексы, а не КАКИЕ индексы добавить или зачем. В любом случае, да, WordPress отлично индексируется для установки с дефолтной темой и без плагинов.

MathSmath MathSmath
21 мая 2012 г. 22:56:31

Привет, ребята. Спасибо за ответы. Я знал, что WordPress уже индексируется, потому что мой хостинг сказал: "Решение этой ситуации может быть таким простым, как добавление дополнительных индексов в вашу базу данных, оптимизация используемых запросов или что-то столь же простое." "Дополнительные индексы" — это фраза, которую они использовали. В любом случае, проблема с высокой нагрузкой возникает в post-new.php (для записей). Когда я нажимаю "Добавить новую", страница грузится вечно (с белым экраном), и затем мне приходится закрывать вкладку и пробовать снова, пока страница наконец не откроется. Как это исправить с помощью дополнительных индексов? Спасибо.

Sosthenes Kwame Boame Sosthenes Kwame Boame
21 мая 2012 г. 23:41:04

На сайте чуть более 8 000 статей, и он получает около 2000 посетителей в день, которые просматривают страницы примерно 5 000-8 000 раз ежедневно. Размер базы данных составляет около 66 МБ. Просто поделился этой информацией, если это что-то значит.

Sosthenes Kwame Boame Sosthenes Kwame Boame
21 мая 2012 г. 23:44:06

@KwameBoame Вы не знаете, что МОЖЕТЕ исправить это с помощью дополнительных индексов. Индексация — не решение всех проблем, связанных с MySQL, и если вы не знаете точную причину своей проблемы, вы не можете быть уверены, что дополнительные индексы её исправят. Возможно, это вообще не связано с MySQL — например, в плагине может быть плохой цикл, из-за которого даже хороший запрос выполняется слишком много раз. Кто знает. Если ваш хостинг уверен, что проблема в одном из ваших запросов, попросите их включить "лог медленных запросов" и предоставить вам этот лог. А пока я снова рекомендую отключить все плагины, чтобы проверить, решит ли это проблему.

MathSmath MathSmath
22 мая 2012 г. 01:17:19

@MathSmath спасибо за совет. Это сработало. Плагин Super Cache оказался виновником. Из-за него post-new.php выполнял несколько сотен запросов, пока не происходил таймаут. Теперь мне нужно найти лучший плагин для кэширования. Спасибо за помощь, друг.

Sosthenes Kwame Boame Sosthenes Kwame Boame
23 мая 2012 г. 10:50:31

@KwameBoame Без проблем. Рад, что у тебя получилось! Не мог бы ты отметить мой ответ как принятый? Спасибо!

MathSmath MathSmath
23 мая 2012 г. 19:30:13
Показать остальные 2 комментариев
2

Мне кажется, вам предложили слишком общее решение для более конкретной проблемы. WordPress использует множество таблиц для запросов к постам/страницам и т.д. Не уверен, что вам действительно стоит добавлять новые индексы. Я бы начал с перевода сайта в режим обслуживания и постраничного тестирования. Вам нужно выяснить, какие именно страницы выполняют очень большие запросы, и либо остановить их, либо разбить на страницы, либо изменить. Другая возможность заключается в том, что вы действительно создали успешный сайт, и никакие оптимизации в мире не дадут вам больше пропускной способности. Возможно, вам нужно потратиться и получить выделенный сервер. Если это невозможно, то опять же, вам нужно минимизировать количество запросов к базе данных.

21 мая 2012 г. 21:18:19
Комментарии

Понял, и в какой-то мере согласен. Он должен иметь возможность управлять своим сайтом без нагрузки на сервер; но, опять же, у вас может быть буквально слишком много посетителей (что хорошо), и тогда нужно переходить на более мощный тарифный план. Индексация WordPress достаточно хороша, чтобы работать с довольно большим сайтом без проблем; но опять же это зависит от плагинов, выполняющих запросы, и темы. Кроме того, если у вас установлено и активно 100 плагинов, это не поможет. Простой путь: перейти с экономного хостинга на более мощный. Сложный путь: деактивировать плагины и оптимизировать запросы.

Aaron Bell Aaron Bell
21 мая 2012 г. 22:23:55

@AaronBell, Привет, пожалуйста, посмотри мой ответ выше (Tommix и Mathsmath) и посмотри, есть ли способ починить мой сайт. Спасибо.

Sosthenes Kwame Boame Sosthenes Kwame Boame
21 мая 2012 г. 23:45:47
1

Я бы рекомендовал использовать плагин http://wordpress.org/extend/plugins/wp-super-cache/, если ваш сайт не очень динамичный и обновляется, скажем, раз в день. Этот плагин создает статические файлы из динамического контента, что практически исключает запросы к базе данных (вы можете выбрать, что не должно кэшироваться). Это делает сайт очень быстрым. [НО обязательно сделайте резервную копию перед установкой]

Вот я сделал скриншот, как проиндексировать поле http://s10.postimage.org/wxjn9u2uh/index.jpg НО - НЕ ВСЕ ПОЛЯ можно и нужно индексировать. Индексируемое поле должно быть определенного размера. И индексацию следует делать для полей, по которым вы часто выполняете запросы.

21 мая 2012 г. 21:12:29
Комментарии

Автор сообщения говорит, что уже пробовал использовать Super Cache, но это не решило проблему.

mrwweb mrwweb
21 мая 2012 г. 23:18:13