通过线程进行预过滤
该threads
表为每个服务器线程包含一行。每行都包含有关线程的信息,并指示是否为该线程启用了监视。为了使Performance Schema监视线程,必须满足以下条件:
- 表中的
thread_instrumentation
使用者setup_consumers
必须为YES
。 - 该
threads.INSTRUMENTED
列必须为YES
。 - 仅对由
setup_instruments
表中启用的工具产生的那些线程事件进行监视。
该threads
表还指示每个服务器线程是否执行历史事件日志记录。这包括等待,阶段,语句和事务事件,并影响到这些表的日志记录:
events_waits_history events_waits_history_long events_stages_history events_stages_history_long events_statements_history events_statements_history_long events_transactions_history events_transactions_history_long
为了进行历史事件日志记录,这些条件必须为真:
setup_consumers
必须在表中启用与历史记录相关的适当使用者。例如,在events_waits_history
和events_waits_history_long
表中的等待事件日志记录要求相应的events_waits_history
和events_waits_history_long
使用者为YES
。- 该
threads.HISTORY
列必须为YES
。 - 仅对由
setup_instruments
表中启用的工具产生的那些线程事件进行记录。
用于前景螺纹(从客户端连接造成的),的初始值INSTRUMENTED
和HISTORY
在列threads
表的行由与线程相关联的用户帐户是否匹配在任何行确定setup_actors
表。这些值来自匹配表行的ENABLED
和HISTORY
列setup_actors
。
对于后台线程,没有关联的用户。INSTRUMENTED
并且HISTORY
是YES
在默认情况下并setup_actors
没有意见。
初始setup_actors
内容如下所示:
mysql>SELECT *FROM performance_schema.setup_actors; +------ +------ +------ +--------- +--------- + | HOST | USER | ROLE | ENABLED | HISTORY | +------ +------ +------ +--------- +--------- + | % | % | % | YES | YES | +------ +------ +------ +--------- +--------- +
在HOST
与USER
列应包含文本的主机或用户名,或'%'
以匹配任何名称。
的ENABLED
和HISTORY
列表示是否使能仪器和历史事件记录进行匹配螺纹,受试者先前所描述的其他条件。
当Performance Schema为中的每个新前景线程检查匹配项时setup_actors
,它将尝试使用USER
和HOST
列(ROLE
未使用)首先查找更具体的匹配项:
- 与和排。
USER='literal'
HOST='literal'
- 与和排。
USER='literal'
HOST='%'
- 与
USER='%'
和排。HOST='literal'
- 与
USER='%'
和排HOST='%'
。
匹配发生的顺序很重要,因为不同的匹配setup_actors
行可以具有不同的USER
和HOST
值。这样,可以根据ENABLED
和HISTORY
列的值,选择性地对每个主机,用户或帐户(用户和主机组合)应用检测和历史事件日志记录:
- 当最匹配的行是时
ENABLED=YES
,INSTRUMENTED
线程的值变为YES
。当最匹配的行是时HISTORY=YES
,HISTORY
线程的值变为YES
。 - 当最匹配的行是时
ENABLED=NO
,INSTRUMENTED
线程的值变为NO
。当最匹配的行是时HISTORY=NO
,HISTORY
线程的值变为NO
。 - 如果找不到匹配项,则线程的
INSTRUMENTED
和HISTORY
值变为NO
。
行中的ENABLED
和HISTORY
列setup_actors
可以设置为彼此YES
或NO
独立。这意味着您可以独立于是否收集历史事件来启用检测。
默认情况下,监测和历史事件收集所有新的前景线程启用,因为setup_actors
表最初包含有一排'%'
两个HOST
和USER
。要执行更有限的匹配,例如仅启用对某些前台线程的监视,必须更改此行,因为它匹配任何连接,并为更特定的HOST
/USER
组合添加行。
假设您setup_actors
进行如下修改:
UPDATE performance_schema.setup_actorsSET ENABLED = 'NO',HISTORY = 'NO'WHERE HOST = '%' ANDUSER = '%';INSERT INTO performance_schema.setup_actors (HOST ,USER ,ROLE ,ENABLED,HISTORY )VALUES ('localhost','joe','%','YES','YES');INSERT INTO performance_schema.setup_actors (HOST ,USER ,ROLE ,ENABLED,HISTORY )VALUES ('hosta.example.com','joe','%','YES','NO');INSERT INTO performance_schema.setup_actors (HOST ,USER ,ROLE ,ENABLED,HISTORY )VALUES ('%','sam','%','NO','YES');
该UPDATE
语句更改默认匹配以禁用检测和历史事件收集。该INSERT
语句进行更具体的比赛添加行。
现在,性能架构确定如何如下设置新连接线程的INSTRUMENTED
和HISTORY
值:
- 如果
joe
从本地主机进行连接,则该连接与插入的第一行匹配。线程的INSTRUMENTED
和HISTORY
值变为YES
。 - 如果
joe
从连接hosta.example.com
,则连接匹配插入的第二行。在INSTRUMENTED
该线程值变为YES
和HISTORY
值变为NO
。 - 如果
joe
从任何其他主机连接,则没有匹配项。线程的INSTRUMENTED
和HISTORY
值变为NO
。 - 如果
sam
从任何主机进行连接,则该连接与插入的第三行匹配。在INSTRUMENTED
该线程值变为NO
和HISTORY
值变为YES
。 - 对于任何其他连接,带有
HOST
和USER
设置为'%'
match 的行。该行现在具有ENABLED
并HISTORY
设置为NO
,因此该线程的INSTRUMENTED
和HISTORY
值变为NO
。
对setup_actors
表的修改仅影响在修改之后创建的前台线程,而不影响现有线程。要影响现有线程,请修改表行的INSTRUMENTED
和HISTORY
列threads
。