SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.06.2016 14:28:00

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Настройка my.cnf в высоконагруженном сайте

Привет

Прощу помочь мне оптимально настроить mariadb для высоконагруженного сайта, в котором большинство таблиц InnoDB, остальные Myisam. Проблема в том, что сервер сейчас с этой настройкой сильно грузит CPU, при пиковом посещении может вообще положить mariadb. На сервере висит несколько сайтов, пару из которых на битриксе

У меня выделенный сервер: 4хIntel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz, 32Gb Memory
Также есть второй точно такой же (пока не используется)

Тесты битрикса говорят что запись у меня страдает (первое значение мой тест, второй рекомендуемый):
База данных MySQL (запись) - 1 945 - 5 600 - количество запросов на запись в секунду
База данных MySQL (чтение) - 22 621 - 7 800 - количество запросов на чтение в секунду
База данных MySQL (изменение) - 6 924 - 5 800 - количество запросов на изменение в секунду

my.cnf

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
 
[mysqld_safe]
nice = 0
socket = /var/lib/mysql/mysql.sock
pid-file=/var/lib/mysql/mysql.pid
log-error=/var/log/mysql/error.log
 
[mysqld]
user = mysql
port = 3306
datadir = /htdocs/Base/mysql
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
skip-external-locking
event_scheduler=1
max_join_size = 1000000
max_sort_length = 1024
max_allowed_packet = 16M
max_connections = 200
max_connect_errors = 1000
wait_timeout = 60
net_read_timeout = 15
net_write_timeout = 15
key_buffer_size = 512M
read_buffer_size = 8M
sort_buffer_size = 8M
read_rnd_buffer_size = 8M
table_cache = 4G
table_open_cache = 4G
max_heap_table_size = 64M
tmp_table_size = 128M
tmpdir =/htdocs/Base/mysql/TMP/
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 128M
open_files_limit = 8096
join_buffer_size = 32M
thread_concurrency = 8
thread_cache_size = 8
symbolic-links = 1
long_query_time = 10
log-queries-not-using-indexes = 1
slow_query_log_file = /var/log/mysql/long.log
innodb_thread_concurrency = 8
innodb_file_io_threads = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_buffer_pool_instances = 8
innodb_buffer_pool_size = 8G
innodb_additional_mem_pool_size = 32M
innodb_lock_wait_timeout = 50
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED

Неактивен

 

#2 12.06.2016 17:17:34

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Настройка my.cnf в высоконагруженном сайте

только по my.cnf сложно что-то сказать

кто грузит процессор (php, mysql, ..) ?
если база, то какие запросы создают нагрузку?
можно, например, смотреть через show full processlist; в момент нагрузки

Неактивен

 

#3 12.06.2016 18:01:26

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

Грузит именно mysql. Я максимально стараюсь оптимизировать все запросы, но все равно нагрузка высокая даже когда народу не особо много. Как только я выключаю мускуль, все становиться хорошо. Мне наверное больше утверждение надо что в конфиге все хорошо, мониторю запросы каждый раз...

SHOW FULL PROCESSLIST
http://s018.radikal.ru/i503/1606/9c/28b3344aa73e.png

Отредактированно DragoN (12.06.2016 18:03:44)

Неактивен

 

#4 12.06.2016 18:43:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Настройка my.cnf в высоконагруженном сайте

DragoN написал:

Как только я выключаю мускуль, все становиться хорошо.

это не аргумент. Что показывает top?

Почему у вас висит event_scheduler? Какое там событие?

По запросам, сделайте  long_query_time = 0
так в лог будут попадать все запросы и обработайте его с помощью утилиты pt-query-digest

по my.cnf - а как, например, определить достаточно ли вы выделили памяти под буфера, имея только my.cnf?

Неактивен

 

#5 12.06.2016 18:56:57

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

htop
http://s020.radikal.ru/i718/1606/68/5bc207017a92.png

Неактивен

 

#6 12.06.2016 19:05:11

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

event_scheduler
http://s011.radikal.ru/i316/1606/b9/a6ffafd9f8fe.png

Неактивен

 

#7 12.06.2016 23:12:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Настройка my.cnf в высоконагруженном сайте

насчет планировщика был не прав: состояние означает, что его очередь пуста и он спит
собственно show full processlist показывает, что выполняется только SHOW FULL PROCESSLIST, остальные потоки спят.

