|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'version_patch' AND `proc`.`type` = 'FUNCTION'
|
sys |
version_patch |
FUNCTION |
version_patch |
SQL |
NO_SQL |
NO |
INVOKER |
|
tinyint(3) unsigned
|
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', -1);
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Returns the... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', -1);
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'version_minor' AND `proc`.`type` = 'FUNCTION'
|
sys |
version_minor |
FUNCTION |
version_minor |
SQL |
NO_SQL |
NO |
INVOKER |
|
tinyint(3) unsigned
|
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 2), '.', -1);
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Returns the... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 2), '.', -1);
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'version_major' AND `proc`.`type` = 'FUNCTION'
|
sys |
version_major |
FUNCTION |
version_major |
SQL |
NO_SQL |
NO |
INVOKER |
|
tinyint(3) unsigned
|
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 1);
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Returns the... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 1);
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'table_exists' AND `proc`.`type` = 'PROCEDURE'
|
sys |
table_exists |
PROCEDURE |
table_exists |
SQL |
CONTAINS_SQL |
NO |
INVOKER |
IN in_db VARCHAR(64), IN in_table VARCHAR(64),
OUT out_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY', 'SEQUENCE', 'SYSTEM VIEW')
|
|
BEGIN
DECLARE v_error BOOLEAN DEFAULT FALSE;
DECLARE db_quoted VARCHAR(64);
DECLARE table_quoted VARCHAR(64);
DECLARE v_table_type VARCHAR(16) DEFAULT '';
DECLARE v_system_db BOOLEAN
DEFAULT LOWER(in_db) IN ('information_schema', 'performance_schema');
DECLARE CONTINUE HANDLER FOR 1050 SET v_error = TRUE;
DECLARE CONTINUE HANDLER FOR 1146 SET v_error = TRUE;
SET out_exists = '';
SET db_quoted = sys.quote_identifier(in_db);
SET table_quoted = sys.quote_identifier(in_table);
IF (EXISTS(SELECT 1 FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table)) THEN
IF v_system_db = FALSE THEN
SET @sys.tmp.table_exists.SQL = CONCAT('CREATE TEMPORARY TABLE ',
db_quoted,
'.',
table_quoted,
'(id INT PRIMARY KEY)');
PREPARE stmt_create_table FROM @sys.tmp.table_exists.SQL;
EXECUTE stmt_create_table;
DEALLOCATE PREPARE stmt_create_table;
SET @sys.tmp.table_exists.SQL = CONCAT('DROP TEMPORARY TABLE ',
db_quoted,
'.',
table_quoted);
PREPARE stmt_drop_table FROM @sys.tmp.table_exists.SQL;
EXECUTE stmt_drop_table;
DEALLOCATE PREPARE stmt_drop_table;
END IF;
IF (v_error) THEN
SET out_exists = 'TEMPORARY';
ELSE
SET v_table_type = (SELECT TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table);
IF v_table_type = 'SYSTEM VERSIONED' THEN
SET out_exists = 'BASE TABLE';
ELSE
SET out_exists = v_table_type;
END IF;
END IF;
ELSE
IF v_system_db = FALSE THEN
SET @sys.tmp.table_exists.SQL = CONCAT('SELECT COUNT(*) FROM ',
db_quoted,
'.',
table_quoted);
PREPARE stmt_select FROM @sys.tmp.table_exists.SQL;
IF (NOT v_error) THEN
DEALLOCATE PREPARE stmt_select;
SET out_exists = 'TEMPORARY';
END IF;
END IF;
END IF;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Tests wheth... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_error BOOLEAN DEFAULT FALSE;
DECLARE db_quoted VARCHAR(64);
DECLARE table_quoted VARCHAR(64);
DECLARE v_table_type VARCHAR(16) DEFAULT '';
DECLARE v_system_db BOOLEAN
DEFAULT LOWER(in_db) IN ('information_schema', 'performance_schema');
DECLARE CONTINUE HANDLER FOR 1050 SET v_error = TRUE;
DECLARE CONTINUE HANDLER FOR 1146 SET v_error = TRUE;
SET out_exists = '';
SET db_quoted = sys.quote_identifier(in_db);
SET table_quoted = sys.quote_identifier(in_table);
IF (EXISTS(SELECT 1 FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table)) THEN
IF v_system_db = FALSE THEN
SET @sys.tmp.table_exists.SQL = CONCAT('CREATE TEMPORARY TABLE ',
db_quoted,
'.',
table_quoted,
'(id INT PRIMARY KEY)');
PREPARE stmt_create_table FROM @sys.tmp.table_exists.SQL;
EXECUTE stmt_create_table;
DEALLOCATE PREPARE stmt_create_table;
SET @sys.tmp.table_exists.SQL = CONCAT('DROP TEMPORARY TABLE ',
db_quoted,
'.',
table_quoted);
PREPARE stmt_drop_table FROM @sys.tmp.table_exists.SQL;
EXECUTE stmt_drop_table;
DEALLOCATE PREPARE stmt_drop_table;
END IF;
IF (v_error) THEN
SET out_exists = 'TEMPORARY';
ELSE
SET v_table_type = (SELECT TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table);
IF v_table_type = 'SYSTEM VERSIONED' THEN
SET out_exists = 'BASE TABLE';
ELSE
SET out_exists = v_table_type;
END IF;
END IF;
ELSE
IF v_system_db = FALSE THEN
SET @sys.tmp.table_exists.SQL = CONCAT('SELECT COUNT(*) FROM ',
db_quoted,
'.',
table_quoted);
PREPARE stmt_select FROM @sys.tmp.table_exists.SQL;
IF (NOT v_error) THEN
DEALLOCATE PREPARE stmt_select;
SET out_exists = 'TEMPORARY';
END IF;
END IF;
END IF;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'sys_get_config' AND `proc`.`type` = 'FUNCTION'
|
sys |
sys_get_config |
FUNCTION |
sys_get_config |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
in_variable_name VARCHAR(128),
in_default_value VARCHAR(128)
|
varchar(128) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
BEGIN
DECLARE v_value VARCHAR(128) DEFAULT NULL;
DECLARE old_val INTEGER DEFAULT NULL;
SET v_value = (SELECT value FROM sys.sys_config WHERE variable = in_variable_name);
IF (v_value IS NULL) THEN
SET v_value = in_default_value;
END IF;
RETURN v_value;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Returns the... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_value VARCHAR(128) DEFAULT NULL;
DECLARE old_val INTEGER DEFAULT NULL;
SET v_value = (SELECT value FROM sys.sys_config WHERE variable = in_variable_name);
IF (v_value IS NULL) THEN
SET v_value = in_default_value;
END IF;
RETURN v_value;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'statement_performance_analyzer' AND `proc`.`type` = 'PROCEDURE'
|
sys |
statement_performance_analyzer |
PROCEDURE |
statement_performance_analyzer |
SQL |
CONTAINS_SQL |
NO |
INVOKER |
IN in_action ENUM('snapshot', 'overall', 'delta', 'create_table', 'create_tmp', 'save', 'cleanup'),
IN in_table VARCHAR(129),
IN in_views SET ('with_runtimes_in_95th_percentile', 'analysis', 'with_errors_or_warnings', 'with_full_table_scans', 'with_sorting', 'with_temp_tables', 'custom')
|
|
BEGIN
DECLARE v_table_exists, v_tmp_digests_table_exists, v_custom_view_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY') DEFAULT '';
DECLARE v_this_thread_enabled ENUM('YES', 'NO');
DECLARE v_force_new_snapshot BOOLEAN DEFAULT FALSE;
DECLARE v_digests_table VARCHAR(133);
DECLARE v_quoted_table, v_quoted_custom_view VARCHAR(133) DEFAULT '';
DECLARE v_table_db, v_table_name, v_custom_db, v_custom_name VARCHAR(64);
DECLARE v_digest_table_template, v_checksum_ref, v_checksum_table text;
DECLARE v_sql longtext;
DECLARE v_error_msg VARCHAR(128);
SELECT INSTRUMENTED INTO v_this_thread_enabled FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
IF (v_this_thread_enabled = 'YES') THEN
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
END IF;
SET @log_bin := @@sql_log_bin;
IF (@log_bin = 1) THEN
SET sql_log_bin = 0;
END IF;
IF (@sys.statement_performance_analyzer.limit IS NULL) THEN
SET @sys.statement_performance_analyzer.limit = sys.sys_get_config('statement_performance_analyzer.limit', '100');
END IF;
IF (@sys.debug IS NULL) THEN
SET @sys.debug = sys.sys_get_config('debug' , 'OFF');
END IF;
IF (in_table = 'NOW()') THEN
SET v_force_new_snapshot = TRUE,
in_table = NULL;
ELSEIF (in_table IS NOT NULL) THEN
IF (NOT INSTR(in_table, '.')) THEN
SET v_table_db = DATABASE(),
v_table_name = in_table;
ELSE
SET v_table_db = SUBSTRING_INDEX(in_table, '.', 1);
SET v_table_name = SUBSTRING(in_table, CHAR_LENGTH(v_table_db)+2);
END IF;
SET v_quoted_table = CONCAT('`', v_table_db, '`.`', v_table_name, '`');
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('in_table is: db = ''', v_table_db, ''', table = ''', v_table_name, '''') AS 'Debug';
END IF;
IF (v_table_db = DATABASE() AND (v_table_name = 'tmp_digests' OR v_table_name = 'tmp_digests_delta')) THEN
SET v_error_msg = CONCAT('Invalid value for in_table: ', v_quoted_table, ' is reserved table name.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
CALL sys.table_exists(v_table_db, v_table_name, v_table_exists);
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('v_table_exists = ', v_table_exists) AS 'Debug';
END IF;
IF (v_table_exists = 'BASE TABLE') THEN
SET v_checksum_ref = (
SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'events_statements_summary_by_digest'
),
v_checksum_table = (
SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_table_db AND TABLE_NAME = v_table_name
);
IF (v_checksum_ref <> v_checksum_table) THEN
SET v_error_msg = CONCAT('The table ',
IF(CHAR_LENGTH(v_quoted_table) > 93, CONCAT('...', SUBSTRING(v_quoted_table, -90)), v_quoted_table),
' has the wrong definition.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
END IF;
END IF;
IF (in_views IS NULL OR in_views = '') THEN
SET in_views = 'with_runtimes_in_95th_percentile,analysis,with_errors_or_warnings,with_full_table_scans,with_sorting,with_temp_tables';
END IF;
CALL sys.table_exists(DATABASE(), 'tmp_digests', v_tmp_digests_table_exists);
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('v_tmp_digests_table_exists = ', v_tmp_digests_table_exists) AS 'Debug';
END IF;
CASE
WHEN in_action IN ('snapshot', 'overall') THEN
IF (in_table IS NOT NULL) THEN
IF (NOT v_table_exists IN ('TEMPORARY', 'BASE TABLE')) THEN
SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be NULL, NOW() or specify an existing table.',
' The table ',
IF(CHAR_LENGTH(v_quoted_table) > 16, CONCAT('...', SUBSTRING(v_quoted_table, -13)), v_quoted_table),
' does not exist.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
END IF;
WHEN in_action IN ('delta', 'save') THEN
IF (v_table_exists NOT IN ('TEMPORARY', 'BASE TABLE')) THEN
SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be an existing table.',
IF(in_table IS NOT NULL, CONCAT(' The table ',
IF(CHAR_LENGTH(v_quoted_table) > 39, CONCAT('...', SUBSTRING(v_quoted_table, -36)), v_quoted_table),
' does not exist.'), ''));
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
IF (in_action = 'delta' AND v_tmp_digests_table_exists <> 'TEMPORARY') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'An existing snapshot generated with the statement_performance_analyzer() must exist.';
END IF;
WHEN in_action = 'create_tmp' THEN
IF (v_table_exists = 'TEMPORARY') THEN
SET v_error_msg = CONCAT('Cannot create the table ',
IF(CHAR_LENGTH(v_quoted_table) > 72, CONCAT('...', SUBSTRING(v_quoted_table, -69)), v_quoted_table),
' as it already exists.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
WHEN in_action = 'create_table' THEN
IF (v_table_exists <> '') THEN
SET v_error_msg = CONCAT('Cannot create the table ',
IF(CHAR_LENGTH(v_quoted_table) > 52, CONCAT('...', SUBSTRING(v_quoted_table, -49)), v_quoted_table),
' as it already exists',
IF(v_table_exists = 'TEMPORARY', ' as a temporary table.', '.'));
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
WHEN in_action = 'cleanup' THEN
DO (SELECT 1);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unknown action. Supported actions are: cleanup, create_table, create_tmp, delta, overall, save, snapshot';
END CASE;
SET v_digest_table_template = 'CREATE %{TEMPORARY}TABLE %{TABLE_NAME} (
`SCHEMA_NAME` varchar(64) DEFAULT NULL,
`DIGEST` varchar(32) DEFAULT NULL,
`DIGEST_TEXT` longtext,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`SUM_LOCK_TIME` bigint(20) unsigned NOT NULL,
`SUM_ERRORS` bigint(20) unsigned NOT NULL,
`SUM_WARNINGS` bigint(20) unsigned NOT NULL,
`SUM_ROWS_AFFECTED` bigint(20) unsigned NOT NULL,
`SUM_ROWS_SENT` bigint(20) unsigned NOT NULL,
`SUM_ROWS_EXAMINED` bigint(20) unsigned NOT NULL,
`SUM_CREATED_TMP_DISK_TABLES` bigint(20) unsigned NOT NULL,
`SUM_CREATED_TMP_TABLES` bigint(20) unsigned NOT NULL,
`SUM_SELECT_FULL_JOIN` bigint(20) unsigned NOT NULL,
`SUM_SELECT_FULL_RANGE_JOIN` bigint(20) unsigned NOT NULL,
`SUM_SELECT_RANGE` bigint(20) unsigned NOT NULL,
`SUM_SELECT_RANGE_CHECK` bigint(20) unsigned NOT NULL,
`SUM_SELECT_SCAN` bigint(20) unsigned NOT NULL,
`SUM_SORT_MERGE_PASSES` bigint(20) unsigned NOT NULL,
`SUM_SORT_RANGE` bigint(20) unsigned NOT NULL,
`SUM_SORT_ROWS` bigint(20) unsigned NOT NULL,
`SUM_SORT_SCAN` bigint(20) unsigned NOT NULL,
`SUM_NO_INDEX_USED` bigint(20) unsigned NOT NULL,
`SUM_NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL,
`FIRST_SEEN` timestamp NULL DEFAULT NULL,
`LAST_SEEN` timestamp NULL DEFAULT NULL,
INDEX (SCHEMA_NAME, DIGEST)
) DEFAULT CHARSET=utf8';
IF (v_force_new_snapshot
OR in_action = 'snapshot'
OR (in_action = 'overall' AND in_table IS NULL)
OR (in_action = 'save' AND v_tmp_digests_table_exists <> 'TEMPORARY')
) THEN
IF (v_tmp_digests_table_exists = 'TEMPORARY') THEN
IF (@sys.debug = 'ON') THEN
SELECT 'DROP TEMPORARY TABLE IF EXISTS tmp_digests' AS 'Debug';
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_digests;
END IF;
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', 'tmp_digests'));
SET v_sql = CONCAT('INSERT INTO tmp_digests SELECT * FROM ',
IF(in_table IS NULL OR in_action = 'save', 'performance_schema.events_statements_summary_by_digest', v_quoted_table));
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (in_action IN ('create_table', 'create_tmp')) THEN
IF (in_action = 'create_table') THEN
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', ''), '%{TABLE_NAME}', v_quoted_table));
ELSE
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', v_quoted_table));
END IF;
ELSEIF (in_action = 'save') THEN
CALL sys.execute_prepared_stmt(CONCAT('DELETE FROM ', v_quoted_table));
CALL sys.execute_prepared_stmt(CONCAT('INSERT INTO ', v_quoted_table, ' SELECT * FROM tmp_digests'));
ELSEIF (in_action = 'cleanup') THEN
DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests;
DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests_delta;
ELSEIF (in_action IN ('overall', 'delta')) THEN
IF (in_action = 'overall') THEN
IF (in_table IS NULL) THEN
SET v_digests_table = 'tmp_digests';
ELSE
SET v_digests_table = v_quoted_table;
END IF;
ELSE
SET v_digests_table = 'tmp_digests_delta';
DROP TEMPORARY TABLE IF EXISTS tmp_digests_delta;
CREATE TEMPORARY TABLE tmp_digests_delta LIKE tmp_digests;
SET v_sql = CONCAT('INSERT INTO tmp_digests_delta
SELECT `d_end`.`SCHEMA_NAME`,
`d_end`.`DIGEST`,
`d_end`.`DIGEST_TEXT`,
`d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) AS ''COUNT_STAR'',
`d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0) AS ''SUM_TIMER_WAIT'',
`d_end`.`MIN_TIMER_WAIT` AS ''MIN_TIMER_WAIT'',
IFNULL((`d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0))/NULLIF(`d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0), 0), 0) AS ''AVG_TIMER_WAIT'',
`d_end`.`MAX_TIMER_WAIT` AS ''MAX_TIMER_WAIT'',
`d_end`.`SUM_LOCK_TIME`-IFNULL(`d_start`.`SUM_LOCK_TIME`, 0) AS ''SUM_LOCK_TIME'',
`d_end`.`SUM_ERRORS`-IFNULL(`d_start`.`SUM_ERRORS`, 0) AS ''SUM_ERRORS'',
`d_end`.`SUM_WARNINGS`-IFNULL(`d_start`.`SUM_WARNINGS`, 0) AS ''SUM_WARNINGS'',
`d_end`.`SUM_ROWS_AFFECTED`-IFNULL(`d_start`.`SUM_ROWS_AFFECTED`, 0) AS ''SUM_ROWS_AFFECTED'',
`d_end`.`SUM_ROWS_SENT`-IFNULL(`d_start`.`SUM_ROWS_SENT`, 0) AS ''SUM_ROWS_SENT'',
`d_end`.`SUM_ROWS_EXAMINED`-IFNULL(`d_start`.`SUM_ROWS_EXAMINED`, 0) AS ''SUM_ROWS_EXAMINED'',
`d_end`.`SUM_CREATED_TMP_DISK_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_DISK_TABLES`, 0) AS ''SUM_CREATED_TMP_DISK_TABLES'',
`d_end`.`SUM_CREATED_TMP_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_TABLES`, 0) AS ''SUM_CREATED_TMP_TABLES'',
`d_end`.`SUM_SELECT_FULL_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_JOIN`, 0) AS ''SUM_SELECT_FULL_JOIN'',
`d_end`.`SUM_SELECT_FULL_RANGE_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_RANGE_JOIN`, 0) AS ''SUM_SELECT_FULL_RANGE_JOIN'',
`d_end`.`SUM_SELECT_RANGE`-IFNULL(`d_start`.`SUM_SELECT_RANGE`, 0) AS ''SUM_SELECT_RANGE'',
`d_end`.`SUM_SELECT_RANGE_CHECK`-IFNULL(`d_start`.`SUM_SELECT_RANGE_CHECK`, 0) AS ''SUM_SELECT_RANGE_CHECK'',
`d_end`.`SUM_SELECT_SCAN`-IFNULL(`d_start`.`SUM_SELECT_SCAN`, 0) AS ''SUM_SELECT_SCAN'',
`d_end`.`SUM_SORT_MERGE_PASSES`-IFNULL(`d_start`.`SUM_SORT_MERGE_PASSES`, 0) AS ''SUM_SORT_MERGE_PASSES'',
`d_end`.`SUM_SORT_RANGE`-IFNULL(`d_start`.`SUM_SORT_RANGE`, 0) AS ''SUM_SORT_RANGE'',
`d_end`.`SUM_SORT_ROWS`-IFNULL(`d_start`.`SUM_SORT_ROWS`, 0) AS ''SUM_SORT_ROWS'',
`d_end`.`SUM_SORT_SCAN`-IFNULL(`d_start`.`SUM_SORT_SCAN`, 0) AS ''SUM_SORT_SCAN'',
`d_end`.`SUM_NO_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_INDEX_USED`, 0) AS ''SUM_NO_INDEX_USED'',
`d_end`.`SUM_NO_GOOD_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_GOOD_INDEX_USED`, 0) AS ''SUM_NO_GOOD_INDEX_USED'',
`d_end`.`FIRST_SEEN`,
`d_end`.`LAST_SEEN`
FROM tmp_digests d_end
LEFT OUTER JOIN ', v_quoted_table, ' d_start ON `d_start`.`DIGEST` = `d_end`.`DIGEST`
AND (`d_start`.`SCHEMA_NAME` = `d_end`.`SCHEMA_NAME`
OR (`d_start`.`SCHEMA_NAME` IS NULL AND `d_end`.`SCHEMA_NAME` IS NULL)
)
WHERE `d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) > 0');
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_runtimes_in_95th_percentile', in_views)) THEN
SELECT 'Queries with Runtime in 95th Percentile' AS 'Next Output';
DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution1;
DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution2;
DROP TEMPORARY TABLE IF EXISTS tmp_digest_95th_percentile_by_avg_us;
CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution1 (
cnt bigint unsigned NOT NULL,
avg_us decimal(21,0) NOT NULL,
PRIMARY KEY (avg_us)
) ENGINE=InnoDB;
SET v_sql = CONCAT('INSERT INTO tmp_digest_avg_latency_distribution1
SELECT COUNT(*) cnt,
ROUND(avg_timer_wait/1000000) AS avg_us
FROM ', v_digests_table, '
GROUP BY avg_us');
CALL sys.execute_prepared_stmt(v_sql);
CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution2 LIKE tmp_digest_avg_latency_distribution1;
INSERT INTO tmp_digest_avg_latency_distribution2 SELECT * FROM tmp_digest_avg_latency_distribution1;
CREATE TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us (
avg_us decimal(21,0) NOT NULL,
percentile decimal(46,4) NOT NULL,
PRIMARY KEY (avg_us)
) ENGINE=InnoDB;
SET v_sql = CONCAT('INSERT INTO tmp_digest_95th_percentile_by_avg_us
SELECT s2.avg_us avg_us,
IFNULL(SUM(s1.cnt)/NULLIF((SELECT COUNT(*) FROM ', v_digests_table, '), 0), 0) percentile
FROM tmp_digest_avg_latency_distribution1 AS s1
JOIN tmp_digest_avg_latency_distribution2 AS s2 ON s1.avg_us <= s2.avg_us
GROUP BY s2.avg_us
HAVING percentile > 0.95
ORDER BY percentile
LIMIT 1');
CALL sys.execute_prepared_stmt(v_sql);
SET v_sql =
REPLACE(
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_runtimes_in_95th_percentile'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
),
'sys.x$ps_digest_95th_percentile_by_avg_us',
'`sys`.`x$ps_digest_95th_percentile_by_avg_us`'
);
CALL sys.execute_prepared_stmt(v_sql);
DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution1;
DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution2;
DROP TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us;
END IF;
IF (FIND_IN_SET('analysis', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Ordered by Total Latency') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statement_analysis'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_errors_or_warnings', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Errors') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_errors_or_warnings'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_full_table_scans', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Full Table Scan') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_full_table_scans'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_sorting', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Sorting') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_sorting'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_temp_tables', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Internal Temporary Tables') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_temp_tables'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('custom', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Using Custom View') AS 'Next Output';
IF (@sys.statement_performance_analyzer.view IS NULL) THEN
SET @sys.statement_performance_analyzer.view = sys.sys_get_config('statement_performance_analyzer.view', NULL);
END IF;
IF (@sys.statement_performance_analyzer.view IS NULL) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable must be set with the view or query to use.';
END IF;
IF (NOT INSTR(@sys.statement_performance_analyzer.view, ' ')) THEN
IF (NOT INSTR(@sys.statement_performance_analyzer.view, '.')) THEN
SET v_custom_db = DATABASE(),
v_custom_name = @sys.statement_performance_analyzer.view;
ELSE
SET v_custom_db = SUBSTRING_INDEX(@sys.statement_performance_analyzer.view, '.', 1);
SET v_custom_name = SUBSTRING(@sys.statement_performance_analyzer.view, CHAR_LENGTH(v_custom_db)+2);
END IF;
CALL sys.table_exists(v_custom_db, v_custom_name, v_custom_view_exists);
IF (v_custom_view_exists <> 'VIEW') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable is set but specified neither an existing view nor a query.';
END IF;
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = v_custom_db AND TABLE_NAME = v_custom_name
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
ELSE
SET v_sql = REPLACE(@sys.statement_performance_analyzer.view, '`performance_schema`.`events_statements_summary_by_digest`', v_digests_table);
END IF;
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
END IF;
IF (v_this_thread_enabled = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
IF (@log_bin = 1) THEN
SET sql_log_bin = @log_bin;
END IF;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Create a re... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_table_exists, v_tmp_digests_table_exists, v_custom_view_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY') DEFAULT '';
DECLARE v_this_thread_enabled ENUM('YES', 'NO');
DECLARE v_force_new_snapshot BOOLEAN DEFAULT FALSE;
DECLARE v_digests_table VARCHAR(133);
DECLARE v_quoted_table, v_quoted_custom_view VARCHAR(133) DEFAULT '';
DECLARE v_table_db, v_table_name, v_custom_db, v_custom_name VARCHAR(64);
DECLARE v_digest_table_template, v_checksum_ref, v_checksum_table text;
DECLARE v_sql longtext;
DECLARE v_error_msg VARCHAR(128);
SELECT INSTRUMENTED INTO v_this_thread_enabled FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
IF (v_this_thread_enabled = 'YES') THEN
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
END IF;
SET @log_bin := @@sql_log_bin;
IF (@log_bin = 1) THEN
SET sql_log_bin = 0;
END IF;
IF (@sys.statement_performance_analyzer.limit IS NULL) THEN
SET @sys.statement_performance_analyzer.limit = sys.sys_get_config('statement_performance_analyzer.limit', '100');
END IF;
IF (@sys.debug IS NULL) THEN
SET @sys.debug = sys.sys_get_config('debug' , 'OFF');
END IF;
IF (in_table = 'NOW()') THEN
SET v_force_new_snapshot = TRUE,
in_table = NULL;
ELSEIF (in_table IS NOT NULL) THEN
IF (NOT INSTR(in_table, '.')) THEN
SET v_table_db = DATABASE(),
v_table_name = in_table;
ELSE
SET v_table_db = SUBSTRING_INDEX(in_table, '.', 1);
SET v_table_name = SUBSTRING(in_table, CHAR_LENGTH(v_table_db)+2);
END IF;
SET v_quoted_table = CONCAT('`', v_table_db, '`.`', v_table_name, '`');
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('in_table is: db = ''', v_table_db, ''', table = ''', v_table_name, '''') AS 'Debug';
END IF;
IF (v_table_db = DATABASE() AND (v_table_name = 'tmp_digests' OR v_table_name = 'tmp_digests_delta')) THEN
SET v_error_msg = CONCAT('Invalid value for in_table: ', v_quoted_table, ' is reserved table name.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
CALL sys.table_exists(v_table_db, v_table_name, v_table_exists);
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('v_table_exists = ', v_table_exists) AS 'Debug';
END IF;
IF (v_table_exists = 'BASE TABLE') THEN
SET v_checksum_ref = (
SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'events_statements_summary_by_digest'
),
v_checksum_table = (
SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_table_db AND TABLE_NAME = v_table_name
);
IF (v_checksum_ref <> v_checksum_table) THEN
SET v_error_msg = CONCAT('The table ',
IF(CHAR_LENGTH(v_quoted_table) > 93, CONCAT('...', SUBSTRING(v_quoted_table, -90)), v_quoted_table),
' has the wrong definition.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
END IF;
END IF;
IF (in_views IS NULL OR in_views = '') THEN
SET in_views = 'with_runtimes_in_95th_percentile,analysis,with_errors_or_warnings,with_full_table_scans,with_sorting,with_temp_tables';
END IF;
CALL sys.table_exists(DATABASE(), 'tmp_digests', v_tmp_digests_table_exists);
IF (@sys.debug = 'ON') THEN
SELECT CONCAT('v_tmp_digests_table_exists = ', v_tmp_digests_table_exists) AS 'Debug';
END IF;
CASE
WHEN in_action IN ('snapshot', 'overall') THEN
IF (in_table IS NOT NULL) THEN
IF (NOT v_table_exists IN ('TEMPORARY', 'BASE TABLE')) THEN
SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be NULL, NOW() or specify an existing table.',
' The table ',
IF(CHAR_LENGTH(v_quoted_table) > 16, CONCAT('...', SUBSTRING(v_quoted_table, -13)), v_quoted_table),
' does not exist.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
END IF;
WHEN in_action IN ('delta', 'save') THEN
IF (v_table_exists NOT IN ('TEMPORARY', 'BASE TABLE')) THEN
SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be an existing table.',
IF(in_table IS NOT NULL, CONCAT(' The table ',
IF(CHAR_LENGTH(v_quoted_table) > 39, CONCAT('...', SUBSTRING(v_quoted_table, -36)), v_quoted_table),
' does not exist.'), ''));
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
IF (in_action = 'delta' AND v_tmp_digests_table_exists <> 'TEMPORARY') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'An existing snapshot generated with the statement_performance_analyzer() must exist.';
END IF;
WHEN in_action = 'create_tmp' THEN
IF (v_table_exists = 'TEMPORARY') THEN
SET v_error_msg = CONCAT('Cannot create the table ',
IF(CHAR_LENGTH(v_quoted_table) > 72, CONCAT('...', SUBSTRING(v_quoted_table, -69)), v_quoted_table),
' as it already exists.');
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
WHEN in_action = 'create_table' THEN
IF (v_table_exists <> '') THEN
SET v_error_msg = CONCAT('Cannot create the table ',
IF(CHAR_LENGTH(v_quoted_table) > 52, CONCAT('...', SUBSTRING(v_quoted_table, -49)), v_quoted_table),
' as it already exists',
IF(v_table_exists = 'TEMPORARY', ' as a temporary table.', '.'));
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = v_error_msg;
END IF;
WHEN in_action = 'cleanup' THEN
DO (SELECT 1);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unknown action. Supported actions are: cleanup, create_table, create_tmp, delta, overall, save, snapshot';
END CASE;
SET v_digest_table_template = 'CREATE %{TEMPORARY}TABLE %{TABLE_NAME} (\n `SCHEMA_NAME` varchar(64) DEFAULT NULL,\n `DIGEST` varchar(32) DEFAULT NULL,\n `DIGEST_TEXT` longtext,\n `COUNT_STAR` bigint(20) unsigned NOT NULL,\n `SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,\n `MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,\n `AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,\n `MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL,\n `SUM_LOCK_TIME` bigint(20) unsigned NOT NULL,\n `SUM_ERRORS` bigint(20) unsigned NOT NULL,\n `SUM_WARNINGS` bigint(20) unsigned NOT NULL,\n `SUM_ROWS_AFFECTED` bigint(20) unsigned NOT NULL,\n `SUM_ROWS_SENT` bigint(20) unsigned NOT NULL,\n `SUM_ROWS_EXAMINED` bigint(20) unsigned NOT NULL,\n `SUM_CREATED_TMP_DISK_TABLES` bigint(20) unsigned NOT NULL,\n `SUM_CREATED_TMP_TABLES` bigint(20) unsigned NOT NULL,\n `SUM_SELECT_FULL_JOIN` bigint(20) unsigned NOT NULL,\n `SUM_SELECT_FULL_RANGE_JOIN` bigint(20) unsigned NOT NULL,\n `SUM_SELECT_RANGE` bigint(20) unsigned NOT NULL,\n `SUM_SELECT_RANGE_CHECK` bigint(20) unsigned NOT NULL,\n `SUM_SELECT_SCAN` bigint(20) unsigned NOT NULL,\n `SUM_SORT_MERGE_PASSES` bigint(20) unsigned NOT NULL,\n `SUM_SORT_RANGE` bigint(20) unsigned NOT NULL,\n `SUM_SORT_ROWS` bigint(20) unsigned NOT NULL,\n `SUM_SORT_SCAN` bigint(20) unsigned NOT NULL,\n `SUM_NO_INDEX_USED` bigint(20) unsigned NOT NULL,\n `SUM_NO_GOOD_INDEX_USED` bigint(20) unsigned NOT NULL,\n `FIRST_SEEN` timestamp NULL DEFAULT NULL,\n `LAST_SEEN` timestamp NULL DEFAULT NULL,\n INDEX (SCHEMA_NAME, DIGEST)\n) DEFAULT CHARSET=utf8';
IF (v_force_new_snapshot
OR in_action = 'snapshot'
OR (in_action = 'overall' AND in_table IS NULL)
OR (in_action = 'save' AND v_tmp_digests_table_exists <> 'TEMPORARY')
) THEN
IF (v_tmp_digests_table_exists = 'TEMPORARY') THEN
IF (@sys.debug = 'ON') THEN
SELECT 'DROP TEMPORARY TABLE IF EXISTS tmp_digests' AS 'Debug';
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_digests;
END IF;
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', 'tmp_digests'));
SET v_sql = CONCAT('INSERT INTO tmp_digests SELECT * FROM ',
IF(in_table IS NULL OR in_action = 'save', 'performance_schema.events_statements_summary_by_digest', v_quoted_table));
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (in_action IN ('create_table', 'create_tmp')) THEN
IF (in_action = 'create_table') THEN
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', ''), '%{TABLE_NAME}', v_quoted_table));
ELSE
CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', v_quoted_table));
END IF;
ELSEIF (in_action = 'save') THEN
CALL sys.execute_prepared_stmt(CONCAT('DELETE FROM ', v_quoted_table));
CALL sys.execute_prepared_stmt(CONCAT('INSERT INTO ', v_quoted_table, ' SELECT * FROM tmp_digests'));
ELSEIF (in_action = 'cleanup') THEN
DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests;
DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests_delta;
ELSEIF (in_action IN ('overall', 'delta')) THEN
IF (in_action = 'overall') THEN
IF (in_table IS NULL) THEN
SET v_digests_table = 'tmp_digests';
ELSE
SET v_digests_table = v_quoted_table;
END IF;
ELSE
SET v_digests_table = 'tmp_digests_delta';
DROP TEMPORARY TABLE IF EXISTS tmp_digests_delta;
CREATE TEMPORARY TABLE tmp_digests_delta LIKE tmp_digests;
SET v_sql = CONCAT('INSERT INTO tmp_digests_delta\nSELECT `d_end`.`SCHEMA_NAME`,\n `d_end`.`DIGEST`,\n `d_end`.`DIGEST_TEXT`,\n `d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) AS ''COUNT_STAR'',\n `d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0) AS ''SUM_TIMER_WAIT'',\n `d_end`.`MIN_TIMER_WAIT` AS ''MIN_TIMER_WAIT'',\n IFNULL((`d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0))/NULLIF(`d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0), 0), 0) AS ''AVG_TIMER_WAIT'',\n `d_end`.`MAX_TIMER_WAIT` AS ''MAX_TIMER_WAIT'',\n `d_end`.`SUM_LOCK_TIME`-IFNULL(`d_start`.`SUM_LOCK_TIME`, 0) AS ''SUM_LOCK_TIME'',\n `d_end`.`SUM_ERRORS`-IFNULL(`d_start`.`SUM_ERRORS`, 0) AS ''SUM_ERRORS'',\n `d_end`.`SUM_WARNINGS`-IFNULL(`d_start`.`SUM_WARNINGS`, 0) AS ''SUM_WARNINGS'',\n `d_end`.`SUM_ROWS_AFFECTED`-IFNULL(`d_start`.`SUM_ROWS_AFFECTED`, 0) AS ''SUM_ROWS_AFFECTED'',\n `d_end`.`SUM_ROWS_SENT`-IFNULL(`d_start`.`SUM_ROWS_SENT`, 0) AS ''SUM_ROWS_SENT'',\n `d_end`.`SUM_ROWS_EXAMINED`-IFNULL(`d_start`.`SUM_ROWS_EXAMINED`, 0) AS ''SUM_ROWS_EXAMINED'',\n `d_end`.`SUM_CREATED_TMP_DISK_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_DISK_TABLES`, 0) AS ''SUM_CREATED_TMP_DISK_TABLES'',\n `d_end`.`SUM_CREATED_TMP_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_TABLES`, 0) AS ''SUM_CREATED_TMP_TABLES'',\n `d_end`.`SUM_SELECT_FULL_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_JOIN`, 0) AS ''SUM_SELECT_FULL_JOIN'',\n `d_end`.`SUM_SELECT_FULL_RANGE_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_RANGE_JOIN`, 0) AS ''SUM_SELECT_FULL_RANGE_JOIN'',\n `d_end`.`SUM_SELECT_RANGE`-IFNULL(`d_start`.`SUM_SELECT_RANGE`, 0) AS ''SUM_SELECT_RANGE'',\n `d_end`.`SUM_SELECT_RANGE_CHECK`-IFNULL(`d_start`.`SUM_SELECT_RANGE_CHECK`, 0) AS ''SUM_SELECT_RANGE_CHECK'',\n `d_end`.`SUM_SELECT_SCAN`-IFNULL(`d_start`.`SUM_SELECT_SCAN`, 0) AS ''SUM_SELECT_SCAN'',\n `d_end`.`SUM_SORT_MERGE_PASSES`-IFNULL(`d_start`.`SUM_SORT_MERGE_PASSES`, 0) AS ''SUM_SORT_MERGE_PASSES'',\n `d_end`.`SUM_SORT_RANGE`-IFNULL(`d_start`.`SUM_SORT_RANGE`, 0) AS ''SUM_SORT_RANGE'',\n `d_end`.`SUM_SORT_ROWS`-IFNULL(`d_start`.`SUM_SORT_ROWS`, 0) AS ''SUM_SORT_ROWS'',\n `d_end`.`SUM_SORT_SCAN`-IFNULL(`d_start`.`SUM_SORT_SCAN`, 0) AS ''SUM_SORT_SCAN'',\n `d_end`.`SUM_NO_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_INDEX_USED`, 0) AS ''SUM_NO_INDEX_USED'',\n `d_end`.`SUM_NO_GOOD_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_GOOD_INDEX_USED`, 0) AS ''SUM_NO_GOOD_INDEX_USED'',\n `d_end`.`FIRST_SEEN`,\n `d_end`.`LAST_SEEN`\n FROM tmp_digests d_end\n LEFT OUTER JOIN ', v_quoted_table, ' d_start ON `d_start`.`DIGEST` = `d_end`.`DIGEST`\n AND (`d_start`.`SCHEMA_NAME` = `d_end`.`SCHEMA_NAME`\n OR (`d_start`.`SCHEMA_NAME` IS NULL AND `d_end`.`SCHEMA_NAME` IS NULL)\n )\n WHERE `d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) > 0');
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_runtimes_in_95th_percentile', in_views)) THEN
SELECT 'Queries with Runtime in 95th Percentile' AS 'Next Output';
DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution1;
DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution2;
DROP TEMPORARY TABLE IF EXISTS tmp_digest_95th_percentile_by_avg_us;
CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution1 (
cnt bigint unsigned NOT NULL,
avg_us decimal(21,0) NOT NULL,
PRIMARY KEY (avg_us)
) ENGINE=InnoDB;
SET v_sql = CONCAT('INSERT INTO tmp_digest_avg_latency_distribution1\nSELECT COUNT(*) cnt,\n ROUND(avg_timer_wait/1000000) AS avg_us\n FROM ', v_digests_table, '\n GROUP BY avg_us');
CALL sys.execute_prepared_stmt(v_sql);
CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution2 LIKE tmp_digest_avg_latency_distribution1;
INSERT INTO tmp_digest_avg_latency_distribution2 SELECT * FROM tmp_digest_avg_latency_distribution1;
CREATE TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us (
avg_us decimal(21,0) NOT NULL,
percentile decimal(46,4) NOT NULL,
PRIMARY KEY (avg_us)
) ENGINE=InnoDB;
SET v_sql = CONCAT('INSERT INTO tmp_digest_95th_percentile_by_avg_us\nSELECT s2.avg_us avg_us,\n IFNULL(SUM(s1.cnt)/NULLIF((SELECT COUNT(*) FROM ', v_digests_table, '), 0), 0) percentile\n FROM tmp_digest_avg_latency_distribution1 AS s1\n JOIN tmp_digest_avg_latency_distribution2 AS s2 ON s1.avg_us <= s2.avg_us\n GROUP BY s2.avg_us\nHAVING percentile > 0.95\n ORDER BY percentile\n LIMIT 1');
CALL sys.execute_prepared_stmt(v_sql);
SET v_sql =
REPLACE(
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_runtimes_in_95th_percentile'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
),
'sys.x$ps_digest_95th_percentile_by_avg_us',
'`sys`.`x$ps_digest_95th_percentile_by_avg_us`'
);
CALL sys.execute_prepared_stmt(v_sql);
DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution1;
DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution2;
DROP TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us;
END IF;
IF (FIND_IN_SET('analysis', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Ordered by Total Latency') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statement_analysis'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_errors_or_warnings', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Errors') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_errors_or_warnings'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_full_table_scans', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Full Table Scan') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_full_table_scans'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_sorting', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Sorting') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_sorting'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('with_temp_tables', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Internal Temporary Tables') AS 'Next Output';
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_temp_tables'
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
IF (FIND_IN_SET('custom', in_views)) THEN
SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Using Custom View') AS 'Next Output';
IF (@sys.statement_performance_analyzer.view IS NULL) THEN
SET @sys.statement_performance_analyzer.view = sys.sys_get_config('statement_performance_analyzer.view', NULL);
END IF;
IF (@sys.statement_performance_analyzer.view IS NULL) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable must be set with the view or query to use.';
END IF;
IF (NOT INSTR(@sys.statement_performance_analyzer.view, ' ')) THEN
IF (NOT INSTR(@sys.statement_performance_analyzer.view, '.')) THEN
SET v_custom_db = DATABASE(),
v_custom_name = @sys.statement_performance_analyzer.view;
ELSE
SET v_custom_db = SUBSTRING_INDEX(@sys.statement_performance_analyzer.view, '.', 1);
SET v_custom_name = SUBSTRING(@sys.statement_performance_analyzer.view, CHAR_LENGTH(v_custom_db)+2);
END IF;
CALL sys.table_exists(v_custom_db, v_custom_name, v_custom_view_exists);
IF (v_custom_view_exists <> 'VIEW') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable is set but specified neither an existing view nor a query.';
END IF;
SET v_sql =
REPLACE(
(SELECT VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = v_custom_db AND TABLE_NAME = v_custom_name
),
'`performance_schema`.`events_statements_summary_by_digest`',
v_digests_table
);
ELSE
SET v_sql = REPLACE(@sys.statement_performance_analyzer.view, '`performance_schema`.`events_statements_summary_by_digest`', v_digests_table);
END IF;
IF (@sys.statement_performance_analyzer.limit > 0) THEN
SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit);
END IF;
CALL sys.execute_prepared_stmt(v_sql);
END IF;
END IF;
IF (v_this_thread_enabled = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
IF (@log_bin = 1) THEN
SET sql_log_bin = @log_bin;
END IF;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'quote_identifier' AND `proc`.`type` = 'FUNCTION'
|
sys |
quote_identifier |
FUNCTION |
quote_identifier |
SQL |
NO_SQL |
YES |
INVOKER |
in_identifier TEXT
|
text CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
BEGIN
RETURN CONCAT('`', REPLACE(in_identifier, '`', '``'), '`');
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Takes an un... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN CONCAT('`', REPLACE(in_identifier, '`', '``'), '`');
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_truncate_all_tables' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_truncate_all_tables |
PROCEDURE |
ps_truncate_all_tables |
SQL |
MODIFIES_SQL_DATA |
YES |
INVOKER |
IN in_verbose BOOLEAN
|
|
BEGIN
DECLARE v_done INT DEFAULT FALSE;
DECLARE v_total_tables INT DEFAULT 0;
DECLARE v_ps_table VARCHAR(64);
DECLARE ps_tables CURSOR FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'performance_schema'
AND (table_name LIKE '%summary%'
OR table_name LIKE '%history%');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
OPEN ps_tables;
ps_tables_loop: LOOP
FETCH ps_tables INTO v_ps_table;
IF v_done THEN
LEAVE ps_tables_loop;
END IF;
SET @truncate_stmt := CONCAT('TRUNCATE TABLE performance_schema.', v_ps_table);
IF in_verbose THEN
SELECT CONCAT('Running: ', @truncate_stmt) AS status;
END IF;
PREPARE truncate_stmt FROM @truncate_stmt;
EXECUTE truncate_stmt;
DEALLOCATE PREPARE truncate_stmt;
SET v_total_tables = v_total_tables + 1;
END LOOP;
CLOSE ps_tables;
SELECT CONCAT('Truncated ', v_total_tables, ' tables') AS summary;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Truncates a... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_done INT DEFAULT FALSE;
DECLARE v_total_tables INT DEFAULT 0;
DECLARE v_ps_table VARCHAR(64);
DECLARE ps_tables CURSOR FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'performance_schema'
AND (table_name LIKE '%summary%'
OR table_name LIKE '%history%');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
OPEN ps_tables;
ps_tables_loop: LOOP
FETCH ps_tables INTO v_ps_table;
IF v_done THEN
LEAVE ps_tables_loop;
END IF;
SET @truncate_stmt := CONCAT('TRUNCATE TABLE performance_schema.', v_ps_table);
IF in_verbose THEN
SELECT CONCAT('Running: ', @truncate_stmt) AS status;
END IF;
PREPARE truncate_stmt FROM @truncate_stmt;
EXECUTE truncate_stmt;
DEALLOCATE PREPARE truncate_stmt;
SET v_total_tables = v_total_tables + 1;
END LOOP;
CLOSE ps_tables;
SELECT CONCAT('Truncated ', v_total_tables, ' tables') AS summary;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_trace_thread' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_trace_thread |
PROCEDURE |
ps_trace_thread |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
IN in_thread_id BIGINT UNSIGNED,
IN in_outfile VARCHAR(255),
IN in_max_runtime DECIMAL(20,2),
IN in_interval DECIMAL(20,2),
IN in_start_fresh BOOLEAN,
IN in_auto_setup BOOLEAN,
IN in_debug BOOLEAN
|
|
BEGIN
DECLARE v_done bool DEFAULT FALSE;
DECLARE v_start, v_runtime DECIMAL(20,2) DEFAULT 0.0;
DECLARE v_min_event_id bigint unsigned DEFAULT 0;
DECLARE v_this_thread_enabed ENUM('YES', 'NO');
DECLARE v_event longtext;
DECLARE c_stack CURSOR FOR
SELECT CONCAT(IF(nesting_event_id IS NOT NULL, CONCAT(nesting_event_id, ' -> '), ''),
event_id, '; ', event_id, ' [label="',
'(', sys.format_time(timer_wait), ') ',
IF (event_name NOT LIKE 'wait/io%',
SUBSTRING_INDEX(event_name, '/', -2),
IF (event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%',
SUBSTRING_INDEX(event_name, '/', -4),
event_name)
),
IF (event_name LIKE 'statement/%', IFNULL(CONCAT('\\n', wait_info), ''), ''),
IF (in_debug AND event_name LIKE 'wait%', wait_info, ''),
'", ',
CASE WHEN event_name LIKE 'wait/io/file%' THEN
'shape=box, style=filled, color=red'
WHEN event_name LIKE 'wait/io/table%' THEN
'shape=box, style=filled, color=green'
WHEN event_name LIKE 'wait/io/socket%' THEN
'shape=box, style=filled, color=yellow'
WHEN event_name LIKE 'wait/synch/mutex%' THEN
'style=filled, color=lightskyblue'
WHEN event_name LIKE 'wait/synch/cond%' THEN
'style=filled, color=darkseagreen3'
WHEN event_name LIKE 'wait/synch/rwlock%' THEN
'style=filled, color=orchid'
WHEN event_name LIKE 'wait/lock%' THEN
'shape=box, style=filled, color=tan'
WHEN event_name LIKE 'statement/%' THEN
CONCAT('shape=box, style=bold',
CASE WHEN event_name LIKE 'statement/com/%' THEN
' style=filled, color=darkseagreen'
ELSE
IF((timer_wait/1000000000000) > @@log_slow_query_time,
' style=filled, color=red',
' style=filled, color=lightblue')
END
)
WHEN event_name LIKE 'stage/%' THEN
'style=filled, color=slategray3'
WHEN event_name LIKE '%idle%' THEN
'shape=box, style=filled, color=firebrick3'
ELSE '' END,
'];\n'
) event, event_id
FROM (
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id,
CONCAT(sql_text, '\\n',
'errors: ', errors, '\\n',
'warnings: ', warnings, '\\n',
'lock time: ', sys.format_time(lock_time),'\\n',
'rows affected: ', rows_affected, '\\n',
'rows sent: ', rows_sent, '\\n',
'rows examined: ', rows_examined, '\\n',
'tmp tables: ', created_tmp_tables, '\\n',
'tmp disk tables: ', created_tmp_disk_tables, '\\n'
'select scan: ', select_scan, '\\n',
'select full join: ', select_full_join, '\\n',
'select full range join: ', select_full_range_join, '\\n',
'select range: ', select_range, '\\n',
'select range check: ', select_range_check, '\\n',
'sort merge passes: ', sort_merge_passes, '\\n',
'sort rows: ', sort_rows, '\\n',
'sort range: ', sort_range, '\\n',
'sort scan: ', sort_scan, '\\n',
'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\\n',
'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\\n'
) AS wait_info
FROM performance_schema.events_statements_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
UNION
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info
FROM performance_schema.events_stages_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
UNION
(SELECT thread_id, event_id,
CONCAT(event_name,
IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''),
IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''),
IF(event_name LIKE 'wait/io/file%', '\\n', ''),
IF(object_schema IS NOT NULL, CONCAT('\\nObject: ', object_schema, '.'), ''),
IF(object_name IS NOT NULL,
IF (event_name LIKE 'wait/io/socket%',
CONCAT('\\n', IF (object_name LIKE ':0%', @@socket, object_name)),
object_name),
''
),
IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''), '\\n'
) AS event_name,
timer_wait, timer_start, nesting_event_id, source AS wait_info
FROM performance_schema.events_waits_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
) events
ORDER BY event_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
IF (in_auto_setup) THEN
CALL sys.ps_setup_save(0);
DELETE FROM performance_schema.setup_actors;
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(THREAD_ID = in_thread_id, 'YES', 'NO');
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME NOT LIKE '%\_history';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES',
TIMED = 'YES';
END IF;
IF (in_start_fresh) THEN
TRUNCATE performance_schema.events_statements_history_long;
TRUNCATE performance_schema.events_stages_history_long;
TRUNCATE performance_schema.events_waits_history_long;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_events;
CREATE TEMPORARY TABLE tmp_events (
event_id bigint unsigned NOT NULL,
event longblob,
PRIMARY KEY (event_id)
);
INSERT INTO tmp_events VALUES (0, CONCAT('digraph events { rankdir=LR; nodesep=0.10;\n',
'// Stack created .....: ', NOW(), '\n',
'// MySQL version .....: ', VERSION(), '\n',
'// MySQL hostname ....: ', @@hostname, '\n',
'// MySQL port ........: ', @@port, '\n',
'// MySQL socket ......: ', @@socket, '\n',
'// MySQL user ........: ', CURRENT_USER(), '\n'));
SELECT CONCAT('Data collection starting for THREAD_ID = ', in_thread_id) AS 'Info';
SET v_min_event_id = 0,
v_start = UNIX_TIMESTAMP(),
in_interval = IFNULL(in_interval, 1.00),
in_max_runtime = IFNULL(in_max_runtime, 60.00);
WHILE (v_runtime < in_max_runtime
AND (SELECT INSTRUMENTED FROM performance_schema.threads WHERE THREAD_ID = in_thread_id) = 'YES') DO
SET v_done = FALSE;
OPEN c_stack;
c_stack_loop: LOOP
FETCH c_stack INTO v_event, v_min_event_id;
IF v_done THEN
LEAVE c_stack_loop;
END IF;
IF (LENGTH(v_event) > 0) THEN
INSERT INTO tmp_events VALUES (v_min_event_id, v_event);
END IF;
END LOOP;
CLOSE c_stack;
SELECT SLEEP(in_interval) INTO @sleep;
SET v_runtime = (UNIX_TIMESTAMP() - v_start);
END WHILE;
INSERT INTO tmp_events VALUES (v_min_event_id+1, '}');
SET @query = CONCAT('SELECT event FROM tmp_events ORDER BY event_id INTO OUTFILE ''', in_outfile, ''' FIELDS ESCAPED BY '''' LINES TERMINATED BY ''''');
PREPARE stmt_output FROM @query;
EXECUTE stmt_output;
DEALLOCATE PREPARE stmt_output;
SELECT CONCAT('Stack trace written to ', in_outfile) AS 'Info';
SELECT CONCAT('dot -Tpdf -o /tmp/stack_', in_thread_id, '.pdf ', in_outfile) AS 'Convert to PDF';
SELECT CONCAT('dot -Tpng -o /tmp/stack_', in_thread_id, '.png ', in_outfile) AS 'Convert to PNG';
DROP TEMPORARY TABLE tmp_events;
IF (in_auto_setup) THEN
CALL sys.ps_setup_reload_saved();
END IF;
IF (v_this_thread_enabed = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
SET sql_log_bin = @log_bin;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Dumps all d... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_done bool DEFAULT FALSE;
DECLARE v_start, v_runtime DECIMAL(20,2) DEFAULT 0.0;
DECLARE v_min_event_id bigint unsigned DEFAULT 0;
DECLARE v_this_thread_enabed ENUM('YES', 'NO');
DECLARE v_event longtext;
DECLARE c_stack CURSOR FOR
SELECT CONCAT(IF(nesting_event_id IS NOT NULL, CONCAT(nesting_event_id, ' -> '), ''),
event_id, '; ', event_id, ' [label="',
'(', sys.format_time(timer_wait), ') ',
IF (event_name NOT LIKE 'wait/io%',
SUBSTRING_INDEX(event_name, '/', -2),
IF (event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%',
SUBSTRING_INDEX(event_name, '/', -4),
event_name)
),
IF (event_name LIKE 'statement/%', IFNULL(CONCAT('\n', wait_info), ''), ''),
IF (in_debug AND event_name LIKE 'wait%', wait_info, ''),
'", ',
CASE WHEN event_name LIKE 'wait/io/file%' THEN
'shape=box, style=filled, color=red'
WHEN event_name LIKE 'wait/io/table%' THEN
'shape=box, style=filled, color=green'
WHEN event_name LIKE 'wait/io/socket%' THEN
'shape=box, style=filled, color=yellow'
WHEN event_name LIKE 'wait/synch/mutex%' THEN
'style=filled, color=lightskyblue'
WHEN event_name LIKE 'wait/synch/cond%' THEN
'style=filled, color=darkseagreen3'
WHEN event_name LIKE 'wait/synch/rwlock%' THEN
'style=filled, color=orchid'
WHEN event_name LIKE 'wait/lock%' THEN
'shape=box, style=filled, color=tan'
WHEN event_name LIKE 'statement/%' THEN
CONCAT('shape=box, style=bold',
CASE WHEN event_name LIKE 'statement/com/%' THEN
' style=filled, color=darkseagreen'
ELSE
IF((timer_wait/1000000000000) > @@log_slow_query_time,
' style=filled, color=red',
' style=filled, color=lightblue')
END
)
WHEN event_name LIKE 'stage/%' THEN
'style=filled, color=slategray3'
WHEN event_name LIKE '%idle%' THEN
'shape=box, style=filled, color=firebrick3'
ELSE '' END,
'];\n'
) event, event_id
FROM (
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id,
CONCAT(sql_text, '\n',
'errors: ', errors, '\n',
'warnings: ', warnings, '\n',
'lock time: ', sys.format_time(lock_time),'\n',
'rows affected: ', rows_affected, '\n',
'rows sent: ', rows_sent, '\n',
'rows examined: ', rows_examined, '\n',
'tmp tables: ', created_tmp_tables, '\n',
'tmp disk tables: ', created_tmp_disk_tables, '\n'
'select scan: ', select_scan, '\n',
'select full join: ', select_full_join, '\n',
'select full range join: ', select_full_range_join, '\n',
'select range: ', select_range, '\n',
'select range check: ', select_range_check, '\n',
'sort merge passes: ', sort_merge_passes, '\n',
'sort rows: ', sort_rows, '\n',
'sort range: ', sort_range, '\n',
'sort scan: ', sort_scan, '\n',
'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\n',
'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\n'
) AS wait_info
FROM performance_schema.events_statements_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
UNION
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info
FROM performance_schema.events_stages_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
UNION
(SELECT thread_id, event_id,
CONCAT(event_name,
IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''),
IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''),
IF(event_name LIKE 'wait/io/file%', '\n', ''),
IF(object_schema IS NOT NULL, CONCAT('\nObject: ', object_schema, '.'), ''),
IF(object_name IS NOT NULL,
IF (event_name LIKE 'wait/io/socket%',
CONCAT('\n', IF (object_name LIKE ':0%', @@socket, object_name)),
object_name),
''
),
IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''), '\n'
) AS event_name,
timer_wait, timer_start, nesting_event_id, source AS wait_info
FROM performance_schema.events_waits_history_long
WHERE thread_id = in_thread_id AND event_id > v_min_event_id)
) events
ORDER BY event_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
IF (in_auto_setup) THEN
CALL sys.ps_setup_save(0);
DELETE FROM performance_schema.setup_actors;
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(THREAD_ID = in_thread_id, 'YES', 'NO');
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME NOT LIKE '%\_history';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES',
TIMED = 'YES';
END IF;
IF (in_start_fresh) THEN
TRUNCATE performance_schema.events_statements_history_long;
TRUNCATE performance_schema.events_stages_history_long;
TRUNCATE performance_schema.events_waits_history_long;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_events;
CREATE TEMPORARY TABLE tmp_events (
event_id bigint unsigned NOT NULL,
event longblob,
PRIMARY KEY (event_id)
);
INSERT INTO tmp_events VALUES (0, CONCAT('digraph events { rankdir=LR; nodesep=0.10;\n',
'// Stack created .....: ', NOW(), '\n',
'// MySQL version .....: ', VERSION(), '\n',
'// MySQL hostname ....: ', @@hostname, '\n',
'// MySQL port ........: ', @@port, '\n',
'// MySQL socket ......: ', @@socket, '\n',
'// MySQL user ........: ', CURRENT_USER(), '\n'));
SELECT CONCAT('Data collection starting for THREAD_ID = ', in_thread_id) AS 'Info';
SET v_min_event_id = 0,
v_start = UNIX_TIMESTAMP(),
in_interval = IFNULL(in_interval, 1.00),
in_max_runtime = IFNULL(in_max_runtime, 60.00);
WHILE (v_runtime < in_max_runtime
AND (SELECT INSTRUMENTED FROM performance_schema.threads WHERE THREAD_ID = in_thread_id) = 'YES') DO
SET v_done = FALSE;
OPEN c_stack;
c_stack_loop: LOOP
FETCH c_stack INTO v_event, v_min_event_id;
IF v_done THEN
LEAVE c_stack_loop;
END IF;
IF (LENGTH(v_event) > 0) THEN
INSERT INTO tmp_events VALUES (v_min_event_id, v_event);
END IF;
END LOOP;
CLOSE c_stack;
SELECT SLEEP(in_interval) INTO @sleep;
SET v_runtime = (UNIX_TIMESTAMP() - v_start);
END WHILE;
INSERT INTO tmp_events VALUES (v_min_event_id+1, '}');
SET @query = CONCAT('SELECT event FROM tmp_events ORDER BY event_id INTO OUTFILE ''', in_outfile, ''' FIELDS ESCAPED BY '''' LINES TERMINATED BY ''''');
PREPARE stmt_output FROM @query;
EXECUTE stmt_output;
DEALLOCATE PREPARE stmt_output;
SELECT CONCAT('Stack trace written to ', in_outfile) AS 'Info';
SELECT CONCAT('dot -Tpdf -o /tmp/stack_', in_thread_id, '.pdf ', in_outfile) AS 'Convert to PDF';
SELECT CONCAT('dot -Tpng -o /tmp/stack_', in_thread_id, '.png ', in_outfile) AS 'Convert to PNG';
DROP TEMPORARY TABLE tmp_events;
IF (in_auto_setup) THEN
CALL sys.ps_setup_reload_saved();
END IF;
IF (v_this_thread_enabed = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
SET sql_log_bin = @log_bin;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_trace_statement_digest' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_trace_statement_digest |
PROCEDURE |
ps_trace_statement_digest |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
IN in_digest VARCHAR(32),
IN in_runtime INT,
IN in_interval DECIMAL(2,2),
IN in_start_fresh BOOLEAN,
IN in_auto_enable BOOLEAN
|
|
BEGIN
DECLARE v_start_fresh BOOLEAN DEFAULT false;
DECLARE v_auto_enable BOOLEAN DEFAULT false;
DECLARE v_explain BOOLEAN DEFAULT true;
DECLARE v_this_thread_enabed ENUM('YES', 'NO');
DECLARE v_runtime INT DEFAULT 0;
DECLARE v_start INT DEFAULT 0;
DECLARE v_found_stmts INT;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
DROP TEMPORARY TABLE IF EXISTS stmt_trace;
CREATE TEMPORARY TABLE stmt_trace (
thread_id BIGINT UNSIGNED,
timer_start BIGINT UNSIGNED,
event_id BIGINT UNSIGNED,
sql_text longtext,
timer_wait BIGINT UNSIGNED,
lock_time BIGINT UNSIGNED,
errors BIGINT UNSIGNED,
mysql_errno INT,
rows_sent BIGINT UNSIGNED,
rows_affected BIGINT UNSIGNED,
rows_examined BIGINT UNSIGNED,
created_tmp_tables BIGINT UNSIGNED,
created_tmp_disk_tables BIGINT UNSIGNED,
no_index_used BIGINT UNSIGNED,
PRIMARY KEY (thread_id, timer_start)
);
DROP TEMPORARY TABLE IF EXISTS stmt_stages;
CREATE TEMPORARY TABLE stmt_stages (
event_id BIGINT UNSIGNED,
stmt_id BIGINT UNSIGNED,
event_name VARCHAR(128),
timer_wait BIGINT UNSIGNED,
PRIMARY KEY (event_id)
);
SET v_start_fresh = in_start_fresh;
IF v_start_fresh THEN
TRUNCATE TABLE performance_schema.events_statements_history_long;
TRUNCATE TABLE performance_schema.events_stages_history_long;
END IF;
SET v_auto_enable = in_auto_enable;
IF v_auto_enable THEN
CALL sys.ps_setup_save(0);
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(PROCESSLIST_ID IS NOT NULL, 'YES', 'NO');
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME NOT LIKE '%\_history'
AND NAME NOT LIKE 'events_wait%'
AND NAME NOT LIKE 'events_transactions%'
AND NAME <> 'statements_digest';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES',
TIMED = 'YES'
WHERE NAME LIKE 'statement/%' OR NAME LIKE 'stage/%';
END IF;
WHILE v_runtime < in_runtime DO
SELECT UNIX_TIMESTAMP() INTO v_start;
INSERT IGNORE INTO stmt_trace
SELECT thread_id, timer_start, event_id, sql_text, timer_wait, lock_time, errors, mysql_errno,
rows_sent, rows_affected, rows_examined, created_tmp_tables, created_tmp_disk_tables, no_index_used
FROM performance_schema.events_statements_history_long
WHERE digest = in_digest;
INSERT IGNORE INTO stmt_stages
SELECT stages.event_id, stmt_trace.event_id,
stages.event_name, stages.timer_wait
FROM performance_schema.events_stages_history_long AS stages
JOIN stmt_trace ON stages.nesting_event_id = stmt_trace.event_id;
SELECT SLEEP(in_interval) INTO @sleep;
SET v_runtime = v_runtime + (UNIX_TIMESTAMP() - v_start);
END WHILE;
SELECT "SUMMARY STATISTICS";
SELECT COUNT(*) executions,
sys.format_time(SUM(timer_wait)) AS exec_time,
sys.format_time(SUM(lock_time)) AS lock_time,
SUM(rows_sent) AS rows_sent,
SUM(rows_affected) AS rows_affected,
SUM(rows_examined) AS rows_examined,
SUM(created_tmp_tables) AS tmp_tables,
SUM(no_index_used) AS full_scans
FROM stmt_trace;
SELECT event_name,
COUNT(*) as count,
sys.format_time(SUM(timer_wait)) as latency
FROM stmt_stages
GROUP BY event_name
ORDER BY SUM(timer_wait) DESC;
SELECT "LONGEST RUNNING STATEMENT";
SELECT thread_id,
sys.format_time(timer_wait) AS exec_time,
sys.format_time(lock_time) AS lock_time,
rows_sent,
rows_affected,
rows_examined,
created_tmp_tables AS tmp_tables,
no_index_used AS full_scan
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
SELECT sql_text
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
SELECT sql_text, event_id INTO @sql, @sql_id
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
IF (@sql_id IS NOT NULL) THEN
SELECT event_name,
sys.format_time(timer_wait) as latency
FROM stmt_stages
WHERE stmt_id = @sql_id
ORDER BY event_id;
END IF;
DROP TEMPORARY TABLE stmt_trace;
DROP TEMPORARY TABLE stmt_stages;
IF (@sql IS NOT NULL) THEN
SET @stmt := CONCAT("EXPLAIN FORMAT=JSON ", @sql);
BEGIN
DECLARE CONTINUE HANDLER FOR 1064, 1146 SET v_explain = false;
PREPARE explain_stmt FROM @stmt;
END;
IF (v_explain) THEN
EXECUTE explain_stmt;
DEALLOCATE PREPARE explain_stmt;
END IF;
END IF;
IF v_auto_enable THEN
CALL sys.ps_setup_reload_saved();
END IF;
IF (v_this_thread_enabed = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
SET sql_log_bin = @log_bin;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Traces all ... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_start_fresh BOOLEAN DEFAULT false;
DECLARE v_auto_enable BOOLEAN DEFAULT false;
DECLARE v_explain BOOLEAN DEFAULT true;
DECLARE v_this_thread_enabed ENUM('YES', 'NO');
DECLARE v_runtime INT DEFAULT 0;
DECLARE v_start INT DEFAULT 0;
DECLARE v_found_stmts INT;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID();
CALL sys.ps_setup_disable_thread(CONNECTION_ID());
DROP TEMPORARY TABLE IF EXISTS stmt_trace;
CREATE TEMPORARY TABLE stmt_trace (
thread_id BIGINT UNSIGNED,
timer_start BIGINT UNSIGNED,
event_id BIGINT UNSIGNED,
sql_text longtext,
timer_wait BIGINT UNSIGNED,
lock_time BIGINT UNSIGNED,
errors BIGINT UNSIGNED,
mysql_errno INT,
rows_sent BIGINT UNSIGNED,
rows_affected BIGINT UNSIGNED,
rows_examined BIGINT UNSIGNED,
created_tmp_tables BIGINT UNSIGNED,
created_tmp_disk_tables BIGINT UNSIGNED,
no_index_used BIGINT UNSIGNED,
PRIMARY KEY (thread_id, timer_start)
);
DROP TEMPORARY TABLE IF EXISTS stmt_stages;
CREATE TEMPORARY TABLE stmt_stages (
event_id BIGINT UNSIGNED,
stmt_id BIGINT UNSIGNED,
event_name VARCHAR(128),
timer_wait BIGINT UNSIGNED,
PRIMARY KEY (event_id)
);
SET v_start_fresh = in_start_fresh;
IF v_start_fresh THEN
TRUNCATE TABLE performance_schema.events_statements_history_long;
TRUNCATE TABLE performance_schema.events_stages_history_long;
END IF;
SET v_auto_enable = in_auto_enable;
IF v_auto_enable THEN
CALL sys.ps_setup_save(0);
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(PROCESSLIST_ID IS NOT NULL, 'YES', 'NO');
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME NOT LIKE '%\_history'
AND NAME NOT LIKE 'events_wait%'
AND NAME NOT LIKE 'events_transactions%'
AND NAME <> 'statements_digest';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES',
TIMED = 'YES'
WHERE NAME LIKE 'statement/%' OR NAME LIKE 'stage/%';
END IF;
WHILE v_runtime < in_runtime DO
SELECT UNIX_TIMESTAMP() INTO v_start;
INSERT IGNORE INTO stmt_trace
SELECT thread_id, timer_start, event_id, sql_text, timer_wait, lock_time, errors, mysql_errno,
rows_sent, rows_affected, rows_examined, created_tmp_tables, created_tmp_disk_tables, no_index_used
FROM performance_schema.events_statements_history_long
WHERE digest = in_digest;
INSERT IGNORE INTO stmt_stages
SELECT stages.event_id, stmt_trace.event_id,
stages.event_name, stages.timer_wait
FROM performance_schema.events_stages_history_long AS stages
JOIN stmt_trace ON stages.nesting_event_id = stmt_trace.event_id;
SELECT SLEEP(in_interval) INTO @sleep;
SET v_runtime = v_runtime + (UNIX_TIMESTAMP() - v_start);
END WHILE;
SELECT "SUMMARY STATISTICS";
SELECT COUNT(*) executions,
sys.format_time(SUM(timer_wait)) AS exec_time,
sys.format_time(SUM(lock_time)) AS lock_time,
SUM(rows_sent) AS rows_sent,
SUM(rows_affected) AS rows_affected,
SUM(rows_examined) AS rows_examined,
SUM(created_tmp_tables) AS tmp_tables,
SUM(no_index_used) AS full_scans
FROM stmt_trace;
SELECT event_name,
COUNT(*) as count,
sys.format_time(SUM(timer_wait)) as latency
FROM stmt_stages
GROUP BY event_name
ORDER BY SUM(timer_wait) DESC;
SELECT "LONGEST RUNNING STATEMENT";
SELECT thread_id,
sys.format_time(timer_wait) AS exec_time,
sys.format_time(lock_time) AS lock_time,
rows_sent,
rows_affected,
rows_examined,
created_tmp_tables AS tmp_tables,
no_index_used AS full_scan
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
SELECT sql_text
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
SELECT sql_text, event_id INTO @sql, @sql_id
FROM stmt_trace
ORDER BY timer_wait DESC LIMIT 1;
IF (@sql_id IS NOT NULL) THEN
SELECT event_name,
sys.format_time(timer_wait) as latency
FROM stmt_stages
WHERE stmt_id = @sql_id
ORDER BY event_id;
END IF;
DROP TEMPORARY TABLE stmt_trace;
DROP TEMPORARY TABLE stmt_stages;
IF (@sql IS NOT NULL) THEN
SET @stmt := CONCAT("EXPLAIN FORMAT=JSON ", @sql);
BEGIN
DECLARE CONTINUE HANDLER FOR 1064, 1146 SET v_explain = false;
PREPARE explain_stmt FROM @stmt;
END;
IF (v_explain) THEN
EXECUTE explain_stmt;
DEALLOCATE PREPARE explain_stmt;
END IF;
END IF;
IF v_auto_enable THEN
CALL sys.ps_setup_reload_saved();
END IF;
IF (v_this_thread_enabed = 'YES') THEN
CALL sys.ps_setup_enable_thread(CONNECTION_ID());
END IF;
SET sql_log_bin = @log_bin;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_thread_trx_info' AND `proc`.`type` = 'FUNCTION'
|
sys |
ps_thread_trx_info |
FUNCTION |
ps_thread_trx_info |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
in_thread_id BIGINT UNSIGNED
|
longtext CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
BEGIN
DECLARE v_output LONGTEXT DEFAULT '{}';
DECLARE v_msg_text TEXT DEFAULT '';
DECLARE v_signal_msg TEXT DEFAULT '';
DECLARE v_mysql_errno INT;
DECLARE v_max_output_len BIGINT;
DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
v_msg_text = MESSAGE_TEXT,
v_mysql_errno = MYSQL_ERRNO;
IF v_mysql_errno = 1260 THEN
SET v_signal_msg = CONCAT('{ "error": "Trx info truncated: ', v_msg_text, '" }');
ELSE
SET v_signal_msg = CONCAT('{ "error": "', v_msg_text, '" }');
END IF;
RETURN v_signal_msg;
END;
IF (@sys.ps_thread_trx_info.max_length IS NULL) THEN
SET @sys.ps_thread_trx_info.max_length = sys.sys_get_config('ps_thread_trx_info.max_length', 65535);
END IF;
IF (@sys.ps_thread_trx_info.max_length != @@session.group_concat_max_len) THEN
SET @old_group_concat_max_len = @@session.group_concat_max_len;
SET v_max_output_len = (@sys.ps_thread_trx_info.max_length - 5);
SET SESSION group_concat_max_len = v_max_output_len;
END IF;
SET v_output = (
SELECT CONCAT('[', IFNULL(GROUP_CONCAT(trx_info ORDER BY event_id), ''), '\n]') AS trx_info
FROM (SELECT trxi.thread_id,
trxi.event_id,
GROUP_CONCAT(
IFNULL(
CONCAT('\n {\n',
' "time": "', IFNULL(sys.format_time(trxi.timer_wait), ''), '",\n',
' "state": "', IFNULL(trxi.state, ''), '",\n',
' "mode": "', IFNULL(trxi.access_mode, ''), '",\n',
' "autocommitted": "', IFNULL(trxi.autocommit, ''), '",\n',
' "gtid": "', IFNULL(trxi.gtid, ''), '",\n',
' "isolation": "', IFNULL(trxi.isolation_level, ''), '",\n',
' "statements_executed": [', IFNULL(s.stmts, ''), IF(s.stmts IS NULL, ' ]\n', '\n ]\n'),
' }'
),
'')
ORDER BY event_id) AS trx_info
FROM (
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
FROM performance_schema.events_transactions_current
WHERE thread_id = in_thread_id
AND end_event_id IS NULL)
UNION
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
FROM performance_schema.events_transactions_history
WHERE thread_id = in_thread_id)
) AS trxi
LEFT JOIN (SELECT thread_id,
nesting_event_id,
GROUP_CONCAT(
IFNULL(
CONCAT('\n {\n',
' "sql_text": "', IFNULL(sys.format_statement(REPLACE(sql_text, '\\', '\\\\')), ''), '",\n',
' "time": "', IFNULL(sys.format_time(timer_wait), ''), '",\n',
' "schema": "', IFNULL(current_schema, ''), '",\n',
' "rows_examined": ', IFNULL(rows_examined, ''), ',\n',
' "rows_affected": ', IFNULL(rows_affected, ''), ',\n',
' "rows_sent": ', IFNULL(rows_sent, ''), ',\n',
' "tmp_tables": ', IFNULL(created_tmp_tables, ''), ',\n',
' "tmp_disk_tables": ', IFNULL(created_tmp_disk_tables, ''), ',\n',
' "sort_rows": ', IFNULL(sort_rows, ''), ',\n',
' "sort_merge_passes": ', IFNULL(sort_merge_passes, ''), '\n',
' }'), '') ORDER BY event_id) AS stmts
FROM performance_schema.events_statements_history
WHERE sql_text IS NOT NULL
AND thread_id = in_thread_id
GROUP BY thread_id, nesting_event_id
) AS s
ON trxi.thread_id = s.thread_id
AND trxi.event_id = s.nesting_event_id
WHERE trxi.thread_id = in_thread_id
GROUP BY trxi.thread_id, trxi.event_id
) trxs
GROUP BY thread_id
);
IF (@old_group_concat_max_len IS NOT NULL) THEN
SET SESSION group_concat_max_len = @old_group_concat_max_len;
END IF;
RETURN v_output;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Returns a J... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_output LONGTEXT DEFAULT '{}';
DECLARE v_msg_text TEXT DEFAULT '';
DECLARE v_signal_msg TEXT DEFAULT '';
DECLARE v_mysql_errno INT;
DECLARE v_max_output_len BIGINT;
DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
v_msg_text = MESSAGE_TEXT,
v_mysql_errno = MYSQL_ERRNO;
IF v_mysql_errno = 1260 THEN
SET v_signal_msg = CONCAT('{ "error": "Trx info truncated: ', v_msg_text, '" }');
ELSE
SET v_signal_msg = CONCAT('{ "error": "', v_msg_text, '" }');
END IF;
RETURN v_signal_msg;
END;
IF (@sys.ps_thread_trx_info.max_length IS NULL) THEN
SET @sys.ps_thread_trx_info.max_length = sys.sys_get_config('ps_thread_trx_info.max_length', 65535);
END IF;
IF (@sys.ps_thread_trx_info.max_length != @@session.group_concat_max_len) THEN
SET @old_group_concat_max_len = @@session.group_concat_max_len;
SET v_max_output_len = (@sys.ps_thread_trx_info.max_length - 5);
SET SESSION group_concat_max_len = v_max_output_len;
END IF;
SET v_output = (
SELECT CONCAT('[', IFNULL(GROUP_CONCAT(trx_info ORDER BY event_id), ''), '\n]') AS trx_info
FROM (SELECT trxi.thread_id,
trxi.event_id,
GROUP_CONCAT(
IFNULL(
CONCAT('\n {\n',
' "time": "', IFNULL(sys.format_time(trxi.timer_wait), ''), '",\n',
' "state": "', IFNULL(trxi.state, ''), '",\n',
' "mode": "', IFNULL(trxi.access_mode, ''), '",\n',
' "autocommitted": "', IFNULL(trxi.autocommit, ''), '",\n',
' "gtid": "', IFNULL(trxi.gtid, ''), '",\n',
' "isolation": "', IFNULL(trxi.isolation_level, ''), '",\n',
' "statements_executed": [', IFNULL(s.stmts, ''), IF(s.stmts IS NULL, ' ]\n', '\n ]\n'),
' }'
),
'')
ORDER BY event_id) AS trx_info
FROM (
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
FROM performance_schema.events_transactions_current
WHERE thread_id = in_thread_id
AND end_event_id IS NULL)
UNION
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
FROM performance_schema.events_transactions_history
WHERE thread_id = in_thread_id)
) AS trxi
LEFT JOIN (SELECT thread_id,
nesting_event_id,
GROUP_CONCAT(
IFNULL(
CONCAT('\n {\n',
' "sql_text": "', IFNULL(sys.format_statement(REPLACE(sql_text, '\', '\\')), ''), '",\n',
' "time": "', IFNULL(sys.format_time(timer_wait), ''), '",\n',
' "schema": "', IFNULL(current_schema, ''), '",\n',
' "rows_examined": ', IFNULL(rows_examined, ''), ',\n',
' "rows_affected": ', IFNULL(rows_affected, ''), ',\n',
' "rows_sent": ', IFNULL(rows_sent, ''), ',\n',
' "tmp_tables": ', IFNULL(created_tmp_tables, ''), ',\n',
' "tmp_disk_tables": ', IFNULL(created_tmp_disk_tables, ''), ',\n',
' "sort_rows": ', IFNULL(sort_rows, ''), ',\n',
' "sort_merge_passes": ', IFNULL(sort_merge_passes, ''), '\n',
' }'), '') ORDER BY event_id) AS stmts
FROM performance_schema.events_statements_history
WHERE sql_text IS NOT NULL
AND thread_id = in_thread_id
GROUP BY thread_id, nesting_event_id
) AS s
ON trxi.thread_id = s.thread_id
AND trxi.event_id = s.nesting_event_id
WHERE trxi.thread_id = in_thread_id
GROUP BY trxi.thread_id, trxi.event_id
) trxs
GROUP BY thread_id
);
IF (@old_group_concat_max_len IS NOT NULL) THEN
SET SESSION group_concat_max_len = @old_group_concat_max_len;
END IF;
RETURN v_output;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_thread_stack' AND `proc`.`type` = 'FUNCTION'
|
sys |
ps_thread_stack |
FUNCTION |
ps_thread_stack |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
thd_id BIGINT UNSIGNED,
debug BOOLEAN
|
longtext CHARSET latin1 COLLATE latin1_swedish_ci
|
BEGIN
DECLARE json_objects LONGTEXT;
UPDATE performance_schema.threads
SET instrumented = 'NO'
WHERE processlist_id = CONNECTION_ID();
SET SESSION group_concat_max_len=@@global.max_allowed_packet;
SELECT GROUP_CONCAT(CONCAT( '{'
, CONCAT_WS( ', '
, CONCAT('"nesting_event_id": "', IF(nesting_event_id IS NULL, '0', nesting_event_id), '"')
, CONCAT('"event_id": "', event_id, '"')
, CONCAT( '"timer_wait": ', ROUND(timer_wait/1000000, 2))
, CONCAT( '"event_info": "'
, CASE
WHEN event_name NOT LIKE 'wait/io%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -2), '\\', '\\\\')
WHEN event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -4), '\\', '\\\\')
ELSE event_name
END
, '"'
)
, CONCAT( '"wait_info": "', IFNULL(wait_info, ''), '"')
, CONCAT( '"source": "', IF(true AND event_name LIKE 'wait%', IFNULL(wait_info, ''), ''), '"')
, CASE
WHEN event_name LIKE 'wait/io/file%' THEN '"event_type": "io/file"'
WHEN event_name LIKE 'wait/io/table%' THEN '"event_type": "io/table"'
WHEN event_name LIKE 'wait/io/socket%' THEN '"event_type": "io/socket"'
WHEN event_name LIKE 'wait/synch/mutex%' THEN '"event_type": "synch/mutex"'
WHEN event_name LIKE 'wait/synch/cond%' THEN '"event_type": "synch/cond"'
WHEN event_name LIKE 'wait/synch/rwlock%' THEN '"event_type": "synch/rwlock"'
WHEN event_name LIKE 'wait/lock%' THEN '"event_type": "lock"'
WHEN event_name LIKE 'statement/%' THEN '"event_type": "stmt"'
WHEN event_name LIKE 'stage/%' THEN '"event_type": "stage"'
WHEN event_name LIKE '%idle%' THEN '"event_type": "idle"'
ELSE ''
END
)
, '}'
)
ORDER BY event_id ASC SEPARATOR ',') event
INTO json_objects
FROM (
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id,
CONCAT(sql_text, '\\n',
'errors: ', errors, '\\n',
'warnings: ', warnings, '\\n',
'lock time: ', ROUND(lock_time/1000000, 2),'us\\n',
'rows affected: ', rows_affected, '\\n',
'rows sent: ', rows_sent, '\\n',
'rows examined: ', rows_examined, '\\n',
'tmp tables: ', created_tmp_tables, '\\n',
'tmp disk tables: ', created_tmp_disk_tables, '\\n',
'select scan: ', select_scan, '\\n',
'select full join: ', select_full_join, '\\n',
'select full range join: ', select_full_range_join, '\\n',
'select range: ', select_range, '\\n',
'select range check: ', select_range_check, '\\n',
'sort merge passes: ', sort_merge_passes, '\\n',
'sort rows: ', sort_rows, '\\n',
'sort range: ', sort_range, '\\n',
'sort scan: ', sort_scan, '\\n',
'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\\n',
'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\\n'
) AS wait_info
FROM performance_schema.events_statements_history_long WHERE thread_id = thd_id)
UNION
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info
FROM performance_schema.events_stages_history_long WHERE thread_id = thd_id)
UNION
(SELECT thread_id, event_id,
CONCAT(event_name ,
IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''),
IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''),
IF(event_name LIKE 'wait/io/file%', '\\n', ''),
IF(object_schema IS NOT NULL, CONCAT('\\nObject: ', object_schema, '.'), ''),
IF(object_name IS NOT NULL,
IF (event_name LIKE 'wait/io/socket%',
CONCAT(IF (object_name LIKE ':0%', @@socket, object_name)),
object_name),
''),
IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''),'\\n'
) AS event_name,
timer_wait, timer_start, nesting_event_id, source AS wait_info
FROM performance_schema.events_waits_history_long WHERE thread_id = thd_id)) events
ORDER BY event_id;
RETURN CONCAT('{',
CONCAT_WS(',',
'"rankdir": "LR"',
'"nodesep": "0.10"',
CONCAT('"stack_created": "', NOW(), '"'),
CONCAT('"mysql_version": "', VERSION(), '"'),
CONCAT('"mysql_user": "', CURRENT_USER(), '"'),
CONCAT('"events": [', IFNULL(json_objects,''), ']')
),
'}');
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Outputs a J... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE json_objects LONGTEXT;
UPDATE performance_schema.threads
SET instrumented = 'NO'
WHERE processlist_id = CONNECTION_ID();
SET SESSION group_concat_max_len=@@global.max_allowed_packet;
SELECT GROUP_CONCAT(CONCAT( '{'
, CONCAT_WS( ', '
, CONCAT('"nesting_event_id": "', IF(nesting_event_id IS NULL, '0', nesting_event_id), '"')
, CONCAT('"event_id": "', event_id, '"')
, CONCAT( '"timer_wait": ', ROUND(timer_wait/1000000, 2))
, CONCAT( '"event_info": "'
, CASE
WHEN event_name NOT LIKE 'wait/io%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -2), '\', '\\')
WHEN event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -4), '\', '\\')
ELSE event_name
END
, '"'
)
, CONCAT( '"wait_info": "', IFNULL(wait_info, ''), '"')
, CONCAT( '"source": "', IF(true AND event_name LIKE 'wait%', IFNULL(wait_info, ''), ''), '"')
, CASE
WHEN event_name LIKE 'wait/io/file%' THEN '"event_type": "io/file"'
WHEN event_name LIKE 'wait/io/table%' THEN '"event_type": "io/table"'
WHEN event_name LIKE 'wait/io/socket%' THEN '"event_type": "io/socket"'
WHEN event_name LIKE 'wait/synch/mutex%' THEN '"event_type": "synch/mutex"'
WHEN event_name LIKE 'wait/synch/cond%' THEN '"event_type": "synch/cond"'
WHEN event_name LIKE 'wait/synch/rwlock%' THEN '"event_type": "synch/rwlock"'
WHEN event_name LIKE 'wait/lock%' THEN '"event_type": "lock"'
WHEN event_name LIKE 'statement/%' THEN '"event_type": "stmt"'
WHEN event_name LIKE 'stage/%' THEN '"event_type": "stage"'
WHEN event_name LIKE '%idle%' THEN '"event_type": "idle"'
ELSE ''
END
)
, '}'
)
ORDER BY event_id ASC SEPARATOR ',') event
INTO json_objects
FROM (
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id,
CONCAT(sql_text, '\n',
'errors: ', errors, '\n',
'warnings: ', warnings, '\n',
'lock time: ', ROUND(lock_time/1000000, 2),'us\n',
'rows affected: ', rows_affected, '\n',
'rows sent: ', rows_sent, '\n',
'rows examined: ', rows_examined, '\n',
'tmp tables: ', created_tmp_tables, '\n',
'tmp disk tables: ', created_tmp_disk_tables, '\n',
'select scan: ', select_scan, '\n',
'select full join: ', select_full_join, '\n',
'select full range join: ', select_full_range_join, '\n',
'select range: ', select_range, '\n',
'select range check: ', select_range_check, '\n',
'sort merge passes: ', sort_merge_passes, '\n',
'sort rows: ', sort_rows, '\n',
'sort range: ', sort_range, '\n',
'sort scan: ', sort_scan, '\n',
'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\n',
'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\n'
) AS wait_info
FROM performance_schema.events_statements_history_long WHERE thread_id = thd_id)
UNION
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info
FROM performance_schema.events_stages_history_long WHERE thread_id = thd_id)
UNION
(SELECT thread_id, event_id,
CONCAT(event_name ,
IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''),
IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''),
IF(event_name LIKE 'wait/io/file%', '\n', ''),
IF(object_schema IS NOT NULL, CONCAT('\nObject: ', object_schema, '.'), ''),
IF(object_name IS NOT NULL,
IF (event_name LIKE 'wait/io/socket%',
CONCAT(IF (object_name LIKE ':0%', @@socket, object_name)),
object_name),
''),
IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''),'\n'
) AS event_name,
timer_wait, timer_start, nesting_event_id, source AS wait_info
FROM performance_schema.events_waits_history_long WHERE thread_id = thd_id)) events
ORDER BY event_id;
RETURN CONCAT('{',
CONCAT_WS(',',
'"rankdir": "LR"',
'"nodesep": "0.10"',
CONCAT('"stack_created": "', NOW(), '"'),
CONCAT('"mysql_version": "', VERSION(), '"'),
CONCAT('"mysql_user": "', CURRENT_USER(), '"'),
CONCAT('"events": [', IFNULL(json_objects,''), ']')
),
'}');
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_thread_id' AND `proc`.`type` = 'FUNCTION'
|
sys |
ps_thread_id |
FUNCTION |
ps_thread_id |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
in_connection_id BIGINT UNSIGNED
|
bigint(20) unsigned
|
BEGIN
RETURN (SELECT THREAD_ID
FROM `performance_schema`.`threads`
WHERE PROCESSLIST_ID = IFNULL(in_connection_id, CONNECTION_ID())
);
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Return the ... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN (SELECT THREAD_ID
FROM `performance_schema`.`threads`
WHERE PROCESSLIST_ID = IFNULL(in_connection_id, CONNECTION_ID())
);
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_thread_account' AND `proc`.`type` = 'FUNCTION'
|
sys |
ps_thread_account |
FUNCTION |
ps_thread_account |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
in_thread_id BIGINT UNSIGNED
|
text CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
BEGIN
RETURN (SELECT IF(
type = 'FOREGROUND',
CONCAT(processlist_user, '@', processlist_host),
type
) AS account
FROM `performance_schema`.`threads`
WHERE thread_id = in_thread_id);
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Return the ... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
RETURN (SELECT IF(
type = 'FOREGROUND',
CONCAT(processlist_user, '@', processlist_host),
type
) AS account
FROM `performance_schema`.`threads`
WHERE thread_id = in_thread_id);
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_statement_avg_latency_histogram' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_statement_avg_latency_histogram |
PROCEDURE |
ps_statement_avg_latency_histogram |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
|
|
BEGIN
SELECT CONCAT('\n',
'\n . = 1 unit',
'\n * = 2 units',
'\n # = 3 units\n',
@label := CONCAT(@label_inner := CONCAT('\n(0 - ',
ROUND((@bucket_size := (SELECT ROUND((MAX(avg_us) - MIN(avg_us)) / (@buckets := 16)) AS size
FROM sys.x$ps_digest_avg_latency_distribution)) / (@unit_div := 1000)),
(@unit := 'ms'), ')'),
REPEAT(' ', (@max_label_size := ((1 + LENGTH(ROUND((@bucket_size * 15) / @unit_div)) + 3 + LENGTH(ROUND(@bucket_size * 16) / @unit_div)) + 1)) - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us <= @bucket_size), 0)),
REPEAT(' ', (@max_label_len := (@max_label_size + LENGTH((@total_queries := (SELECT SUM(cnt) FROM sys.x$ps_digest_avg_latency_distribution)))) + 1) - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < (@one_unit := 40), '.', IF(@count_in_bucket < (@two_unit := 80), '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND(@bucket_size / @unit_div), ' - ', ROUND((@bucket_size * 2) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size AND b1.avg_us <= @bucket_size * 2), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 2) / @unit_div), ' - ', ROUND((@bucket_size * 3) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 2 AND b1.avg_us <= @bucket_size * 3), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 3) / @unit_div), ' - ', ROUND((@bucket_size * 4) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 3 AND b1.avg_us <= @bucket_size * 4), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 4) / @unit_div), ' - ', ROUND((@bucket_size * 5) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 4 AND b1.avg_us <= @bucket_size * 5), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 5) / @unit_div), ' - ', ROUND((@bucket_size * 6) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 5 AND b1.avg_us <= @bucket_size * 6), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 6) / @unit_div), ' - ', ROUND((@bucket_size * 7) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 6 AND b1.avg_us <= @bucket_size * 7), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 7) / @unit_div), ' - ', ROUND((@bucket_size * 8) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 7 AND b1.avg_us <= @bucket_size * 8), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 8) / @unit_div), ' - ', ROUND((@bucket_size * 9) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 8 AND b1.avg_us <= @bucket_size * 9), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 9) / @unit_div), ' - ', ROUND((@bucket_size * 10) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 9 AND b1.avg_us <= @bucket_size * 10), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 10) / @unit_div), ' - ', ROUND((@bucket_size * 11) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 10 AND b1.avg_us <= @bucket_size * 11), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 11) / @unit_div), ' - ', ROUND((@bucket_size * 12) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 11 AND b1.avg_us <= @bucket_size * 12), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 12) / @unit_div), ' - ', ROUND((@bucket_size * 13) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 12 AND b1.avg_us <= @bucket_size * 13), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 13) / @unit_div), ' - ', ROUND((@bucket_size * 14) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 13 AND b1.avg_us <= @bucket_size * 14), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 14) / @unit_div), ' - ', ROUND((@bucket_size * 15) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 14 AND b1.avg_us <= @bucket_size * 15), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 15) / @unit_div), ' - ', ROUND((@bucket_size * 16) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 15 AND b1.avg_us <= @bucket_size * 16), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
'\n\n Total Statements: ', @total_queries, '; Buckets: ', @buckets , '; Bucket Size: ', ROUND(@bucket_size / @unit_div) , ' ', @unit, ';\n'
) AS `Performance Schema Statement Digest Average Latency Histogram`;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Outputs a t... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT CONCAT('\n',
'\n . = 1 unit',
'\n * = 2 units',
'\n # = 3 units\n',
@label := CONCAT(@label_inner := CONCAT('\n(0 - ',
ROUND((@bucket_size := (SELECT ROUND((MAX(avg_us) - MIN(avg_us)) / (@buckets := 16)) AS size
FROM sys.x$ps_digest_avg_latency_distribution)) / (@unit_div := 1000)),
(@unit := 'ms'), ')'),
REPEAT(' ', (@max_label_size := ((1 + LENGTH(ROUND((@bucket_size * 15) / @unit_div)) + 3 + LENGTH(ROUND(@bucket_size * 16) / @unit_div)) + 1)) - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us <= @bucket_size), 0)),
REPEAT(' ', (@max_label_len := (@max_label_size + LENGTH((@total_queries := (SELECT SUM(cnt) FROM sys.x$ps_digest_avg_latency_distribution)))) + 1) - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < (@one_unit := 40), '.', IF(@count_in_bucket < (@two_unit := 80), '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND(@bucket_size / @unit_div), ' - ', ROUND((@bucket_size * 2) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size AND b1.avg_us <= @bucket_size * 2), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 2) / @unit_div), ' - ', ROUND((@bucket_size * 3) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 2 AND b1.avg_us <= @bucket_size * 3), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 3) / @unit_div), ' - ', ROUND((@bucket_size * 4) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 3 AND b1.avg_us <= @bucket_size * 4), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 4) / @unit_div), ' - ', ROUND((@bucket_size * 5) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 4 AND b1.avg_us <= @bucket_size * 5), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 5) / @unit_div), ' - ', ROUND((@bucket_size * 6) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 5 AND b1.avg_us <= @bucket_size * 6), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 6) / @unit_div), ' - ', ROUND((@bucket_size * 7) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 6 AND b1.avg_us <= @bucket_size * 7), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 7) / @unit_div), ' - ', ROUND((@bucket_size * 8) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 7 AND b1.avg_us <= @bucket_size * 8), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 8) / @unit_div), ' - ', ROUND((@bucket_size * 9) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 8 AND b1.avg_us <= @bucket_size * 9), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 9) / @unit_div), ' - ', ROUND((@bucket_size * 10) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 9 AND b1.avg_us <= @bucket_size * 10), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 10) / @unit_div), ' - ', ROUND((@bucket_size * 11) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 10 AND b1.avg_us <= @bucket_size * 11), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 11) / @unit_div), ' - ', ROUND((@bucket_size * 12) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 11 AND b1.avg_us <= @bucket_size * 12), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 12) / @unit_div), ' - ', ROUND((@bucket_size * 13) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 12 AND b1.avg_us <= @bucket_size * 13), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 13) / @unit_div), ' - ', ROUND((@bucket_size * 14) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 13 AND b1.avg_us <= @bucket_size * 14), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 14) / @unit_div), ' - ', ROUND((@bucket_size * 15) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 14 AND b1.avg_us <= @bucket_size * 15), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
@label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 15) / @unit_div), ' - ', ROUND((@bucket_size * 16) / @unit_div), @unit, ')'),
REPEAT(' ', @max_label_size - LENGTH(@label_inner)),
@count_in_bucket := IFNULL((SELECT SUM(cnt)
FROM sys.x$ps_digest_avg_latency_distribution AS b1
WHERE b1.avg_us > @bucket_size * 15 AND b1.avg_us <= @bucket_size * 16), 0)),
REPEAT(' ', @max_label_len - LENGTH(@label)), '| ',
IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')),
IF(@count_in_bucket < @one_unit, @count_in_bucket,
IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''),
'\n\n Total Statements: ', @total_queries, '; Buckets: ', @buckets , '; Bucket Size: ', ROUND(@bucket_size / @unit_div) , ' ', @unit, ';\n'
) AS `Performance Schema Statement Digest Average Latency Histogram`;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_enabled_instruments' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_enabled_instruments |
PROCEDURE |
ps_setup_show_enabled_instruments |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
|
|
BEGIN
SELECT name AS enabled_instruments, timed
FROM performance_schema.setup_instruments
WHERE enabled = 'YES'
ORDER BY enabled_instruments;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT name AS enabled_instruments, timed
FROM performance_schema.setup_instruments
WHERE enabled = 'YES'
ORDER BY enabled_instruments;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_enabled_consumers' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_enabled_consumers |
PROCEDURE |
ps_setup_show_enabled_consumers |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
|
|
BEGIN
SELECT name AS enabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'YES'
ORDER BY enabled_consumers;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT name AS enabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'YES'
ORDER BY enabled_consumers;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_enabled' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_enabled |
PROCEDURE |
ps_setup_show_enabled |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
IN in_show_instruments BOOLEAN,
IN in_show_threads BOOLEAN
|
|
BEGIN
SELECT @@performance_schema AS performance_schema_enabled;
SELECT CONCAT('\'', user, '\'@\'', host, '\'') AS enabled_users
FROM performance_schema.setup_actors
WHERE enabled = 'YES'
ORDER BY enabled_users;
SELECT object_type,
CONCAT(object_schema, '.', object_name) AS objects,
enabled,
timed
FROM performance_schema.setup_objects
WHERE enabled = 'YES'
ORDER BY object_type, objects;
SELECT name AS enabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'YES'
ORDER BY enabled_consumers;
IF (in_show_threads) THEN
SELECT IF(name = 'thread/sql/one_connection',
CONCAT(processlist_user, '@', processlist_host),
REPLACE(name, 'thread/', '')) AS enabled_threads,
TYPE AS thread_type
FROM performance_schema.threads
WHERE INSTRUMENTED = 'YES' AND name <> 'thread/innodb/thread_pool_thread'
ORDER BY enabled_threads;
END IF;
IF (in_show_instruments) THEN
SELECT name AS enabled_instruments,
timed
FROM performance_schema.setup_instruments
WHERE enabled = 'YES'
ORDER BY enabled_instruments;
END IF;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT @@performance_schema AS performance_schema_enabled;
SELECT CONCAT('''', user, '''@''', host, '''') AS enabled_users
FROM performance_schema.setup_actors
WHERE enabled = 'YES'
ORDER BY enabled_users;
SELECT object_type,
CONCAT(object_schema, '.', object_name) AS objects,
enabled,
timed
FROM performance_schema.setup_objects
WHERE enabled = 'YES'
ORDER BY object_type, objects;
SELECT name AS enabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'YES'
ORDER BY enabled_consumers;
IF (in_show_threads) THEN
SELECT IF(name = 'thread/sql/one_connection',
CONCAT(processlist_user, '@', processlist_host),
REPLACE(name, 'thread/', '')) AS enabled_threads,
TYPE AS thread_type
FROM performance_schema.threads
WHERE INSTRUMENTED = 'YES' AND name <> 'thread/innodb/thread_pool_thread'
ORDER BY enabled_threads;
END IF;
IF (in_show_instruments) THEN
SELECT name AS enabled_instruments,
timed
FROM performance_schema.setup_instruments
WHERE enabled = 'YES'
ORDER BY enabled_instruments;
END IF;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_disabled_instruments' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_disabled_instruments |
PROCEDURE |
ps_setup_show_disabled_instruments |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
|
|
BEGIN
SELECT name AS disabled_instruments, timed
FROM performance_schema.setup_instruments
WHERE enabled = 'NO'
ORDER BY disabled_instruments;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT name AS disabled_instruments, timed
FROM performance_schema.setup_instruments
WHERE enabled = 'NO'
ORDER BY disabled_instruments;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_disabled_consumers' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_disabled_consumers |
PROCEDURE |
ps_setup_show_disabled_consumers |
SQL |
READS_SQL_DATA |
YES |
INVOKER |
|
|
BEGIN
SELECT name AS disabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'NO'
ORDER BY disabled_consumers;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT name AS disabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'NO'
ORDER BY disabled_consumers;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_show_disabled' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_show_disabled |
PROCEDURE |
ps_setup_show_disabled |
SQL |
READS_SQL_DATA |
NO |
INVOKER |
IN in_show_instruments BOOLEAN,
IN in_show_threads BOOLEAN
|
|
BEGIN
SELECT @@performance_schema AS performance_schema_enabled;
SELECT object_type,
CONCAT(object_schema, '.', object_name) AS objects,
enabled,
timed
FROM performance_schema.setup_objects
WHERE enabled = 'NO'
ORDER BY object_type, objects;
SELECT name AS disabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'NO'
ORDER BY disabled_consumers;
IF (in_show_threads) THEN
SELECT IF(name = 'thread/sql/one_connection',
CONCAT(processlist_user, '@', processlist_host),
REPLACE(name, 'thread/', '')) AS disabled_threads,
TYPE AS thread_type
FROM performance_schema.threads
WHERE INSTRUMENTED = 'NO'
ORDER BY disabled_threads;
END IF;
IF (in_show_instruments) THEN
SELECT name AS disabled_instruments,
timed
FROM performance_schema.setup_instruments
WHERE enabled = 'NO'
ORDER BY disabled_instruments;
END IF;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Shows all c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SELECT @@performance_schema AS performance_schema_enabled;
SELECT object_type,
CONCAT(object_schema, '.', object_name) AS objects,
enabled,
timed
FROM performance_schema.setup_objects
WHERE enabled = 'NO'
ORDER BY object_type, objects;
SELECT name AS disabled_consumers
FROM performance_schema.setup_consumers
WHERE enabled = 'NO'
ORDER BY disabled_consumers;
IF (in_show_threads) THEN
SELECT IF(name = 'thread/sql/one_connection',
CONCAT(processlist_user, '@', processlist_host),
REPLACE(name, 'thread/', '')) AS disabled_threads,
TYPE AS thread_type
FROM performance_schema.threads
WHERE INSTRUMENTED = 'NO'
ORDER BY disabled_threads;
END IF;
IF (in_show_instruments) THEN
SELECT name AS disabled_instruments,
timed
FROM performance_schema.setup_instruments
WHERE enabled = 'NO'
ORDER BY disabled_instruments;
END IF;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_save' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_save |
PROCEDURE |
ps_setup_save |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
IN in_timeout INT
|
|
BEGIN
DECLARE v_lock_result INT;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT GET_LOCK('sys.ps_setup_save', in_timeout) INTO v_lock_result;
IF v_lock_result THEN
DROP TEMPORARY TABLE IF EXISTS tmp_setup_actors;
DROP TEMPORARY TABLE IF EXISTS tmp_setup_consumers;
DROP TEMPORARY TABLE IF EXISTS tmp_setup_instruments;
DROP TEMPORARY TABLE IF EXISTS tmp_threads;
CREATE TEMPORARY TABLE tmp_setup_actors AS SELECT * FROM performance_schema.setup_actors;
CREATE TEMPORARY TABLE tmp_setup_consumers AS SELECT * FROM performance_schema.setup_consumers;
CREATE TEMPORARY TABLE tmp_setup_instruments AS SELECT * FROM performance_schema.setup_instruments;
CREATE TEMPORARY TABLE tmp_threads (THREAD_ID bigint unsigned NOT NULL PRIMARY KEY, INSTRUMENTED enum('YES','NO') NOT NULL);
INSERT INTO tmp_threads SELECT THREAD_ID, INSTRUMENTED FROM performance_schema.threads;
ELSE
SIGNAL SQLSTATE VALUE '90000'
SET MESSAGE_TEXT = 'Could not lock the sys.ps_setup_save user lock, another thread has a saved configuration';
END IF;
SET sql_log_bin = @log_bin;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Saves the c... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_lock_result INT;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT GET_LOCK('sys.ps_setup_save', in_timeout) INTO v_lock_result;
IF v_lock_result THEN
DROP TEMPORARY TABLE IF EXISTS tmp_setup_actors;
DROP TEMPORARY TABLE IF EXISTS tmp_setup_consumers;
DROP TEMPORARY TABLE IF EXISTS tmp_setup_instruments;
DROP TEMPORARY TABLE IF EXISTS tmp_threads;
CREATE TEMPORARY TABLE tmp_setup_actors AS SELECT * FROM performance_schema.setup_actors;
CREATE TEMPORARY TABLE tmp_setup_consumers AS SELECT * FROM performance_schema.setup_consumers;
CREATE TEMPORARY TABLE tmp_setup_instruments AS SELECT * FROM performance_schema.setup_instruments;
CREATE TEMPORARY TABLE tmp_threads (THREAD_ID bigint unsigned NOT NULL PRIMARY KEY, INSTRUMENTED enum('YES','NO') NOT NULL);
INSERT INTO tmp_threads SELECT THREAD_ID, INSTRUMENTED FROM performance_schema.threads;
ELSE
SIGNAL SQLSTATE VALUE '90000'
SET MESSAGE_TEXT = 'Could not lock the sys.ps_setup_save user lock, another thread has a saved configuration';
END IF;
SET sql_log_bin = @log_bin;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_reset_to_default' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_reset_to_default |
PROCEDURE |
ps_setup_reset_to_default |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
IN in_verbose BOOLEAN
|
|
BEGIN
SET @query = 'DELETE
FROM performance_schema.setup_actors
WHERE NOT (HOST = ''%'' AND USER = ''%'' AND ROLE = ''%'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'INSERT IGNORE INTO performance_schema.setup_actors
VALUES (''%'', ''%'', ''%'', ''YES'', ''YES'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.setup_instruments
SET ENABLED = sys.ps_is_instrument_default_enabled(NAME),
TIMED = sys.ps_is_instrument_default_timed(NAME)';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_instruments\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.setup_consumers
SET ENABLED = IF(NAME IN (''events_statements_current'', ''events_transactions_current'', ''global_instrumentation'', ''thread_instrumentation'', ''statements_digest''), ''YES'', ''NO'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_consumers\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'DELETE
FROM performance_schema.setup_objects
WHERE NOT (OBJECT_TYPE IN (''EVENT'', ''FUNCTION'', ''PROCEDURE'', ''TABLE'', ''TRIGGER'') AND OBJECT_NAME = ''%''
AND (OBJECT_SCHEMA = ''mysql'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )
OR (OBJECT_SCHEMA = ''performance_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )
OR (OBJECT_SCHEMA = ''information_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )
OR (OBJECT_SCHEMA = ''%'' AND ENABLED = ''YES'' AND TIMED = ''YES''))';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'INSERT IGNORE INTO performance_schema.setup_objects
VALUES (''EVENT'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),
(''EVENT'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),
(''EVENT'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),
(''EVENT'' , ''%'' , ''%'', ''YES'', ''YES''),
(''FUNCTION'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),
(''FUNCTION'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),
(''FUNCTION'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),
(''FUNCTION'' , ''%'' , ''%'', ''YES'', ''YES''),
(''PROCEDURE'', ''mysql'' , ''%'', ''NO'' , ''NO'' ),
(''PROCEDURE'', ''performance_schema'', ''%'', ''NO'' , ''NO'' ),
(''PROCEDURE'', ''information_schema'', ''%'', ''NO'' , ''NO'' ),
(''PROCEDURE'', ''%'' , ''%'', ''YES'', ''YES''),
(''TABLE'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),
(''TABLE'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),
(''TABLE'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),
(''TABLE'' , ''%'' , ''%'', ''YES'', ''YES''),
(''TRIGGER'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),
(''TRIGGER'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),
(''TRIGGER'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),
(''TRIGGER'' , ''%'' , ''%'', ''YES'', ''YES'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.threads
SET INSTRUMENTED = ''YES''';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: threads\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Resets the ... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
SET @query = 'DELETE\n FROM performance_schema.setup_actors\n WHERE NOT (HOST = ''%'' AND USER = ''%'' AND ROLE = ''%'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'INSERT IGNORE INTO performance_schema.setup_actors\n VALUES (''%'', ''%'', ''%'', ''YES'', ''YES'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.setup_instruments\n SET ENABLED = sys.ps_is_instrument_default_enabled(NAME),\n TIMED = sys.ps_is_instrument_default_timed(NAME)';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_instruments\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.setup_consumers\n SET ENABLED = IF(NAME IN (''events_statements_current'', ''events_transactions_current'', ''global_instrumentation'', ''thread_instrumentation'', ''statements_digest''), ''YES'', ''NO'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_consumers\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'DELETE\n FROM performance_schema.setup_objects\n WHERE NOT (OBJECT_TYPE IN (''EVENT'', ''FUNCTION'', ''PROCEDURE'', ''TABLE'', ''TRIGGER'') AND OBJECT_NAME = ''%''\n AND (OBJECT_SCHEMA = ''mysql'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )\n OR (OBJECT_SCHEMA = ''performance_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )\n OR (OBJECT_SCHEMA = ''information_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' )\n OR (OBJECT_SCHEMA = ''%'' AND ENABLED = ''YES'' AND TIMED = ''YES''))';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'INSERT IGNORE INTO performance_schema.setup_objects\n VALUES (''EVENT'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),\n (''EVENT'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),\n (''EVENT'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),\n (''EVENT'' , ''%'' , ''%'', ''YES'', ''YES''),\n (''FUNCTION'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),\n (''FUNCTION'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),\n (''FUNCTION'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),\n (''FUNCTION'' , ''%'' , ''%'', ''YES'', ''YES''),\n (''PROCEDURE'', ''mysql'' , ''%'', ''NO'' , ''NO'' ),\n (''PROCEDURE'', ''performance_schema'', ''%'', ''NO'' , ''NO'' ),\n (''PROCEDURE'', ''information_schema'', ''%'', ''NO'' , ''NO'' ),\n (''PROCEDURE'', ''%'' , ''%'', ''YES'', ''YES''),\n (''TABLE'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),\n (''TABLE'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),\n (''TABLE'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),\n (''TABLE'' , ''%'' , ''%'', ''YES'', ''YES''),\n (''TRIGGER'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ),\n (''TRIGGER'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ),\n (''TRIGGER'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ),\n (''TRIGGER'' , ''%'' , ''%'', ''YES'', ''YES'')';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
SET @query = 'UPDATE performance_schema.threads\n SET INSTRUMENTED = ''YES''';
IF (in_verbose) THEN
SELECT CONCAT('Resetting: threads\n', REPLACE(@query, ' ', '')) AS status;
END IF;
PREPARE reset_stmt FROM @query;
EXECUTE reset_stmt;
DEALLOCATE PREPARE reset_stmt;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_reload_saved' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_reload_saved |
PROCEDURE |
ps_setup_reload_saved |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
|
|
BEGIN
DECLARE v_done bool DEFAULT FALSE;
DECLARE v_lock_result INT;
DECLARE v_lock_used_by BIGINT;
DECLARE v_signal_message TEXT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SIGNAL SQLSTATE VALUE '90001'
SET MESSAGE_TEXT = 'An error occurred, was sys.ps_setup_save() run before this procedure?';
END;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT IS_USED_LOCK('sys.ps_setup_save') INTO v_lock_used_by;
IF (v_lock_used_by != CONNECTION_ID()) THEN
SET v_signal_message = CONCAT('The sys.ps_setup_save lock is currently owned by ', v_lock_used_by);
SIGNAL SQLSTATE VALUE '90002'
SET MESSAGE_TEXT = v_signal_message;
END IF;
DELETE FROM performance_schema.setup_actors;
INSERT INTO performance_schema.setup_actors SELECT * FROM tmp_setup_actors;
BEGIN
DECLARE v_name varchar(64);
DECLARE v_enabled enum('YES', 'NO');
DECLARE c_consumers CURSOR FOR SELECT NAME, ENABLED FROM tmp_setup_consumers;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET v_done = FALSE;
OPEN c_consumers;
c_consumers_loop: LOOP
FETCH c_consumers INTO v_name, v_enabled;
IF v_done THEN
LEAVE c_consumers_loop;
END IF;
UPDATE performance_schema.setup_consumers
SET ENABLED = v_enabled
WHERE NAME = v_name;
END LOOP;
CLOSE c_consumers;
END;
UPDATE performance_schema.setup_instruments
INNER JOIN tmp_setup_instruments USING (NAME)
SET performance_schema.setup_instruments.ENABLED = tmp_setup_instruments.ENABLED,
performance_schema.setup_instruments.TIMED = tmp_setup_instruments.TIMED;
BEGIN
DECLARE v_thread_id bigint unsigned;
DECLARE v_instrumented enum('YES', 'NO');
DECLARE c_threads CURSOR FOR SELECT THREAD_ID, INSTRUMENTED FROM tmp_threads;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET v_done = FALSE;
OPEN c_threads;
c_threads_loop: LOOP
FETCH c_threads INTO v_thread_id, v_instrumented;
IF v_done THEN
LEAVE c_threads_loop;
END IF;
UPDATE performance_schema.threads
SET INSTRUMENTED = v_instrumented
WHERE THREAD_ID = v_thread_id;
END LOOP;
CLOSE c_threads;
END;
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(PROCESSLIST_USER IS NOT NULL,
sys.ps_is_account_enabled(PROCESSLIST_HOST, PROCESSLIST_USER),
'YES')
WHERE THREAD_ID NOT IN (SELECT THREAD_ID FROM tmp_threads);
DROP TEMPORARY TABLE tmp_setup_actors;
DROP TEMPORARY TABLE tmp_setup_consumers;
DROP TEMPORARY TABLE tmp_setup_instruments;
DROP TEMPORARY TABLE tmp_threads;
SELECT RELEASE_LOCK('sys.ps_setup_save') INTO v_lock_result;
SET sql_log_bin = @log_bin;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Reloads a s... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
DECLARE v_done bool DEFAULT FALSE;
DECLARE v_lock_result INT;
DECLARE v_lock_used_by BIGINT;
DECLARE v_signal_message TEXT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SIGNAL SQLSTATE VALUE '90001'
SET MESSAGE_TEXT = 'An error occurred, was sys.ps_setup_save() run before this procedure?';
END;
SET @log_bin := @@sql_log_bin;
SET sql_log_bin = 0;
SELECT IS_USED_LOCK('sys.ps_setup_save') INTO v_lock_used_by;
IF (v_lock_used_by != CONNECTION_ID()) THEN
SET v_signal_message = CONCAT('The sys.ps_setup_save lock is currently owned by ', v_lock_used_by);
SIGNAL SQLSTATE VALUE '90002'
SET MESSAGE_TEXT = v_signal_message;
END IF;
DELETE FROM performance_schema.setup_actors;
INSERT INTO performance_schema.setup_actors SELECT * FROM tmp_setup_actors;
BEGIN
DECLARE v_name varchar(64);
DECLARE v_enabled enum('YES', 'NO');
DECLARE c_consumers CURSOR FOR SELECT NAME, ENABLED FROM tmp_setup_consumers;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET v_done = FALSE;
OPEN c_consumers;
c_consumers_loop: LOOP
FETCH c_consumers INTO v_name, v_enabled;
IF v_done THEN
LEAVE c_consumers_loop;
END IF;
UPDATE performance_schema.setup_consumers
SET ENABLED = v_enabled
WHERE NAME = v_name;
END LOOP;
CLOSE c_consumers;
END;
UPDATE performance_schema.setup_instruments
INNER JOIN tmp_setup_instruments USING (NAME)
SET performance_schema.setup_instruments.ENABLED = tmp_setup_instruments.ENABLED,
performance_schema.setup_instruments.TIMED = tmp_setup_instruments.TIMED;
BEGIN
DECLARE v_thread_id bigint unsigned;
DECLARE v_instrumented enum('YES', 'NO');
DECLARE c_threads CURSOR FOR SELECT THREAD_ID, INSTRUMENTED FROM tmp_threads;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
SET v_done = FALSE;
OPEN c_threads;
c_threads_loop: LOOP
FETCH c_threads INTO v_thread_id, v_instrumented;
IF v_done THEN
LEAVE c_threads_loop;
END IF;
UPDATE performance_schema.threads
SET INSTRUMENTED = v_instrumented
WHERE THREAD_ID = v_thread_id;
END LOOP;
CLOSE c_threads;
END;
UPDATE performance_schema.threads
SET INSTRUMENTED = IF(PROCESSLIST_USER IS NOT NULL,
sys.ps_is_account_enabled(PROCESSLIST_HOST, PROCESSLIST_USER),
'YES')
WHERE THREAD_ID NOT IN (SELECT THREAD_ID FROM tmp_threads);
DROP TEMPORARY TABLE tmp_setup_actors;
DROP TEMPORARY TABLE tmp_setup_consumers;
DROP TEMPORARY TABLE tmp_setup_instruments;
DROP TEMPORARY TABLE tmp_threads;
SELECT RELEASE_LOCK('sys.ps_setup_save') INTO v_lock_result;
SET sql_log_bin = @log_bin;
END
|
NONE |
|
|
Edit
|
Copy
|
Delete
DELETE FROM proc WHERE `proc`.`db` = 'sys' AND `proc`.`name` = 'ps_setup_enable_thread' AND `proc`.`type` = 'PROCEDURE'
|
sys |
ps_setup_enable_thread |
PROCEDURE |
ps_setup_enable_thread |
SQL |
MODIFIES_SQL_DATA |
NO |
INVOKER |
IN in_connection_id BIGINT
|
|
BEGIN
UPDATE performance_schema.threads
SET instrumented = 'YES'
WHERE processlist_id = in_connection_id;
SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' thread', IF(@rows != 1, 's', '')) AS summary;
END
|
mariadb.sys@localhost |
2026-03-28 02:10:22 |
2026-03-28 02:10:22 |
|
Description
Enable the ... |
utf8mb3 |
utf8mb3_general_ci |
utf8mb3_general_ci |
BEGIN
UPDATE performance_schema.threads
SET instrumented = 'YES'
WHERE processlist_id = in_connection_id;
SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' thread', IF(@rows != 1, 's', '')) AS summary;
END
|
NONE |