Оптимизация настроек MySQL - mysqld не хватает памяти

15

Я немного запутался в том, какие настройки нужно изменить в моем файле my.conf для оптимизации для моего сервера (сервер mysql продолжает падать из-за нашего большого трафика).

Вот файл my.cnf:

[mysqld]

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

key_buffer              = 16M
max_allowed_packet      = 16M
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

query_cache_limit       = 1M
query_cache_size        = 16M

И спецификации сервера:

CPU Cores   2 cores
RAM (Memory)    1GB
SSD (Disk Space)    20GB

Под управлением Ubuntu 12.04 LTS

Вот мои разделы:

NAME   FSTYPE   SIZE MOUNTPOINT LABEL
vda              20G            
├─vda1 ext4     476M /boot      
├─vda2 swap     477M [SWAP]     
└─vda3 ext4    19.1G / 

Любая помощь приветствуется.

Просматривая журналы ошибок, я вижу, что mysqld не хватило памяти:

Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child
Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB
babbaggeii
источник

Ответы:

10

Общий ответ от сервера вики :

MySQL Tuner Установите mysqltuner

MySQL Tuner - это полезный инструмент, который подключается к работающему экземпляру MySQL и предлагает рекомендации по его наилучшей настройке для вашей рабочей нагрузки. Чем дольше работает сервер, тем лучше может дать совет mysqltuner. В производственной среде подождите не менее 24 часов, прежде чем запускать инструмент. Вы можете установить mysqltuner из репозиториев Ubuntu:

sudo apt-get install mysqltuner

Затем, после его установки, запустите его:

 mysqltuner

и дождаться его окончательного отчета. В верхнем разделе представлена ​​общая информация о сервере базы данных, а в нижнем разделе приведены рекомендации по настройке для изменения в вашем my.cnf. Большинство из них могут быть изменены в режиме реального времени на сервере без перезапуска. Просмотрите официальную документацию MySQL (ссылка в разделе «Ресурсы»), чтобы найти соответствующие переменные, которые нужно изменить в рабочей среде. Ниже приведена часть примера отчета из производственной базы данных, который показывает, что увеличение объема кэша запросов может принести некоторую выгоду:

-------- Рекомендации ----------------------------------------- ------------
Общие рекомендации:
    Запустите OPTIMIZE TABLE, чтобы дефрагментировать таблицы для повышения производительности.
    Постепенно увеличивайте table_cache, чтобы избежать ограничений дескриптора файла
Переменные для настройки:
    key_buffer_size (> 1,4 ГБ)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22 ГБ)

Последний комментарий о настройке баз данных: хотя мы можем сказать, что определенные настройки являются лучшими, производительность может варьироваться от приложения к приложению. Например, то, что работает лучше всего для Wordpress, может быть не лучшим для Drupal, Joomla или проприетарных приложений. Производительность зависит от типов запросов, использования индексов, эффективности проектирования базы данных и так далее. Может оказаться полезным потратить некоторое время на поиск советов по настройке базы данных в зависимости от того, для каких приложений вы ее используете. Как только вы преодолеете определенную точку, любые внесенные вами изменения приведут лишь к незначительным улучшениям, и вам будет лучше либо улучшить приложение, либо заняться масштабированием среды базы данных с помощью более мощного оборудования или добавления подчиненных серверов.


  • Смотрите раздел показателей производительности в отчете mysqltuner. Держите максимально возможную память под 50%.
  • tmp_table_size, max_heap_table_size variable: Держать их равными и высоким.
  • join_buffer_size, увеличение в небольших количествах; это будет умножено на max_connections.
  • innodb_buffer_pool_size, Сделай это высоко.
Rinzwind
источник
1

Другое возможное исправление - использовать следующее в разделе [mysqld] вашей конфигурации /etc/mysql/my.cnf.

performance_schema = off

Источник: /server/564748/mysql-mariadb-crashes-frequently

Святослав Маринов
источник
0

Разрешение для составления докера

mysql:
    volumes:
        - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf

Конфиг содержание ./config/mysql/my.cnf

[mysqld]
performance_schema = off
hubertinio
источник