Использование базы данных MySQL медленно - PullRequest
3 голосов
/ 20 января 2011

У нас есть выделенный сервер MySQL, на котором находится около 2000 небольших баз данных. (Это многопользовательская установка Drupal - каждая база данных - это один сайт).

Когда вы загружаете каждый сайт впервые за некоторое время, возврат первой страницы может занять до 30 секунд. После этого страницы возвращаются с приемлемой скоростью. Я проследил это через стек в MySQL. Кроме того, когда вы соединяетесь с клиентом mysql командной строки, соединение быстрое, затем «use dbname» медленное, а затем запросы быстрые.

Я догадываюсь, что это связано с неправильной настройкой сервера и выпадением неиспользуемых БД из кеша или чем-то подобным, но я не уверен, какой кеш или настройка применяются в этом случае.

Одна вещь, которую я попробовал, это размер innodb_buffer_pool. Это было установлено по умолчанию 8M. Я попытался поднять его до 512 МБ (у машины ~ 2 ГБ ОЗУ, и дополнительная ОЗУ была доступна), так как показания, которые я сделал, показали, что больше должно дать лучшую производительность, но это заставило систему работать медленнее, так что теперь она вернулась к 8 МБ.

Спасибо за чтение.

Ответы [ 4 ]

5 голосов
/ 20 января 2011

В 2000 базах данных вы должны отрегулировать настройку table cache . В этом кеше у вас определенно не хватает кеша.

Попробуйте использовать mysqltunner и / или tunning_primer.sh, чтобы получить другую информацию о потенциальных проблемах с настройками.

Теперь drupal интенсивно работает с базами данных, проверяет установки Drupal, возможно, вы генерируете много (слишком много) запросов.

Что касается innodb_buffer_pool_size, у вас наверняка много промахов кеширования страниц с небольшим буфером (8 Мб). Идеальный размер - это когда все ваши данные и размеры индексов могут поместиться в этом буфере, и с 2000 базами данных ... ну, конечно, это очень маленький размер, но вам будет трудно расти. Настроить сервер MySQL сложно, если MySQL отнимает слишком много оперативной памяти, ваш apache не сможет получить достаточно оперативной памяти.

Решения:

  • проверьте, что вы не устанавливаете связь с DNS-именами, но с IP
    (в случае)
  • купить больше оперативной памяти
  • установить MySQL на отдельном сервере
  • отрегулируйте свои настройки

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

edit: Последнее, я надеюсь, вы не модифицировали Drupal для использования постоянных соединений с базами данных, некоторые модули позволяют это (или имеют старый drupal 5, который пытается сделать это автоматически). С базой данных 2000 вы убьете свой сервер. Попробуйте проверить журнал ошибок mysql на наличие ошибок "слишком много соединений".

0 голосов
/ 25 января 2011

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

Тем не менее, вы также должны помнить о постоянных связях - которые обязательно должны быть всегда отключены (да, для всех, не только для вас). Постоянные соединения Apache / PHP - это пессимизация, без которой вы и все остальные обычно можете обойтись.

0 голосов
/ 20 января 2011

Это звучит как проблема кеширования в Drupal, а не в MYSQL.Кажется, есть несколько очень тяжелых запросов, или много, много маленьких, или оба, которые забивают сервер базы данных.Как только это будет сделано, Drupal кэширует это в нескольких слоях кэширования.После чего только один (или очень мало) запросов - это все, что нужно для создания страницы.Медленно в начале, быстро после этого.

0 голосов
/ 20 января 2011

Привет Рупертдж , как я читал, вы используете таблицы типа innodb, верно?

Таблица innodb немного медленнее, чем таблицы myisam, но я не думаю, что это серьезная проблема. Как вы сказали, вы используете систему drupal, заключается в том, что это своего рода мультисайты, такие как система word-press

Если да, то извините за системы такого типа, каждый раз, когда вы устанавливаете плагин или что-то еще, он увеличивает вашу базу данных в таблицах и, конечно, в данных ... и может превращаться во что-то очень-очень медленное. Я сам пережил не использование Drupal, а использование системы блогов Word-press, и это было кошмаром для меня и моих друзей ..

С тех пор я отказался от проекта ... и мой единственный совет для вас - не устанавливайте много плагинов в вашей системе drupal.

Я надеюсь, что этот совет поможет вам, потому что он мне очень помогает в словесной печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...