Задержки подключения БД

Griz

Участник
Сообщения
38
Реакции
6
Операционная система
Linux
Доброго дня, дорогие форумчане! Появилась непонятная проблема после переноса БД на новый хостинг.

На протяжении 2 лет пользовался услугами myarena (web хостинг за 150 руб), потом решил идти дальше и перенести БД на отдельную vps (2 ядра, 2 гб ОЗУ, 40 гб диск).
Причиной переноса стали следующие моменты:
1. Приобретение ispmanager.
2. Постоянные проблемы с ограничением подключений в 150 на пользователя, которые регулируются лишь глобально (Ошибка "Too many connections").

Сейчас на новом БД хостинге Debian 10 + MariaDB (10.3.34). К сути проблемы. При работе с новой базой игровые серверы при онлайне свыше 20 человек начали медленно прогружать информацию о игроках. До кастомизации БД данные игроков: звания, админка, випки - могли прогружать пол-игры, что явно говорит о каких-то проблемах.
После многочисленных жалоб решил занять оптимизацией MariaDB.
# [Custom] Settings
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow_queries.log
long_query_time=2

wait_timeout=3600
query_cache_size=0
query_cache_type=0

key_buffer_size=128M

tmp_table_size=128M
max_heap_table_size=128M

innodb_file_per_table=1
innodb_buffer_pool_size=1024M
innodb_log_file_size=256M
innodb_buffer_pool_instances=1
innodb_flush_log_at_trx_commit=1

skip-name-resolve
После этого в логе медленных запросов MariaDB появились записи, но все они однотипные и занимают не больше 2 сек. Получается достаточно странная ситуация: самые жирные запросы занимают не больше 2 сек, но при этом сервер не может прогрузить данные об игроках на протяжении нескольких раундов (после кастомизации данные об игроках начали погружаться за 3-4 раунда, что быстро, но явно недостаточно для комфортной игры).
ВАЖНО: проблема возникает независимо от режима сервера, влияющим фактором становится смена карты при большом онлайне.
Просьба дать фидбек от людей, имеющие опыт в linux. Готов к сдельной оплате за помощь!
VK - Написать
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
А Вы смотрели процесслист мускула в момент проблем?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
@Griz, SM держит общую очередь запросов для всех плагинов. Если у Вас все плагины по каким-то причинам "тупят" и долго грузят данные игроков, значит какой-то запрос там завис на выполнении. В процесслисте можно увидеть, на какой базе и какой запрос (если он ещё к моменту выполнения не завершится).
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
@Griz, не могу уверенно ответить, но вроде он должен совпадать с таймаутом подключения к базе, который ещё в конфиге подключения заполняется.
 

Griz

Участник
Сообщения
38
Реакции
6
@Kruzya, столько много нюансов. Нам можно списаться лично, чтобы попробовать исправить вместе? Готов сделать взнос в копилку форума.
 

ykpon

Владыка
Сообщения
675
Реакции
399
Если сервер упирается в лимит БД max_connections, то уже стоит задуматься что создает подключения и не закрывает их.

Плагины, которые долго получают информацию из БД, от одного автора все?
Если вручную выполнить запрос к БД, он тоже долго выполняется, как и с сервера?
До перехода на новый сервер данных в БД было намного меньше?
Как дела с индексами в базе?
Как дела с нагрузкой сервера БД во время работы игрового сервера, когда появляются задержки?

з.ы. на шареде у тебя было 20+ ядер на сервере БД, а теперь - 2.
 

Griz

Участник
Сообщения
38
Реакции
6
@ykpon
1. lvl core создавал много подключений при краше сервера - доводил БД myarena до лимита max_connections, это проблема самого плагина, так как в старой версии lvl core такого не было. После перехода на vps такая проблема пропала (точную причину сказать не могу, но сейчас такого нет)
2. Иногда долго загружаются данные lvl core и ws.
Почему так - не знаю. Иногда ночью плагины не могут прогрузить никакие данные, а днем при таком же онлайне все прогружается.
1.
# Time: 220811 14:14:43
# User@Host: lvl_ranks[lvl_ranks] @ [IP]
# Thread_id: 130176 Schema: lvl_ranks QC_hit: No
# Query_time: 2.136810 Lock_time: 0.000169 Rows_sent: 0 Rows_examined: 1
# Rows_affected: 1 Bytes_sent: 52
SET timestamp=1660216483;
UPDATE `lvl_base_rt_maps` SET `countplays` = 1, `kills` = 32, `deaths` = 11, `rounds_overall` = 24, `rounds_ct` = 6, `rounds_t` = 11, `bomb_planted` = 1, `bomb_defused` = 2, `hostage_rescued` = 0, `hostage_killed` = 0, `playtime` = 797 WHERE `steam` = 'STEAM_1:1:710361080' AND `name_map` = 'de_mirage';

2.
# Time: 220811 14:19:06
# User@Host: lvl_ranks[lvl_ranks] @ [IP]
# Thread_id: 126460 Schema: lvl_ranks QC_hit: No
# Query_time: 2.395717 Lock_time: 0.000101 Rows_sent: 10 Rows_examined: 223455
# Rows_affected: 0 Bytes_sent: 381
SET timestamp=1660216746;
SELECT `name`, `LastClip` FROM `lvl_base_awp`, `lvl_base_awp_unusualkills` WHERE `steam` = `SteamID` AND `lastconnect` ORDER BY `LastClip` DESC LIMIT 10;
3. Некоторые запросы при отправке через phpmyadmin так же долго выполняются (например, запросы в sb_bans), но некоторые запросы выполняются быстрее, чем пишется в логах медленных запросов. (опять-таки я сравнивал время запросов в разное время)
4. Обьем данных +/- не изменился
5. Индексы базы не трогал
6. По нагрузке ничего сказать точно не могу, так как мониторинг на БД не ставил. По моим наблюдениям сервер БД не нагружается более 50%, памяти используется около 600МБ. Сервер для БД взял сполна, но почему-то он не поддерживает нужную скорость работы. Даже не могу определить, куда нужно копать: менять на postgresql/ставить больше ядер/менять OC/делать настройку MariaDB или еще что-то.....
 

