Назад | Перейти на главную страницу

Как узнать стоимость памяти для каждого подключения mysql?

Я хочу узнать стоимость памяти каждого процесса mysql. Прямо сейчас у меня более 800 подключений mysql, но я не знаю, когда система начнет подкачку. Я использую FreeBSD.

используйте mysqltunner.pl, чтобы показать вам отчет

-------- Performance Metrics -----------------------------------------------
[--] Total buffers: 168.0M global + 2.8M per thread (10 max threads)
[OK] Maximum reached memory usage: 179.0M (18.04% of installed RAM)
[OK] Maximum possible memory usage: 195.5M (19.70% of installed RAM)

2,8 млн - это затраты на память каждого потока, включая соединение, и 195,5 млн - общие затраты.

Объем памяти, потребляемой каждым подключением, варьируется в зависимости от того, какие запросы вы выполняете, размера наборов результатов и, возможно, фазы луны. Вы захотите измерить текущее использование памяти и (при условии, что здесь много) экстраполировать текущее среднее использование памяти для соединения, чтобы определить, сколько соединений вы можете получить.

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

Базовая информация о памяти MySQL

Предполагая, что вы используете в основном таблицы InnoDB, вы можете увидеть, сколько памяти используется в MySQL:

SHOW ENGINE INNODB STATUS

Он покажет вам много информации, но вы ищете что-то вроде:

В этой базе данных, приведенной выше, практически нет активности.

Максимальный объем памяти на одно соединение

Если вы хотите узнать максимальное количество, которое может использовать соединение, это запрос:

SELECT ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@tmp_table_size
+ 2*@@net_buffer_length
) / (1024 * 1024) AS MEMORY_PER_CON_MB;

Максимальное количество подключений можно найти с помощью:

select @@max_connections;

Средняя память на запрос

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

Вы можете довольно легко определить максимальную стоимость памяти для каждого подключения к серверу из переменных конфигурации.

Получение вашего актуальный использование памяти для каждого соединения, к сожалению, намного сложнее из-за способа, которым mysqld потоки.

Еще один хороший инструмент, который я использую для понимания / настройки того, как mysql использует память, - это mysqlreport.