• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 通过线程进行预过滤

    该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_actors
    SET ENABLED = 'NO', HISTORY = 'NO'
    WHERE HOST = '%' AND USER = '%';
    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。