Я хочу узнать стоимость памяти каждого процесса 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 млн - общие затраты.
Объем памяти, потребляемой каждым подключением, варьируется в зависимости от того, какие запросы вы выполняете, размера наборов результатов и, возможно, фазы луны. Вы захотите измерить текущее использование памяти и (при условии, что здесь много) экстраполировать текущее среднее использование памяти для соединения, чтобы определить, сколько соединений вы можете получить.
Проблема с этим методом заключается в том, что память может не быть вашим ограничивающим фактором - конкуренция запросов, дисковый ввод-вывод или что-то еще, что может вас убить, прежде чем вы начнете подкачку.
Предполагая, что вы используете в основном таблицы 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.