У меня есть сайт Drupal, и у меня проблемы с производительностью. Я нашел Как я могу преобразовать базу данных из MyISAM в InnoDB? показывая, что производительность может улучшиться при переключении.
Как я могу определить, является ли моя база данных MySQL InnoDB или MyISAM?
performance
database
chrisjlee
источник
источник
Ответы:
Вы можете запустить собственный запрос:
перечислить все таблицы в вашей базе данных и механизм, который используется для каждой из них.
В качестве альтернативы вы можете войти в свою базу данных с помощью phpMyAdmin и выбрать свою базу данных ... вы увидите движок в
Type
столбце в списке таблиц.Лично я бы порекомендовал Navicat для MySQL , это очень приятный графический интерфейс MySQL, который позволяет легко находить подобные вещи.
Источник: http://www.electrictoolbox.com/mysql-table-storage-engine/
источник
SHOW TABLE STATUS
. Чтобы получить простой подсчет количества таблиц в каждом типе двигателя, этоSELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Мой лучший опыт состоял в том, чтобы принять решение на основе таблицы. InnoDB хорош, потому что он может избежать блокировки таблицы (никакой другой процесс не может читать из таблицы, пока один процесс пишет), но он ужасно работает с COUNT (), который часто используется для пейджинговых запросов.
(Изменить: см. Комментарий Клайвса ниже)
Есть также последствия для вашей настройки MySQL, в зависимости от того, какую БД вы используете. Если у вас есть доступ к серверу, mysqltuner должен быть вашим первым шагом, чтобы проверить конфигурацию:
https://github.com/rackerhacker/MySQLTuner-perl#readme
источник
COUNT
запросов, согласно этой статье бывшего менеджеру High Performance Group для MySQL , хотя это только действительно влияет на запрос , содержащийCOUNT(*)
без вWHERE
п.SELECT COUNT(*) FROM table
может мгновенно вернуться с этим значением. InnoDB этого не делает, поэтому он должен сканировать весь индекс первичного ключа. Тем не менее, хотя Drupal делает многоSELECT COUNT(*)
, я могу думать только об одном месте во всем коде, которое делает это безWHERE
предложения. Таким образом, не используйте MyISAM из-за этой конкретной проблемы. InnoDB с буферным пулом приличного размера будет быстрее для всех реальных запросов.Просто пытаться сделать сайт быстрее, это все равно что слепо менять машину и надеяться, что в следующий раз ты получишь скорость быстрее.
Сначала попробуйте низко висящие фрукты, если это не поможет, попытайтесь найти настоящее узкое место.
Часто это просто медленный запрос к БД, для которого нужен индекс, или модуль, выполняющий работу медленно.
Я также обнаружил большие различия между хостерами. Если вы устанавливаете новый drupal из коробки, производительность в порядке? Если нет, пришло время искать другого хостера.
источник
FWIW наш почти 20К узел Drupal 6.x испытывал некоторые проблемы с производительностью, и я решил перенести все таблицы в InnoDB. Это было легко, и способ, которым я справился, заключался в том, чтобы использовать mysqldump для выгрузки всего содержимого в файл sql, использовать редактор (sed), чтобы заменить все вхождения MyISAM в InnoDB, а затем перезагрузить базу данных из этого файла. Одним из недостатков является то, что вы не можете восстановить пространство из базы данных InnoDB (IIRC), но пока вы храните дубликаты таблиц в отдельной БД, у вас не должно возникнуть проблем. Да, и мы увидели значительное увеличение производительности. И поскольку у нас есть четыре экземпляра Drupal, огромное количество файлов таблиц было исключено из файловой системы (да, они содержатся внутри самого файла InnoDB). Это моя $ .02 стоит.
источник
innodb_file_per_table
опцию.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Добавьте соответствующие опции (-uroot -psomepass
например) к двумmysql
s при необходимости.Просто один на один. Если вы используете Drupal 6, вы можете установить модуль DBTuner ; он может легко перемещать ваши таблицы из MyISAM в InnoDB. Так что да, есть модуль для этого!
источник