运行时获取mysql查询的内存使用情况

Gui*_*nto 8 mysql memory

是否可以在正在运行的查询中获取已用内存?

就像是:

mysql> SELECT MEMORY_PEAK as memory; #return memory usage by mysql before run query
mysql> SELECT id FROM table WHERE id>2; #run query
mysql> SELECT MEMORY_PEAK as memory; #return memory usage by mysql after run query
Run Code Online (Sandbox Code Playgroud)

并返回类似(返回 17kb)的内容:

+----------+
|  memory  |
+----------+
|  20100   |
+----------+

+------+
|  id  |
+------+
|  3   |
+------+

+----------+
|  memory  |
+----------+
|  2026767 |
+----------+
Run Code Online (Sandbox Code Playgroud)

或者

mysql> USAGE SELECT id FROM table WHERE id>2;

并返回类似(返回 17kb)的内容:

+---------+
|  USAGE  |
+---------+
|  16767  |
+---------+
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我需要它来做各种测试,看看哪些引擎查询和性能更好(个人经验)。

Rya*_*ton 5

在 MySQL 5.7 中,假设您主要使用 INNODB 表,您可以通过运行以下查询查看当前使用了多少内存:

SHOW ENGINE INNODB STATUS
Run Code Online (Sandbox Code Playgroud)

您可以通过运行此查询查看您的数据库将使用的最大内存量:

SELECT ( @@key_buffer_size
+ @@query_cache_size
+ @@innodb_buffer_pool_size
+ @@innodb_log_buffer_size
+ @@max_connections * ( 
    @@read_buffer_size
    + @@read_rnd_buffer_size
    + @@sort_buffer_size
    + @@join_buffer_size
    + @@binlog_cache_size
    + @@thread_stack
    + @@tmp_table_size )
) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;
Run Code Online (Sandbox Code Playgroud)


Mic*_*bot 3

答案似乎是“还没有”。

看起来这将被添加到 MySQL Server 5.7 中。

http://dev.mysql.com/doc/refman/5.7/en/memory-summary-tables.html