• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 性能模式状态监视

    与性能模式关联的状态变量有几个:

    mysql> SHOW STATUS LIKE 'perf%';
    +-----------------------------------------------	+-------	+
    | Variable_name	| Value	|
    +-----------------------------------------------	+-------	+
    | Performance_schema_accounts_lost	| 0	|
    | Performance_schema_cond_classes_lost	| 0	|
    | Performance_schema_cond_instances_lost	| 0	|
    | Performance_schema_digest_lost	| 0	|
    | Performance_schema_file_classes_lost	| 0	|
    | Performance_schema_file_handles_lost	| 0	|
    | Performance_schema_file_instances_lost	| 0	|
    | Performance_schema_hosts_lost	| 0	|
    | Performance_schema_locker_lost	| 0	|
    | Performance_schema_memory_classes_lost	| 0	|
    | Performance_schema_metadata_lock_lost	| 0	|
    | Performance_schema_mutex_classes_lost	| 0	|
    | Performance_schema_mutex_instances_lost	| 0	|
    | Performance_schema_nested_statement_lost	| 0	|
    | Performance_schema_program_lost	| 0	|
    | Performance_schema_rwlock_classes_lost	| 0	|
    | Performance_schema_rwlock_instances_lost	| 0	|
    | Performance_schema_session_connect_attrs_lost	| 0	|
    | Performance_schema_socket_classes_lost	| 0	|
    | Performance_schema_socket_instances_lost	| 0	|
    | Performance_schema_stage_classes_lost	| 0	|
    | Performance_schema_statement_classes_lost	| 0	|
    | Performance_schema_table_handles_lost	| 0	|
    | Performance_schema_table_instances_lost	| 0	|
    | Performance_schema_thread_classes_lost	| 0	|
    | Performance_schema_thread_instances_lost	| 0	|
    | Performance_schema_users_lost	| 0	|
    +-----------------------------------------------	+-------	+
    

    性能架构状态变量提供有关由于内存限制而无法加载或创建的检测的信息。这些变量的名称具有几种形式:

    • Performance_schema_xxx_classes_lost指示xxx无法加载多少种类型的工具。
    • Performance_schema_xxx_instances_lost指示xxx无法创建多少个对象类型的实例。
    • Performance_schema_xxx_handles_lost指示xxx无法打开多少个对象类型的实例。
    • Performance_schema_locker_lost指示“丢失”或未记录多少事件。

    例如,如果在服务器源中检测到互斥锁,但是服务器在运行时无法为检测分配内存,则它会递增Performance_schema_mutex_classes_lost。互斥锁仍充当同步对象(即服务器继续正常运行),但是不会收集其性能数据。如果可以分配工具,则可以将其用于初始化已检测的互斥实例。对于单例互斥锁(例如全局互斥锁),将只有一个实例。其他互斥锁每个连接或每个页面在各种缓存和数据缓冲区中都有一个实例,因此实例数会随时间变化。增加最大连接数或某些缓冲区的最大大小将增加可能一次分配的最大实例数。如果服务器无法创建给定的检测互斥实例,则它将递增Performance_schema_mutex_instances_lost

    假设满足以下条件:

    • 服务器是使用该--performance_schema_max_mutex_classes=200选件启动的,因此可以容纳200个互斥量仪器。
    • 已经加载了150个互斥仪器。
    • 名为的插件plugin_a包含40个互斥仪器。
    • 名为的插件plugin_b包含20个互斥工具。

    服务器根据所需的插件数量和可用的插件数量为插件分配互斥工具,如以下语句序列所示:

    INSTALL PLUGIN plugin_a
    

    服务器现在具有150 + 40 = 190个互斥工具。

    UNINSTALL PLUGIN plugin_a;
    

    服务器仍然有190台仪器。插件代码生成的所有历史数据仍然可用,但是未收集仪器的新事件。

    INSTALL PLUGIN plugin_a;
    

    服务器检测到已经定义了40种工具,因此没有创建新工具,并且先前分配的内部存储器缓冲区被重用。服务器仍然有190台仪器。

    INSTALL PLUGIN plugin_b;
    

    该服务器可容纳200-190 = 10种仪器(在本例中为互斥类),并且看到该插件包含20种新仪器。10种仪器被加载,和10被丢弃或“丢失。”的Performance_schema_mutex_classes_lost指示仪器丢失(互斥类)的数目:

    mysql> SHOW STATUS LIKE "perf%mutex_classes_lost";
    +---------------------------------------	+-------	+
    | Variable_name	| Value	|
    +---------------------------------------	+-------	+
    | Performance_schema_mutex_classes_lost	| 10	|
    +---------------------------------------	+-------	+
    1 row in set (0.10 sec)
    

    仪器仍然可以正常工作并收集的(部分)数据plugin_b

    当服务器无法创建互斥量工具时,将出现以下结果:

    • setup_instruments表格中未插入任何仪器。
    • Performance_schema_mutex_classes_lost增加1。
    • Performance_schema_mutex_instances_lost不会改变。(未创建互斥量工具时,以后将无法使用它来创建已检测的互斥体实例。)

    刚刚描述的模式适用于所有类型的仪器,而不仅仅是互斥。

    Performance_schema_mutex_classes_lost在两种情况下,可能会出现大于0的值:

    • 要节省一些字节的内存,请使用来启动服务器,其中小于默认值。选择默认值足以加载MySQL发行版中提供的所有插件,但是如果从不加载某些插件,则可以降低默认值。例如,您可以选择不加载分发中的某些存储引擎。--performance_schema_max_mutex_classes=NN
    • 您加载了为性能模式进行检测的第三方插件,但是在启动服务器时不允许该插件的检测内存要求。由于来自第三方,因此该引擎的仪器内存消耗未计入为其选择的默认值performance_schema_max_mutex_classes

      如果服务器没有足够的资源来使用插件的工具,而您没有显式分配using ,则加载插件会导致工具短缺。--performance_schema_max_mutex_classes=N

    如果选择的值performance_schema_max_mutex_classes太小,则错误日志中不会报告任何错误,并且在运行时也不会失败。但是,performance_schema数据库中表的内容将丢失事件。该Performance_schema_mutex_classes_lost状态变量是唯一明显的迹象表明,一些事件因未能创建仪器内部下降。

    如果没有丢失一种工具,则性能架构会知道该工具,并在检测实例时使用它。例如,wait/synch/mutex/sql/LOCK_deletesetup_instruments表中互斥量工具的名称。在代码中创建互斥锁时,会使用此工具(在中THD::LOCK_delete),但是在服务器运行时需要许多互斥锁实例。在这种情况下,LOCK_delete每个连接都是一个互斥锁(THD),因此,如果服务器有1000个连接,则有1000个线程和1000个检测到的LOCK_delete互斥锁实例(THD::LOCK_delete)。

    如果服务器没有足够的空间容纳所有这1000个已检测到的互斥锁(实例),则某些互斥锁是通过检测创建的,而有些互斥锁是在没有检测的情况下创建的。如果服务器只能创建800个实例,则会丢失200个实例。服务器继续运行,但是增加Performance_schema_mutex_instances_lost 200表示无法创建实例。

    Performance_schema_mutex_instances_lost当代码在运行时初始化的互斥量多于分配给的互斥量时,可能会出现大于0的值。--performance_schema_max_mutex_instances=N

    底线是,如果SHOW STATUS LIKE 'perf%'说什么都没有丢失(所有值均为零),则性能模式数据是准确的并且可以依赖。如果丢失了某些内容,则数据将不完整,并且由于分配给它的内存不足,因此性能模式无法记录所有内容。在这种情况下,特定变量指示问题区域。Performance_schema_xxx_lost

    在某些情况下,可能会导致故意的仪器饥饿。例如,如果您不关心文件I / O的性能数据,则可以在将与文件I / O相关的所有性能模式参数都设置为0的情况下启动服务器。不会为与文件相关的类,实例,或句柄,所有文件事件都将丢失。

    使用SHOW ENGINE PERFORMANCE_SCHEMA STATUS检查绩效模式的代码的内部操作:

    mysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\G
    ...
    *************************** 3. row***************************
      Type: performance_schema
      Name: events_waits_history.size
    Status: 76
    *************************** 4. row***************************
      Type: performance_schema
      Name: events_waits_history.count
    Status: 10000
    *************************** 5. row***************************
      Type: performance_schema
      Name: events_waits_history.memory
    Status: 760000
    ...
    *************************** 57. row***************************
      Type: performance_schema
      Name: performance_schema.memory
    Status: 26459600
    ...
    

    该语句旨在帮助DBA了解不同的“性能模式”选项对内存要求的影响。有关字段含义的描述,请参见“ SHOW ENGINE语句”。