Оптимизация Centos MySQL 4 ГБ оперативной памяти

Я использую Centos 6 64bit на VPS с 4 ГБ оперативной памяти. 1 сайт WordPress и 2 сайта со скриптами обоев. У Wordrpess есть 10 000 посещений в день. Сайт работает медленно.

my.cnf

# Пример конфигурационного файла mysql для больших систем.
#
# Это для большой системы с памятью = 512M, где система работает в основном
# MySQL.
#
# Вы можете скопировать этот файл в
# /etc/my.cnf для установки глобальных параметров,
# mysql-data-dir/my.cnf, чтобы установить специфичные для сервера опции (в этом
# установка это каталог /usr/local/mysql/var) или
# ~/.my.cnf для установки пользовательских параметров.
#
# В этом файле можно использовать все длинные опции, которые поддерживает программа.
# Если вы хотите узнать, какие опции поддерживает программа, запустите программу
# с опцией --help.

# Следующие параметры будут переданы всем клиентам MySQL
[Клиент]
#password   = your_password
порт = 3306
socket      = /tmp/mysql.sock

# Здесь следуют записи для некоторых конкретных программ

# Сервер MySQL
[ТуздЫ]
порт = 3306
socket      = /tmp/mysql.sock
пропустить блокировки
set-variable    = key_buffer=256M
set-variable    = max_allowed_packet=1M
set-variable    = table_cache=256
set-variable    = sort_buffer=1M
set-variable    = record_buffer=1M
set-variable    = myisam_sort_buffer_size=64M
set-variable    = thread_cache=8
# Попробуйте количество процессоров *2 для thread_concurrency
set-variable    = thread_concurrency=8
лог-бен
идентификатор сервера = 1

# Раскомментируйте следующее, если вы используете таблицы BDB
# set-variable = bdb_cache_size = 64M
# set-variable = bdb_max_lock = 100000

# Раскомментируйте следующее, если вы используете таблицы InnoDB
#innodb_data_home_dir = /usr/local/mysql/var/
#innodb_data_file_path = ibdata1:10M: автоматическое расширение
#innodb_log_group_home_dir = /usr/local/mysql/var/
#innodb_log_arch_dir = /usr/local/mysql/var/
# Вы можете установить.._buffer_pool_size до 50 - 80 %
# ОЗУ, но остерегайтесь слишком большого использования памяти
#set-variable = innodb_buffer_pool_size=256M
#set-variable = innodb_additional_mem_pool_size=20M
# Установите.._log_file_size на 25 % размера пула буферов
#set-variable = innodb_log_file_size=64M
#set-variable = innodb_log_buffer_size=8M
# Innodb_flush_log_at_trx_commit = 1

# set-variable = innodb_lock_wait_timeout = 50

# Укажите следующие пути к различным выделенным дискам
#tmpdir     = /tmp/     
#log-update     = / путь к выделенному каталогу / имя хоста

[ТуздЫшпр]
быстрый
set-variable = max_allowed_packet = 16M

[MySQL]
нет-авто-перепев
# Удалите следующий символ комментария, если вы не знакомы с SQL
# сейф-обновления

[Isamchk]
set-variable = key_buffer = 128M
set-variable = sort_buffer = 128M
set-variable = read_buffer = 2M
set-variable = write_buffer = 2M

[ЗатсЫс]
set-variable = key_buffer = 128M
set-variable = sort_buffer = 128M
set-variable = read_buffer = 2M
set-variable = write_buffer = 2M

[Mysqlhotcopy]
интерактивный тайм-аут

Это./mysqltuner.pl

-------- Общая статистика --------------------------------------------------
[-] Пропущенная проверка версии для скрипта MySQLTuner
[OK] В настоящее время работает поддерживаемая версия MySQL 5.5.27-log
[OK] Работа на 64-битной архитектуре

-------- Статистика подсистемы хранения --------------------------------------- ----
[-] Статус: + Архив -BDB -Federated +InnoDB -ISAM -NDBCluster
[-] Данные в таблицах MyISAM: 16 млн. (Таблицы: 61).
[-] Данные в таблицах InnoDB: 4M (Таблицы: 34)
[-] Данные в таблицах PERFORMANCE_SCHEMA: 0B (Таблицы: 17)
[!!] Всего фрагментированных таблиц: 34

-------- Рекомендации по безопасности -------------------------------------------
[OK] Всем пользователям базы данных назначены пароли

-------- Показатели эффективности ---------------------------------------- ---------
[-] В течение: 9 м 53 с (40K q [68,862 qps], 3K conn, TX: 203M, RX: 4M)
[-] Читает / пишет: 83% / 17%
[-] Всего буферов: 432,0M глобальных + 6,4M на поток (максимум 151 потоков)
[OK] Максимально возможное использование памяти: 1,4 ГБ (36% от установленной оперативной памяти)
[OK] Медленные запросы: 0% (0/40K)
[OK] Максимальное использование доступных соединений: 74% (113/151)
[OK] Размер буфера ключа / всего индексов MyISAM: 256,0M/10,1M
[OK] Коэффициент попадания в ключевой буфер: 97,9% (152K кэшировано / 3K считываний)
[OK] Эффективность кеша запросов: 62,0% (17K кешируется / 27K выбирается)
[OK] Запрос обрезки кеша в день: 0
[OK] Сортировки, требующие временных таблиц: 0% (0 временных сортировок / 224 сортировки)
[OK] Временные таблицы, созданные на диске: 25% (71 на диске / 277 всего)
[OK] Частота попаданий в кэш потоков: 77% (создано 831 / 3K соединений)
[OK] Частота попаданий в кеш таблиц: 39% (открыто 135 / открыто 342)
[OK] Используемый лимит открытого файла: 15% (162/1K)
[OK] Столовые блокировки получены немедленно: 98% (13K немедленных / 13K блокировок)
[OK] Размер данных InnoDB / пул буферов: 4,5M/128,0M

-------- Рекомендации ----------------------------------------- ------------
Общие рекомендации:
    Запустите OPTIMIZE TABLE, чтобы дефрагментировать таблицы для повышения производительности.
    MySQL запущен в течение последних 24 часов - рекомендации могут быть неточными
    Включите медленный журнал запросов для устранения неисправных запросов

4 ответа

Попробуйте увеличить как innodb_buffer_pool_size (до 512M), так и размер кэша запросов (query_cache_type=1 и query_cache_size=256M).

Несколько простых общих рекомендаций: http://www.ilsistemista.net/index.php/linux-a-unix/26-mysql-performance-tuning.html?limitstart=0

У Percona есть довольно приличный мастер настройки, который выложит файл my.cnf, точно настроенный на ваш сервер и рабочую нагрузку: https://tools.percona.com/wizard

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

Почему mysql является узким местом? Я уверен, что проблема здесь в php, так как я управляю многими magento-сайтами с большим количеством посещений, чем 10 тыс. В день.

Wp на 100% совместим с php7, поэтому начните с него. Сделайте это сначала в среде разработки, затем вживую. Кроме того, плагин кэширования является хорошим стимулом, я предлагаю кеширование Redis просто супер быстро. Следующим шагом будет перемещение mysql/mariadb в другой vm. Так как вы накачиваете my.cnf, вы крадете cpu/ram к php, поэтому 1 vm для php и один для mysql должны сильно помочь

Попробуйте установить плагин кэширования для вашей установки WordPress. Я лично рекомендую W3 Super Cache:

http://wordpress.org/extend/plugins/wp-super-cache/

Вы также можете установить XCache и настроить PHP как FCGI для улучшения кэширования (WP Super Cache работает как с XCache, так и автономно).

Другие вопросы по тегам