MySQL 8.4 Release Notes
29.17 性能模式内存分配模型
性能模式使用以下内存分配模型:
-
可能在服务器启动时分配内存
-
可能在服务器运行期间分配额外的内存
-
在服务器运行期间永远不会释放内存(尽管它可能会被回收)
-
在关闭时释放所有用于内存的内存
结果是放宽内存约束,以便性能模式可以在较少配置下使用,并减少内存占用,使其随着服务器负载的增加而增长。实际看到的负载而不是估计或显式配置的负载来决定所需的内存。
有几个性能模式大小参数是自动缩放的,不需要除非您想要为内存分配设置一个明确的限制之外进行显式配置:
performance_schema_accounts_size
performance_schema_hosts_size
performance_schema_max_cond_instances
performance_schema_max_file_instances
performance_schema_max_index_stat
performance_schema_max_metadata_locks
performance_schema_max_mutex_instances
performance_schema_max_prepared_statements_instances
performance_schema_max_program_instances
performance_schema_max_rwlock_instances
performance_schema_max_socket_instances
performance_schema_max_table_handles
performance_schema_max_table_instances
performance_schema_max_table_lock_stat
performance_schema_max_thread_instances
performance_schema_users_size
对于一个自动缩放的参数,配置工作如下:
-
如果值设置为-1(默认值),则参数是自动缩放的:
-
对应的内部缓冲区为空初次,并且没有分配内存。
-
随着性能模式收集数据,内存将在相应的缓冲区中被分配。缓冲区大小是无限的,可以随着负载的增加而增长。
-
-
如果值设置为0:
-
对应的内部缓冲区为空初次,并且没有分配内存。
-
-
如果值设置为
N
> 0:-
对应的内部缓冲区为空初次,并且没有分配内存。
-
随着性能模式收集数据,内存将在相应的缓冲区中被分配,直到缓冲区大小达到
N
。 -
一旦缓冲区大小达到
N
,就不会再分配更多的内存。性能模式为此缓冲区收集的数据将丢失,并且任何相应的“丢失实例”计数器都会增加。
-
要查看性能模式正在使用多少内存,请检查那些用于该目的的仪表。性能模式内部分配内存并将每个缓冲区与一个专用的仪表关联,以便跟踪内存消耗到特定缓冲区。以memory/performance_schema/
开头命名的仪表显示了为这些内部缓冲区分配的内存量。由于缓冲区是全局的,服务器上,因此这些仪表仅在memory_summary_global_by_event_name
表中显示,而不在其他memory_summary_by_
表中。xxx
_by_event_name
以下查询显示与内存仪表相关的信息:
SELECT * FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/performance_schema/%';