Какова хорошая стратегия для планирования роста БД WordPress?

9

В надежде получить отзывы об оптимизации и повышении производительности по мере роста базы данных WordPress ... чтобы нарисовать картинку ... скажем, у вас есть сайт WordPress / Buddypress MU, размер которого начинается примерно с 150 КБ (установка ванили) ... со временем пользователи добавляют блоги, форумы, посты и комментарии, и в следующем году база данных увеличивается до 5 МБ ... затем до 10 МБ .... Также предполагается, что элементы управления хостингом представляют собой стандартную систему совместного размещения, такую ​​как Cpanel или Plesk.

  • В какой момент количество записей в базе данных влияет на производительность интерфейсного веб-сайта?
  • Что вы можете сделать как менеджер веб-сайта, чтобы обеспечить бесперебойную работу по мере роста вашей базы данных?
  • Чего можно ожидать с точки зрения производительности после 5-го года, когда объем вашей базы данных составит 500 - 600 МБ?

Спасибо за любые отзывы о том, как вы держите корабль на плаву.

С Уважением,

С.

Саймон
источник
3
Вы задали 7 вопросов и приняли только 1. Не очень хорошая запись. :-(
8
25мб это ничего. Вы должны беспокоиться о размере базы данных, поскольку она достигает ГБ.
Данхаммзз
Спасибо за ваш отзыв. Если у нас проблемы с производительностью в 500 мегабайт, то это, вероятно, наша хостинговая компания. PS Вернулся и принял ответы по всем вопросам.
Саймон

Ответы:

4

Ваши конкретные вопросы:

1) Не существует строгого ограничения на «количество записей», которое БД может содержать до того, как это повлияет на производительность. Производительность зависит как от вашего оборудования и конфигурации, так и от размера и структуры БД.

2) Если вас беспокоит масштабируемость уровня вашей БД, вы можете запустить его в кластере, облачном хранилище или VPS, которое позволяет изменять размер. Если ваша БД начинает вялой, вы можете увеличить (хотя обычно за дополнительную плату). Эти опции увеличивают стоимость, но действительно являются лучшим способом обеспечения масштабируемости БД.

3) Это действительно зависит от настроек вашего хостинга и вашей архитектуры БД. Но в целом (если у вас действительно дешевая коробка), я бы не стал беспокоиться о 30 МБ базе данных WordPress. WordPress отлично справляется с индексацией таблиц, и даже конфигурация OOB MySQL должна легко обрабатывать запросы WordPress к БД такого размера. Когда вы попадаете в гигабайты - тогда вам может понадобиться серьезно рассмотреть варианты оптимизации производительности.

В основном:

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

Если после того, как вы правильно настроили MySQL и настроили достойный уровень кэширования, вы по- прежнему беспокоитесь о перерастании конфигурации вашего оборудования, вы можете установить политику удаления контента через x промежуток времени.

Ничто из этого не относится к WordPress. И я не уверен, что на этот вопрос есть ответы, которые не относятся ни к одному веб-сайту или приложению, работающему в стеке LAMP. Но, может быть, у кого-то еще есть предложения относительно структур таблиц MU или других трюков с БД, характерных для WP ... Я не знаю.

MathSmath
источник
4

Строго говоря, с точки зрения MySQL, у меня есть предложения по улучшению кэширования данных / индексов для экземпляра MySQL.

Имейте в виду, что есть два основных механизма хранения для MySQL

  • MyISAM
  • InnoDB

Механизмы их кэширования разные. Есть кое-что, что вы можете сделать, чтобы настроить Storage Engine по вашему выбору.

MyISAM

MyISAM кэширует только индексные страницы. Он никогда не кэширует данные. Вы можете сделать две вещи, чтобы улучшить операции ввода-вывода для таблиц MyISAM.

MyISAM Улучшение № 1

Любая таблица MyISAM, имеющая столбцы VARCHAR, может быть внутренне преобразована в CHAR, не затрагивая первоначальный дизайн. Предположим, у вас есть таблица mydb.mytable, и вы хотите улучшить ввод-вывод для нее, выполните на ней следующее:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

Это увеличит размер таблицы на 60% -100%, но даст увеличение производительности ввода-вывода на 20-30% без каких-либо изменений . Я писал об этом раньше в StackExchange DBA:

MyISAM Улучшение № 2

Вам необходимо увеличить кэш ключей MyISAM (по размеру key_buffer_size ). Запустите этот запрос, пожалуйста:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;

Это покажет вам идеальный key_buffer_size на основе вашего текущего набора данных.

InnoDB

InnoDB кэширует как данные, так и индексы. Если вы преобразовали все свои данные в InnoDB и в настоящее время используете WordPress из всей базы данных InnoDB, вам необходимо определить размер вашего буферного пула InnoDB (измеряется с помощью innodb_buffer_pool_size ). Запустите этот запрос, пожалуйста:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Это покажет вам идеальный key_buffer_size на основе вашего текущего набора данных.

Прогнозы

Если вы прогнозируете, что ваш набор данных вырастет в 20 раз, просто умножьте то, что рекомендует этот запрос, на 20. Предположим, ваш набор данных MyISAM составляет 15 МБ, а 3 МБ - это сумма ваших индексов. Если вы подсчитаете, что у вас будет в 20 раз больше данных, установите key_buffer_size в 60 МБ, например, в /etc/my.cnf:

[mysqld]
key_buffer_size=60M

затем перезапустите MySQL. То же самое относится и к пулу буферов InnoDB.

Если все ваши данные - InnoDB, вам необходимо выполнить полную очистку инфраструктуры InnoDB, которую я разместил в StackOverflow .

RolandoMySQLDBA
источник
2

В какой момент количество записей в базе данных влияет на производительность интерфейсного веб-сайта?

Когда запросы начинают достигать ограничения ресурса вашей учетной записи хостинга.

Что вы можете сделать как менеджер веб-сайта, чтобы обеспечить бесперебойную работу по мере роста вашей базы данных?

Следите за использованием ресурсов. Принять меры для увеличения ресурса и / или оптимизации использования.

Чего можно ожидать с точки зрения производительности после 5-го года, когда объем вашей базы данных составит 25-30 МБ?

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

Если вы ожидаете, что ваш сайт будет расти так медленно, у вас будет достаточно времени, чтобы научиться управлять ростом.

shanebp
источник