аналогично по htop все показанные процессы mysql спят
отсортируйте его по cpu и посмотрите кто находится в состояние r (выполнения)

Неактивен

 

#8 13.06.2016 03:33:30

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

Все время все скачет, что является логичным. Поймал когда в нагрузка на мускуль в топе

http://s010.radikal.ru/i314/1606/d5/63c0a36ccfca.png

Неактивен

 

#9 13.06.2016 06:38:37

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

Кое-что оптимизировал (спасибо за утилиту pt-query-digest vasya), вот теперь в отчете практически все битрикс таблицы

http://s019.radikal.ru/i600/1606/10/d85ff7e5b737.png

Неактивен

 

#10 13.06.2016 12:49:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Настройка my.cnf в высоконагруженном сайте

С конфигом скорее всего ничего страшного нет, но он все же немного странный. Например,

table_cache = 4G
table_open_cache = 4G[/syntax[
для переменных, которые задаются в целых числах (число таблиц)
<a href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_table_open_cache">http://dev.mysql.com/doc/refman/5.7/en/ &hellip; open_cache</a>

Далее,[syntax=text]query_cache_size = 128M

можно увеличить в 10 раз.

Параметры:
innodb_thread_concurrency = 8
innodb_file_io_threads = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_buffer_pool_instances = 8

я бы убрал. Вы ведь не знаете оптимальны они или нет

Неактивен

 

#11 13.06.2016 15:21:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Настройка my.cnf в высоконагруженном сайте

Ух, сколько людей собрал тредик smile Давайте я тоже внесу свою лепту.

Смотрю на те картинки, которые Вы приложили, и не вижу, чтобы сервер был загружен хоть сколько-то — во всех них он ничего не делает, и приходится вылавливать моменты, когда он ест процессор, например. Соответственно, вопрос — вы уверены, что сервер вообще нагружен, а дело не в чем-то другом? Если да — можете сделать соответствующую картинку, где это видно?

Неактивен

 

#12 13.06.2016 16:33:51

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

rgbeast написал:

я бы убрал. Вы ведь не знаете оптимальны они или нет

Хорошо, спасибо

paulus написал:

вы уверены, что сервер вообще нагружен, а дело не в чем-то другом? Если да — можете сделать соответствующую картинку, где это видно?

Да, конечно уверен. Сейчас выходные дни + лето (сезон отпусков) и пиковой нагрузки нет, поэтому скрины предоставлены с натяжкой. У нас новостные сайты и в любой момент посещения могут быть высокие. Приезд кого-нибудь, убийства, похищения и прочая нечисть из-за которой народ начинает усиленно заходить на сайты. Кстати, я писал выше, что с той утилитой я смог устранить серьезные недостатки и поэтому нагрузка упала. НО, я боюсь того что при пиковой нагрузке сайты снова лягут, поэтому хочу чтобы мне помогли понять что я сделал не правильно, научили до того.

P.S. У нас на сервере есть несколько сайтов, некоторые из них самописные, кое-что на битриксе и часть на вордпрессе. Сам я программист и стараюсь улучшать что имею, так же приходится настраивать сервер и кое-что из настроек мне не совсем ясны - постоянно читаю, изучаю (иногда даже кажется, что предоставляемой информации недостаточно чтобы понять всю суть необходимой опции (к примеру) на оригинальном языке, а вот спросить не у кого правильно ли я понимаю или нет). Я живу очень далеко от столицы и не могу позволить себе посещать какие-то дополнительные курсы, конференции, так как в городе ни кто таким не занимается, максимально что могу это ютуб - где опять же не спросишь ничего.

Спасибо всем за то что обратили на меня внимание и стараетесь помочь

Неактивен

 

#13 13.06.2016 17:05:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Настройка my.cnf в высоконагруженном сайте

Ну, по приведенным картинкам совсем непонятно, что оптимизировать — все работает хорошо. Угадывать узкие места можно пробовать, но, как правило, это неэффективно — лучше попрофилировать. Если можете воспроизвести нагрузку на стенде — воспроизведите, и тогда можно будет смотреть, во что упираетесь. Без нагрузки — почти наверняка не угадаем.

Неактивен

 

#14 13.06.2016 17:12:39

DragoN
Участник
Зарегистрирован: 12.06.2016
Сообщений: 8

Re: Настройка my.cnf в высоконагруженном сайте

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson