0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
||||||
1 | ||||||
Медленная работа MySQL03.09.2022, 01:03. Показов 683. Ответов 19
Так почему же SQL начинает медленно работать и рвать соединения?
Теория 1: При большом количестве подключений воркбенч показывает нагрузку на цпу 2, может достигать 5-ти, хотя сам цпу по факту не загружен и простаивает, словно он использует всего 1 поток. Думаю из-за этого возникают исключения "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding." mysql версии 8.0.30 мой конфиг: Код
[mysqld] datadir = /mnt/pData/prj/MySQL/mysql bind-address = 0.0.0.0 connect_timeout = 120 wait_timeout = 120 max_allowed_packet = 500M net_read_timeout = 600 net_write_timeout = 600 thread_cache_size=64 skip-log-bin log-error=error.log innodb_undo_log_truncate=off # general table_open_cache = 20000 table_open_cache_instances=64 back_log=3500 max_connections=4000 # files innodb_file_per_table innodb_log_file_size=15G innodb_log_files_in_group=2 innodb_open_files=4000 # buffers innodb_buffer_pool_size= 10G innodb_buffer_pool_instances=8 innodb_log_buffer_size=64M # tune innodb_doublewrite= 1 innodb_thread_concurrency=0 innodb_flush_log_at_trx_commit= 0 innodb_flush_method=O_DIRECT_NO_FSYNC innodb_max_dirty_pages_pct=90 innodb_max_dirty_pages_pct_lwm=10 innodb_lru_scan_depth=2048 innodb_page_cleaners=4 join_buffer_size=256K sort_buffer_size=256K innodb_use_native_aio=1 innodb_stats_persistent = 1 innodb_adaptive_flushing = 1 innodb_flush_neighbors = 0 innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_io_capacity=1500 innodb_io_capacity_max=2500 innodb_purge_threads=4 innodb_adaptive_hash_index=0 max_prepared_stmt_count=100000 innodb_monitor_enable = '%' performance_schema = ON Когда все клиенты(боты) создались и подключились к каналам для сбора данных, все работает нормально. Количество подключений ожидаемое, исключений про выполнении запросов нет. Проблемы начинаются именно во время создании новых клиентов. При нормальной работе 200 клиентов создают примерно 200-220 подключений к БД, но в момент создания они могут создать 1300-1500 подключений к БД. Я пока не могу понять почему, в коде все хорошо. В момент создании клиента он выполняет следующие запросы:
0
|
03.09.2022, 01:03 | |
Ответы с готовыми решениями:
19
Медленная обработка запросов в mysql Медленная работа с views Медленная работа с БД Медленная работа с БД Медленная работа процедуры |
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 142
|
|
03.09.2022, 08:34 | 2 |
Я не большой специалист по БД, но могу предложить сделать вам следующий тест:
Если ваши БД и таблицы, кот. вы создаете при каждом " В момент создании клиента " имеют одно и то же имя, то просто приготовьте их (т.е. создайте все это) заранее. Затем при каждом создании нового клиента оставьте только ту часть работы, кот. реально необходима в таком случае, например сделать выборку либо update/insert в УЖЕ СУЩЕСТВУЮЩУЮ таблицу. Надеюсь, что смог передать свою мысль.
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
||||||
03.09.2022, 10:57 [ТС] | 3 | |||||
Запрос
0
|
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 142
|
|
03.09.2022, 12:06 | 4 |
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
03.09.2022, 13:57 | 5 |
ronink, И сколько у вас таблиц в общей сложности в БД?
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
||||||
03.09.2022, 22:19 [ТС] | 6 | |||||
Попробовал во время старта программы делать запрос
Пока 3111 баз данных, в каждой по 2 таблицы.
0
|
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 142
|
|
04.09.2022, 07:37 | 7 |
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
04.09.2022, 16:01 | 8 |
А чем вызвано такое необычное решение - использовать много БД с небольшим количеством таблиц в них?
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
04.09.2022, 18:14 [ТС] | 9 |
Мне показалось это логичным, под каждый канал делать свою бд. Просто так сложилось, что каналов очень много.
п.с. для ясности : эта бд для бота, который подключается к IRC каналам стримеров на твиче и хранит в ней данные пользователей. Первая таблица для информации о самих пользователях, вторая для их сообщений.
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
04.09.2022, 19:43 | 10 |
Допустим. И сколько записей в среднем у вас в таблицах (в тех, которых 2 в каждой БД)?
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
04.09.2022, 21:56 [ТС] | 11 |
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
04.09.2022, 23:46 | 12 |
Я правильно понимаю, что у вас создаются два соединения (код клиента) - одно на создание БД, а второе таблиц и всего остального? Почему их два?
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
||||||
05.09.2022, 02:00 [ТС] | 13 | |||||
Не совсем. Для каждой операции (поиск, обновление, создание и т.д.) есть отдельный метод. В рамках этого метода создается соединение. На пример так выглядит метод обновления пользователя
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
05.09.2022, 02:20 | 14 |
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
05.09.2022, 05:48 [ТС] | 15 |
Я пробовал делать одним подключением, но в таком случае возникало исключение "это соединение ассоциируется с другой операцией" или как-то так.
Добавлено через 2 часа 49 минут Странно. Сейчас еще раз попробовал все привязать к одному подключению и исключений не возникает. Стало работать шустрее, но все равно сильно тормозит.
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
05.09.2022, 15:17 [ТС] | 16 |
Вроде получилось побороть проблему. Дело было в умирающем hdd. Перебросил бд на новый ссд и все залетало
0
|
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
|
|
05.09.2022, 15:48 | 17 |
При ваших потребностях он и не умирающий тупил бы со страшной силой )))
Как-бы SSD предполагался по умолчанию, даже в голову не приходило вопрос о нём поднимать )))
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
05.09.2022, 19:30 [ТС] | 18 |
К слову, оказывается что для команд Read и NonQuery должны быть разные подключения.
0
|
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,116
|
|
05.09.2022, 20:04 | 19 |
0
|
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 15
|
|
05.09.2022, 23:52 [ТС] | 20 |
На счет самого сервера не знаю, но .NET такое не поддерживает
While a DataReader is open, the Connection is in use exclusively by that DataReader. You cannot execute any commands for the Connection, including creating another DataReader, until the original DataReader is closed.
0
|
05.09.2022, 23:52 | |
05.09.2022, 23:52 | |
Помогаю со студенческими работами здесь
20
Медленная работа с локальной переменной Медленная работа проекта в MS Access 2000 Медленная работа скрипта по подсчету цифр в столбце Aser v5 i7 u - очень медленная загрузка системы и такая же медленная работа приложений Медленная работа 1С Медленная работа 1С Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |