有几个与性能模式相关的状态变量:
mysql> SHOW STATUS LIKE 'perf%'+-----------------------------------------------+-------+ | Variable_name |值 | +-----------------------------------------------+-------+ | 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状态变量提供了关于由于内存限制而无法加载或创建的检测的信息。这些变量的名称有几种形式:
Performance_schema_
指示有多少种类型的仪器xxx
_classes_lostxxx
无法载入。Performance_schema_
指示对象类型的实例数xxx
_instances_lostxxx
无法创建。Performance_schema_
指示对象类型的实例数xxx
_handles_lostxxx
无法打开。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个互斥锁工具。
服务器根据插件需要的互斥量和可用的互斥量为插件分配互斥量,如下语句序列所示:
安装插件plugin_a
服务器现在有150+40 = 190个互斥锁工具。
卸载插件插件
服务器仍然有190个仪器。插件代码生成的所有历史数据仍然可用,但不会收集仪器的新事件。
安装插件插件
服务器检测到已经定义了40种乐器,因此不会创建新的乐器,并且重用先前分配的内部内存缓冲区。服务器仍然有190个仪器。
安装插件插件
服务器有200-190 = 10个仪器的空间(在本例中是互斥类),并且看到插件包含20个新仪器。10个仪器被装载,10个被丢弃或”丢失。”的Performance_schema_mutex_classes_lost
表示丢失的工具(互斥锁类)的数量:
mysql> SHOW STATUS LIKE ' perf%mutex_classes_lost ';+---------------------------------------+-------+ | Variable_name |值 | +---------------------------------------+-------+ | Performance_schema_mutex_classes_lost | 10 | +---------------------------------------+-------+ 1行集(0.10秒)
仪器仍然工作并收集(部分)数据plugin_b
.
当服务器无法创建互斥锁工具时,会出现以下结果:
无行为仪器插入
setup_instruments
表格Performance_schema_mutex_instances_lost
不会改变。(当互斥量工具没有被创建时,以后不能使用它来创建被检测的互斥量实例。)
刚才描述的模式适用于所有类型的工具,而不仅仅是互斥。
值为Performance_schema_mutex_classes_lost
大于0的情况有两种:
为了节省几个字节的内存,启动服务器时使用
——performance_schema_max_mutex_classes =
,在那里N
N
小于默认值。选择默认值足以加载MySQL发行版中提供的所有插件,但如果一些插件从未加载,则可以减少默认值。例如,您可以选择不加载发行版中的某些存储引擎。您加载了一个第三方插件,该插件针对性能模式进行了检测,但在启动服务器时不允许该插件的检测内存需求。因为它来自第三方,所以在选择的默认值中不考虑此引擎的仪器内存消耗
performance_schema_max_mutex_classes
.如果服务器没有足够的资源用于插件的工具,而你没有显式地分配更多的使用
——performance_schema_max_mutex_classes =
,加载插件会导致仪器的饥饿。N
如果值选择为performance_schema_max_mutex_classes
太小,在错误日志中没有报告错误,并且在运行时没有失败。但是,表中的内容performance_schema
数据库遗漏事件。的Performance_schema_mutex_classes_lost
状态变量是表示某些事件由于未能创建工具而在内部删除的唯一可见标志。
如果一个工具没有丢失,性能模式就知道它,并在测试实例时使用它。例如,等待/同步/互斥锁/ sql / LOCK_delete
互斥锁工具的名称是否在setup_instruments
表格在代码(in)中创建互斥锁时使用这个工具:: LOCK_delete
),但是在服务器运行时需要使用多个互斥锁实例。在这种情况下,LOCK_delete
是每个连接的互斥量(野
),所以如果一个服务器有1000个连接,就有1000个线程,1000个被检测LOCK_delete
互斥锁实例(:: LOCK_delete
).
如果服务器没有空间容纳所有这1000个插装的互斥对象(实例),那么有些互斥对象是使用插装创建的,有些则不使用插装创建。如果服务器只能创建800个实例,则丢失200个实例。服务器继续运行,但增量递增Performance_schema_mutex_instances_lost
表示无法创建实例。
值为Performance_schema_mutex_instances_lost
当代码在运行时初始化的互斥对象多于分配的互斥对象时,可能会发生大于0的情况——performance_schema_max_mutex_instances =
.N
底线是如果显示状态像'perf%'
表示没有丢失任何东西(所有值都是零),Performance Schema数据是准确的,可以依赖。如果丢失了某些内容,则数据是不完整的,并且由于提供给它使用的内存不足,Performance Schema无法记录所有内容。在这种情况下,是具体的Performance_schema_
变量表示问题区域。xxx
_lost
在某些情况下,故意造成仪器饥饿可能是合适的。例如,如果不关心文件I/O的性能数据,可以在启动服务器时将所有与文件I/O相关的performance Schema参数设置为0。没有为与文件相关的类、实例或句柄分配内存,所有文件事件都将丢失。
使用显示引擎performance_schema状态
检查Performance Schema代码的内部操作:
mysql>显示引擎PERFORMANCE_SCHEMA状态*************************** 3所示。行 *************************** 类型:performance_schema名字:events_waits_history。size状态:76 ***************************行 *************************** 类型:performance_schema名字:events_waits_history。计数状态:10000 *************************** 5。行 *************************** 类型:performance_schema名字:events_waits_history。内存状态:760000…*************************** 57。行 *************************** 类型:performance_schema名字:performance_schema。内存状态:26459600…
这个语句旨在帮助DBA理解不同的性能模式选项对内存需求的影响。有关字段含义的描述,请参见第13.7.7.15节,“SHOW ENGINE语句”.