Skip to content

ps_is_thread_instrumented()

xiaoboluo768 edited this page Jun 9, 2020 · 2 revisions
  • 在threads表中检查指定线程是否启用了监控功能,给定参数值对应threads表中的PROCESSLIST_ID列或SHOW PROCESSLIST输出的Id列值

    • 如果给定连接ID值在threads表中未查询到,则返回UNKNOWN值,如果给定ID值为NULL则返回NULL
  • 参数:

    • in_connection_id BIGINT UNSIGNED:连接ID。对应performance_schema.threads表中的PROCESSLIST_ID列值或SHOW PROCESSLIST输出的Id列值
  • 返回值:一个ENUM('YES','NO','UNKNOWN')值

  • 定义语句

DROP FUNCTION IF EXISTS ps_is_thread_instrumented;

DELIMITER $$

CREATE DEFINER='root'@'localhost' FUNCTION ps_is_thread_instrumented (
        in_connection_id BIGINT UNSIGNED
    ) RETURNS ENUM('YES', 'NO', 'UNKNOWN')
    COMMENT '
            Description
            -----------

            Checks whether the provided connection id is instrumented within Performance Schema.

            Parameters
            -----------

            in_connection_id (BIGINT UNSIGNED):
              The id of the connection to check.

            Returns
            -----------

            ENUM(\'YES\', \'NO\', \'UNKNOWN\')

            Example
            -----------

            mysql> SELECT sys.ps_is_thread_instrumented(CONNECTION_ID());
            +------------------------------------------------+
            | sys.ps_is_thread_instrumented(CONNECTION_ID()) |
            +------------------------------------------------+
            | YES                                            |
            +------------------------------------------------+
            '

    SQL SECURITY INVOKER
    NOT DETERMINISTIC
    READS SQL DATA
BEGIN
    DECLARE v_enabled ENUM('YES', 'NO', 'UNKNOWN');

    IF (in_connection_id IS NULL) THEN
        RETURN NULL;
    END IF;

    SELECT INSTRUMENTED INTO v_enabled
      FROM performance_schema.threads
    WHERE PROCESSLIST_ID = in_connection_id;

    IF (v_enabled IS NULL) THEN
        RETURN 'UNKNOWN';
    ELSE
        RETURN v_enabled;
    END IF;
END$$

DELIMITER ;

上一篇: ps_is_instrument_default_timed()函数 | 下一篇: ps_thread_account()函数

Clone this wiki locally