性能模式内存分配模型
性能架构使用以下内存分配模型:
- 可能在服务器启动时分配内存
- 在服务器运行期间可能会分配额外的内存
- 服务器运行期间切勿释放内存(尽管它可能会被回收)
- 释放关闭时使用的所有内存
结果是放宽了内存限制,以便可以以更少的配置使用性能架构,并减少内存占用,从而使消耗随服务器负载而扩展。使用的内存取决于实际看到的负载,而不是估计或明确配置的负载。
几个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
,就不再分配内存。由性能架构为此缓冲区收集的数据将丢失,并且任何相应的“丢失实例”计数器都会增加。
要参见性能模式正在使用多少内存,请检查为此目的设计的工具。性能架构在内部分配内存,并将每个缓冲区与专用工具相关联,以便可以将内存消耗追溯到各个缓冲区。用前缀命名的工具会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_nameWHERE EVENT_NAME LIKE 'memory/performance_schema/%';