25.17 性能架构内存分配模型
性能架构使用以下内存分配模型:
-
可能在服务器启动时分配内存
-
在服务器运行期间可能会分配额外的内存
-
服务器运行期间切勿释放内存(尽管它可能会被回收)
-
释放关闭时使用的所有内存
结果是放宽了内存限制,以便可以以更少的配置使用性能架构,并减少内存占用,从而使消耗随服务器负载而扩展。使用的内存取决于实际看到的负载,而不是估计或明确配置的负载。
几个 Performance Schema 大小调整参数是自动缩放的,不需要显式配置,除非您要对内存分配构建显式限制:
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
*,就不再分配内存。性能架构为此缓冲区收集的数据将丢失,并且任何相应的“丢失实例”计数器都将增加。
-
要查看性能模式正在使用多少内存,请检查为此目的设计的工具。性能架构在内部分配内存,并将每个缓冲区与专用工具关联,以便可以将内存消耗 traceback 到各个缓冲区。以前缀memory/performance_schema/
命名的工具会为这些内部缓冲区分配多少内存。缓冲区是服务器的全局缓冲区,因此工具仅显示在memory_summary_global_by_event_nametable 中,而不显示在其他memory_summary_by_xxx_by_event_name
table 中。
此查询显示与内存工具关联的信息:
SELECT * FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/performance_schema/%';