Рейтинг@Mail.ru

Система мониторинга Zabbix - Оптимизация базы данных MySQL

: в разделе: Open Source
11481

zabbix

Zabbix как мне кажется лучшая система мониторинга сети, и самое главное бесплатная ;) Но есть у нее одно "узкое место" - это база данных. Я ни раз сталкивался с тем, что база очень сильно разрастается и из-за этого система начинает сходить с ума, и на этом мониторинг и спокойная жизнь админа заканчивается. В данной статье расскажу о некоторых приемах которые позволят разгрузить базу MySQL и zabbix.

Прием 1й

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

Вот спецификация которая тянет 3000 значений в секунду:

  • Dell PowerEdge R610
  • CPU: Intel Xeon L5520 2.27GHz (16 cores)
  • Memory: 24GB RAM

  • Disks: 6x SAS 10k with RAID10 by hardware

Прием 2й

Используйте по одному innodb-файлу на таблицу.

Для этого установите значение innodb_file_per_table=1 в файле /etc/my.cnf

По умолчанию MySQL хранит все таблицы внутри уникального файла данных. С этой опцией все новые таблицы будут созданы в собственных файлах, но после этого изменения вам придется пересоздать все таблицы.

Это позволит вам хранить файлы в разных файловых системах и делать резервные копии с большим постоянством.

Прием 3й

Используйте Percona Server, это оптимизированная версия MySQL Community Edition.


Прием 4й

Используйте партицирование таблиц и отключите чистильщик zabbix (housekeeper)

Подробнее о партицировании расскажу в следующей статье.

Прием 5й

Используйте файловую систему tmpfs для временных файлов.

Для этого используйте память в место жестких дисков, это заметно ускорит создание и работу с временными таблицами в MySQL.

Сначала создаем точку монтирования

mkdir /tmp/mysqltmp

Далее, добавляем в файл /etc/fstab строку

tmpfs /tmp/mysqltmp tmpfs rw,uid=mysql,gid=mysql,size=1G,nr_inodes=10k,mode=0700 0 0

Параметр size должен быть равен 8-10% от вашей физической памяти.

Теперь в файле my.cnf устанавливаем значение tmpdir = /tmp/mysqltmp

Прием 6й

Устанавливаем размер для буфера.

Для этого в файле /etc/my.cnf задаем значение переменной innodb_buffer_pool_size=14G

Значение переменной должно равнятся 70-80% от физической памяти.

Ну наконец предлагаю вам полный конфиг /etc/my.cnf для сервера с 24 гигабайтами оперативной памяти:

#paths
datadir                         = /var/lib/mysql/data
tmpdir                          = /tmp/mysqltmp

# network
connect_timeout                 = 60
wait_timeout                    = 28800
max_connections                 = 2048
max_allowed_packet              = 64M
max_connect_errors              = 1000

# limits
tmp_table_size                  = 512M
max_heap_table_size             = 256M
table_cache                     = 512

# logs
log_error                       = /var/log/mysql/mysql-error.log
slow_query_log_file             = /var/log/mysql/mysql-slow.log
slow_query_log                  = 1
long_query_time                 = 20

# innodb
innodb_data_home_dir            = /var/lib/mysql/data
innodb_data_file_path           = ibdata1:128M;ibdata2:128M:autoextend:max:4096M
innodb_file_per_table           = 1
innodb_status_file              = 1
innodb_additional_mem_pool_size = 128M
innodb_buffer_pool_size         = 14G
innodb_flush_method             = O_DIRECT
innodb_io_capacity              = 2000
innodb_flush_log_at_trx_commit  = 2
innodb_support_xa               = 0
innodb_log_file_size            = 512M
innodb_log_buffer_size          = 128M

# experimental
innodb_stats_update_need_lock   = 0

# other stuff
event_scheduler                 = 1
query_cache_type                = 0

0
Привязка к тегам Linux MySQL zabbix

Оставить комментарий

Гость Воскресенье, 25 Август 2019