的setup_instruments
表中列出了可以收集事件的仪器对象的类:
SELECT * FROM performance_schema。setup_instruments\G *************************** 1. row *************************** NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list ENABLED: NO TIMED: NO PROPERTIES: singleton VOLATILITY: 1 DOCUMENTATION: Components can provide their own performance_schema tables. This lock protects the list of such tables definitions. ... *************************** 369. row *************************** NAME: stage/sql/executing ENABLED: NO TIMED: NO PROPERTIES: VOLATILITY: 0 DOCUMENTATION: NULL ... *************************** 687. row *************************** NAME: statement/abstract/Query ENABLED: YES TIMED: YES PROPERTIES: mutable VOLATILITY: 0 DOCUMENTATION: SQL query just received from the network. At this point, the real statement type is unknown, the type will be refined after SQL parsing. ... *************************** 696. row *************************** NAME: memory/performance_schema/metadata_locks ENABLED: YES TIMED: NULL PROPERTIES: global_statistics VOLATILITY: 1 DOCUMENTATION: Memory used for table performance_schema.metadata_locks ...
添加到源代码中的每个仪器都为setup_instruments
表,即使在不执行仪器化代码时也是如此。工具被启用并执行时,将创建工具实例,这些实例可以在
表,如xxx
_instancesfile_instances
或rwlock_instances
.
修改最setup_instruments
行立即影响监视。对于某些仪器,修改仅在服务器启动时有效;在运行时更改它们没有任何效果。这主要影响服务器中的互斥锁、条件和rwlock,尽管可能有其他工具也是如此。
的角色的详细信息setup_instruments
表中的事件过滤,请参见第5.3节,“事件预过滤”.
的setup_instruments
表有这些列:
的名字
仪器名称。仪器名称可能有多个部分,并形成一个层次,如在第七章,性能模式仪器命名约定.执行文书所产生的事件有一个
EVENT_NAME
从票据中提取的价值的名字
价值。(事件并没有真正的意义”的名字,”但这提供了一种将事件与工具关联的方法。)启用
仪器是否开启。这个值是
是的
或没有
.被禁用的仪器不会产生事件。此列可以修改,尽管正在设置启用
对已经创建的仪器无效。定时
仪器是否计时。这个值是
是的
,没有
,或零
.此列可以修改,尽管正在设置定时
对已经创建的仪器无效。一个
定时
的价值零
表示该仪器不支持计时。例如,内存操作没有计时,所以它们的定时
列是零
.设置
定时
来零
对于一个支持计时的仪器来说没有效果,设定也一样定时
非-零
对于不支持计时的仪器。如果一个已启用的仪器没有计时,则表示该仪器的代码已启用,但计时器未计时。仪器产生的事件
零
为TIMER_START
,TIMER_END
,TIMER_WAIT
定时器值。这又导致在计算汇总表中的总和、最小值、最大值和平均时间值时忽略这些值。属性
仪器性能。本专栏使用
集
数据类型,因此每台仪器可以设置以下列表中的多个标志:global_statistics
:该工具只产生全局摘要。更细级别的摘要不可用,例如每线程、帐户、用户或主机。例如,大多数记忆工具只产生全局摘要。可变的
如这仪器可以”变异”变成一个更具体的。此属性仅应用于语句工具。进步
该仪器能报告进度数据。这个属性只适用于舞台乐器。单例
如这仪器只有一个实例。例如,服务器中的大多数全局互斥锁都是单例的,因此相应的工具也是单例的。用户
:仪器与用户工作量(与系统工作量相反)直接相关。其中一个工具是等待/ io /套筒/ sql / client_connection
.
波动
仪器波动。波动率值从低到高。对应的值
PSI_VOLATILITY_
中定义的常量xxx
mysql / psi / psi_base.h
头文件:#定义psi_挥发性未知0 #定义psi_挥发性永久1 #定义psi_挥发性预置2 #定义psi_挥发性ddl 3 #定义psi_挥发性缓存4 #定义psi_挥发性会话5 #定义psi_挥发性事务6 #定义psi_挥发性查询7 #定义psi_挥发性intra_query 8
的
波动
列是纯信息性的,为用户(和性能模式代码)提供一些关于仪器运行时行为的提示。具有低波动指数(PERMANENT = 1)的仪器在服务器启动时创建一次,并且在正常的服务器运行期间从不销毁或重新创建。它们只在服务器关闭时被销毁。
例如,
等待/同步/ / pfs / LOCK_pfs_share_list互斥
互斥锁的波动性为1,这意味着它只创建一次。因此,来自仪器本身的可能开销(即互斥锁初始化)对该仪器没有影响。只有在锁定或解锁互斥锁时才会发生运行时开销。具有较高波动指数(例如,SESSION = 5)的工具将为每个用户会话创建和销毁。例如,
等待官/同步/互斥锁/ sql /:: LOCK_query_plan
互斥锁在每次会话连接时被创建,在会话断开时被销毁。这个互斥量对Performance Schema开销更敏感,因为开销不仅来自锁定和解锁工具,还来自互斥量创建和销毁工具,这是更经常执行的。
波动的另一个方面是是否以及何时更新
启用
列实际上有一些作用:一个更新
启用
影响随后创建的仪器对象,但对已经创建的仪器没有影响。更多的仪器”挥发性”中的新设置
setup_instruments
表更早。
例如,此语句不影响
LOCK_query_plan
互斥锁,但对更新后创建的新会话有影响:更新performance_schema。setup_instruments集启用=价值WHERE NAME = 'wait/sync /mutex/sql/THD::LOCK_query_plan';
这句话实际上没有任何效果:
更新performance_schema。setup_instruments集启用=价值WHERE NAME = 'wait/sync /mutex/pfs/LOCK_pfs_share_list';
这个互斥锁是永久性的,并且在执行更新之前就已经创建了。互斥锁将不再被创建,因此
启用
价值setup_instruments
从未使用过。要启用或禁用此互斥锁,请使用mutex_instances
表。10bet官方网站
描述乐器用途的弦。这个值是
零
如果无描述信息。
的setup_instruments
表有以下索引:
主键(
的名字
)
截断表
是不允许的setup_instruments
表格
从MySQL 8.0.27开始,为了帮助监视和故障排除,使用Performance Schema检测工具将检测线程的名称导出到操作系统。这将启用显示线程名的实用程序,例如调试器和Unixps命令,显示“distinct”mysqld线程名而不是线程名”mysqld”.该特性仅支持Linux、macOS和Windows操作系统。
假设mysqld的版本运行在一个系统上ps它支持此调用语法:
ps -C mysqld H -o "pid tid cmd comm"
不需要将线程名导出到操作系统,该命令显示的输出如下所示命令
值是mysqld
:
PID TID CMD命令1377 1377 /usr/sbin/mysqld mysqld 1377 1528 /usr/sbin/mysqld mysqld 1377 1529 /usr/sbin/mysqld mysqld 1377 1530 /usr/sbin/mysqld mysqld 1377 1531 /usr/sbin/mysqld mysqld 1377 1534 /usr/sbin/mysqld mysqld 1377 1535 /usr/sbin/mysqld mysqld 1377 1588 /usr/sbin/mysqld xpl_worker1 1377 1589 /usr/sbin/mysqld xpl_worker0 1377 1590 /usr/sbin/mysqld mysqld 1377 1594 /usr/sbin/mysqld mysqld 1377 1595 /usr/sbin/mysqld mysqld
通过将线程名称导出到操作系统,输出看起来像这样,线程的名称与它们的仪器名称相似:
PID TID CMD命令27668 27668 /usr/sbin/mysqld mysqld 27668 27671 /usr/sbin/mysqld ib_io_ibuf 27668 27672 /usr/sbin/mysqld ib_io_log 27668 27673 /usr/sbin/mysqld ib_io_rd-1 27668 27674 /usr/sbin/mysqld ib_io_rd-2 27668 27677 /usr/sbin/mysqld ib_io_wr-1 27668 27678 /usr/sbin/mysqld ib_io_wr-2 27668 27699 /usr/sbin/mysqld xpl_worker-2 27668 27700 /usr/sbin/mysqld xpl_accept-1 27668 27710 /usr/sbin/mysqld evt_sched 27668 27711 /usr/sbin/mysqld sig_handler 27668 27933 /usr/sbin/mysqld连接
在可行的情况下,对同一类中的不同线程实例进行编号,以提供不同的名称。由于名称长度与潜在的大量连接有关,因此对连接进行简单命名连接
.