ykpon

Владыка
Сообщения
675
Реакции
399
@ykpon
1. lvl core создавал много подключений при краше сервера - доводил БД myarena до лимита max_connections, это проблема самого плагина, так как в старой версии lvl core такого не было. После перехода на vps такая проблема пропала (точную причину сказать не могу, но сейчас такого нет)
2. Иногда долго загружаются данные lvl core и ws.
Почему так - не знаю. Иногда ночью плагины не могут прогрузить никакие данные, а днем при таком же онлайне все прогружается.
1.
# Time: 220811 14:14:43
# User@Host: lvl_ranks[lvl_ranks] @ [IP]
# Thread_id: 130176 Schema: lvl_ranks QC_hit: No
# Query_time: 2.136810 Lock_time: 0.000169 Rows_sent: 0 Rows_examined: 1
# Rows_affected: 1 Bytes_sent: 52
SET timestamp=1660216483;
UPDATE `lvl_base_rt_maps` SET `countplays` = 1, `kills` = 32, `deaths` = 11, `rounds_overall` = 24, `rounds_ct` = 6, `rounds_t` = 11, `bomb_planted` = 1, `bomb_defused` = 2, `hostage_rescued` = 0, `hostage_killed` = 0, `playtime` = 797 WHERE `steam` = 'STEAM_1:1:710361080' AND `name_map` = 'de_mirage';

2.
# Time: 220811 14:19:06
# User@Host: lvl_ranks[lvl_ranks] @ [IP]
# Thread_id: 126460 Schema: lvl_ranks QC_hit: No
# Query_time: 2.395717 Lock_time: 0.000101 Rows_sent: 10 Rows_examined: 223455
# Rows_affected: 0 Bytes_sent: 381
SET timestamp=1660216746;
SELECT `name`, `LastClip` FROM `lvl_base_awp`, `lvl_base_awp_unusualkills` WHERE `steam` = `SteamID` AND `lastconnect` ORDER BY `LastClip` DESC LIMIT 10;
3. Некоторые запросы при отправке через phpmyadmin так же долго выполняются (например, запросы в sb_bans), но некоторые запросы выполняются быстрее, чем пишется в логах медленных запросов. (опять-таки я сравнивал время запросов в разное время)
4. Обьем данных +/- не изменился
5. Индексы базы не трогал
6. По нагрузке ничего сказать точно не могу, так как мониторинг на БД не ставил. По моим наблюдениям сервер БД не нагружается более 50%, памяти используется около 600МБ. Сервер для БД взял сполна, но почему-то он не поддерживает нужную скорость работы. Даже не могу определить, куда нужно копать: менять на postgresql/ставить больше ядер/менять OC/делать настройку MariaDB или еще что-то.....
Смотри top во время задержек.
 

Zkiffy

Участник
Сообщения
547
Реакции
192
Доброго дня, дорогие форумчане! Появилась непонятная проблема после переноса БД на новый хостинг.

На протяжении 2 лет пользовался услугами myarena (web хостинг за 150 руб), потом решил идти дальше и перенести БД на отдельную vps (2 ядра, 2 гб ОЗУ, 40 гб диск).
Причиной переноса стали следующие моменты:
1. Приобретение ispmanager.
2. Постоянные проблемы с ограничением подключений в 150 на пользователя, которые регулируются лишь глобально (Ошибка "Too many connections").

Сейчас на новом БД хостинге Debian 10 + MariaDB (10.3.34). К сути проблемы. При работе с новой базой игровые серверы при онлайне свыше 20 человек начали медленно прогружать информацию о игроках. До кастомизации БД данные игроков: звания, админка, випки - могли прогружать пол-игры, что явно говорит о каких-то проблемах.
После многочисленных жалоб решил занять оптимизацией MariaDB.
# [Custom] Settings
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow_queries.log
long_query_time=2

wait_timeout=3600
query_cache_size=0
query_cache_type=0

key_buffer_size=128M

tmp_table_size=128M
max_heap_table_size=128M

innodb_file_per_table=1
innodb_buffer_pool_size=1024M
innodb_log_file_size=256M
innodb_buffer_pool_instances=1
innodb_flush_log_at_trx_commit=1

skip-name-resolve
После этого в логе медленных запросов MariaDB появились записи, но все они однотипные и занимают не больше 2 сек. Получается достаточно странная ситуация: самые жирные запросы занимают не больше 2 сек, но при этом сервер не может прогрузить данные об игроках на протяжении нескольких раундов (после кастомизации данные об игроках начали погружаться за 3-4 раунда, что быстро, но явно недостаточно для комфортной игры).
ВАЖНО: проблема возникает независимо от режима сервера, влияющим фактором становится смена карты при большом онлайне.
Просьба дать фидбек от людей, имеющие опыт в linux. Готов к сдельной оплате за помощь!
VK - Написать
такая же проблема, думал из-за большого кол-ва информации в бд XD
 
Сверху Снизу