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_nametable 中。

此查询显示与内存工具关联的信息:

SELECT * FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/performance_schema/%';