通过线程进行预过滤
该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。
