Skip to content

performance_schema 内存分配模型

xiaoboluo768 edited this page Jun 8, 2020 · 2 revisions
  • performance_schema使用如下内存分配模型:

    • 可能在server启动时分配的内存
    • 可能在server运行期间额外分配的内存
    • 不要在server运行期间释放内存(但可能会被自动回收)
    • 在关闭server时所有内存被释放,保存在performance_schema表中的所有信息丢失(包括配置)
  • 以下是一些可以自动计算(默认值为-1表示可以自动计算),自动缩放,不需要明确配置的参数(由于自动计算的参数不受限制,内存使用量会随着server负载的增长而增长,如果你需要明确限制服务器内存分配,则可以显式指定这些自动计算参数的值)

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时(默认值),该参数将自动进行缩放,当初始化数据库时,对应的相关内部缓冲区为空(没有分配内存),当performance_schema执行收集数据时,才分配内存到相应的缓冲区中,但是,缓冲区的大小没有限制,随着server负载的增加,使用的内存量也会增加
    • 当设置为0时,对应的内部缓冲区为空且不为其分配内存
    • 当设置为大于0值时,数据库初始化时内部缓冲区为空,当performance_schema执行收集数据时,才分配内存到相应的缓冲区中,但是缓冲区的大小最大只能为该参数定义的值,一旦分配的内存量达到该参数的值,将不会再为相应类型的内部缓冲区分配内存,此时该类型的后续监控数据将丢失,对应的状态变量计数器会增加
  • 要查看performance_schema使用的内存量,可以查看相应的instruments监控信息。performance_schema记录内部分配内存并将每个缓冲区与对应的instruments相关联,从而可以跟踪到每个缓冲区的内存消耗。如:在表memory_summary_global_by_event_name中记录的数据,以前缀memory/performance_schema命名的instruments可以查看到为这些内部缓冲区分配了多少内存。缓冲区对server而言是全局的,因此对于缓冲区的内存分配不会记录在memory_summary_by_xxx_by_event_name表中。查询示例:SELECT * FROM memory_summary_global_by_event_name WHERE EVENT_NAME LIKE 'memory/performance_schema/%';

  • 参考链接:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-memory-model.html


上一篇: performance_schema中信息摘要表 | 下一篇: 性能分析思路

Clone this wiki locally