diff --git a/.rtx5tmp/before.sql b/.rtx5tmp/before.sql new file mode 100644 index 0000000..1c7cd0b --- /dev/null +++ b/.rtx5tmp/before.sql @@ -0,0 +1,237 @@ +-- =========================================================================== +-- pbl_runtime_event 表 DDL + 按月 RANGE 分区 + append-only 约束(M11b-1) +-- 由 scripts/pbl_runtime_event_ddl.py 生成,改表结构只改生成器再 --emit。 +-- 目标引擎 mariadb(projects/pbls/env/test.json: db.engine=mariadb)。 +-- 执行:mysql --protocol=tcp -u -p < 本文件 +-- 说明:触发器含多语句体,须用 mysql CLI(DELIMITER)执行; +-- 应用侧 ensure_tables() 只执行 A 段单语句 CREATE TABLE。 +-- 开发说明:projects/pbls/docs/02-develop/dev-notes-m11b1-pbl_runtime_event.md +-- =========================================================================== + +-- ---------------------------------------------------------------- A. 建表(分区) +CREATE TABLE IF NOT EXISTS `pbl_runtime_event` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID(逻辑主键;物理主键=(id,created_at))', + `tenant_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '租户ID(多租户强制打头)', + `event_uid` VARCHAR(64) NOT NULL COMMENT '事件UID(uuid,应用层生成)', + `event_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事件编码', + `idem_key` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '幂等键(同键重复投递只落一条)', + `world_id` BIGINT NOT NULL DEFAULT 0 COMMENT '世界ID(引用 world 基表,只读)', + `scene_id` BIGINT NOT NULL DEFAULT 0 COMMENT '场景/会话ID(引用 scense 基表,只读)', + `session_id` BIGINT NOT NULL DEFAULT 0 COMMENT '游戏会话ID(M11a 语义,与 scene_id 同域)', + `entity_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '实体ID(引用 entity 基表,只读)', + `actor_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '触发者(服务端会话解析,客户端禁填)', + `event_type` VARCHAR(64) NOT NULL COMMENT '事件类型', + `payload` TEXT NULL COMMENT '事件负载JSON(任务书字段)', + `payload_json` LONGTEXT NULL COMMENT '事件负载JSON(M11a 写路径列名,与 payload 同义留宽)', + `causation_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '因果链:引发本事件的事件UID', + `seq` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(轮询游标,应用层生成)', + `seq_no` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(M11a 写路径列名)', + `source` VARCHAR(32) NOT NULL DEFAULT 'runtime' COMMENT '来源:runtime/agent/script/client_intent', + `state` VARCHAR(16) NOT NULL DEFAULT 'applied' COMMENT 'applied/rejected/rolled_back', + `state_version` BIGINT NOT NULL DEFAULT 0 COMMENT '本事件推进到的服务端权威版本', + `tx_group` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事务组(同组同事务)', + `broadcast` TINYINT NOT NULL DEFAULT 1 COMMENT '是否参与广播 0/1', + `created_by` BIGINT NOT NULL DEFAULT 0 COMMENT '创建人', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(分区键,禁TIMESTAMP)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间戳(append-only:永不 UPDATE)', + `occurred_at` DATETIME NULL COMMENT '兼容列(M11a 旧分区键,新写入可空)', + PRIMARY KEY (`id`, `created_at`), + UNIQUE KEY `uk_event_uid` (`tenant_id`, `event_uid`, `created_at`), + UNIQUE KEY `uk_tenant_idem` (`tenant_id`, `idem_key`, `created_at`), + KEY `ix_scene_created` (`scene_id`, `created_at`), + KEY `ix_tenant_session_seq` (`tenant_id`, `session_id`, `seq`), + KEY `ix_tenant_session_seqno` (`tenant_id`, `session_id`, `seq_no`), + KEY `ix_tenant_world_type` (`tenant_id`, `world_id`, `event_type`), + KEY `ix_tx_group` (`tx_group`), + KEY `ix_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci + COMMENT='运行时事件流(append-only,按月RANGE分区,保留14个月)' +PARTITION BY RANGE COLUMNS(`created_at`) ( + PARTITION `p202609` VALUES LESS THAN (DATE '2026-10-01'), + PARTITION `p202610` VALUES LESS THAN (DATE '2026-11-01'), + PARTITION `p202611` VALUES LESS THAN (DATE '2026-12-01'), + PARTITION `p202612` VALUES LESS THAN (DATE '2027-01-01'), + PARTITION `p202701` VALUES LESS THAN (DATE '2027-02-01'), + PARTITION `p202702` VALUES LESS THAN (DATE '2027-03-01'), + PARTITION `pmax` VALUES LESS THAN (MAXVALUE) +); + +DELIMITER $$ + +-- ---------------------------------------------------------------- B. append-only +-- append-only 断言过程:非白名单操作一律 SIGNAL 拒绝 +DROP PROCEDURE IF EXISTS `pbl_assert_append_only`$$ + +CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + IF p_table <> 'pbl_runtime_event' THEN + RETURN; -- 只守护事件表,其他表不受影响 + END IF; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + RETURN; -- break-glass:一次性历史数据回填 + END IF; + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; +END$$ + +-- BEFORE UPDATE 护栏:把违规语句原文带进错误消息,便于定位调用方 +DROP TRIGGER IF EXISTS `trg_pbl_runtime_event_append_only_upd`$$ + +CREATE TRIGGER `trg_pbl_runtime_event_append_only_upd` + BEFORE UPDATE ON `pbl_runtime_event` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + SET v_msg = CONCAT('break-glass update on ', 'pbl_runtime_event'); + ELSE + SET v_msg = CONCAT('UPDATE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('pbl_runtime_event', 'update', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> 'append_only_admin' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_UPDATE', + MYSQL_ERRNO = 45002; + END IF; +END$$ + +-- BEFORE DELETE 护栏 +DROP TRIGGER IF EXISTS `trg_pbl_runtime_event_append_only_del`$$ + +CREATE TRIGGER `trg_pbl_runtime_event_append_only_del` + BEFORE DELETE ON `pbl_runtime_event` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + SET v_msg = CONCAT('break-glass delete on ', 'pbl_runtime_event'); + ELSE + SET v_msg = CONCAT('DELETE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('pbl_runtime_event', 'delete', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> 'append_only_admin' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_DELETE', + MYSQL_ERRNO = 45003; + END IF; +END$$ + +-- 权限层加固(可选,需 DBA 账号执行;app 账号只保留增/查) +-- GRANT INSERT, SELECT, UPDATE, DELETE ON `pbls`.`pbl_runtime_event` TO NULL; -- 占位,勿执行 +-- REVOKE UPDATE, DELETE ON `pbls`.`pbl_runtime_event` FROM 'pbls'@'%'; + +-- ---------------------------------------------------------------- C. 分区维护 +-- 1) 幂等补建未来月分区:pmax 存在时用 REORGANIZE PARTITION 拆出新月份(不丢数据) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_ensure_partitions`$$ + +CREATE PROCEDURE `pbl_runtime_event_ensure_partitions`(IN p_months_ahead INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(16); + DECLARE v_upper DATE; + DECLARE v_exists INT DEFAULT 0; + DECLARE v_sql TEXT; + DECLARE cur CURSOR FOR + WITH RECURSIVE ms(month_start) AS ( + SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01') + UNION ALL + SELECT DATE_ADD(month_start, INTERVAL 1 MONTH) FROM ms + WHERE month_start < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), + INTERVAL p_months_ahead MONTH) + ) + SELECT CONCAT('p', DATE_FORMAT(month_start, '%Y%m')), + DATE_ADD(month_start, INTERVAL 1 MONTH) + FROM ms; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + OPEN cur; + read_loop: LOOP + FETCH cur INTO v_name, v_upper; + IF v_done = 1 THEN + LEAVE read_loop; + END IF; + SELECT COUNT(*) INTO v_exists FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pbl_runtime_event' + AND PARTITION_NAME = v_name; + IF v_exists = 0 THEN + SET @pbl_part_sql = CONCAT( + 'ALTER TABLE `pbl_runtime_event` REORGANIZE PARTITION `pmax` INTO (', + 'PARTITION `', v_name, '` VALUES LESS THAN (DATE ''', v_upper, '''), ', + 'PARTITION `pmax` VALUES LESS THAN (MAXVALUE))'); + PREPARE pbl_part_st FROM @pbl_part_sql; + EXECUTE pbl_part_st; + DEALLOCATE PREPARE pbl_part_st; + END IF; + END LOOP; + CLOSE cur; +END$$ + +-- 2) 到期归档:整月 DROP PARTITION(append-only 表唯一合规的清理手段) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_prune_partitions`$$ + +CREATE PROCEDURE `pbl_runtime_event_prune_partitions`(IN p_keep_months INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(64); + DECLARE v_cutoff DATE; + DECLARE cur CURSOR FOR + SELECT PARTITION_NAME FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pbl_runtime_event' + AND PARTITION_NAME IS NOT NULL + AND PARTITION_NAME <> 'pmax' + AND PARTITION_NAME < CONCAT('p', DATE_FORMAT(v_cutoff, '%Y%m')); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + SET v_cutoff = DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL -p_keep_months MONTH); + OPEN cur; + prune_loop: LOOP + FETCH cur INTO v_name; + IF v_done = 1 THEN + LEAVE prune_loop; + END IF; + SET @pbl_drop_sql = CONCAT('ALTER TABLE `pbl_runtime_event` DROP PARTITION `', v_name, '`'); + PREPARE pbl_drop_st FROM @pbl_drop_sql; + EXECUTE pbl_drop_st; + DEALLOCATE PREPARE pbl_drop_st; + END LOOP; + CLOSE cur; +END$$ + +-- 3) 每月自动补分区(需 event_scheduler=ON;否则用 cron,见开发说明) +-- SET GLOBAL event_scheduler = ON; +DROP EVENT IF EXISTS `ev_pbl_runtime_event_partition_maintain`$$ + +CREATE EVENT IF NOT EXISTS `ev_pbl_runtime_event_partition_maintain` + ON SCHEDULE EVERY 1 MONTH + STARTS TIMESTAMP(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01 03:00:00')) + ON COMPLETION PRESERVE + ENABLE + COMMENT '每月预建未来 6 个月分区' +DO CALL pbl_runtime_event_ensure_partitions(6)$$ + +DELIMITER ; + +-- ---------------------------------------------------------------- D. 一次性改造 +-- 一次性改造(仅当 pbl_runtime_event 已存在且未分区时手工执行;先备份): +-- 1) CREATE TABLE pbl_runtime_event_new ... (本文件 A 段 DDL,改名 _new) +-- 2) SET @pbl_guard_ctx = 'append_only_admin'; -- break-glass,仅回填期间 +-- INSERT INTO pbl_runtime_event_new (...) SELECT ... FROM pbl_runtime_event; +-- SET @pbl_guard_ctx = NULL; +-- 3) RENAME TABLE pbl_runtime_event TO pbl_runtime_event_m11a_bak, +-- pbl_runtime_event_new TO pbl_runtime_event; +-- 4) 重放 append-only 触发器段(B 段),核对 EXPLAIN 分区裁剪后删备份表。 +-- 本脚本不自动执行改造:DROP/RENAME 生产表必须人工确认(见开发说明「回滚」段)。 +SELECT 'm11b-1 migrate: 人工执行,见注释' AS note; diff --git a/.rtx5tmp/d/aria_log_control b/.rtx5tmp/d/aria_log_control deleted file mode 100644 index 5eae6c3..0000000 Binary files a/.rtx5tmp/d/aria_log_control and /dev/null differ diff --git a/.rtx5tmp/d/mysql/innodb_index_stats.ibd b/.rtx5tmp/d/mysql/innodb_index_stats.ibd deleted file mode 100644 index 8838405..0000000 Binary files a/.rtx5tmp/d/mysql/innodb_index_stats.ibd and /dev/null differ diff --git a/.rtx5tmp/d/aria_log.00000001 b/.rtx5tmp/db/aria_log.00000001 similarity index 95% rename from .rtx5tmp/d/aria_log.00000001 rename to .rtx5tmp/db/aria_log.00000001 index 8845b17..28c7b1e 100644 Binary files a/.rtx5tmp/d/aria_log.00000001 and b/.rtx5tmp/db/aria_log.00000001 differ diff --git a/.rtx5tmp/db/aria_log_control b/.rtx5tmp/db/aria_log_control new file mode 100644 index 0000000..5e7802c Binary files /dev/null and b/.rtx5tmp/db/aria_log_control differ diff --git a/.rtx5tmp/d/mysql/db.opt b/.rtx5tmp/db/exp/db.opt similarity index 100% rename from .rtx5tmp/d/mysql/db.opt rename to .rtx5tmp/db/exp/db.opt diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202609.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202609.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202609.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202610.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202610.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202610.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202611.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202611.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202611.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202612.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202612.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202612.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202701.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202701.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202701.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#p202702.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202702.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#p202702.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event#P#pmax.ibd b/.rtx5tmp/db/exp/pbl_runtime_event#P#pmax.ibd new file mode 100644 index 0000000..95ea767 Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event#P#pmax.ibd differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event.frm b/.rtx5tmp/db/exp/pbl_runtime_event.frm new file mode 100644 index 0000000..65c99af Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event.frm differ diff --git a/.rtx5tmp/db/exp/pbl_runtime_event.par b/.rtx5tmp/db/exp/pbl_runtime_event.par new file mode 100644 index 0000000..7b1cf9e Binary files /dev/null and b/.rtx5tmp/db/exp/pbl_runtime_event.par differ diff --git a/.rtx5tmp/d/ib_buffer_pool b/.rtx5tmp/db/ib_buffer_pool similarity index 100% rename from .rtx5tmp/d/ib_buffer_pool rename to .rtx5tmp/db/ib_buffer_pool diff --git a/.rtx5tmp/d/ib_logfile0 b/.rtx5tmp/db/ib_logfile0 similarity index 99% rename from .rtx5tmp/d/ib_logfile0 rename to .rtx5tmp/db/ib_logfile0 index d47ad31..2cf097a 100644 Binary files a/.rtx5tmp/d/ib_logfile0 and b/.rtx5tmp/db/ib_logfile0 differ diff --git a/.rtx5tmp/d/ibdata1 b/.rtx5tmp/db/ibdata1 similarity index 99% rename from .rtx5tmp/d/ibdata1 rename to .rtx5tmp/db/ibdata1 index 7c7e29a..9ad7de0 100644 Binary files a/.rtx5tmp/d/ibdata1 and b/.rtx5tmp/db/ibdata1 differ diff --git a/.rtx5tmp/d/ibtmp1 b/.rtx5tmp/db/ibtmp1 similarity index 100% rename from .rtx5tmp/d/ibtmp1 rename to .rtx5tmp/db/ibtmp1 diff --git a/.rtx5tmp/d/multi-master.info b/.rtx5tmp/db/multi-master.info similarity index 100% rename from .rtx5tmp/d/multi-master.info rename to .rtx5tmp/db/multi-master.info diff --git a/.rtx5tmp/d/mysql/column_stats.MAD b/.rtx5tmp/db/mysql/column_stats.MAD similarity index 100% rename from .rtx5tmp/d/mysql/column_stats.MAD rename to .rtx5tmp/db/mysql/column_stats.MAD diff --git a/.rtx5tmp/d/mysql/column_stats.MAI b/.rtx5tmp/db/mysql/column_stats.MAI similarity index 96% rename from .rtx5tmp/d/mysql/column_stats.MAI rename to .rtx5tmp/db/mysql/column_stats.MAI index 0c8ff02..6bc56e1 100644 Binary files a/.rtx5tmp/d/mysql/column_stats.MAI and b/.rtx5tmp/db/mysql/column_stats.MAI differ diff --git a/.rtx5tmp/d/mysql/column_stats.frm b/.rtx5tmp/db/mysql/column_stats.frm similarity index 97% rename from .rtx5tmp/d/mysql/column_stats.frm rename to .rtx5tmp/db/mysql/column_stats.frm index 5e40ecb..e9f6d45 100644 Binary files a/.rtx5tmp/d/mysql/column_stats.frm and b/.rtx5tmp/db/mysql/column_stats.frm differ diff --git a/.rtx5tmp/d/mysql/columns_priv.MAD b/.rtx5tmp/db/mysql/columns_priv.MAD similarity index 100% rename from .rtx5tmp/d/mysql/columns_priv.MAD rename to .rtx5tmp/db/mysql/columns_priv.MAD diff --git a/.rtx5tmp/d/mysql/columns_priv.MAI b/.rtx5tmp/db/mysql/columns_priv.MAI similarity index 97% rename from .rtx5tmp/d/mysql/columns_priv.MAI rename to .rtx5tmp/db/mysql/columns_priv.MAI index 0d3ba24..8bd54e9 100644 Binary files a/.rtx5tmp/d/mysql/columns_priv.MAI and b/.rtx5tmp/db/mysql/columns_priv.MAI differ diff --git a/.rtx5tmp/d/mysql/columns_priv.frm b/.rtx5tmp/db/mysql/columns_priv.frm similarity index 94% rename from .rtx5tmp/d/mysql/columns_priv.frm rename to .rtx5tmp/db/mysql/columns_priv.frm index 5a508da..ba01997 100644 Binary files a/.rtx5tmp/d/mysql/columns_priv.frm and b/.rtx5tmp/db/mysql/columns_priv.frm differ diff --git a/.rtx5tmp/d/mysql/db.MAD b/.rtx5tmp/db/mysql/db.MAD similarity index 100% rename from .rtx5tmp/d/mysql/db.MAD rename to .rtx5tmp/db/mysql/db.MAD diff --git a/.rtx5tmp/d/mysql/db.MAI b/.rtx5tmp/db/mysql/db.MAI similarity index 99% rename from .rtx5tmp/d/mysql/db.MAI rename to .rtx5tmp/db/mysql/db.MAI index debd0e3..a3ef47a 100644 Binary files a/.rtx5tmp/d/mysql/db.MAI and b/.rtx5tmp/db/mysql/db.MAI differ diff --git a/.rtx5tmp/d/mysql/db.frm b/.rtx5tmp/db/mysql/db.frm similarity index 94% rename from .rtx5tmp/d/mysql/db.frm rename to .rtx5tmp/db/mysql/db.frm index 6d74275..753c17e 100644 Binary files a/.rtx5tmp/d/mysql/db.frm and b/.rtx5tmp/db/mysql/db.frm differ diff --git a/.rtx5tmp/db/mysql/db.opt b/.rtx5tmp/db/mysql/db.opt new file mode 100644 index 0000000..ccbf699 --- /dev/null +++ b/.rtx5tmp/db/mysql/db.opt @@ -0,0 +1,2 @@ +default-character-set=utf8mb4 +default-collation=utf8mb4_general_ci diff --git a/.rtx5tmp/d/mysql/event.MAD b/.rtx5tmp/db/mysql/event.MAD similarity index 100% rename from .rtx5tmp/d/mysql/event.MAD rename to .rtx5tmp/db/mysql/event.MAD diff --git a/.rtx5tmp/d/mysql/event.MAI b/.rtx5tmp/db/mysql/event.MAI similarity index 96% rename from .rtx5tmp/d/mysql/event.MAI rename to .rtx5tmp/db/mysql/event.MAI index ccc82c7..265c524 100644 Binary files a/.rtx5tmp/d/mysql/event.MAI and b/.rtx5tmp/db/mysql/event.MAI differ diff --git a/.rtx5tmp/d/mysql/event.frm b/.rtx5tmp/db/mysql/event.frm similarity index 97% rename from .rtx5tmp/d/mysql/event.frm rename to .rtx5tmp/db/mysql/event.frm index 9759cbe..f920b87 100644 Binary files a/.rtx5tmp/d/mysql/event.frm and b/.rtx5tmp/db/mysql/event.frm differ diff --git a/.rtx5tmp/d/mysql/func.MAD b/.rtx5tmp/db/mysql/func.MAD similarity index 100% rename from .rtx5tmp/d/mysql/func.MAD rename to .rtx5tmp/db/mysql/func.MAD diff --git a/.rtx5tmp/d/mysql/func.MAI b/.rtx5tmp/db/mysql/func.MAI similarity index 98% rename from .rtx5tmp/d/mysql/func.MAI rename to .rtx5tmp/db/mysql/func.MAI index 4cdc46a..f9e9e29 100644 Binary files a/.rtx5tmp/d/mysql/func.MAI and b/.rtx5tmp/db/mysql/func.MAI differ diff --git a/.rtx5tmp/d/mysql/func.frm b/.rtx5tmp/db/mysql/func.frm similarity index 93% rename from .rtx5tmp/d/mysql/func.frm rename to .rtx5tmp/db/mysql/func.frm index 645b49f..737db77 100644 Binary files a/.rtx5tmp/d/mysql/func.frm and b/.rtx5tmp/db/mysql/func.frm differ diff --git a/.rtx5tmp/d/mysql/general_log.CSM b/.rtx5tmp/db/mysql/general_log.CSM similarity index 100% rename from .rtx5tmp/d/mysql/general_log.CSM rename to .rtx5tmp/db/mysql/general_log.CSM diff --git a/.rtx5tmp/d/mysql/general_log.CSV b/.rtx5tmp/db/mysql/general_log.CSV similarity index 100% rename from .rtx5tmp/d/mysql/general_log.CSV rename to .rtx5tmp/db/mysql/general_log.CSV diff --git a/.rtx5tmp/d/mysql/general_log.frm b/.rtx5tmp/db/mysql/general_log.frm similarity index 78% rename from .rtx5tmp/d/mysql/general_log.frm rename to .rtx5tmp/db/mysql/general_log.frm index 8ac9a8e..d578c63 100644 Binary files a/.rtx5tmp/d/mysql/general_log.frm and b/.rtx5tmp/db/mysql/general_log.frm differ diff --git a/.rtx5tmp/d/mysql/global_priv.MAD b/.rtx5tmp/db/mysql/global_priv.MAD similarity index 100% rename from .rtx5tmp/d/mysql/global_priv.MAD rename to .rtx5tmp/db/mysql/global_priv.MAD diff --git a/.rtx5tmp/d/mysql/global_priv.MAI b/.rtx5tmp/db/mysql/global_priv.MAI similarity index 98% rename from .rtx5tmp/d/mysql/global_priv.MAI rename to .rtx5tmp/db/mysql/global_priv.MAI index 9b93617..caaa429 100644 Binary files a/.rtx5tmp/d/mysql/global_priv.MAI and b/.rtx5tmp/db/mysql/global_priv.MAI differ diff --git a/.rtx5tmp/d/mysql/global_priv.frm b/.rtx5tmp/db/mysql/global_priv.frm similarity index 96% rename from .rtx5tmp/d/mysql/global_priv.frm rename to .rtx5tmp/db/mysql/global_priv.frm index 1621fd2..2b0ae81 100644 Binary files a/.rtx5tmp/d/mysql/global_priv.frm and b/.rtx5tmp/db/mysql/global_priv.frm differ diff --git a/.rtx5tmp/d/mysql/gtid_slave_pos.frm b/.rtx5tmp/db/mysql/gtid_slave_pos.frm similarity index 90% rename from .rtx5tmp/d/mysql/gtid_slave_pos.frm rename to .rtx5tmp/db/mysql/gtid_slave_pos.frm index a475204..26c372f 100644 Binary files a/.rtx5tmp/d/mysql/gtid_slave_pos.frm and b/.rtx5tmp/db/mysql/gtid_slave_pos.frm differ diff --git a/.rtx5tmp/d/mysql/gtid_slave_pos.ibd b/.rtx5tmp/db/mysql/gtid_slave_pos.ibd similarity index 99% rename from .rtx5tmp/d/mysql/gtid_slave_pos.ibd rename to .rtx5tmp/db/mysql/gtid_slave_pos.ibd index 538c4f6..d5f635d 100644 Binary files a/.rtx5tmp/d/mysql/gtid_slave_pos.ibd and b/.rtx5tmp/db/mysql/gtid_slave_pos.ibd differ diff --git a/.rtx5tmp/d/mysql/help_category.MAD b/.rtx5tmp/db/mysql/help_category.MAD similarity index 100% rename from .rtx5tmp/d/mysql/help_category.MAD rename to .rtx5tmp/db/mysql/help_category.MAD diff --git a/.rtx5tmp/d/mysql/help_category.MAI b/.rtx5tmp/db/mysql/help_category.MAI similarity index 99% rename from .rtx5tmp/d/mysql/help_category.MAI rename to .rtx5tmp/db/mysql/help_category.MAI index f81076e..3cb2e37 100644 Binary files a/.rtx5tmp/d/mysql/help_category.MAI and b/.rtx5tmp/db/mysql/help_category.MAI differ diff --git a/.rtx5tmp/d/mysql/help_category.frm b/.rtx5tmp/db/mysql/help_category.frm similarity index 90% rename from .rtx5tmp/d/mysql/help_category.frm rename to .rtx5tmp/db/mysql/help_category.frm index 20b8e30..04a847b 100644 Binary files a/.rtx5tmp/d/mysql/help_category.frm and b/.rtx5tmp/db/mysql/help_category.frm differ diff --git a/.rtx5tmp/d/mysql/help_keyword.MAD b/.rtx5tmp/db/mysql/help_keyword.MAD similarity index 100% rename from .rtx5tmp/d/mysql/help_keyword.MAD rename to .rtx5tmp/db/mysql/help_keyword.MAD diff --git a/.rtx5tmp/d/mysql/help_keyword.MAI b/.rtx5tmp/db/mysql/help_keyword.MAI similarity index 98% rename from .rtx5tmp/d/mysql/help_keyword.MAI rename to .rtx5tmp/db/mysql/help_keyword.MAI index 38ea876..98cbb4b 100644 Binary files a/.rtx5tmp/d/mysql/help_keyword.MAI and b/.rtx5tmp/db/mysql/help_keyword.MAI differ diff --git a/.rtx5tmp/d/mysql/help_keyword.frm b/.rtx5tmp/db/mysql/help_keyword.frm similarity index 88% rename from .rtx5tmp/d/mysql/help_keyword.frm rename to .rtx5tmp/db/mysql/help_keyword.frm index 984afd7..5fbc1c9 100644 Binary files a/.rtx5tmp/d/mysql/help_keyword.frm and b/.rtx5tmp/db/mysql/help_keyword.frm differ diff --git a/.rtx5tmp/d/mysql/help_relation.MAD b/.rtx5tmp/db/mysql/help_relation.MAD similarity index 100% rename from .rtx5tmp/d/mysql/help_relation.MAD rename to .rtx5tmp/db/mysql/help_relation.MAD diff --git a/.rtx5tmp/d/mysql/help_relation.MAI b/.rtx5tmp/db/mysql/help_relation.MAI similarity index 99% rename from .rtx5tmp/d/mysql/help_relation.MAI rename to .rtx5tmp/db/mysql/help_relation.MAI index 0352204..71de570 100644 Binary files a/.rtx5tmp/d/mysql/help_relation.MAI and b/.rtx5tmp/db/mysql/help_relation.MAI differ diff --git a/.rtx5tmp/d/mysql/help_relation.frm b/.rtx5tmp/db/mysql/help_relation.frm similarity index 88% rename from .rtx5tmp/d/mysql/help_relation.frm rename to .rtx5tmp/db/mysql/help_relation.frm index 81d828d..87761ac 100644 Binary files a/.rtx5tmp/d/mysql/help_relation.frm and b/.rtx5tmp/db/mysql/help_relation.frm differ diff --git a/.rtx5tmp/d/mysql/help_topic.MAD b/.rtx5tmp/db/mysql/help_topic.MAD similarity index 100% rename from .rtx5tmp/d/mysql/help_topic.MAD rename to .rtx5tmp/db/mysql/help_topic.MAD diff --git a/.rtx5tmp/d/mysql/help_topic.MAI b/.rtx5tmp/db/mysql/help_topic.MAI similarity index 99% rename from .rtx5tmp/d/mysql/help_topic.MAI rename to .rtx5tmp/db/mysql/help_topic.MAI index abfc711..d4af731 100644 Binary files a/.rtx5tmp/d/mysql/help_topic.MAI and b/.rtx5tmp/db/mysql/help_topic.MAI differ diff --git a/.rtx5tmp/d/mysql/help_topic.frm b/.rtx5tmp/db/mysql/help_topic.frm similarity index 91% rename from .rtx5tmp/d/mysql/help_topic.frm rename to .rtx5tmp/db/mysql/help_topic.frm index d8a7727..2283feb 100644 Binary files a/.rtx5tmp/d/mysql/help_topic.frm and b/.rtx5tmp/db/mysql/help_topic.frm differ diff --git a/.rtx5tmp/d/mysql/index_stats.MAD b/.rtx5tmp/db/mysql/index_stats.MAD similarity index 100% rename from .rtx5tmp/d/mysql/index_stats.MAD rename to .rtx5tmp/db/mysql/index_stats.MAD diff --git a/.rtx5tmp/d/mysql/index_stats.MAI b/.rtx5tmp/db/mysql/index_stats.MAI similarity index 97% rename from .rtx5tmp/d/mysql/index_stats.MAI rename to .rtx5tmp/db/mysql/index_stats.MAI index 5e1b516..9299e63 100644 Binary files a/.rtx5tmp/d/mysql/index_stats.MAI and b/.rtx5tmp/db/mysql/index_stats.MAI differ diff --git a/.rtx5tmp/d/mysql/index_stats.frm b/.rtx5tmp/db/mysql/index_stats.frm similarity index 94% rename from .rtx5tmp/d/mysql/index_stats.frm rename to .rtx5tmp/db/mysql/index_stats.frm index 119149b..31ad970 100644 Binary files a/.rtx5tmp/d/mysql/index_stats.frm and b/.rtx5tmp/db/mysql/index_stats.frm differ diff --git a/.rtx5tmp/d/mysql/innodb_index_stats.frm b/.rtx5tmp/db/mysql/innodb_index_stats.frm similarity index 98% rename from .rtx5tmp/d/mysql/innodb_index_stats.frm rename to .rtx5tmp/db/mysql/innodb_index_stats.frm index 5ae8a15..5b6125f 100644 Binary files a/.rtx5tmp/d/mysql/innodb_index_stats.frm and b/.rtx5tmp/db/mysql/innodb_index_stats.frm differ diff --git a/.rtx5tmp/db/mysql/innodb_index_stats.ibd b/.rtx5tmp/db/mysql/innodb_index_stats.ibd new file mode 100644 index 0000000..a5da362 Binary files /dev/null and b/.rtx5tmp/db/mysql/innodb_index_stats.ibd differ diff --git a/.rtx5tmp/d/mysql/innodb_table_stats.frm b/.rtx5tmp/db/mysql/innodb_table_stats.frm similarity index 93% rename from .rtx5tmp/d/mysql/innodb_table_stats.frm rename to .rtx5tmp/db/mysql/innodb_table_stats.frm index 4a6d323..40448c5 100644 Binary files a/.rtx5tmp/d/mysql/innodb_table_stats.frm and b/.rtx5tmp/db/mysql/innodb_table_stats.frm differ diff --git a/.rtx5tmp/d/mysql/innodb_table_stats.ibd b/.rtx5tmp/db/mysql/innodb_table_stats.ibd similarity index 99% rename from .rtx5tmp/d/mysql/innodb_table_stats.ibd rename to .rtx5tmp/db/mysql/innodb_table_stats.ibd index 513390e..f860db3 100644 Binary files a/.rtx5tmp/d/mysql/innodb_table_stats.ibd and b/.rtx5tmp/db/mysql/innodb_table_stats.ibd differ diff --git a/.rtx5tmp/d/mysql/plugin.MAD b/.rtx5tmp/db/mysql/plugin.MAD similarity index 100% rename from .rtx5tmp/d/mysql/plugin.MAD rename to .rtx5tmp/db/mysql/plugin.MAD diff --git a/.rtx5tmp/d/mysql/plugin.MAI b/.rtx5tmp/db/mysql/plugin.MAI similarity index 98% rename from .rtx5tmp/d/mysql/plugin.MAI rename to .rtx5tmp/db/mysql/plugin.MAI index 9e8de78..d32e381 100644 Binary files a/.rtx5tmp/d/mysql/plugin.MAI and b/.rtx5tmp/db/mysql/plugin.MAI differ diff --git a/.rtx5tmp/d/mysql/plugin.frm b/.rtx5tmp/db/mysql/plugin.frm similarity index 89% rename from .rtx5tmp/d/mysql/plugin.frm rename to .rtx5tmp/db/mysql/plugin.frm index ee5275c..d61edfd 100644 Binary files a/.rtx5tmp/d/mysql/plugin.frm and b/.rtx5tmp/db/mysql/plugin.frm differ diff --git a/.rtx5tmp/d/mysql/proc.MAD b/.rtx5tmp/db/mysql/proc.MAD similarity index 99% rename from .rtx5tmp/d/mysql/proc.MAD rename to .rtx5tmp/db/mysql/proc.MAD index f77b441..63d4f7f 100644 Binary files a/.rtx5tmp/d/mysql/proc.MAD and b/.rtx5tmp/db/mysql/proc.MAD differ diff --git a/.rtx5tmp/d/mysql/proc.MAI b/.rtx5tmp/db/mysql/proc.MAI similarity index 95% rename from .rtx5tmp/d/mysql/proc.MAI rename to .rtx5tmp/db/mysql/proc.MAI index 47ccbc9..f4b1006 100644 Binary files a/.rtx5tmp/d/mysql/proc.MAI and b/.rtx5tmp/db/mysql/proc.MAI differ diff --git a/.rtx5tmp/d/mysql/proc.frm b/.rtx5tmp/db/mysql/proc.frm similarity index 97% rename from .rtx5tmp/d/mysql/proc.frm rename to .rtx5tmp/db/mysql/proc.frm index a5c4160..ca039fe 100644 Binary files a/.rtx5tmp/d/mysql/proc.frm and b/.rtx5tmp/db/mysql/proc.frm differ diff --git a/.rtx5tmp/d/mysql/procs_priv.MAD b/.rtx5tmp/db/mysql/procs_priv.MAD similarity index 100% rename from .rtx5tmp/d/mysql/procs_priv.MAD rename to .rtx5tmp/db/mysql/procs_priv.MAD diff --git a/.rtx5tmp/d/mysql/procs_priv.MAI b/.rtx5tmp/db/mysql/procs_priv.MAI similarity index 96% rename from .rtx5tmp/d/mysql/procs_priv.MAI rename to .rtx5tmp/db/mysql/procs_priv.MAI index 5938afa..3143cbc 100644 Binary files a/.rtx5tmp/d/mysql/procs_priv.MAI and b/.rtx5tmp/db/mysql/procs_priv.MAI differ diff --git a/.rtx5tmp/d/mysql/procs_priv.frm b/.rtx5tmp/db/mysql/procs_priv.frm similarity index 98% rename from .rtx5tmp/d/mysql/procs_priv.frm rename to .rtx5tmp/db/mysql/procs_priv.frm index 9daf9ec..56c4d12 100644 Binary files a/.rtx5tmp/d/mysql/procs_priv.frm and b/.rtx5tmp/db/mysql/procs_priv.frm differ diff --git a/.rtx5tmp/d/mysql/proxies_priv.MAD b/.rtx5tmp/db/mysql/proxies_priv.MAD similarity index 98% rename from .rtx5tmp/d/mysql/proxies_priv.MAD rename to .rtx5tmp/db/mysql/proxies_priv.MAD index 85a76f4..1d532b6 100644 Binary files a/.rtx5tmp/d/mysql/proxies_priv.MAD and b/.rtx5tmp/db/mysql/proxies_priv.MAD differ diff --git a/.rtx5tmp/d/mysql/proxies_priv.MAI b/.rtx5tmp/db/mysql/proxies_priv.MAI similarity index 99% rename from .rtx5tmp/d/mysql/proxies_priv.MAI rename to .rtx5tmp/db/mysql/proxies_priv.MAI index 2267f28..1ea755b 100644 Binary files a/.rtx5tmp/d/mysql/proxies_priv.MAI and b/.rtx5tmp/db/mysql/proxies_priv.MAI differ diff --git a/.rtx5tmp/d/mysql/proxies_priv.frm b/.rtx5tmp/db/mysql/proxies_priv.frm similarity index 96% rename from .rtx5tmp/d/mysql/proxies_priv.frm rename to .rtx5tmp/db/mysql/proxies_priv.frm index 18f1c55..ccdb327 100644 Binary files a/.rtx5tmp/d/mysql/proxies_priv.frm and b/.rtx5tmp/db/mysql/proxies_priv.frm differ diff --git a/.rtx5tmp/d/mysql/roles_mapping.MAD b/.rtx5tmp/db/mysql/roles_mapping.MAD similarity index 100% rename from .rtx5tmp/d/mysql/roles_mapping.MAD rename to .rtx5tmp/db/mysql/roles_mapping.MAD diff --git a/.rtx5tmp/d/mysql/roles_mapping.MAI b/.rtx5tmp/db/mysql/roles_mapping.MAI similarity index 97% rename from .rtx5tmp/d/mysql/roles_mapping.MAI rename to .rtx5tmp/db/mysql/roles_mapping.MAI index fd79f21..5e955df 100644 Binary files a/.rtx5tmp/d/mysql/roles_mapping.MAI and b/.rtx5tmp/db/mysql/roles_mapping.MAI differ diff --git a/.rtx5tmp/d/mysql/roles_mapping.frm b/.rtx5tmp/db/mysql/roles_mapping.frm similarity index 93% rename from .rtx5tmp/d/mysql/roles_mapping.frm rename to .rtx5tmp/db/mysql/roles_mapping.frm index 56de769..b371743 100644 Binary files a/.rtx5tmp/d/mysql/roles_mapping.frm and b/.rtx5tmp/db/mysql/roles_mapping.frm differ diff --git a/.rtx5tmp/d/mysql/servers.MAD b/.rtx5tmp/db/mysql/servers.MAD similarity index 100% rename from .rtx5tmp/d/mysql/servers.MAD rename to .rtx5tmp/db/mysql/servers.MAD diff --git a/.rtx5tmp/d/mysql/servers.MAI b/.rtx5tmp/db/mysql/servers.MAI similarity index 97% rename from .rtx5tmp/d/mysql/servers.MAI rename to .rtx5tmp/db/mysql/servers.MAI index 20dc97a..41180e1 100644 Binary files a/.rtx5tmp/d/mysql/servers.MAI and b/.rtx5tmp/db/mysql/servers.MAI differ diff --git a/.rtx5tmp/d/mysql/servers.frm b/.rtx5tmp/db/mysql/servers.frm similarity index 99% rename from .rtx5tmp/d/mysql/servers.frm rename to .rtx5tmp/db/mysql/servers.frm index f530411..a13aaa7 100644 Binary files a/.rtx5tmp/d/mysql/servers.frm and b/.rtx5tmp/db/mysql/servers.frm differ diff --git a/.rtx5tmp/d/mysql/slow_log.CSM b/.rtx5tmp/db/mysql/slow_log.CSM similarity index 100% rename from .rtx5tmp/d/mysql/slow_log.CSM rename to .rtx5tmp/db/mysql/slow_log.CSM diff --git a/.rtx5tmp/d/mysql/slow_log.CSV b/.rtx5tmp/db/mysql/slow_log.CSV similarity index 100% rename from .rtx5tmp/d/mysql/slow_log.CSV rename to .rtx5tmp/db/mysql/slow_log.CSV diff --git a/.rtx5tmp/d/mysql/slow_log.frm b/.rtx5tmp/db/mysql/slow_log.frm similarity index 94% rename from .rtx5tmp/d/mysql/slow_log.frm rename to .rtx5tmp/db/mysql/slow_log.frm index 4e60e20..04046f6 100644 Binary files a/.rtx5tmp/d/mysql/slow_log.frm and b/.rtx5tmp/db/mysql/slow_log.frm differ diff --git a/.rtx5tmp/d/mysql/table_stats.MAD b/.rtx5tmp/db/mysql/table_stats.MAD similarity index 100% rename from .rtx5tmp/d/mysql/table_stats.MAD rename to .rtx5tmp/db/mysql/table_stats.MAD diff --git a/.rtx5tmp/d/mysql/table_stats.MAI b/.rtx5tmp/db/mysql/table_stats.MAI similarity index 97% rename from .rtx5tmp/d/mysql/table_stats.MAI rename to .rtx5tmp/db/mysql/table_stats.MAI index 9462b36..61b24d2 100644 Binary files a/.rtx5tmp/d/mysql/table_stats.MAI and b/.rtx5tmp/db/mysql/table_stats.MAI differ diff --git a/.rtx5tmp/d/mysql/table_stats.frm b/.rtx5tmp/db/mysql/table_stats.frm similarity index 93% rename from .rtx5tmp/d/mysql/table_stats.frm rename to .rtx5tmp/db/mysql/table_stats.frm index 762fec1..e02f89a 100644 Binary files a/.rtx5tmp/d/mysql/table_stats.frm and b/.rtx5tmp/db/mysql/table_stats.frm differ diff --git a/.rtx5tmp/d/mysql/tables_priv.MAD b/.rtx5tmp/db/mysql/tables_priv.MAD similarity index 100% rename from .rtx5tmp/d/mysql/tables_priv.MAD rename to .rtx5tmp/db/mysql/tables_priv.MAD diff --git a/.rtx5tmp/d/mysql/tables_priv.MAI b/.rtx5tmp/db/mysql/tables_priv.MAI similarity index 99% rename from .rtx5tmp/d/mysql/tables_priv.MAI rename to .rtx5tmp/db/mysql/tables_priv.MAI index 3899e32..44e5d1b 100644 Binary files a/.rtx5tmp/d/mysql/tables_priv.MAI and b/.rtx5tmp/db/mysql/tables_priv.MAI differ diff --git a/.rtx5tmp/d/mysql/tables_priv.frm b/.rtx5tmp/db/mysql/tables_priv.frm similarity index 97% rename from .rtx5tmp/d/mysql/tables_priv.frm rename to .rtx5tmp/db/mysql/tables_priv.frm index 0a19fdb..53503b6 100644 Binary files a/.rtx5tmp/d/mysql/tables_priv.frm and b/.rtx5tmp/db/mysql/tables_priv.frm differ diff --git a/.rtx5tmp/d/mysql/time_zone.MAD b/.rtx5tmp/db/mysql/time_zone.MAD similarity index 100% rename from .rtx5tmp/d/mysql/time_zone.MAD rename to .rtx5tmp/db/mysql/time_zone.MAD diff --git a/.rtx5tmp/d/mysql/time_zone.MAI b/.rtx5tmp/db/mysql/time_zone.MAI similarity index 98% rename from .rtx5tmp/d/mysql/time_zone.MAI rename to .rtx5tmp/db/mysql/time_zone.MAI index e02c60b..b86d3e0 100644 Binary files a/.rtx5tmp/d/mysql/time_zone.MAI and b/.rtx5tmp/db/mysql/time_zone.MAI differ diff --git a/.rtx5tmp/d/mysql/time_zone.frm b/.rtx5tmp/db/mysql/time_zone.frm similarity index 90% rename from .rtx5tmp/d/mysql/time_zone.frm rename to .rtx5tmp/db/mysql/time_zone.frm index eb82db2..9d75e76 100644 Binary files a/.rtx5tmp/d/mysql/time_zone.frm and b/.rtx5tmp/db/mysql/time_zone.frm differ diff --git a/.rtx5tmp/d/mysql/time_zone_leap_second.MAD b/.rtx5tmp/db/mysql/time_zone_leap_second.MAD similarity index 100% rename from .rtx5tmp/d/mysql/time_zone_leap_second.MAD rename to .rtx5tmp/db/mysql/time_zone_leap_second.MAD diff --git a/.rtx5tmp/d/mysql/time_zone_leap_second.MAI b/.rtx5tmp/db/mysql/time_zone_leap_second.MAI similarity index 97% rename from .rtx5tmp/d/mysql/time_zone_leap_second.MAI rename to .rtx5tmp/db/mysql/time_zone_leap_second.MAI index 0f4a689..9531cca 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_leap_second.MAI and b/.rtx5tmp/db/mysql/time_zone_leap_second.MAI differ diff --git a/.rtx5tmp/d/mysql/time_zone_leap_second.frm b/.rtx5tmp/db/mysql/time_zone_leap_second.frm similarity index 86% rename from .rtx5tmp/d/mysql/time_zone_leap_second.frm rename to .rtx5tmp/db/mysql/time_zone_leap_second.frm index ea71fb1..ac68e21 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_leap_second.frm and b/.rtx5tmp/db/mysql/time_zone_leap_second.frm differ diff --git a/.rtx5tmp/d/mysql/time_zone_name.MAD b/.rtx5tmp/db/mysql/time_zone_name.MAD similarity index 100% rename from .rtx5tmp/d/mysql/time_zone_name.MAD rename to .rtx5tmp/db/mysql/time_zone_name.MAD diff --git a/.rtx5tmp/d/mysql/time_zone_name.MAI b/.rtx5tmp/db/mysql/time_zone_name.MAI similarity index 98% rename from .rtx5tmp/d/mysql/time_zone_name.MAI rename to .rtx5tmp/db/mysql/time_zone_name.MAI index 80e106f..cc15120 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_name.MAI and b/.rtx5tmp/db/mysql/time_zone_name.MAI differ diff --git a/.rtx5tmp/d/mysql/time_zone_name.frm b/.rtx5tmp/db/mysql/time_zone_name.frm similarity index 89% rename from .rtx5tmp/d/mysql/time_zone_name.frm rename to .rtx5tmp/db/mysql/time_zone_name.frm index 22d1246..810c2ef 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_name.frm and b/.rtx5tmp/db/mysql/time_zone_name.frm differ diff --git a/.rtx5tmp/d/mysql/time_zone_transition.MAD b/.rtx5tmp/db/mysql/time_zone_transition.MAD similarity index 100% rename from .rtx5tmp/d/mysql/time_zone_transition.MAD rename to .rtx5tmp/db/mysql/time_zone_transition.MAD diff --git a/.rtx5tmp/d/mysql/time_zone_transition.MAI b/.rtx5tmp/db/mysql/time_zone_transition.MAI similarity index 97% rename from .rtx5tmp/d/mysql/time_zone_transition.MAI rename to .rtx5tmp/db/mysql/time_zone_transition.MAI index 7691596..2d683e3 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_transition.MAI and b/.rtx5tmp/db/mysql/time_zone_transition.MAI differ diff --git a/.rtx5tmp/d/mysql/time_zone_transition.frm b/.rtx5tmp/db/mysql/time_zone_transition.frm similarity index 84% rename from .rtx5tmp/d/mysql/time_zone_transition.frm rename to .rtx5tmp/db/mysql/time_zone_transition.frm index cfa87a2..54402c4 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_transition.frm and b/.rtx5tmp/db/mysql/time_zone_transition.frm differ diff --git a/.rtx5tmp/d/mysql/time_zone_transition_type.MAD b/.rtx5tmp/db/mysql/time_zone_transition_type.MAD similarity index 100% rename from .rtx5tmp/d/mysql/time_zone_transition_type.MAD rename to .rtx5tmp/db/mysql/time_zone_transition_type.MAD diff --git a/.rtx5tmp/d/mysql/time_zone_transition_type.MAI b/.rtx5tmp/db/mysql/time_zone_transition_type.MAI similarity index 97% rename from .rtx5tmp/d/mysql/time_zone_transition_type.MAI rename to .rtx5tmp/db/mysql/time_zone_transition_type.MAI index 7980293..50b6c13 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_transition_type.MAI and b/.rtx5tmp/db/mysql/time_zone_transition_type.MAI differ diff --git a/.rtx5tmp/d/mysql/time_zone_transition_type.frm b/.rtx5tmp/db/mysql/time_zone_transition_type.frm similarity index 89% rename from .rtx5tmp/d/mysql/time_zone_transition_type.frm rename to .rtx5tmp/db/mysql/time_zone_transition_type.frm index a5db110..3f3bacf 100644 Binary files a/.rtx5tmp/d/mysql/time_zone_transition_type.frm and b/.rtx5tmp/db/mysql/time_zone_transition_type.frm differ diff --git a/.rtx5tmp/d/mysql/transaction_registry.frm b/.rtx5tmp/db/mysql/transaction_registry.frm similarity index 97% rename from .rtx5tmp/d/mysql/transaction_registry.frm rename to .rtx5tmp/db/mysql/transaction_registry.frm index 6f2f995..b52ae34 100644 Binary files a/.rtx5tmp/d/mysql/transaction_registry.frm and b/.rtx5tmp/db/mysql/transaction_registry.frm differ diff --git a/.rtx5tmp/d/mysql/transaction_registry.ibd b/.rtx5tmp/db/mysql/transaction_registry.ibd similarity index 99% rename from .rtx5tmp/d/mysql/transaction_registry.ibd rename to .rtx5tmp/db/mysql/transaction_registry.ibd index 635cffe..499c27a 100644 Binary files a/.rtx5tmp/d/mysql/transaction_registry.ibd and b/.rtx5tmp/db/mysql/transaction_registry.ibd differ diff --git a/.rtx5tmp/d/mysql/user.frm b/.rtx5tmp/db/mysql/user.frm similarity index 99% rename from .rtx5tmp/d/mysql/user.frm rename to .rtx5tmp/db/mysql/user.frm index 20c28bf..66a8924 100644 --- a/.rtx5tmp/d/mysql/user.frm +++ b/.rtx5tmp/db/mysql/user.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=1 with_check_option=0 -timestamp=0001790054638040474 +timestamp=0001790056254928692 create-version=2 source=SELECT\n Host,\n User,\n IF(JSON_VALUE(Priv, \'$.plugin\') IN (\'mysql_native_password\', \'mysql_old_password\'), IFNULL(JSON_VALUE(Priv, \'$.authentication_string\'), \'\'), \'\') AS Password,\n IF(JSON_VALUE(Priv, \'$.access\') & 1, \'Y\', \'N\') AS Select_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 2, \'Y\', \'N\') AS Insert_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 4, \'Y\', \'N\') AS Update_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 8, \'Y\', \'N\') AS Delete_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 16, \'Y\', \'N\') AS Create_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 32, \'Y\', \'N\') AS Drop_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 64, \'Y\', \'N\') AS Reload_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 128, \'Y\', \'N\') AS Shutdown_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 256, \'Y\', \'N\') AS Process_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 512, \'Y\', \'N\') AS File_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 1024, \'Y\', \'N\') AS Grant_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 2048, \'Y\', \'N\') AS References_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 4096, \'Y\', \'N\') AS Index_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 8192, \'Y\', \'N\') AS Alter_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 16384, \'Y\', \'N\') AS Show_db_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 32768, \'Y\', \'N\') AS Super_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 65536, \'Y\', \'N\') AS Create_tmp_table_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 131072, \'Y\', \'N\') AS Lock_tables_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 262144, \'Y\', \'N\') AS Execute_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 524288, \'Y\', \'N\') AS Repl_slave_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 1048576, \'Y\', \'N\') AS Repl_client_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 2097152, \'Y\', \'N\') AS Create_view_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 4194304, \'Y\', \'N\') AS Show_view_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 8388608, \'Y\', \'N\') AS Create_routine_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 16777216, \'Y\', \'N\') AS Alter_routine_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 33554432, \'Y\', \'N\') AS Create_user_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 67108864, \'Y\', \'N\') AS Event_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 134217728, \'Y\', \'N\') AS Trigger_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 268435456, \'Y\', \'N\') AS Create_tablespace_priv,\n IF(JSON_VALUE(Priv, \'$.access\') & 536870912, \'Y\', \'N\') AS Delete_history_priv,\n ELT(IFNULL(JSON_VALUE(Priv, \'$.ssl_type\'), 0) + 1, \'\', \'ANY\',\'X509\', \'SPECIFIED\') AS ssl_type,\n IFNULL(JSON_VALUE(Priv, \'$.ssl_cipher\'), \'\') AS ssl_cipher,\n IFNULL(JSON_VALUE(Priv, \'$.x509_issuer\'), \'\') AS x509_issuer,\n IFNULL(JSON_VALUE(Priv, \'$.x509_subject\'), \'\') AS x509_subject,\n CAST(IFNULL(JSON_VALUE(Priv, \'$.max_questions\'), 0) AS UNSIGNED) AS max_questions,\n CAST(IFNULL(JSON_VALUE(Priv, \'$.max_updates\'), 0) AS UNSIGNED) AS max_updates,\n CAST(IFNULL(JSON_VALUE(Priv, \'$.max_connections\'), 0) AS UNSIGNED) AS max_connections,\n CAST(IFNULL(JSON_VALUE(Priv, \'$.max_user_connections\'), 0) AS SIGNED) AS max_user_connections,\n IFNULL(JSON_VALUE(Priv, \'$.plugin\'), \'\') AS plugin,\n IFNULL(JSON_VALUE(Priv, \'$.authentication_string\'), \'\') AS authentication_string,\n IF(IFNULL(JSON_VALUE(Priv, \'$.password_last_changed\'), 1) = 0, \'Y\', \'N\') AS password_expired,\n ELT(IFNULL(JSON_VALUE(Priv, \'$.is_role\'), 0) + 1, \'N\', \'Y\') AS is_role,\n IFNULL(JSON_VALUE(Priv, \'$.default_role\'), \'\') AS default_role,\n CAST(IFNULL(JSON_VALUE(Priv, \'$.max_statement_time\'), 0.0) AS DECIMAL(12,6)) AS max_statement_time\n FROM global_priv; client_cs_name=utf8mb4 diff --git a/.rtx5tmp/d/mysql_upgrade_info b/.rtx5tmp/db/mysql_upgrade_info similarity index 100% rename from .rtx5tmp/d/mysql_upgrade_info rename to .rtx5tmp/db/mysql_upgrade_info diff --git a/.rtx5tmp/d/performance_schema/db.opt b/.rtx5tmp/db/performance_schema/db.opt similarity index 100% rename from .rtx5tmp/d/performance_schema/db.opt rename to .rtx5tmp/db/performance_schema/db.opt diff --git a/.rtx5tmp/d/sys/db.opt b/.rtx5tmp/db/sys/db.opt similarity index 100% rename from .rtx5tmp/d/sys/db.opt rename to .rtx5tmp/db/sys/db.opt diff --git a/.rtx5tmp/d/sys/host_summary.frm b/.rtx5tmp/db/sys/host_summary.frm similarity index 99% rename from .rtx5tmp/d/sys/host_summary.frm rename to .rtx5tmp/db/sys/host_summary.frm index 036d6f7..01d2a2d 100644 --- a/.rtx5tmp/d/sys/host_summary.frm +++ b/.rtx5tmp/db/sys/host_summary.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639089300 +timestamp=0001790056256025546 create-version=2 source=SELECT IF(accounts.host IS NULL, \'background\', accounts.host) AS host,\n SUM(stmt.total) AS statements,\n sys.format_time(SUM(stmt.total_latency)) AS statement_latency,\n sys.format_time(IFNULL(SUM(stmt.total_latency) / NULLIF(SUM(stmt.total), 0), 0)) AS statement_avg_latency,\n SUM(stmt.full_scans) AS table_scans,\n SUM(io.ios) AS file_ios,\n sys.format_time(SUM(io.io_latency)) AS file_io_latency,\n SUM(accounts.current_connections) AS current_connections,\n SUM(accounts.total_connections) AS total_connections,\n COUNT(DISTINCT user) AS unique_users,\n sys.format_bytes(SUM(mem.current_allocated)) AS current_memory,\n sys.format_bytes(SUM(mem.total_allocated)) AS total_memory_allocated\n FROM performance_schema.accounts\n JOIN sys.x$host_summary_by_statement_latency AS stmt ON accounts.host = stmt.host\n JOIN sys.x$host_summary_by_file_io AS io ON accounts.host = io.host\n JOIN sys.x$memory_by_host_by_current_bytes mem ON accounts.host = mem.host\n GROUP BY IF(accounts.host IS NULL, \'background\', accounts.host); client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/host_summary_by_file_io.frm b/.rtx5tmp/db/sys/host_summary_by_file_io.frm similarity index 98% rename from .rtx5tmp/d/sys/host_summary_by_file_io.frm rename to .rtx5tmp/db/sys/host_summary_by_file_io.frm index dd7a4f1..bb37ad0 100644 --- a/.rtx5tmp/d/sys/host_summary_by_file_io.frm +++ b/.rtx5tmp/db/sys/host_summary_by_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639038254 +timestamp=0001790056255975913 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(count_star) AS ios,\n sys.format_time(SUM(sum_timer_wait)) AS io_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/host_summary_by_file_io_type.frm b/.rtx5tmp/db/sys/host_summary_by_file_io_type.frm similarity index 99% rename from .rtx5tmp/d/sys/host_summary_by_file_io_type.frm rename to .rtx5tmp/db/sys/host_summary_by_file_io_type.frm index c650de2..7abf2aa 100644 --- a/.rtx5tmp/d/sys/host_summary_by_file_io_type.frm +++ b/.rtx5tmp/db/sys/host_summary_by_file_io_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639025138 +timestamp=0001790056255964141 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name LIKE \'wait/io/file%\'\n AND count_star > 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/host_summary_by_stages.frm b/.rtx5tmp/db/sys/host_summary_by_stages.frm similarity index 98% rename from .rtx5tmp/d/sys/host_summary_by_stages.frm rename to .rtx5tmp/db/sys/host_summary_by_stages.frm index fbfe6b1..bd19381 100644 --- a/.rtx5tmp/d/sys/host_summary_by_stages.frm +++ b/.rtx5tmp/db/sys/host_summary_by_stages.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639074042 +timestamp=0001790056256012419 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency\n FROM performance_schema.events_stages_summary_by_host_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/host_summary_by_statement_latency.frm b/.rtx5tmp/db/sys/host_summary_by_statement_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/host_summary_by_statement_latency.frm rename to .rtx5tmp/db/sys/host_summary_by_statement_latency.frm index 38761ef..486306f 100644 --- a/.rtx5tmp/d/sys/host_summary_by_statement_latency.frm +++ b/.rtx5tmp/db/sys/host_summary_by_statement_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639062519 +timestamp=0001790056256000255 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(count_star) AS total,\n sys.format_time(SUM(sum_timer_wait)) AS total_latency,\n sys.format_time(MAX(max_timer_wait)) AS max_latency,\n sys.format_time(SUM(sum_lock_time)) AS lock_latency,\n SUM(sum_rows_sent) AS rows_sent,\n SUM(sum_rows_examined) AS rows_examined,\n SUM(sum_rows_affected) AS rows_affected,\n SUM(sum_no_index_used) + SUM(sum_no_good_index_used) AS full_scans\n FROM performance_schema.events_statements_summary_by_host_by_event_name\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/host_summary_by_statement_type.frm b/.rtx5tmp/db/sys/host_summary_by_statement_type.frm similarity index 99% rename from .rtx5tmp/d/sys/host_summary_by_statement_type.frm rename to .rtx5tmp/db/sys/host_summary_by_statement_type.frm index 83b0d21..c807145 100644 --- a/.rtx5tmp/d/sys/host_summary_by_statement_type.frm +++ b/.rtx5tmp/db/sys/host_summary_by_statement_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639050878 +timestamp=0001790056255988011 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUBSTRING_INDEX(event_name, \'/\', -1) AS statement,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(max_timer_wait) AS max_latency,\n sys.format_time(sum_lock_time) AS lock_latency,\n sum_rows_sent AS rows_sent,\n sum_rows_examined AS rows_examined,\n sum_rows_affected AS rows_affected,\n sum_no_index_used + sum_no_good_index_used AS full_scans\n FROM performance_schema.events_statements_summary_by_host_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/innodb_buffer_stats_by_schema.frm b/.rtx5tmp/db/sys/innodb_buffer_stats_by_schema.frm similarity index 98% rename from .rtx5tmp/d/sys/innodb_buffer_stats_by_schema.frm rename to .rtx5tmp/db/sys/innodb_buffer_stats_by_schema.frm index 1290fd7..bba722d 100644 --- a/.rtx5tmp/d/sys/innodb_buffer_stats_by_schema.frm +++ b/.rtx5tmp/db/sys/innodb_buffer_stats_by_schema.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638605353 +timestamp=0001790056255498299 create-version=2 source=SELECT IF(LOCATE(\'.\', ibp.table_name) = 0, \'InnoDB System\', REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', 1), \'`\', \'\')) AS object_schema,\n sys.format_bytes(SUM(IF(ibp.compressed_size = 0, 16384, compressed_size))) AS allocated,\n sys.format_bytes(SUM(ibp.data_size)) AS data,\n COUNT(ibp.page_number) AS pages,\n COUNT(IF(ibp.is_hashed = \'YES\', 1, NULL)) AS pages_hashed,\n COUNT(IF(ibp.is_old = \'YES\', 1, NULL)) AS pages_old,\n ROUND(SUM(ibp.number_records)/COUNT(DISTINCT ibp.index_name)) AS rows_cached\n FROM information_schema.innodb_buffer_page ibp\n WHERE table_name IS NOT NULL\n GROUP BY object_schema\n ORDER BY SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/innodb_buffer_stats_by_table.frm b/.rtx5tmp/db/sys/innodb_buffer_stats_by_table.frm similarity index 99% rename from .rtx5tmp/d/sys/innodb_buffer_stats_by_table.frm rename to .rtx5tmp/db/sys/innodb_buffer_stats_by_table.frm index 724dcdc..e78447b 100644 --- a/.rtx5tmp/d/sys/innodb_buffer_stats_by_table.frm +++ b/.rtx5tmp/db/sys/innodb_buffer_stats_by_table.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638616430 +timestamp=0001790056255510436 create-version=2 source=SELECT IF(LOCATE(\'.\', ibp.table_name) = 0, \'InnoDB System\', REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', 1), \'`\', \'\')) AS object_schema,\n REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', -1), \'`\', \'\') AS object_name,\n sys.format_bytes(SUM(IF(ibp.compressed_size = 0, 16384, compressed_size))) AS allocated,\n sys.format_bytes(SUM(ibp.data_size)) AS data,\n COUNT(ibp.page_number) AS pages,\n COUNT(IF(ibp.is_hashed = \'YES\', 1, NULL)) AS pages_hashed,\n COUNT(IF(ibp.is_old = \'YES\', 1, NULL)) AS pages_old,\n ROUND(SUM(ibp.number_records)/COUNT(DISTINCT ibp.index_name)) AS rows_cached\n FROM information_schema.innodb_buffer_page ibp\n WHERE table_name IS NOT NULL\n GROUP BY object_schema, object_name\n ORDER BY SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/innodb_lock_waits.frm b/.rtx5tmp/db/sys/innodb_lock_waits.frm similarity index 99% rename from .rtx5tmp/d/sys/innodb_lock_waits.frm rename to .rtx5tmp/db/sys/innodb_lock_waits.frm index b6ff5d5..7b87471 100644 --- a/.rtx5tmp/d/sys/innodb_lock_waits.frm +++ b/.rtx5tmp/db/sys/innodb_lock_waits.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638627297 +timestamp=0001790056255526470 create-version=2 source=SELECT r.trx_wait_started AS wait_started,\n TIMEDIFF(NOW(), r.trx_wait_started) AS wait_age,\n TIMESTAMPDIFF(SECOND, r.trx_wait_started, NOW()) AS wait_age_secs,\n rl.lock_table AS locked_table,\n rl.lock_index AS locked_index,\n rl.lock_type AS locked_type,\n r.trx_id AS waiting_trx_id,\n r.trx_started as waiting_trx_started,\n TIMEDIFF(NOW(), r.trx_started) AS waiting_trx_age,\n r.trx_rows_locked AS waiting_trx_rows_locked,\n r.trx_rows_modified AS waiting_trx_rows_modified,\n r.trx_mysql_thread_id AS waiting_pid,\n sys.format_statement(r.trx_query) AS waiting_query,\n rl.lock_id AS waiting_lock_id,\n rl.lock_mode AS waiting_lock_mode,\n b.trx_id AS blocking_trx_id,\n b.trx_mysql_thread_id AS blocking_pid,\n sys.format_statement(b.trx_query) AS blocking_query,\n bl.lock_id AS blocking_lock_id,\n bl.lock_mode AS blocking_lock_mode,\n b.trx_started AS blocking_trx_started,\n TIMEDIFF(NOW(), b.trx_started) AS blocking_trx_age,\n b.trx_rows_locked AS blocking_trx_rows_locked,\n b.trx_rows_modified AS blocking_trx_rows_modified,\n CONCAT(\'KILL QUERY \', b.trx_mysql_thread_id) AS sql_kill_blocking_query,\n CONCAT(\'KILL \', b.trx_mysql_thread_id) AS sql_kill_blocking_connection\n FROM information_schema.innodb_lock_waits w\n INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id\n INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id\n INNER JOIN information_schema.innodb_locks bl ON bl.lock_id = w.blocking_lock_id\n INNER JOIN information_schema.innodb_locks rl ON rl.lock_id = w.requested_lock_id\n ORDER BY r.trx_wait_started; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/io_by_thread_by_latency.frm b/.rtx5tmp/db/sys/io_by_thread_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/io_by_thread_by_latency.frm rename to .rtx5tmp/db/sys/io_by_thread_by_latency.frm index 3e61bc4..4bfab89 100644 --- a/.rtx5tmp/d/sys/io_by_thread_by_latency.frm +++ b/.rtx5tmp/db/sys/io_by_thread_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638680757 +timestamp=0001790056255584721 create-version=2 source=SELECT IF(processlist_id IS NULL,\n SUBSTRING_INDEX(name, \'/\', -1),\n CONCAT(processlist_user, \'@\', processlist_host)\n ) user,\n SUM(count_star) total,\n sys.format_time(SUM(sum_timer_wait)) total_latency,\n sys.format_time(MIN(min_timer_wait)) min_latency,\n sys.format_time(AVG(avg_timer_wait)) avg_latency,\n sys.format_time(MAX(max_timer_wait)) max_latency,\n thread_id,\n processlist_id\n FROM performance_schema.events_waits_summary_by_thread_by_event_name\n LEFT JOIN performance_schema.threads USING (thread_id)\n WHERE event_name LIKE \'wait/io/file/%\'\n AND sum_timer_wait > 0\n GROUP BY thread_id, processlist_id, user\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/io_global_by_file_by_bytes.frm b/.rtx5tmp/db/sys/io_global_by_file_by_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/io_global_by_file_by_bytes.frm rename to .rtx5tmp/db/sys/io_global_by_file_by_bytes.frm index 81c009b..f13750b 100644 --- a/.rtx5tmp/d/sys/io_global_by_file_by_bytes.frm +++ b/.rtx5tmp/db/sys/io_global_by_file_by_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638692606 +timestamp=0001790056255597046 create-version=2 source=SELECT sys.format_path(file_name) AS file,\n count_read,\n sys.format_bytes(sum_number_of_bytes_read) AS total_read,\n sys.format_bytes(IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0)) AS avg_read,\n count_write,\n sys.format_bytes(sum_number_of_bytes_write) AS total_written,\n sys.format_bytes(IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0.00)) AS avg_write,\n sys.format_bytes(sum_number_of_bytes_read + sum_number_of_bytes_write) AS total,\n IFNULL(ROUND(100-((sum_number_of_bytes_read/ NULLIF((sum_number_of_bytes_read+sum_number_of_bytes_write), 0))*100), 2), 0.00) AS write_pct\n FROM performance_schema.file_summary_by_instance\n ORDER BY sum_number_of_bytes_read + sum_number_of_bytes_write DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/io_global_by_file_by_latency.frm b/.rtx5tmp/db/sys/io_global_by_file_by_latency.frm similarity index 98% rename from .rtx5tmp/d/sys/io_global_by_file_by_latency.frm rename to .rtx5tmp/db/sys/io_global_by_file_by_latency.frm index ddf4be2..9c017a0 100644 --- a/.rtx5tmp/d/sys/io_global_by_file_by_latency.frm +++ b/.rtx5tmp/db/sys/io_global_by_file_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638705210 +timestamp=0001790056255608886 create-version=2 source=SELECT sys.format_path(file_name) AS file,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n count_read,\n sys.format_time(sum_timer_read) AS read_latency,\n count_write,\n sys.format_time(sum_timer_write) AS write_latency,\n count_misc,\n sys.format_time(sum_timer_misc) AS misc_latency\n FROM performance_schema.file_summary_by_instance\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/io_global_by_wait_by_bytes.frm b/.rtx5tmp/db/sys/io_global_by_wait_by_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/io_global_by_wait_by_bytes.frm rename to .rtx5tmp/db/sys/io_global_by_wait_by_bytes.frm index 3623128..a32adaf 100644 --- a/.rtx5tmp/d/sys/io_global_by_wait_by_bytes.frm +++ b/.rtx5tmp/db/sys/io_global_by_wait_by_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638716911 +timestamp=0001790056255621130 create-version=2 source=SELECT SUBSTRING_INDEX(event_name, \'/\', -2) event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(min_timer_wait) AS min_latency,\n sys.format_time(avg_timer_wait) AS avg_latency,\n sys.format_time(max_timer_wait) AS max_latency,\n count_read,\n sys.format_bytes(sum_number_of_bytes_read) AS total_read,\n sys.format_bytes(IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0)) AS avg_read,\n count_write,\n sys.format_bytes(sum_number_of_bytes_write) AS total_written,\n sys.format_bytes(IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0)) AS avg_written,\n sys.format_bytes(sum_number_of_bytes_write + sum_number_of_bytes_read) AS total_requested\n FROM performance_schema.file_summary_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n AND count_star > 0\n ORDER BY sum_number_of_bytes_write + sum_number_of_bytes_read DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/io_global_by_wait_by_latency.frm b/.rtx5tmp/db/sys/io_global_by_wait_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/io_global_by_wait_by_latency.frm rename to .rtx5tmp/db/sys/io_global_by_wait_by_latency.frm index c93c4ea..a86bcca 100644 --- a/.rtx5tmp/d/sys/io_global_by_wait_by_latency.frm +++ b/.rtx5tmp/db/sys/io_global_by_wait_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638728553 +timestamp=0001790056255633232 create-version=2 source=SELECT SUBSTRING_INDEX(event_name, \'/\', -2) AS event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency,\n sys.format_time(max_timer_wait) AS max_latency,\n sys.format_time(sum_timer_read) AS read_latency,\n sys.format_time(sum_timer_write) AS write_latency,\n sys.format_time(sum_timer_misc) AS misc_latency,\n count_read,\n sys.format_bytes(sum_number_of_bytes_read) AS total_read,\n sys.format_bytes(IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0)) AS avg_read,\n count_write,\n sys.format_bytes(sum_number_of_bytes_write) AS total_written,\n sys.format_bytes(IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0)) AS avg_written\n FROM performance_schema.file_summary_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n AND count_star > 0\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/latest_file_io.frm b/.rtx5tmp/db/sys/latest_file_io.frm similarity index 99% rename from .rtx5tmp/d/sys/latest_file_io.frm rename to .rtx5tmp/db/sys/latest_file_io.frm index d8aeb50..16d06db 100644 --- a/.rtx5tmp/d/sys/latest_file_io.frm +++ b/.rtx5tmp/db/sys/latest_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638668441 +timestamp=0001790056255572194 create-version=2 source=SELECT IF(id IS NULL,\n CONCAT(SUBSTRING_INDEX(name, \'/\', -1), \':\', thread_id),\n CONCAT(user, \'@\', host, \':\', id)\n ) thread,\n sys.format_path(object_name) file,\n sys.format_time(timer_wait) AS latency,\n operation,\n sys.format_bytes(number_of_bytes) AS requested\n FROM performance_schema.events_waits_history_long\n JOIN performance_schema.threads USING (thread_id)\n LEFT JOIN information_schema.processlist ON processlist_id = id\n WHERE object_name IS NOT NULL\n AND event_name LIKE \'wait/io/file/%\'\n ORDER BY timer_start; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/memory_by_host_by_current_bytes.frm b/.rtx5tmp/db/sys/memory_by_host_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/memory_by_host_by_current_bytes.frm rename to .rtx5tmp/db/sys/memory_by_host_by_current_bytes.frm index 0b09d7d..07de8ef 100644 --- a/.rtx5tmp/d/sys/memory_by_host_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/memory_by_host_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638751250 +timestamp=0001790056255658273 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(current_count_used) AS current_count_used,\n sys.format_bytes(SUM(current_number_of_bytes_used)) AS current_allocated,\n sys.format_bytes(IFNULL(SUM(current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0)) AS current_avg_alloc,\n sys.format_bytes(MAX(current_number_of_bytes_used)) AS current_max_alloc,\n sys.format_bytes(SUM(sum_number_of_bytes_alloc)) AS total_allocated\n FROM performance_schema.memory_summary_by_host_by_event_name\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/memory_by_thread_by_current_bytes.frm b/.rtx5tmp/db/sys/memory_by_thread_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/memory_by_thread_by_current_bytes.frm rename to .rtx5tmp/db/sys/memory_by_thread_by_current_bytes.frm index 7e5862b..1f1a1ea 100644 --- a/.rtx5tmp/d/sys/memory_by_thread_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/memory_by_thread_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638762559 +timestamp=0001790056255670115 create-version=2 source=SELECT thread_id,\n IF(t.name = \'thread/sql/one_connection\',\n CONCAT(t.processlist_user, \'@\', t.processlist_host),\n REPLACE(t.name, \'thread/\', \'\')) user,\n SUM(mt.current_count_used) AS current_count_used,\n sys.format_bytes(SUM(mt.current_number_of_bytes_used)) AS current_allocated,\n sys.format_bytes(IFNULL(SUM(mt.current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0)) AS current_avg_alloc,\n sys.format_bytes(MAX(mt.current_number_of_bytes_used)) AS current_max_alloc,\n sys.format_bytes(SUM(mt.sum_number_of_bytes_alloc)) AS total_allocated\n FROM performance_schema.memory_summary_by_thread_by_event_name AS mt\n JOIN performance_schema.threads AS t USING (thread_id)\n GROUP BY thread_id, IF(t.name = \'thread/sql/one_connection\',\n CONCAT(t.processlist_user, \'@\', t.processlist_host),\n REPLACE(t.name, \'thread/\', \'\'))\n ORDER BY SUM(current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/memory_by_user_by_current_bytes.frm b/.rtx5tmp/db/sys/memory_by_user_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/memory_by_user_by_current_bytes.frm rename to .rtx5tmp/db/sys/memory_by_user_by_current_bytes.frm index c7293a9..dc18f76 100644 --- a/.rtx5tmp/d/sys/memory_by_user_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/memory_by_user_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638740189 +timestamp=0001790056255645820 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(current_count_used) AS current_count_used,\n sys.format_bytes(SUM(current_number_of_bytes_used)) AS current_allocated,\n sys.format_bytes(IFNULL(SUM(current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0)) AS current_avg_alloc,\n sys.format_bytes(MAX(current_number_of_bytes_used)) AS current_max_alloc,\n sys.format_bytes(SUM(sum_number_of_bytes_alloc)) AS total_allocated\n FROM performance_schema.memory_summary_by_user_by_event_name\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/memory_global_by_current_bytes.frm b/.rtx5tmp/db/sys/memory_global_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/memory_global_by_current_bytes.frm rename to .rtx5tmp/db/sys/memory_global_by_current_bytes.frm index e648f0b..7b4f4bd 100644 --- a/.rtx5tmp/d/sys/memory_global_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/memory_global_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638774056 +timestamp=0001790056255682605 create-version=2 source=SELECT event_name,\n current_count_used AS current_count,\n sys.format_bytes(current_number_of_bytes_used) AS current_alloc,\n sys.format_bytes(IFNULL(current_number_of_bytes_used / NULLIF(current_count_used, 0), 0)) AS current_avg_alloc,\n high_count_used AS high_count,\n sys.format_bytes(high_number_of_bytes_used) AS high_alloc,\n sys.format_bytes(IFNULL(high_number_of_bytes_used / NULLIF(high_count_used, 0), 0)) AS high_avg_alloc\n FROM performance_schema.memory_summary_global_by_event_name\n WHERE current_number_of_bytes_used > 0\n ORDER BY current_number_of_bytes_used DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/memory_global_total.frm b/.rtx5tmp/db/sys/memory_global_total.frm similarity index 96% rename from .rtx5tmp/d/sys/memory_global_total.frm rename to .rtx5tmp/db/sys/memory_global_total.frm index 13ab48a..87ce1ea 100644 --- a/.rtx5tmp/d/sys/memory_global_total.frm +++ b/.rtx5tmp/db/sys/memory_global_total.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638784868 +timestamp=0001790056255694156 create-version=2 source=SELECT sys.format_bytes(SUM(CURRENT_NUMBER_OF_BYTES_USED)) total_allocated\n FROM performance_schema.memory_summary_global_by_event_name; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/metrics.frm b/.rtx5tmp/db/sys/metrics.frm similarity index 99% rename from .rtx5tmp/d/sys/metrics.frm rename to .rtx5tmp/db/sys/metrics.frm index 6e5fde4..c74cfe6 100644 --- a/.rtx5tmp/d/sys/metrics.frm +++ b/.rtx5tmp/db/sys/metrics.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639174127 +timestamp=0001790056256101795 create-version=2 source=(\nSELECT LOWER(VARIABLE_NAME) AS Variable_name, VARIABLE_VALUE AS Variable_value, \'Global Status\' AS Type, \'YES\' AS Enabled\n FROM performance_schema.global_status\n) UNION ALL (\nSELECT NAME AS Variable_name, COUNT AS Variable_value,\n CONCAT(\'InnoDB Metrics - \', SUBSYSTEM) AS Type,\n \'YES\' AS Enabled\n FROM information_schema.INNODB_METRICS\n WHERE NAME NOT IN (\n \'lock_row_lock_time\', \'lock_row_lock_time_avg\', \'lock_row_lock_time_max\', \'lock_row_lock_waits\',\n \'buffer_pool_reads\', \'buffer_pool_read_requests\', \'buffer_pool_write_requests\', \'buffer_pool_wait_free\',\n \'buffer_pool_read_ahead\', \'buffer_pool_read_ahead_evicted\', \'buffer_pool_pages_total\', \'buffer_pool_pages_misc\',\n \'buffer_pool_pages_data\', \'buffer_pool_bytes_data\', \'buffer_pool_pages_dirty\', \'buffer_pool_bytes_dirty\',\n \'buffer_pool_pages_free\', \'buffer_pages_created\', \'buffer_pages_written\', \'buffer_pages_read\',\n \'buffer_data_reads\', \'buffer_data_written\', \'file_num_open_files\',\n \'os_log_bytes_written\', \'os_log_fsyncs\', \'os_log_pending_fsyncs\', \'os_log_pending_writes\',\n \'log_waits\', \'log_write_requests\', \'log_writes\', \'innodb_dblwr_writes\', \'innodb_dblwr_pages_written\', \'innodb_page_size\')\n) \n UNION ALL (\nSELECT \'NOW()\' AS Variable_name, NOW(3) AS Variable_value, \'System Time\' AS Type, \'YES\' AS Enabled\n) UNION ALL (\nSELECT \'UNIX_TIMESTAMP()\' AS Variable_name, ROUND(UNIX_TIMESTAMP(NOW(3)), 3) AS Variable_value, \'System Time\' AS Type, \'YES\' AS Enabled\n)\n ORDER BY Type, Variable_name; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/processlist.frm b/.rtx5tmp/db/sys/processlist.frm similarity index 99% rename from .rtx5tmp/d/sys/processlist.frm rename to .rtx5tmp/db/sys/processlist.frm index b92d8e2..b6714e7 100644 --- a/.rtx5tmp/d/sys/processlist.frm +++ b/.rtx5tmp/db/sys/processlist.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639182543 +timestamp=0001790056256110571 create-version=2 source=SELECT pps.thread_id AS thd_id,\n pps.processlist_id AS conn_id,\n IF(pps.name = \'thread/sql/one_connection\',\n CONCAT(pps.processlist_user, \'@\', pps.processlist_host),\n REPLACE(pps.name, \'thread/\', \'\')) user,\n pps.processlist_db AS db,\n pps.processlist_command AS command,\n pps.processlist_state AS state,\n pps.processlist_time AS time,\n sys.format_statement(pps.processlist_info) AS current_statement,\n IF(esc.end_event_id IS NULL,\n sys.format_time(esc.timer_wait),\n NULL) AS statement_latency,\n IF(esc.end_event_id IS NULL,\n ROUND(100 * (estc.work_completed / estc.work_estimated), 2),\n NULL) AS progress,\n sys.format_time(esc.lock_time) AS lock_latency,\n esc.rows_examined AS rows_examined,\n esc.rows_sent AS rows_sent,\n esc.rows_affected AS rows_affected,\n esc.created_tmp_tables AS tmp_tables,\n esc.created_tmp_disk_tables AS tmp_disk_tables,\n IF(esc.no_good_index_used > 0 OR esc.no_index_used > 0, \'YES\', \'NO\') AS full_scan,\n IF(esc.end_event_id IS NOT NULL,\n sys.format_statement(esc.sql_text),\n NULL) AS last_statement,\n IF(esc.end_event_id IS NOT NULL,\n sys.format_time(esc.timer_wait),\n NULL) AS last_statement_latency,\n sys.format_bytes(mem.current_allocated) AS current_memory,\n ewc.event_name AS last_wait,\n IF(ewc.end_event_id IS NULL AND ewc.event_name IS NOT NULL,\n \'Still Waiting\',\n sys.format_time(ewc.timer_wait)) last_wait_latency,\n ewc.source,\n sys.format_time(etc.timer_wait) AS trx_latency,\n etc.state AS trx_state,\n etc.autocommit AS trx_autocommit,\n conattr_pid.attr_value as pid,\n conattr_progname.attr_value as program_name\n FROM performance_schema.threads AS pps\n LEFT JOIN performance_schema.events_waits_current AS ewc USING (thread_id)\n LEFT JOIN performance_schema.events_stages_current AS estc USING (thread_id)\n LEFT JOIN performance_schema.events_statements_current AS esc USING (thread_id)\n LEFT JOIN performance_schema.events_transactions_current AS etc USING (thread_id)\n LEFT JOIN sys.x$memory_by_thread_by_current_bytes AS mem USING (thread_id)\n LEFT JOIN performance_schema.session_connect_attrs AS conattr_pid\n ON conattr_pid.processlist_id=pps.processlist_id and conattr_pid.attr_name=\'_pid\'\n LEFT JOIN performance_schema.session_connect_attrs AS conattr_progname\n ON conattr_progname.processlist_id=pps.processlist_id and conattr_progname.attr_name=\'program_name\'\n ORDER BY pps.processlist_time DESC, last_wait_latency DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/ps_check_lost_instrumentation.frm b/.rtx5tmp/db/sys/ps_check_lost_instrumentation.frm similarity index 97% rename from .rtx5tmp/d/sys/ps_check_lost_instrumentation.frm rename to .rtx5tmp/db/sys/ps_check_lost_instrumentation.frm index 4247e9d..b70f634 100644 --- a/.rtx5tmp/d/sys/ps_check_lost_instrumentation.frm +++ b/.rtx5tmp/db/sys/ps_check_lost_instrumentation.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638661232 +timestamp=0001790056255564838 create-version=2 source=SELECT variable_name, variable_value\n FROM performance_schema.global_status\n WHERE variable_name LIKE \'perf%lost\'\n AND variable_value > 0; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_auto_increment_columns.frm b/.rtx5tmp/db/sys/schema_auto_increment_columns.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_auto_increment_columns.frm rename to .rtx5tmp/db/sys/schema_auto_increment_columns.frm index 96e38b3..d8e9b63 100644 --- a/.rtx5tmp/d/sys/schema_auto_increment_columns.frm +++ b/.rtx5tmp/db/sys/schema_auto_increment_columns.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638644139 +timestamp=0001790056255544953 create-version=2 source=SELECT TABLE_SCHEMA,\n TABLE_NAME,\n COLUMN_NAME,\n DATA_TYPE,\n COLUMN_TYPE,\n (LOCATE(\'unsigned\', COLUMN_TYPE) = 0) AS is_signed,\n (LOCATE(\'unsigned\', COLUMN_TYPE) > 0) AS is_unsigned,\n (\n CASE DATA_TYPE\n WHEN \'tinyint\' THEN 255\n WHEN \'smallint\' THEN 65535\n WHEN \'mediumint\' THEN 16777215\n WHEN \'int\' THEN 4294967295\n WHEN \'bigint\' THEN 18446744073709551615\n END >> IF(LOCATE(\'unsigned\', COLUMN_TYPE) > 0, 0, 1)\n ) AS max_value,\n AUTO_INCREMENT,\n AUTO_INCREMENT / (\n CASE DATA_TYPE\n WHEN \'tinyint\' THEN 255\n WHEN \'smallint\' THEN 65535\n WHEN \'mediumint\' THEN 16777215\n WHEN \'int\' THEN 4294967295\n WHEN \'bigint\' THEN 18446744073709551615\n END >> IF(LOCATE(\'unsigned\', COLUMN_TYPE) > 0, 0, 1)\n ) AS auto_increment_ratio\n FROM INFORMATION_SCHEMA.COLUMNS\n INNER JOIN INFORMATION_SCHEMA.TABLES USING (TABLE_SCHEMA, TABLE_NAME)\n WHERE TABLE_SCHEMA NOT IN (\'mysql\', \'sys\', \'INFORMATION_SCHEMA\', \'performance_schema\')\n AND TABLE_TYPE=\'BASE TABLE\'\n AND EXTRA=\'auto_increment\'\n ORDER BY auto_increment_ratio DESC, max_value; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_index_statistics.frm b/.rtx5tmp/db/sys/schema_index_statistics.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_index_statistics.frm rename to .rtx5tmp/db/sys/schema_index_statistics.frm index e41b9ea..2f2b974 100644 --- a/.rtx5tmp/d/sys/schema_index_statistics.frm +++ b/.rtx5tmp/db/sys/schema_index_statistics.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638796740 +timestamp=0001790056255706297 create-version=2 source=SELECT OBJECT_SCHEMA AS table_schema,\n OBJECT_NAME AS table_name,\n INDEX_NAME as index_name,\n COUNT_FETCH AS rows_selected,\n sys.format_time(SUM_TIMER_FETCH) AS select_latency,\n COUNT_INSERT AS rows_inserted,\n sys.format_time(SUM_TIMER_INSERT) AS insert_latency,\n COUNT_UPDATE AS rows_updated,\n sys.format_time(SUM_TIMER_UPDATE) AS update_latency,\n COUNT_DELETE AS rows_deleted,\n sys.format_time(SUM_TIMER_INSERT) AS delete_latency\n FROM performance_schema.table_io_waits_summary_by_index_usage\n WHERE index_name IS NOT NULL\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_object_overview.frm b/.rtx5tmp/db/sys/schema_object_overview.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_object_overview.frm rename to .rtx5tmp/db/sys/schema_object_overview.frm index 322ce41..11424e2 100644 --- a/.rtx5tmp/d/sys/schema_object_overview.frm +++ b/.rtx5tmp/db/sys/schema_object_overview.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638638387 +timestamp=0001790056255538568 create-version=2 source=SELECT ROUTINE_SCHEMA AS db, ROUTINE_TYPE AS object_type, COUNT(*) AS count FROM information_schema.routines GROUP BY ROUTINE_SCHEMA, ROUTINE_TYPE\n UNION\nSELECT TABLE_SCHEMA, TABLE_TYPE, COUNT(*) FROM information_schema.tables GROUP BY TABLE_SCHEMA, TABLE_TYPE\n UNION\nSELECT TABLE_SCHEMA, CONCAT(\'INDEX (\', INDEX_TYPE, \')\'), COUNT(*) FROM information_schema.statistics GROUP BY TABLE_SCHEMA, INDEX_TYPE\n UNION\nSELECT TRIGGER_SCHEMA, \'TRIGGER\', COUNT(*) FROM information_schema.triggers GROUP BY TRIGGER_SCHEMA\n UNION\nSELECT EVENT_SCHEMA, \'EVENT\', COUNT(*) FROM information_schema.events GROUP BY EVENT_SCHEMA\nORDER BY DB, OBJECT_TYPE; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_redundant_indexes.frm b/.rtx5tmp/db/sys/schema_redundant_indexes.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_redundant_indexes.frm rename to .rtx5tmp/db/sys/schema_redundant_indexes.frm index 1e8f0a1..6c16454 100644 --- a/.rtx5tmp/d/sys/schema_redundant_indexes.frm +++ b/.rtx5tmp/db/sys/schema_redundant_indexes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638655133 +timestamp=0001790056255556954 create-version=2 source=SELECT\n redundant_keys.table_schema,\n redundant_keys.table_name,\n redundant_keys.index_name AS redundant_index_name,\n redundant_keys.index_columns AS redundant_index_columns,\n redundant_keys.non_unique AS redundant_index_non_unique,\n dominant_keys.index_name AS dominant_index_name,\n dominant_keys.index_columns AS dominant_index_columns,\n dominant_keys.non_unique AS dominant_index_non_unique,\n IF(redundant_keys.subpart_exists OR dominant_keys.subpart_exists, 1 ,0) AS subpart_exists,\n CONCAT(\n \'ALTER TABLE `\', redundant_keys.table_schema, \'`.`\', redundant_keys.table_name, \'` DROP INDEX `\', redundant_keys.index_name, \'`\'\n ) AS sql_drop_index\n FROM\n x$schema_flattened_keys AS redundant_keys\n INNER JOIN x$schema_flattened_keys AS dominant_keys\n USING (TABLE_SCHEMA, TABLE_NAME)\n WHERE\n redundant_keys.index_name != dominant_keys.index_name\n AND (\n (\n /* Identical columns */\n (redundant_keys.index_columns = dominant_keys.index_columns)\n AND (\n (redundant_keys.non_unique > dominant_keys.non_unique)\n OR (redundant_keys.non_unique = dominant_keys.non_unique\n AND IF(redundant_keys.index_name=\'PRIMARY\', \'\', redundant_keys.index_name) > IF(dominant_keys.index_name=\'PRIMARY\', \'\', dominant_keys.index_name)\n )\n )\n )\n OR\n (\n /* Non-unique prefix columns */\n LOCATE(CONCAT(redundant_keys.index_columns, \',\'), dominant_keys.index_columns) = 1\n AND redundant_keys.non_unique = 1\n )\n OR\n (\n /* Unique prefix columns */\n LOCATE(CONCAT(dominant_keys.index_columns, \',\'), redundant_keys.index_columns) = 1\n AND dominant_keys.non_unique = 0\n )\n ); client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_table_lock_waits.frm b/.rtx5tmp/db/sys/schema_table_lock_waits.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_table_lock_waits.frm rename to .rtx5tmp/db/sys/schema_table_lock_waits.frm index cbe8215..da235dd 100644 --- a/.rtx5tmp/d/sys/schema_table_lock_waits.frm +++ b/.rtx5tmp/db/sys/schema_table_lock_waits.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638856970 +timestamp=0001790056255774275 create-version=2 source=SELECT g.object_schema AS object_schema,\n g.object_name AS object_name,\n pt.thread_id AS waiting_thread_id,\n pt.processlist_id AS waiting_pid,\n sys.ps_thread_account(p.owner_thread_id) AS waiting_account,\n p.lock_type AS waiting_lock_type,\n p.lock_duration AS waiting_lock_duration,\n sys.format_statement(pt.processlist_info) AS waiting_query,\n pt.processlist_time AS waiting_query_secs,\n ps.rows_affected AS waiting_query_rows_affected,\n ps.rows_examined AS waiting_query_rows_examined,\n gt.thread_id AS blocking_thread_id,\n gt.processlist_id AS blocking_pid,\n sys.ps_thread_account(g.owner_thread_id) AS blocking_account,\n g.lock_type AS blocking_lock_type,\n g.lock_duration AS blocking_lock_duration,\n CONCAT(\'KILL QUERY \', gt.processlist_id) AS sql_kill_blocking_query,\n CONCAT(\'KILL \', gt.processlist_id) AS sql_kill_blocking_connection\n FROM performance_schema.metadata_locks g\n INNER JOIN performance_schema.metadata_locks p\n ON g.object_type = p.object_type\n AND g.object_schema = p.object_schema\n AND g.object_name = p.object_name\n AND g.lock_status = \'GRANTED\'\n AND p.lock_status = \'PENDING\'\n INNER JOIN performance_schema.threads gt ON g.owner_thread_id = gt.thread_id\n INNER JOIN performance_schema.threads pt ON p.owner_thread_id = pt.thread_id\n LEFT JOIN performance_schema.events_statements_current gs ON g.owner_thread_id = gs.thread_id\n LEFT JOIN performance_schema.events_statements_current ps ON p.owner_thread_id = ps.thread_id\n WHERE g.object_type = \'TABLE\'; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_table_statistics.frm b/.rtx5tmp/db/sys/schema_table_statistics.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_table_statistics.frm rename to .rtx5tmp/db/sys/schema_table_statistics.frm index 6425f13..d26ee33 100644 --- a/.rtx5tmp/d/sys/schema_table_statistics.frm +++ b/.rtx5tmp/db/sys/schema_table_statistics.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638814242 +timestamp=0001790056255726616 create-version=2 source=SELECT pst.object_schema AS table_schema,\n pst.object_name AS table_name,\n sys.format_time(pst.sum_timer_wait) AS total_latency,\n pst.count_fetch AS rows_fetched,\n sys.format_time(pst.sum_timer_fetch) AS fetch_latency,\n pst.count_insert AS rows_inserted,\n sys.format_time(pst.sum_timer_insert) AS insert_latency,\n pst.count_update AS rows_updated,\n sys.format_time(pst.sum_timer_update) AS update_latency,\n pst.count_delete AS rows_deleted,\n sys.format_time(pst.sum_timer_delete) AS delete_latency,\n fsbi.count_read AS io_read_requests,\n sys.format_bytes(fsbi.sum_number_of_bytes_read) AS io_read,\n sys.format_time(fsbi.sum_timer_read) AS io_read_latency,\n fsbi.count_write AS io_write_requests,\n sys.format_bytes(fsbi.sum_number_of_bytes_write) AS io_write,\n sys.format_time(fsbi.sum_timer_write) AS io_write_latency,\n fsbi.count_misc AS io_misc_requests,\n sys.format_time(fsbi.sum_timer_misc) AS io_misc_latency\n FROM performance_schema.table_io_waits_summary_by_table AS pst\n LEFT JOIN x$ps_schema_table_statistics_io AS fsbi\n ON pst.object_schema = fsbi.table_schema\n AND pst.object_name = fsbi.table_name\n ORDER BY pst.sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_table_statistics_with_buffer.frm b/.rtx5tmp/db/sys/schema_table_statistics_with_buffer.frm similarity index 99% rename from .rtx5tmp/d/sys/schema_table_statistics_with_buffer.frm rename to .rtx5tmp/db/sys/schema_table_statistics_with_buffer.frm index cd1f4a0..54a4cfe 100644 --- a/.rtx5tmp/d/sys/schema_table_statistics_with_buffer.frm +++ b/.rtx5tmp/db/sys/schema_table_statistics_with_buffer.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638827153 +timestamp=0001790056255741259 create-version=2 source=SELECT pst.object_schema AS table_schema,\n pst.object_name AS table_name,\n pst.count_fetch AS rows_fetched,\n sys.format_time(pst.sum_timer_fetch) AS fetch_latency,\n pst.count_insert AS rows_inserted,\n sys.format_time(pst.sum_timer_insert) AS insert_latency,\n pst.count_update AS rows_updated,\n sys.format_time(pst.sum_timer_update) AS update_latency,\n pst.count_delete AS rows_deleted,\n sys.format_time(pst.sum_timer_delete) AS delete_latency,\n fsbi.count_read AS io_read_requests,\n sys.format_bytes(fsbi.sum_number_of_bytes_read) AS io_read,\n sys.format_time(fsbi.sum_timer_read) AS io_read_latency,\n fsbi.count_write AS io_write_requests,\n sys.format_bytes(fsbi.sum_number_of_bytes_write) AS io_write,\n sys.format_time(fsbi.sum_timer_write) AS io_write_latency,\n fsbi.count_misc AS io_misc_requests,\n sys.format_time(fsbi.sum_timer_misc) AS io_misc_latency,\n sys.format_bytes(ibp.allocated) AS innodb_buffer_allocated,\n sys.format_bytes(ibp.data) AS innodb_buffer_data,\n sys.format_bytes(ibp.allocated - ibp.data) AS innodb_buffer_free,\n ibp.pages AS innodb_buffer_pages,\n ibp.pages_hashed AS innodb_buffer_pages_hashed,\n ibp.pages_old AS innodb_buffer_pages_old,\n ibp.rows_cached AS innodb_buffer_rows_cached\n FROM performance_schema.table_io_waits_summary_by_table AS pst\n LEFT JOIN x$ps_schema_table_statistics_io AS fsbi\n ON pst.object_schema = fsbi.table_schema\n AND pst.object_name = fsbi.table_name\n LEFT JOIN sys.x$innodb_buffer_stats_by_table AS ibp\n ON pst.object_schema = ibp.object_schema\n AND pst.object_name = ibp.object_name\n ORDER BY pst.sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_tables_with_full_table_scans.frm b/.rtx5tmp/db/sys/schema_tables_with_full_table_scans.frm similarity index 98% rename from .rtx5tmp/d/sys/schema_tables_with_full_table_scans.frm rename to .rtx5tmp/db/sys/schema_tables_with_full_table_scans.frm index 6d8a1db..f467ce8 100644 --- a/.rtx5tmp/d/sys/schema_tables_with_full_table_scans.frm +++ b/.rtx5tmp/db/sys/schema_tables_with_full_table_scans.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638838887 +timestamp=0001790056255754296 create-version=2 source=SELECT object_schema,\n object_name,\n count_read AS rows_full_scanned,\n sys.format_time(sum_timer_wait) AS latency\n FROM performance_schema.table_io_waits_summary_by_index_usage\n WHERE index_name IS NULL\n AND count_read > 0\n ORDER BY count_read DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/schema_unused_indexes.frm b/.rtx5tmp/db/sys/schema_unused_indexes.frm similarity index 98% rename from .rtx5tmp/d/sys/schema_unused_indexes.frm rename to .rtx5tmp/db/sys/schema_unused_indexes.frm index f4b52a5..d1fdf68 100644 --- a/.rtx5tmp/d/sys/schema_unused_indexes.frm +++ b/.rtx5tmp/db/sys/schema_unused_indexes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638849873 +timestamp=0001790056255766646 create-version=2 source=SELECT object_schema,\n object_name,\n index_name\n FROM performance_schema.table_io_waits_summary_by_index_usage\n WHERE index_name IS NOT NULL\n AND count_star = 0\n AND object_schema != \'mysql\'\n AND index_name != \'PRIMARY\'\n ORDER BY object_schema, object_name; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/session.frm b/.rtx5tmp/db/sys/session.frm similarity index 99% rename from .rtx5tmp/d/sys/session.frm rename to .rtx5tmp/db/sys/session.frm index 9725376..f0367fe 100644 --- a/.rtx5tmp/d/sys/session.frm +++ b/.rtx5tmp/db/sys/session.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639196892 +timestamp=0001790056256124641 create-version=2 source=SELECT * FROM sys.processlist\nWHERE conn_id IS NOT NULL AND command != \'Daemon\'; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/session_ssl_status.frm b/.rtx5tmp/db/sys/session_ssl_status.frm similarity index 98% rename from .rtx5tmp/d/sys/session_ssl_status.frm rename to .rtx5tmp/db/sys/session_ssl_status.frm index e79f4b0..1cdfd2d 100644 --- a/.rtx5tmp/d/sys/session_ssl_status.frm +++ b/.rtx5tmp/db/sys/session_ssl_status.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639209817 +timestamp=0001790056256137815 create-version=2 source=SELECT sslver.thread_id,\n sslver.variable_value ssl_version,\n sslcip.variable_value ssl_cipher,\n sslreuse.variable_value ssl_sessions_reused\n FROM performance_schema.status_by_thread sslver\n LEFT JOIN performance_schema.status_by_thread sslcip\n ON (sslcip.thread_id=sslver.thread_id and sslcip.variable_name=\'Ssl_cipher\')\n LEFT JOIN performance_schema.status_by_thread sslreuse\n ON (sslreuse.thread_id=sslver.thread_id and sslreuse.variable_name=\'Ssl_sessions_reused\')\n WHERE sslver.variable_name=\'Ssl_version\'; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statement_analysis.frm b/.rtx5tmp/db/sys/statement_analysis.frm similarity index 99% rename from .rtx5tmp/d/sys/statement_analysis.frm rename to .rtx5tmp/db/sys/statement_analysis.frm index 67c4ea6..9c09473 100644 --- a/.rtx5tmp/d/sys/statement_analysis.frm +++ b/.rtx5tmp/db/sys/statement_analysis.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638869992 +timestamp=0001790056255788827 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME AS db,\n IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, \'*\', \'\') AS full_scan,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS err_count,\n SUM_WARNINGS AS warn_count,\n sys.format_time(SUM_TIMER_WAIT) AS total_latency,\n sys.format_time(MAX_TIMER_WAIT) AS max_latency,\n sys.format_time(AVG_TIMER_WAIT) AS avg_latency,\n sys.format_time(SUM_LOCK_TIME) AS lock_latency,\n SUM_ROWS_SENT AS rows_sent,\n ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,\n SUM_ROWS_AFFECTED AS rows_affected,\n ROUND(IFNULL(SUM_ROWS_AFFECTED / NULLIF(COUNT_STAR, 0), 0)) AS rows_affected_avg,\n SUM_CREATED_TMP_TABLES AS tmp_tables,\n SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables,\n SUM_SORT_ROWS AS rows_sorted,\n SUM_SORT_MERGE_PASSES AS sort_merge_passes,\n DIGEST AS digest,\n FIRST_SEEN AS first_seen,\n LAST_SEEN as last_seen\n FROM performance_schema.events_statements_summary_by_digest\nORDER BY SUM_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statements_with_errors_or_warnings.frm b/.rtx5tmp/db/sys/statements_with_errors_or_warnings.frm similarity index 99% rename from .rtx5tmp/d/sys/statements_with_errors_or_warnings.frm rename to .rtx5tmp/db/sys/statements_with_errors_or_warnings.frm index f15ba02..5d4ae3b 100644 --- a/.rtx5tmp/d/sys/statements_with_errors_or_warnings.frm +++ b/.rtx5tmp/db/sys/statements_with_errors_or_warnings.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638880951 +timestamp=0001790056255801610 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS errors,\n IFNULL(SUM_ERRORS / NULLIF(COUNT_STAR, 0), 0) * 100 as error_pct,\n SUM_WARNINGS AS warnings,\n IFNULL(SUM_WARNINGS / NULLIF(COUNT_STAR, 0), 0) * 100 as warning_pct,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_ERRORS > 0\n OR SUM_WARNINGS > 0\nORDER BY SUM_ERRORS DESC, SUM_WARNINGS DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statements_with_full_table_scans.frm b/.rtx5tmp/db/sys/statements_with_full_table_scans.frm similarity index 99% rename from .rtx5tmp/d/sys/statements_with_full_table_scans.frm rename to .rtx5tmp/db/sys/statements_with_full_table_scans.frm index 18d8c38..4312f84 100644 --- a/.rtx5tmp/d/sys/statements_with_full_table_scans.frm +++ b/.rtx5tmp/db/sys/statements_with_full_table_scans.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638892437 +timestamp=0001790056255814040 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n sys.format_time(SUM_TIMER_WAIT) AS total_latency,\n SUM_NO_INDEX_USED AS no_index_used_count,\n SUM_NO_GOOD_INDEX_USED AS no_good_index_used_count,\n ROUND(IFNULL(SUM_NO_INDEX_USED / NULLIF(COUNT_STAR, 0), 0) * 100) AS no_index_used_pct,\n SUM_ROWS_SENT AS rows_sent,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(SUM_ROWS_SENT/COUNT_STAR) AS rows_sent_avg,\n ROUND(SUM_ROWS_EXAMINED/COUNT_STAR) AS rows_examined_avg,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE (SUM_NO_INDEX_USED > 0\n OR SUM_NO_GOOD_INDEX_USED > 0)\n AND DIGEST_TEXT NOT LIKE \'SHOW%\'\n ORDER BY no_index_used_pct DESC, total_latency DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statements_with_runtimes_in_95th_percentile.frm b/.rtx5tmp/db/sys/statements_with_runtimes_in_95th_percentile.frm similarity index 99% rename from .rtx5tmp/d/sys/statements_with_runtimes_in_95th_percentile.frm rename to .rtx5tmp/db/sys/statements_with_runtimes_in_95th_percentile.frm index 2d43a56..490b3bd 100644 --- a/.rtx5tmp/d/sys/statements_with_runtimes_in_95th_percentile.frm +++ b/.rtx5tmp/db/sys/statements_with_runtimes_in_95th_percentile.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638914350 +timestamp=0001790056255840876 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME as db,\n IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, \'*\', \'\') AS full_scan,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS err_count,\n SUM_WARNINGS AS warn_count,\n sys.format_time(SUM_TIMER_WAIT) AS total_latency,\n sys.format_time(MAX_TIMER_WAIT) AS max_latency,\n sys.format_time(AVG_TIMER_WAIT) AS avg_latency,\n SUM_ROWS_SENT AS rows_sent,\n ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,\n FIRST_SEEN AS first_seen,\n LAST_SEEN AS last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest stmts\n JOIN sys.x$ps_digest_95th_percentile_by_avg_us AS top_percentile\n ON ROUND(stmts.avg_timer_wait/1000000) >= top_percentile.avg_us\n ORDER BY AVG_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statements_with_sorting.frm b/.rtx5tmp/db/sys/statements_with_sorting.frm similarity index 99% rename from .rtx5tmp/d/sys/statements_with_sorting.frm rename to .rtx5tmp/db/sys/statements_with_sorting.frm index 621b171..92be62f 100644 --- a/.rtx5tmp/d/sys/statements_with_sorting.frm +++ b/.rtx5tmp/db/sys/statements_with_sorting.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638926337 +timestamp=0001790056255853426 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME db,\n COUNT_STAR AS exec_count,\n sys.format_time(SUM_TIMER_WAIT) AS total_latency,\n SUM_SORT_MERGE_PASSES AS sort_merge_passes,\n ROUND(IFNULL(SUM_SORT_MERGE_PASSES / NULLIF(COUNT_STAR, 0), 0)) AS avg_sort_merges,\n SUM_SORT_SCAN AS sorts_using_scans,\n SUM_SORT_RANGE AS sort_using_range,\n SUM_SORT_ROWS AS rows_sorted,\n ROUND(IFNULL(SUM_SORT_ROWS / NULLIF(COUNT_STAR, 0), 0)) AS avg_rows_sorted,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_SORT_ROWS > 0\n ORDER BY SUM_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/statements_with_temp_tables.frm b/.rtx5tmp/db/sys/statements_with_temp_tables.frm similarity index 99% rename from .rtx5tmp/d/sys/statements_with_temp_tables.frm rename to .rtx5tmp/db/sys/statements_with_temp_tables.frm index fe30352..e6f2496 100644 --- a/.rtx5tmp/d/sys/statements_with_temp_tables.frm +++ b/.rtx5tmp/db/sys/statements_with_temp_tables.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638937886 +timestamp=0001790056255866357 create-version=2 source=SELECT sys.format_statement(DIGEST_TEXT) AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n sys.format_time(SUM_TIMER_WAIT) as total_latency,\n SUM_CREATED_TMP_TABLES AS memory_tmp_tables,\n SUM_CREATED_TMP_DISK_TABLES AS disk_tmp_tables,\n ROUND(IFNULL(SUM_CREATED_TMP_TABLES / NULLIF(COUNT_STAR, 0), 0)) AS avg_tmp_tables_per_query,\n ROUND(IFNULL(SUM_CREATED_TMP_DISK_TABLES / NULLIF(SUM_CREATED_TMP_TABLES, 0), 0) * 100) AS tmp_tables_to_disk_pct,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_CREATED_TMP_TABLES > 0\nORDER BY SUM_CREATED_TMP_DISK_TABLES DESC, SUM_CREATED_TMP_TABLES DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/sys_config.MAD b/.rtx5tmp/db/sys/sys_config.MAD similarity index 98% rename from .rtx5tmp/d/sys/sys_config.MAD rename to .rtx5tmp/db/sys/sys_config.MAD index 3fe7bd4..34240e3 100644 Binary files a/.rtx5tmp/d/sys/sys_config.MAD and b/.rtx5tmp/db/sys/sys_config.MAD differ diff --git a/.rtx5tmp/d/sys/sys_config.MAI b/.rtx5tmp/db/sys/sys_config.MAI similarity index 99% rename from .rtx5tmp/d/sys/sys_config.MAI rename to .rtx5tmp/db/sys/sys_config.MAI index cda59fd..2810e5e 100644 Binary files a/.rtx5tmp/d/sys/sys_config.MAI and b/.rtx5tmp/db/sys/sys_config.MAI differ diff --git a/.rtx5tmp/d/sys/sys_config.frm b/.rtx5tmp/db/sys/sys_config.frm similarity index 93% rename from .rtx5tmp/d/sys/sys_config.frm rename to .rtx5tmp/db/sys/sys_config.frm index 983acf2..5244c28 100644 Binary files a/.rtx5tmp/d/sys/sys_config.frm and b/.rtx5tmp/db/sys/sys_config.frm differ diff --git a/.rtx5tmp/d/sys/user_summary.frm b/.rtx5tmp/db/sys/user_summary.frm similarity index 99% rename from .rtx5tmp/d/sys/user_summary.frm rename to .rtx5tmp/db/sys/user_summary.frm index 680659a..f20e719 100644 --- a/.rtx5tmp/d/sys/user_summary.frm +++ b/.rtx5tmp/db/sys/user_summary.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639008927 +timestamp=0001790056255951820 create-version=2 source=SELECT IF(accounts.user IS NULL, \'background\', accounts.user) AS user,\n SUM(stmt.total) AS statements,\n sys.format_time(SUM(stmt.total_latency)) AS statement_latency,\n sys.format_time(IFNULL(SUM(stmt.total_latency) / NULLIF(SUM(stmt.total), 0), 0)) AS statement_avg_latency,\n SUM(stmt.full_scans) AS table_scans,\n SUM(io.ios) AS file_ios,\n sys.format_time(SUM(io.io_latency)) AS file_io_latency,\n SUM(accounts.current_connections) AS current_connections,\n SUM(accounts.total_connections) AS total_connections,\n COUNT(DISTINCT host) AS unique_hosts,\n sys.format_bytes(SUM(mem.current_allocated)) AS current_memory,\n sys.format_bytes(SUM(mem.total_allocated)) AS total_memory_allocated\n FROM performance_schema.accounts\n LEFT JOIN sys.x$user_summary_by_statement_latency AS stmt ON IF(accounts.user IS NULL, \'background\', accounts.user) = stmt.user\n LEFT JOIN sys.x$user_summary_by_file_io AS io ON IF(accounts.user IS NULL, \'background\', accounts.user) = io.user\n LEFT JOIN sys.x$memory_by_user_by_current_bytes mem ON IF(accounts.user IS NULL, \'background\', accounts.user) = mem.user\n GROUP BY IF(accounts.user IS NULL, \'background\', accounts.user)\n ORDER BY SUM(stmt.total_latency) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/user_summary_by_file_io.frm b/.rtx5tmp/db/sys/user_summary_by_file_io.frm similarity index 98% rename from .rtx5tmp/d/sys/user_summary_by_file_io.frm rename to .rtx5tmp/db/sys/user_summary_by_file_io.frm index 8898d9e..f192102 100644 --- a/.rtx5tmp/d/sys/user_summary_by_file_io.frm +++ b/.rtx5tmp/db/sys/user_summary_by_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638960783 +timestamp=0001790056255893080 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(count_star) AS ios,\n sys.format_time(SUM(sum_timer_wait)) AS io_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/user_summary_by_file_io_type.frm b/.rtx5tmp/db/sys/user_summary_by_file_io_type.frm similarity index 98% rename from .rtx5tmp/d/sys/user_summary_by_file_io_type.frm rename to .rtx5tmp/db/sys/user_summary_by_file_io_type.frm index 4187f47..50106b3 100644 --- a/.rtx5tmp/d/sys/user_summary_by_file_io_type.frm +++ b/.rtx5tmp/db/sys/user_summary_by_file_io_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638949404 +timestamp=0001790056255878893 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS latency,\n sys.format_time(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name LIKE \'wait/io/file%\'\n AND count_star > 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/user_summary_by_stages.frm b/.rtx5tmp/db/sys/user_summary_by_stages.frm similarity index 98% rename from .rtx5tmp/d/sys/user_summary_by_stages.frm rename to .rtx5tmp/db/sys/user_summary_by_stages.frm index 9ec203a..176a344 100644 --- a/.rtx5tmp/d/sys/user_summary_by_stages.frm +++ b/.rtx5tmp/db/sys/user_summary_by_stages.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638994431 +timestamp=0001790056255937272 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency\n FROM performance_schema.events_stages_summary_by_user_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/user_summary_by_statement_latency.frm b/.rtx5tmp/db/sys/user_summary_by_statement_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/user_summary_by_statement_latency.frm rename to .rtx5tmp/db/sys/user_summary_by_statement_latency.frm index 92711e4..fae28e5 100644 --- a/.rtx5tmp/d/sys/user_summary_by_statement_latency.frm +++ b/.rtx5tmp/db/sys/user_summary_by_statement_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638982847 +timestamp=0001790056255919888 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(count_star) AS total,\n sys.format_time(SUM(sum_timer_wait)) AS total_latency,\n sys.format_time(SUM(max_timer_wait)) AS max_latency,\n sys.format_time(SUM(sum_lock_time)) AS lock_latency,\n SUM(sum_rows_sent) AS rows_sent,\n SUM(sum_rows_examined) AS rows_examined,\n SUM(sum_rows_affected) AS rows_affected,\n SUM(sum_no_index_used) + SUM(sum_no_good_index_used) AS full_scans\n FROM performance_schema.events_statements_summary_by_user_by_event_name\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/user_summary_by_statement_type.frm b/.rtx5tmp/db/sys/user_summary_by_statement_type.frm similarity index 99% rename from .rtx5tmp/d/sys/user_summary_by_statement_type.frm rename to .rtx5tmp/db/sys/user_summary_by_statement_type.frm index 0537249..4ebab9f 100644 --- a/.rtx5tmp/d/sys/user_summary_by_statement_type.frm +++ b/.rtx5tmp/db/sys/user_summary_by_statement_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638972186 +timestamp=0001790056255906099 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUBSTRING_INDEX(event_name, \'/\', -1) AS statement,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(max_timer_wait) AS max_latency,\n sys.format_time(sum_lock_time) AS lock_latency,\n sum_rows_sent AS rows_sent,\n sum_rows_examined AS rows_examined,\n sum_rows_affected AS rows_affected,\n sum_no_index_used + sum_no_good_index_used AS full_scans\n FROM performance_schema.events_statements_summary_by_user_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/version.frm b/.rtx5tmp/db/sys/version.frm similarity index 94% rename from .rtx5tmp/d/sys/version.frm rename to .rtx5tmp/db/sys/version.frm index e239529..d35b0f8 100644 --- a/.rtx5tmp/d/sys/version.frm +++ b/.rtx5tmp/db/sys/version.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638473957 +timestamp=0001790056255365812 create-version=2 source=SELECT \'1.5.1\' AS sys_version,\n version() AS mysql_version; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/wait_classes_global_by_avg_latency.frm b/.rtx5tmp/db/sys/wait_classes_global_by_avg_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/wait_classes_global_by_avg_latency.frm rename to .rtx5tmp/db/sys/wait_classes_global_by_avg_latency.frm index 8c26e78..1d57664 100644 --- a/.rtx5tmp/d/sys/wait_classes_global_by_avg_latency.frm +++ b/.rtx5tmp/db/sys/wait_classes_global_by_avg_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639103477 +timestamp=0001790056256038554 create-version=2 source=SELECT SUBSTRING_INDEX(event_name,\'/\', 3) AS event_class,\n SUM(COUNT_STAR) AS total,\n sys.format_time(CAST(SUM(sum_timer_wait) AS UNSIGNED)) AS total_latency,\n sys.format_time(MIN(min_timer_wait)) AS min_latency,\n sys.format_time(IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0)) AS avg_latency,\n sys.format_time(CAST(MAX(max_timer_wait) AS UNSIGNED)) AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE sum_timer_wait > 0\n AND event_name != \'idle\'\n GROUP BY event_class\n ORDER BY IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/wait_classes_global_by_latency.frm b/.rtx5tmp/db/sys/wait_classes_global_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/wait_classes_global_by_latency.frm rename to .rtx5tmp/db/sys/wait_classes_global_by_latency.frm index e6fec34..daadaa6 100644 --- a/.rtx5tmp/d/sys/wait_classes_global_by_latency.frm +++ b/.rtx5tmp/db/sys/wait_classes_global_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639116898 +timestamp=0001790056256050147 create-version=2 source=SELECT SUBSTRING_INDEX(event_name,\'/\', 3) AS event_class,\n SUM(COUNT_STAR) AS total,\n sys.format_time(SUM(sum_timer_wait)) AS total_latency,\n sys.format_time(MIN(min_timer_wait)) min_latency,\n sys.format_time(IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0)) AS avg_latency,\n sys.format_time(MAX(max_timer_wait)) AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE sum_timer_wait > 0\n AND event_name != \'idle\'\n GROUP BY SUBSTRING_INDEX(event_name,\'/\', 3)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/waits_by_host_by_latency.frm b/.rtx5tmp/db/sys/waits_by_host_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/waits_by_host_by_latency.frm rename to .rtx5tmp/db/sys/waits_by_host_by_latency.frm index 31a77f5..4b024d8 100644 --- a/.rtx5tmp/d/sys/waits_by_host_by_latency.frm +++ b/.rtx5tmp/db/sys/waits_by_host_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639146349 +timestamp=0001790056256074527 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name AS event,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency,\n sys.format_time(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name != \'idle\'\n AND sum_timer_wait > 0\n ORDER BY host, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/waits_by_user_by_latency.frm b/.rtx5tmp/db/sys/waits_by_user_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/waits_by_user_by_latency.frm rename to .rtx5tmp/db/sys/waits_by_user_by_latency.frm index 5c7052f..5defcae 100644 --- a/.rtx5tmp/d/sys/waits_by_user_by_latency.frm +++ b/.rtx5tmp/db/sys/waits_by_user_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639130837 +timestamp=0001790056256062072 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name AS event,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency,\n sys.format_time(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name != \'idle\'\n AND user IS NOT NULL\n AND sum_timer_wait > 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/waits_global_by_latency.frm b/.rtx5tmp/db/sys/waits_global_by_latency.frm similarity index 98% rename from .rtx5tmp/d/sys/waits_global_by_latency.frm rename to .rtx5tmp/db/sys/waits_global_by_latency.frm index 1aff108..8d1eaee 100644 --- a/.rtx5tmp/d/sys/waits_global_by_latency.frm +++ b/.rtx5tmp/db/sys/waits_global_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639161408 +timestamp=0001790056256088435 create-version=2 source=SELECT event_name AS event,\n count_star AS total,\n sys.format_time(sum_timer_wait) AS total_latency,\n sys.format_time(avg_timer_wait) AS avg_latency,\n sys.format_time(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE event_name != \'idle\'\n AND sum_timer_wait > 0\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary.frm b/.rtx5tmp/db/sys/x@0024host_summary.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024host_summary.frm rename to .rtx5tmp/db/sys/x@0024host_summary.frm index 07b72a9..c9ec0eb 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639096925 +timestamp=0001790056256032240 create-version=2 source=SELECT IF(accounts.host IS NULL, \'background\', accounts.host) AS host,\n SUM(stmt.total) AS statements,\n SUM(stmt.total_latency) AS statement_latency,\n SUM(stmt.total_latency) / SUM(stmt.total) AS statement_avg_latency,\n SUM(stmt.full_scans) AS table_scans,\n SUM(io.ios) AS file_ios,\n SUM(io.io_latency) AS file_io_latency,\n SUM(accounts.current_connections) AS current_connections,\n SUM(accounts.total_connections) AS total_connections,\n COUNT(DISTINCT accounts.user) AS unique_users,\n SUM(mem.current_allocated) AS current_memory,\n SUM(mem.total_allocated) AS total_memory_allocated\n FROM performance_schema.accounts\n JOIN sys.x$host_summary_by_statement_latency AS stmt ON accounts.host = stmt.host\n JOIN sys.x$host_summary_by_file_io AS io ON accounts.host = io.host\n JOIN sys.x$memory_by_host_by_current_bytes mem ON accounts.host = mem.host\n GROUP BY IF(accounts.host IS NULL, \'background\', accounts.host); client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary_by_file_io.frm b/.rtx5tmp/db/sys/x@0024host_summary_by_file_io.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024host_summary_by_file_io.frm rename to .rtx5tmp/db/sys/x@0024host_summary_by_file_io.frm index a2365a5..14afacf 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary_by_file_io.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary_by_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639044872 +timestamp=0001790056255981275 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(count_star) AS ios,\n SUM(sum_timer_wait) AS io_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary_by_file_io_type.frm b/.rtx5tmp/db/sys/x@0024host_summary_by_file_io_type.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024host_summary_by_file_io_type.frm rename to .rtx5tmp/db/sys/x@0024host_summary_by_file_io_type.frm index 4f4504a..7e5ba13 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary_by_file_io_type.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary_by_file_io_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639032038 +timestamp=0001790056255969562 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name,\n count_star AS total,\n sum_timer_wait AS total_latency,\n max_timer_wait AS max_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name LIKE \'wait/io/file%\'\n AND count_star > 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary_by_stages.frm b/.rtx5tmp/db/sys/x@0024host_summary_by_stages.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024host_summary_by_stages.frm rename to .rtx5tmp/db/sys/x@0024host_summary_by_stages.frm index 201aa8a..5ec474b 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary_by_stages.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary_by_stages.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639080050 +timestamp=0001790056256017722 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency\n FROM performance_schema.events_stages_summary_by_host_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary_by_statement_latency.frm b/.rtx5tmp/db/sys/x@0024host_summary_by_statement_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024host_summary_by_statement_latency.frm rename to .rtx5tmp/db/sys/x@0024host_summary_by_statement_latency.frm index 494b5d1..da67ee1 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary_by_statement_latency.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary_by_statement_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639068350 +timestamp=0001790056256005982 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(count_star) AS total,\n SUM(sum_timer_wait) AS total_latency,\n MAX(max_timer_wait) AS max_latency,\n SUM(sum_lock_time) AS lock_latency,\n SUM(sum_rows_sent) AS rows_sent,\n SUM(sum_rows_examined) AS rows_examined,\n SUM(sum_rows_affected) AS rows_affected,\n SUM(sum_no_index_used) + SUM(sum_no_good_index_used) AS full_scans\n FROM performance_schema.events_statements_summary_by_host_by_event_name\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024host_summary_by_statement_type.frm b/.rtx5tmp/db/sys/x@0024host_summary_by_statement_type.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024host_summary_by_statement_type.frm rename to .rtx5tmp/db/sys/x@0024host_summary_by_statement_type.frm index 6a0a8ff..e85c93a 100644 --- a/.rtx5tmp/d/sys/x@0024host_summary_by_statement_type.frm +++ b/.rtx5tmp/db/sys/x@0024host_summary_by_statement_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639056998 +timestamp=0001790056255993745 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUBSTRING_INDEX(event_name, \'/\', -1) AS statement,\n count_star AS total,\n sum_timer_wait AS total_latency,\n max_timer_wait AS max_latency,\n sum_lock_time AS lock_latency,\n sum_rows_sent AS rows_sent,\n sum_rows_examined AS rows_examined,\n sum_rows_affected AS rows_affected,\n sum_no_index_used + sum_no_good_index_used AS full_scans\n FROM performance_schema.events_statements_summary_by_host_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY IF(host IS NULL, \'background\', host), sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_schema.frm b/.rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_schema.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_schema.frm rename to .rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_schema.frm index e2d9af2..ec82c86 100644 --- a/.rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_schema.frm +++ b/.rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_schema.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638610661 +timestamp=0001790056255504730 create-version=2 source=SELECT IF(LOCATE(\'.\', ibp.table_name) = 0, \'InnoDB System\', REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', 1), \'`\', \'\')) AS object_schema,\n SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) AS allocated,\n SUM(ibp.data_size) AS data,\n COUNT(ibp.page_number) AS pages,\n COUNT(IF(ibp.is_hashed, 1, NULL)) AS pages_hashed,\n COUNT(IF(ibp.is_old, 1, NULL)) AS pages_old,\n ROUND(IFNULL(SUM(ibp.number_records)/NULLIF(COUNT(DISTINCT ibp.index_name), 0), 0)) AS rows_cached\n FROM information_schema.innodb_buffer_page ibp\n WHERE table_name IS NOT NULL\n GROUP BY object_schema\n ORDER BY SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_table.frm b/.rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_table.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_table.frm rename to .rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_table.frm index 566b499..982d64f 100644 --- a/.rtx5tmp/d/sys/x@0024innodb_buffer_stats_by_table.frm +++ b/.rtx5tmp/db/sys/x@0024innodb_buffer_stats_by_table.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638621539 +timestamp=0001790056255520146 create-version=2 source=SELECT IF(LOCATE(\'.\', ibp.table_name) = 0, \'InnoDB System\', REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', 1), \'`\', \'\')) AS object_schema,\n REPLACE(SUBSTRING_INDEX(ibp.table_name, \'.\', -1), \'`\', \'\') AS object_name,\n SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) AS allocated,\n SUM(ibp.data_size) AS data,\n COUNT(ibp.page_number) AS pages,\n COUNT(IF(ibp.is_hashed, 1, NULL)) AS pages_hashed,\n COUNT(IF(ibp.is_old, 1, NULL)) AS pages_old,\n ROUND(IFNULL(SUM(ibp.number_records)/NULLIF(COUNT(DISTINCT ibp.index_name), 0), 0)) AS rows_cached\n FROM information_schema.innodb_buffer_page ibp\n WHERE table_name IS NOT NULL\n GROUP BY object_schema, object_name\n ORDER BY SUM(IF(ibp.compressed_size = 0, 16384, compressed_size)) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024innodb_lock_waits.frm b/.rtx5tmp/db/sys/x@0024innodb_lock_waits.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024innodb_lock_waits.frm rename to .rtx5tmp/db/sys/x@0024innodb_lock_waits.frm index c336b0b..c999ab8 100644 --- a/.rtx5tmp/d/sys/x@0024innodb_lock_waits.frm +++ b/.rtx5tmp/db/sys/x@0024innodb_lock_waits.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638633172 +timestamp=0001790056255532948 create-version=2 source=SELECT r.trx_wait_started AS wait_started,\n TIMEDIFF(NOW(), r.trx_wait_started) AS wait_age,\n TIMESTAMPDIFF(SECOND, r.trx_wait_started, NOW()) AS wait_age_secs,\n rl.lock_table AS locked_table,\n rl.lock_index AS locked_index,\n rl.lock_type AS locked_type,\n r.trx_id AS waiting_trx_id,\n r.trx_started as waiting_trx_started,\n TIMEDIFF(NOW(), r.trx_started) AS waiting_trx_age,\n r.trx_rows_locked AS waiting_trx_rows_locked,\n r.trx_rows_modified AS waiting_trx_rows_modified,\n r.trx_mysql_thread_id AS waiting_pid,\n r.trx_query AS waiting_query,\n rl.lock_id AS waiting_lock_id,\n rl.lock_mode AS waiting_lock_mode,\n b.trx_id AS blocking_trx_id,\n b.trx_mysql_thread_id AS blocking_pid,\n b.trx_query AS blocking_query,\n bl.lock_id AS blocking_lock_id,\n bl.lock_mode AS blocking_lock_mode,\n b.trx_started AS blocking_trx_started,\n TIMEDIFF(NOW(), b.trx_started) AS blocking_trx_age,\n b.trx_rows_locked AS blocking_trx_rows_locked,\n b.trx_rows_modified AS blocking_trx_rows_modified,\n CONCAT(\'KILL QUERY \', b.trx_mysql_thread_id) AS sql_kill_blocking_query,\n CONCAT(\'KILL \', b.trx_mysql_thread_id) AS sql_kill_blocking_connection\n FROM information_schema.innodb_lock_waits w\n INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id\n INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id\n INNER JOIN information_schema.innodb_locks bl ON bl.lock_id = w.blocking_lock_id\n INNER JOIN information_schema.innodb_locks rl ON rl.lock_id = w.requested_lock_id\n ORDER BY r.trx_wait_started; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024io_by_thread_by_latency.frm b/.rtx5tmp/db/sys/x@0024io_by_thread_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024io_by_thread_by_latency.frm rename to .rtx5tmp/db/sys/x@0024io_by_thread_by_latency.frm index 80703cf..05e2d8b 100644 --- a/.rtx5tmp/d/sys/x@0024io_by_thread_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024io_by_thread_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638685919 +timestamp=0001790056255590183 create-version=2 source=SELECT IF(processlist_id IS NULL,\n SUBSTRING_INDEX(name, \'/\', -1),\n CONCAT(processlist_user, \'@\', processlist_host)\n ) user,\n SUM(count_star) total,\n SUM(sum_timer_wait) total_latency,\n MIN(min_timer_wait) min_latency,\n AVG(avg_timer_wait) avg_latency,\n MAX(max_timer_wait) max_latency,\n thread_id,\n processlist_id\n FROM performance_schema.events_waits_summary_by_thread_by_event_name\n LEFT JOIN performance_schema.threads USING (thread_id)\n WHERE event_name LIKE \'wait/io/file/%\'\n AND sum_timer_wait > 0\n GROUP BY thread_id, processlist_id, user\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024io_global_by_file_by_bytes.frm b/.rtx5tmp/db/sys/x@0024io_global_by_file_by_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024io_global_by_file_by_bytes.frm rename to .rtx5tmp/db/sys/x@0024io_global_by_file_by_bytes.frm index 35b19fa..0b65490 100644 --- a/.rtx5tmp/d/sys/x@0024io_global_by_file_by_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024io_global_by_file_by_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638698320 +timestamp=0001790056255602469 create-version=2 source=SELECT file_name AS file,\n count_read,\n sum_number_of_bytes_read AS total_read,\n IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0) AS avg_read,\n count_write,\n sum_number_of_bytes_write AS total_written,\n IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0.00) AS avg_write,\n sum_number_of_bytes_read + sum_number_of_bytes_write AS total,\n IFNULL(ROUND(100-((sum_number_of_bytes_read/ NULLIF((sum_number_of_bytes_read+sum_number_of_bytes_write), 0))*100), 2), 0.00) AS write_pct\n FROM performance_schema.file_summary_by_instance\n ORDER BY sum_number_of_bytes_read + sum_number_of_bytes_write DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024io_global_by_file_by_latency.frm b/.rtx5tmp/db/sys/x@0024io_global_by_file_by_latency.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024io_global_by_file_by_latency.frm rename to .rtx5tmp/db/sys/x@0024io_global_by_file_by_latency.frm index b60e974..9f7e104 100644 --- a/.rtx5tmp/d/sys/x@0024io_global_by_file_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024io_global_by_file_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638710489 +timestamp=0001790056255614299 create-version=2 source=SELECT file_name AS file,\n count_star AS total,\n sum_timer_wait AS total_latency,\n count_read,\n sum_timer_read AS read_latency,\n count_write,\n sum_timer_write AS write_latency,\n count_misc,\n sum_timer_misc AS misc_latency\n FROM performance_schema.file_summary_by_instance\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024io_global_by_wait_by_bytes.frm b/.rtx5tmp/db/sys/x@0024io_global_by_wait_by_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024io_global_by_wait_by_bytes.frm rename to .rtx5tmp/db/sys/x@0024io_global_by_wait_by_bytes.frm index a0482ee..5f86fda 100644 --- a/.rtx5tmp/d/sys/x@0024io_global_by_wait_by_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024io_global_by_wait_by_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638722151 +timestamp=0001790056255626555 create-version=2 source=SELECT SUBSTRING_INDEX(event_name, \'/\', -2) AS event_name,\n count_star AS total,\n sum_timer_wait AS total_latency,\n min_timer_wait AS min_latency,\n avg_timer_wait AS avg_latency,\n max_timer_wait AS max_latency,\n count_read,\n sum_number_of_bytes_read AS total_read,\n IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0) AS avg_read,\n count_write,\n sum_number_of_bytes_write AS total_written,\n IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0) AS avg_written,\n sum_number_of_bytes_write + sum_number_of_bytes_read AS total_requested\n FROM performance_schema.file_summary_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n AND count_star > 0\n ORDER BY sum_number_of_bytes_write + sum_number_of_bytes_read DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024io_global_by_wait_by_latency.frm b/.rtx5tmp/db/sys/x@0024io_global_by_wait_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024io_global_by_wait_by_latency.frm rename to .rtx5tmp/db/sys/x@0024io_global_by_wait_by_latency.frm index d0d3bdc..3de4ad1 100644 --- a/.rtx5tmp/d/sys/x@0024io_global_by_wait_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024io_global_by_wait_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638733861 +timestamp=0001790056255639776 create-version=2 source=SELECT SUBSTRING_INDEX(event_name, \'/\', -2) AS event_name,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency,\n max_timer_wait AS max_latency,\n sum_timer_read AS read_latency,\n sum_timer_write AS write_latency,\n sum_timer_misc AS misc_latency,\n count_read,\n sum_number_of_bytes_read AS total_read,\n IFNULL(sum_number_of_bytes_read / NULLIF(count_read, 0), 0) AS avg_read,\n count_write,\n sum_number_of_bytes_write AS total_written,\n IFNULL(sum_number_of_bytes_write / NULLIF(count_write, 0), 0) AS avg_written\n FROM performance_schema.file_summary_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n AND count_star > 0\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024latest_file_io.frm b/.rtx5tmp/db/sys/x@0024latest_file_io.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024latest_file_io.frm rename to .rtx5tmp/db/sys/x@0024latest_file_io.frm index a36d0d9..5c541b4 100644 --- a/.rtx5tmp/d/sys/x@0024latest_file_io.frm +++ b/.rtx5tmp/db/sys/x@0024latest_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638674240 +timestamp=0001790056255578042 create-version=2 source=SELECT IF(id IS NULL,\n CONCAT(SUBSTRING_INDEX(name, \'/\', -1), \':\', thread_id),\n CONCAT(user, \'@\', host, \':\', id)\n ) thread,\n object_name file,\n timer_wait AS latency,\n operation,\n number_of_bytes AS requested\n FROM performance_schema.events_waits_history_long\n JOIN performance_schema.threads USING (thread_id)\n LEFT JOIN information_schema.processlist ON processlist_id = id\n WHERE object_name IS NOT NULL\n AND event_name LIKE \'wait/io/file/%\'\n ORDER BY timer_start; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024memory_by_host_by_current_bytes.frm b/.rtx5tmp/db/sys/x@0024memory_by_host_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024memory_by_host_by_current_bytes.frm rename to .rtx5tmp/db/sys/x@0024memory_by_host_by_current_bytes.frm index 7e3012a..aa20c5c 100644 --- a/.rtx5tmp/d/sys/x@0024memory_by_host_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024memory_by_host_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638756943 +timestamp=0001790056255664465 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n SUM(current_count_used) AS current_count_used,\n SUM(current_number_of_bytes_used) AS current_allocated,\n IFNULL(SUM(current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0) AS current_avg_alloc,\n MAX(current_number_of_bytes_used) AS current_max_alloc,\n SUM(sum_number_of_bytes_alloc) AS total_allocated\n FROM performance_schema.memory_summary_by_host_by_event_name\n GROUP BY IF(host IS NULL, \'background\', host)\n ORDER BY SUM(current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024memory_by_thread_by_current_bytes.frm b/.rtx5tmp/db/sys/x@0024memory_by_thread_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024memory_by_thread_by_current_bytes.frm rename to .rtx5tmp/db/sys/x@0024memory_by_thread_by_current_bytes.frm index eda2ffe..81c49b4 100644 --- a/.rtx5tmp/d/sys/x@0024memory_by_thread_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024memory_by_thread_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638768537 +timestamp=0001790056255676651 create-version=2 source=SELECT t.thread_id,\n IF(t.name = \'thread/sql/one_connection\',\n CONCAT(t.processlist_user, \'@\', t.processlist_host),\n REPLACE(t.name, \'thread/\', \'\')) user,\n SUM(mt.current_count_used) AS current_count_used,\n SUM(mt.current_number_of_bytes_used) AS current_allocated,\n IFNULL(SUM(mt.current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0) AS current_avg_alloc,\n MAX(mt.current_number_of_bytes_used) AS current_max_alloc,\n SUM(mt.sum_number_of_bytes_alloc) AS total_allocated\n FROM performance_schema.memory_summary_by_thread_by_event_name AS mt\n JOIN performance_schema.threads AS t USING (thread_id)\n GROUP BY thread_id, IF(t.name = \'thread/sql/one_connection\',\n CONCAT(t.processlist_user, \'@\', t.processlist_host),\n REPLACE(t.name, \'thread/\', \'\'))\n ORDER BY SUM(mt.current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024memory_by_user_by_current_bytes.frm b/.rtx5tmp/db/sys/x@0024memory_by_user_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024memory_by_user_by_current_bytes.frm rename to .rtx5tmp/db/sys/x@0024memory_by_user_by_current_bytes.frm index 5081c06..f56fdcd 100644 --- a/.rtx5tmp/d/sys/x@0024memory_by_user_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024memory_by_user_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638745512 +timestamp=0001790056255652364 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(current_count_used) AS current_count_used,\n SUM(current_number_of_bytes_used) AS current_allocated,\n IFNULL(SUM(current_number_of_bytes_used) / NULLIF(SUM(current_count_used), 0), 0) AS current_avg_alloc,\n MAX(current_number_of_bytes_used) AS current_max_alloc,\n SUM(sum_number_of_bytes_alloc) AS total_allocated\n FROM performance_schema.memory_summary_by_user_by_event_name\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(current_number_of_bytes_used) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024memory_global_by_current_bytes.frm b/.rtx5tmp/db/sys/x@0024memory_global_by_current_bytes.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024memory_global_by_current_bytes.frm rename to .rtx5tmp/db/sys/x@0024memory_global_by_current_bytes.frm index d75bbff..badd7f9 100644 --- a/.rtx5tmp/d/sys/x@0024memory_global_by_current_bytes.frm +++ b/.rtx5tmp/db/sys/x@0024memory_global_by_current_bytes.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638779028 +timestamp=0001790056255688706 create-version=2 source=SELECT event_name,\n current_count_used AS current_count,\n current_number_of_bytes_used AS current_alloc,\n IFNULL(current_number_of_bytes_used / NULLIF(current_count_used, 0), 0) AS current_avg_alloc,\n high_count_used AS high_count,\n high_number_of_bytes_used AS high_alloc,\n IFNULL(high_number_of_bytes_used / NULLIF(high_count_used, 0), 0) AS high_avg_alloc\n FROM performance_schema.memory_summary_global_by_event_name\n WHERE current_number_of_bytes_used > 0\n ORDER BY current_number_of_bytes_used DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024memory_global_total.frm b/.rtx5tmp/db/sys/x@0024memory_global_total.frm similarity index 96% rename from .rtx5tmp/d/sys/x@0024memory_global_total.frm rename to .rtx5tmp/db/sys/x@0024memory_global_total.frm index 85b57d4..d394e08 100644 --- a/.rtx5tmp/d/sys/x@0024memory_global_total.frm +++ b/.rtx5tmp/db/sys/x@0024memory_global_total.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638790356 +timestamp=0001790056255700288 create-version=2 source=SELECT SUM(CURRENT_NUMBER_OF_BYTES_USED) total_allocated\n FROM performance_schema.memory_summary_global_by_event_name; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024processlist.frm b/.rtx5tmp/db/sys/x@0024processlist.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024processlist.frm rename to .rtx5tmp/db/sys/x@0024processlist.frm index 6312913..172033c 100644 --- a/.rtx5tmp/d/sys/x@0024processlist.frm +++ b/.rtx5tmp/db/sys/x@0024processlist.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639189324 +timestamp=0001790056256117074 create-version=2 source=SELECT pps.thread_id AS thd_id,\n pps.processlist_id AS conn_id,\n IF(pps.name = \'thread/sql/one_connection\',\n CONCAT(pps.processlist_user, \'@\', pps.processlist_host),\n REPLACE(pps.name, \'thread/\', \'\')) user,\n pps.processlist_db AS db,\n pps.processlist_command AS command,\n pps.processlist_state AS state,\n pps.processlist_time AS time,\n pps.processlist_info AS current_statement,\n IF(esc.end_event_id IS NULL,\n esc.timer_wait,\n NULL) AS statement_latency,\n IF(esc.end_event_id IS NULL,\n ROUND(100 * (estc.work_completed / estc.work_estimated), 2),\n NULL) AS progress,\n esc.lock_time AS lock_latency,\n esc.rows_examined AS rows_examined,\n esc.rows_sent AS rows_sent,\n esc.rows_affected AS rows_affected,\n esc.created_tmp_tables AS tmp_tables,\n esc.created_tmp_disk_tables AS tmp_disk_tables,\n IF(esc.no_good_index_used > 0 OR esc.no_index_used > 0, \'YES\', \'NO\') AS full_scan,\n IF(esc.end_event_id IS NOT NULL,\n esc.sql_text,\n NULL) AS last_statement,\n IF(esc.end_event_id IS NOT NULL,\n esc.timer_wait,\n NULL) AS last_statement_latency,\n mem.current_allocated AS current_memory,\n ewc.event_name AS last_wait,\n IF(ewc.end_event_id IS NULL AND ewc.event_name IS NOT NULL,\n \'Still Waiting\',\n ewc.timer_wait) last_wait_latency,\n ewc.source,\n etc.timer_wait AS trx_latency,\n etc.state AS trx_state,\n etc.autocommit AS trx_autocommit,\n conattr_pid.attr_value as pid,\n conattr_progname.attr_value as program_name\n FROM performance_schema.threads AS pps\n LEFT JOIN performance_schema.events_waits_current AS ewc USING (thread_id)\n LEFT JOIN performance_schema.events_stages_current AS estc USING (thread_id)\n LEFT JOIN performance_schema.events_statements_current AS esc USING (thread_id)\n LEFT JOIN performance_schema.events_transactions_current AS etc USING (thread_id)\n LEFT JOIN sys.x$memory_by_thread_by_current_bytes AS mem USING (thread_id)\n LEFT JOIN performance_schema.session_connect_attrs AS conattr_pid\n ON conattr_pid.processlist_id=pps.processlist_id and conattr_pid.attr_name=\'_pid\'\n LEFT JOIN performance_schema.session_connect_attrs AS conattr_progname\n ON conattr_progname.processlist_id=pps.processlist_id and conattr_progname.attr_name=\'program_name\'\n ORDER BY pps.processlist_time DESC, last_wait_latency DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm b/.rtx5tmp/db/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm rename to .rtx5tmp/db/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm index ecd162c..5f5131b 100644 --- a/.rtx5tmp/d/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm +++ b/.rtx5tmp/db/sys/x@0024ps_digest_95th_percentile_by_avg_us.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638908455 +timestamp=0001790056255833353 create-version=2 source=SELECT s2.avg_us avg_us,\n IFNULL(SUM(s1.cnt)/NULLIF((SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest), 0), 0) percentile\n FROM sys.x$ps_digest_avg_latency_distribution AS s1\n JOIN sys.x$ps_digest_avg_latency_distribution AS s2\n ON s1.avg_us <= s2.avg_us\n GROUP BY s2.avg_us\nHAVING IFNULL(SUM(s1.cnt)/NULLIF((SELECT COUNT(*) FROM performance_schema.events_statements_summary_by_digest), 0), 0) > 0.95\n ORDER BY percentile\n LIMIT 1; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024ps_digest_avg_latency_distribution.frm b/.rtx5tmp/db/sys/x@0024ps_digest_avg_latency_distribution.frm similarity index 97% rename from .rtx5tmp/d/sys/x@0024ps_digest_avg_latency_distribution.frm rename to .rtx5tmp/db/sys/x@0024ps_digest_avg_latency_distribution.frm index f737b3d..49dd3a6 100644 --- a/.rtx5tmp/d/sys/x@0024ps_digest_avg_latency_distribution.frm +++ b/.rtx5tmp/db/sys/x@0024ps_digest_avg_latency_distribution.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638902552 +timestamp=0001790056255825990 create-version=2 source=SELECT COUNT(*) cnt,\n ROUND(avg_timer_wait/1000000) AS avg_us\n FROM performance_schema.events_statements_summary_by_digest\n GROUP BY avg_us; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024ps_schema_table_statistics_io.frm b/.rtx5tmp/db/sys/x@0024ps_schema_table_statistics_io.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024ps_schema_table_statistics_io.frm rename to .rtx5tmp/db/sys/x@0024ps_schema_table_statistics_io.frm index dd1bff4..df70b0d 100644 --- a/.rtx5tmp/d/sys/x@0024ps_schema_table_statistics_io.frm +++ b/.rtx5tmp/db/sys/x@0024ps_schema_table_statistics_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638807299 +timestamp=0001790056255718952 create-version=2 source=SELECT extract_schema_from_file_name(file_name) AS table_schema,\n extract_table_from_file_name(file_name) AS table_name,\n SUM(count_read) AS count_read,\n SUM(sum_number_of_bytes_read) AS sum_number_of_bytes_read,\n SUM(sum_timer_read) AS sum_timer_read,\n SUM(count_write) AS count_write,\n SUM(sum_number_of_bytes_write) AS sum_number_of_bytes_write,\n SUM(sum_timer_write) AS sum_timer_write,\n SUM(count_misc) AS count_misc,\n SUM(sum_timer_misc) AS sum_timer_misc\n FROM performance_schema.file_summary_by_instance\n GROUP BY table_schema, table_name; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_flattened_keys.frm b/.rtx5tmp/db/sys/x@0024schema_flattened_keys.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024schema_flattened_keys.frm rename to .rtx5tmp/db/sys/x@0024schema_flattened_keys.frm index 6f811bf..7ae7676 100644 --- a/.rtx5tmp/d/sys/x@0024schema_flattened_keys.frm +++ b/.rtx5tmp/db/sys/x@0024schema_flattened_keys.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638649001 +timestamp=0001790056255550250 create-version=2 source=SELECT\n TABLE_SCHEMA,\n TABLE_NAME,\n INDEX_NAME,\n MAX(NON_UNIQUE) AS non_unique,\n MAX(IF(SUB_PART IS NULL, 0, 1)) AS subpart_exists,\n GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS index_columns\n FROM INFORMATION_SCHEMA.STATISTICS\n WHERE\n INDEX_TYPE=\'BTREE\'\n AND TABLE_SCHEMA NOT IN (\'mysql\', \'sys\', \'INFORMATION_SCHEMA\', \'PERFORMANCE_SCHEMA\')\n GROUP BY\n TABLE_SCHEMA, TABLE_NAME, INDEX_NAME; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_index_statistics.frm b/.rtx5tmp/db/sys/x@0024schema_index_statistics.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024schema_index_statistics.frm rename to .rtx5tmp/db/sys/x@0024schema_index_statistics.frm index 79412d4..cdd5ba1 100644 --- a/.rtx5tmp/d/sys/x@0024schema_index_statistics.frm +++ b/.rtx5tmp/db/sys/x@0024schema_index_statistics.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638801856 +timestamp=0001790056255713067 create-version=2 source=SELECT OBJECT_SCHEMA AS table_schema,\n OBJECT_NAME AS table_name,\n INDEX_NAME as index_name,\n COUNT_FETCH AS rows_selected,\n SUM_TIMER_FETCH AS select_latency,\n COUNT_INSERT AS rows_inserted,\n SUM_TIMER_INSERT AS insert_latency,\n COUNT_UPDATE AS rows_updated,\n SUM_TIMER_UPDATE AS update_latency,\n COUNT_DELETE AS rows_deleted,\n SUM_TIMER_INSERT AS delete_latency\n FROM performance_schema.table_io_waits_summary_by_index_usage\n WHERE index_name IS NOT NULL\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_table_lock_waits.frm b/.rtx5tmp/db/sys/x@0024schema_table_lock_waits.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024schema_table_lock_waits.frm rename to .rtx5tmp/db/sys/x@0024schema_table_lock_waits.frm index 1162ff8..08127d2 100644 --- a/.rtx5tmp/d/sys/x@0024schema_table_lock_waits.frm +++ b/.rtx5tmp/db/sys/x@0024schema_table_lock_waits.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638863140 +timestamp=0001790056255781087 create-version=2 source=SELECT g.object_schema AS object_schema,\n g.object_name AS object_name,\n pt.thread_id AS waiting_thread_id,\n pt.processlist_id AS waiting_pid,\n sys.ps_thread_account(p.owner_thread_id) AS waiting_account,\n p.lock_type AS waiting_lock_type,\n p.lock_duration AS waiting_lock_duration,\n pt.processlist_info AS waiting_query,\n pt.processlist_time AS waiting_query_secs,\n ps.rows_affected AS waiting_query_rows_affected,\n ps.rows_examined AS waiting_query_rows_examined,\n gt.thread_id AS blocking_thread_id,\n gt.processlist_id AS blocking_pid,\n sys.ps_thread_account(g.owner_thread_id) AS blocking_account,\n g.lock_type AS blocking_lock_type,\n g.lock_duration AS blocking_lock_duration,\n CONCAT(\'KILL QUERY \', gt.processlist_id) AS sql_kill_blocking_query,\n CONCAT(\'KILL \', gt.processlist_id) AS sql_kill_blocking_connection\n FROM performance_schema.metadata_locks g\n INNER JOIN performance_schema.metadata_locks p\n ON g.object_type = p.object_type\n AND g.object_schema = p.object_schema\n AND g.object_name = p.object_name\n AND g.lock_status = \'GRANTED\'\n AND p.lock_status = \'PENDING\'\n INNER JOIN performance_schema.threads gt ON g.owner_thread_id = gt.thread_id\n INNER JOIN performance_schema.threads pt ON p.owner_thread_id = pt.thread_id\n LEFT JOIN performance_schema.events_statements_current gs ON g.owner_thread_id = gs.thread_id\n LEFT JOIN performance_schema.events_statements_current ps ON p.owner_thread_id = ps.thread_id\n WHERE g.object_type = \'TABLE\'; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_table_statistics.frm b/.rtx5tmp/db/sys/x@0024schema_table_statistics.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024schema_table_statistics.frm rename to .rtx5tmp/db/sys/x@0024schema_table_statistics.frm index d5abcf7..dd999c0 100644 --- a/.rtx5tmp/d/sys/x@0024schema_table_statistics.frm +++ b/.rtx5tmp/db/sys/x@0024schema_table_statistics.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638820689 +timestamp=0001790056255733323 create-version=2 source=SELECT pst.object_schema AS table_schema,\n pst.object_name AS table_name,\n pst.sum_timer_wait AS total_latency,\n pst.count_fetch AS rows_fetched,\n pst.sum_timer_fetch AS fetch_latency,\n pst.count_insert AS rows_inserted,\n pst.sum_timer_insert AS insert_latency,\n pst.count_update AS rows_updated,\n pst.sum_timer_update AS update_latency,\n pst.count_delete AS rows_deleted,\n pst.sum_timer_delete AS delete_latency,\n fsbi.count_read AS io_read_requests,\n fsbi.sum_number_of_bytes_read AS io_read,\n fsbi.sum_timer_read AS io_read_latency,\n fsbi.count_write AS io_write_requests,\n fsbi.sum_number_of_bytes_write AS io_write,\n fsbi.sum_timer_write AS io_write_latency,\n fsbi.count_misc AS io_misc_requests,\n fsbi.sum_timer_misc AS io_misc_latency\n FROM performance_schema.table_io_waits_summary_by_table AS pst\n LEFT JOIN x$ps_schema_table_statistics_io AS fsbi\n ON pst.object_schema = fsbi.table_schema\n AND pst.object_name = fsbi.table_name\n ORDER BY pst.sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_table_statistics_with_buffer.frm b/.rtx5tmp/db/sys/x@0024schema_table_statistics_with_buffer.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024schema_table_statistics_with_buffer.frm rename to .rtx5tmp/db/sys/x@0024schema_table_statistics_with_buffer.frm index b4257bb..3fe3557 100644 --- a/.rtx5tmp/d/sys/x@0024schema_table_statistics_with_buffer.frm +++ b/.rtx5tmp/db/sys/x@0024schema_table_statistics_with_buffer.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638833553 +timestamp=0001790056255748306 create-version=2 source=SELECT pst.object_schema AS table_schema,\n pst.object_name AS table_name,\n pst.count_fetch AS rows_fetched,\n pst.sum_timer_fetch AS fetch_latency,\n pst.count_insert AS rows_inserted,\n pst.sum_timer_insert AS insert_latency,\n pst.count_update AS rows_updated,\n pst.sum_timer_update AS update_latency,\n pst.count_delete AS rows_deleted,\n pst.sum_timer_delete AS delete_latency,\n fsbi.count_read AS io_read_requests,\n fsbi.sum_number_of_bytes_read AS io_read,\n fsbi.sum_timer_read AS io_read_latency,\n fsbi.count_write AS io_write_requests,\n fsbi.sum_number_of_bytes_write AS io_write,\n fsbi.sum_timer_write AS io_write_latency,\n fsbi.count_misc AS io_misc_requests,\n fsbi.sum_timer_misc AS io_misc_latency,\n ibp.allocated AS innodb_buffer_allocated,\n ibp.data AS innodb_buffer_data,\n (ibp.allocated - ibp.data) AS innodb_buffer_free,\n ibp.pages AS innodb_buffer_pages,\n ibp.pages_hashed AS innodb_buffer_pages_hashed,\n ibp.pages_old AS innodb_buffer_pages_old,\n ibp.rows_cached AS innodb_buffer_rows_cached\n FROM performance_schema.table_io_waits_summary_by_table AS pst\n LEFT JOIN x$ps_schema_table_statistics_io AS fsbi\n ON pst.object_schema = fsbi.table_schema\n AND pst.object_name = fsbi.table_name\n LEFT JOIN sys.x$innodb_buffer_stats_by_table AS ibp\n ON pst.object_schema = ibp.object_schema\n AND pst.object_name = ibp.object_name\n ORDER BY pst.sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024schema_tables_with_full_table_scans.frm b/.rtx5tmp/db/sys/x@0024schema_tables_with_full_table_scans.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024schema_tables_with_full_table_scans.frm rename to .rtx5tmp/db/sys/x@0024schema_tables_with_full_table_scans.frm index 520a0f4..b594d1d 100644 --- a/.rtx5tmp/d/sys/x@0024schema_tables_with_full_table_scans.frm +++ b/.rtx5tmp/db/sys/x@0024schema_tables_with_full_table_scans.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638844828 +timestamp=0001790056255760916 create-version=2 source=SELECT object_schema,\n object_name,\n count_read AS rows_full_scanned,\n sum_timer_wait AS latency\n FROM performance_schema.table_io_waits_summary_by_index_usage\n WHERE index_name IS NULL\n AND count_read > 0\n ORDER BY count_read DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024session.frm b/.rtx5tmp/db/sys/x@0024session.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024session.frm rename to .rtx5tmp/db/sys/x@0024session.frm index 031428c..fc56005 100644 --- a/.rtx5tmp/d/sys/x@0024session.frm +++ b/.rtx5tmp/db/sys/x@0024session.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639203161 +timestamp=0001790056256131998 create-version=2 source=SELECT * FROM sys.x$processlist\nWHERE conn_id IS NOT NULL AND command != \'Daemon\'; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statement_analysis.frm b/.rtx5tmp/db/sys/x@0024statement_analysis.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statement_analysis.frm rename to .rtx5tmp/db/sys/x@0024statement_analysis.frm index 71bfaf1..b7b1814 100644 --- a/.rtx5tmp/d/sys/x@0024statement_analysis.frm +++ b/.rtx5tmp/db/sys/x@0024statement_analysis.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638875022 +timestamp=0001790056255794610 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME AS db,\n IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, \'*\', \'\') AS full_scan,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS err_count,\n SUM_WARNINGS AS warn_count,\n SUM_TIMER_WAIT AS total_latency,\n MAX_TIMER_WAIT AS max_latency,\n AVG_TIMER_WAIT AS avg_latency,\n SUM_LOCK_TIME AS lock_latency,\n SUM_ROWS_SENT AS rows_sent,\n ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,\n SUM_ROWS_AFFECTED AS rows_affected,\n ROUND(IFNULL(SUM_ROWS_AFFECTED / NULLIF(COUNT_STAR, 0), 0)) AS rows_affected_avg,\n SUM_CREATED_TMP_TABLES AS tmp_tables,\n SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables,\n SUM_SORT_ROWS AS rows_sorted,\n SUM_SORT_MERGE_PASSES AS sort_merge_passes,\n DIGEST AS digest,\n FIRST_SEEN AS first_seen,\n LAST_SEEN as last_seen\n FROM performance_schema.events_statements_summary_by_digest\nORDER BY SUM_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statements_with_errors_or_warnings.frm b/.rtx5tmp/db/sys/x@0024statements_with_errors_or_warnings.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statements_with_errors_or_warnings.frm rename to .rtx5tmp/db/sys/x@0024statements_with_errors_or_warnings.frm index 7624e1a..1f63b8b 100644 --- a/.rtx5tmp/d/sys/x@0024statements_with_errors_or_warnings.frm +++ b/.rtx5tmp/db/sys/x@0024statements_with_errors_or_warnings.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638886160 +timestamp=0001790056255807929 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS errors,\n IFNULL(SUM_ERRORS / NULLIF(COUNT_STAR, 0), 0) * 100 as error_pct,\n SUM_WARNINGS AS warnings,\n IFNULL(SUM_WARNINGS / NULLIF(COUNT_STAR, 0), 0) * 100 as warning_pct,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_ERRORS > 0\n OR SUM_WARNINGS > 0\nORDER BY SUM_ERRORS DESC, SUM_WARNINGS DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statements_with_full_table_scans.frm b/.rtx5tmp/db/sys/x@0024statements_with_full_table_scans.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statements_with_full_table_scans.frm rename to .rtx5tmp/db/sys/x@0024statements_with_full_table_scans.frm index ad6e7e0..9cce6f4 100644 --- a/.rtx5tmp/d/sys/x@0024statements_with_full_table_scans.frm +++ b/.rtx5tmp/db/sys/x@0024statements_with_full_table_scans.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638897493 +timestamp=0001790056255820305 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n SUM_TIMER_WAIT AS total_latency,\n SUM_NO_INDEX_USED AS no_index_used_count,\n SUM_NO_GOOD_INDEX_USED AS no_good_index_used_count,\n ROUND(IFNULL(SUM_NO_INDEX_USED / NULLIF(COUNT_STAR, 0), 0) * 100) AS no_index_used_pct,\n SUM_ROWS_SENT AS rows_sent,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(SUM_ROWS_SENT/COUNT_STAR) AS rows_sent_avg,\n ROUND(SUM_ROWS_EXAMINED/COUNT_STAR) AS rows_examined_avg,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE (SUM_NO_INDEX_USED > 0\n OR SUM_NO_GOOD_INDEX_USED > 0)\n AND DIGEST_TEXT NOT LIKE \'SHOW%\'\n ORDER BY no_index_used_pct DESC, total_latency DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statements_with_runtimes_in_95th_percentile.frm b/.rtx5tmp/db/sys/x@0024statements_with_runtimes_in_95th_percentile.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statements_with_runtimes_in_95th_percentile.frm rename to .rtx5tmp/db/sys/x@0024statements_with_runtimes_in_95th_percentile.frm index d3662e9..4169e35 100644 --- a/.rtx5tmp/d/sys/x@0024statements_with_runtimes_in_95th_percentile.frm +++ b/.rtx5tmp/db/sys/x@0024statements_with_runtimes_in_95th_percentile.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638920776 +timestamp=0001790056255846514 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME AS db,\n IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, \'*\', \'\') AS full_scan,\n COUNT_STAR AS exec_count,\n SUM_ERRORS AS err_count,\n SUM_WARNINGS AS warn_count,\n SUM_TIMER_WAIT AS total_latency,\n MAX_TIMER_WAIT AS max_latency,\n AVG_TIMER_WAIT AS avg_latency,\n SUM_ROWS_SENT AS rows_sent,\n ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,\n SUM_ROWS_EXAMINED AS rows_examined,\n ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest stmts\n JOIN sys.x$ps_digest_95th_percentile_by_avg_us AS top_percentile\n ON ROUND(stmts.avg_timer_wait/1000000) >= top_percentile.avg_us\n ORDER BY AVG_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statements_with_sorting.frm b/.rtx5tmp/db/sys/x@0024statements_with_sorting.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statements_with_sorting.frm rename to .rtx5tmp/db/sys/x@0024statements_with_sorting.frm index 2566261..3e7718a 100644 --- a/.rtx5tmp/d/sys/x@0024statements_with_sorting.frm +++ b/.rtx5tmp/db/sys/x@0024statements_with_sorting.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638932466 +timestamp=0001790056255860009 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME db,\n COUNT_STAR AS exec_count,\n SUM_TIMER_WAIT AS total_latency,\n SUM_SORT_MERGE_PASSES AS sort_merge_passes,\n ROUND(IFNULL(SUM_SORT_MERGE_PASSES / NULLIF(COUNT_STAR, 0), 0)) AS avg_sort_merges,\n SUM_SORT_SCAN AS sorts_using_scans,\n SUM_SORT_RANGE AS sort_using_range,\n SUM_SORT_ROWS AS rows_sorted,\n ROUND(IFNULL(SUM_SORT_ROWS / NULLIF(COUNT_STAR, 0), 0)) AS avg_rows_sorted,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_SORT_ROWS > 0\n ORDER BY SUM_TIMER_WAIT DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024statements_with_temp_tables.frm b/.rtx5tmp/db/sys/x@0024statements_with_temp_tables.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024statements_with_temp_tables.frm rename to .rtx5tmp/db/sys/x@0024statements_with_temp_tables.frm index f4badea..c7c6170 100644 --- a/.rtx5tmp/d/sys/x@0024statements_with_temp_tables.frm +++ b/.rtx5tmp/db/sys/x@0024statements_with_temp_tables.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638943130 +timestamp=0001790056255872815 create-version=2 source=SELECT DIGEST_TEXT AS query,\n SCHEMA_NAME as db,\n COUNT_STAR AS exec_count,\n SUM_TIMER_WAIT as total_latency,\n SUM_CREATED_TMP_TABLES AS memory_tmp_tables,\n SUM_CREATED_TMP_DISK_TABLES AS disk_tmp_tables,\n ROUND(IFNULL(SUM_CREATED_TMP_TABLES / NULLIF(COUNT_STAR, 0), 0)) AS avg_tmp_tables_per_query,\n ROUND(IFNULL(SUM_CREATED_TMP_DISK_TABLES / NULLIF(SUM_CREATED_TMP_TABLES, 0), 0) * 100) AS tmp_tables_to_disk_pct,\n FIRST_SEEN as first_seen,\n LAST_SEEN as last_seen,\n DIGEST AS digest\n FROM performance_schema.events_statements_summary_by_digest\n WHERE SUM_CREATED_TMP_TABLES > 0\nORDER BY SUM_CREATED_TMP_DISK_TABLES DESC, SUM_CREATED_TMP_TABLES DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary.frm b/.rtx5tmp/db/sys/x@0024user_summary.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024user_summary.frm rename to .rtx5tmp/db/sys/x@0024user_summary.frm index 04e0b17..2ef7583 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639016979 +timestamp=0001790056255957512 create-version=2 source=SELECT IF(accounts.user IS NULL, \'background\', accounts.user) AS user,\n SUM(stmt.total) AS statements,\n SUM(stmt.total_latency) AS statement_latency,\n IFNULL(SUM(stmt.total_latency) / NULLIF(SUM(stmt.total), 0), 0) AS statement_avg_latency,\n SUM(stmt.full_scans) AS table_scans,\n SUM(io.ios) AS file_ios,\n SUM(io.io_latency) AS file_io_latency,\n SUM(accounts.current_connections) AS current_connections,\n SUM(accounts.total_connections) AS total_connections,\n COUNT(DISTINCT host) AS unique_hosts,\n SUM(mem.current_allocated) AS current_memory,\n SUM(mem.total_allocated) AS total_memory_allocated\n FROM performance_schema.accounts\n LEFT JOIN sys.x$user_summary_by_statement_latency AS stmt ON IF(accounts.user IS NULL, \'background\', accounts.user) = stmt.user\n LEFT JOIN sys.x$user_summary_by_file_io AS io ON IF(accounts.user IS NULL, \'background\', accounts.user) = io.user\n LEFT JOIN sys.x$memory_by_user_by_current_bytes mem ON IF(accounts.user IS NULL, \'background\', accounts.user) = mem.user\n GROUP BY IF(accounts.user IS NULL, \'background\', accounts.user)\n ORDER BY SUM(stmt.total_latency) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary_by_file_io.frm b/.rtx5tmp/db/sys/x@0024user_summary_by_file_io.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024user_summary_by_file_io.frm rename to .rtx5tmp/db/sys/x@0024user_summary_by_file_io.frm index f8b5155..193ad71 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary_by_file_io.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary_by_file_io.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638965817 +timestamp=0001790056255898994 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(count_star) AS ios,\n SUM(sum_timer_wait) AS io_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name LIKE \'wait/io/file/%\'\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary_by_file_io_type.frm b/.rtx5tmp/db/sys/x@0024user_summary_by_file_io_type.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024user_summary_by_file_io_type.frm rename to .rtx5tmp/db/sys/x@0024user_summary_by_file_io_type.frm index e525baf..9dcfccd 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary_by_file_io_type.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary_by_file_io_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638954596 +timestamp=0001790056255885341 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name,\n count_star AS total,\n sum_timer_wait AS latency,\n max_timer_wait AS max_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name LIKE \'wait/io/file%\'\n AND count_star > 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary_by_stages.frm b/.rtx5tmp/db/sys/x@0024user_summary_by_stages.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024user_summary_by_stages.frm rename to .rtx5tmp/db/sys/x@0024user_summary_by_stages.frm index c6fccde..5465234 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary_by_stages.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary_by_stages.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639000168 +timestamp=0001790056255942888 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency\n FROM performance_schema.events_stages_summary_by_user_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary_by_statement_latency.frm b/.rtx5tmp/db/sys/x@0024user_summary_by_statement_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024user_summary_by_statement_latency.frm rename to .rtx5tmp/db/sys/x@0024user_summary_by_statement_latency.frm index 994d973..0261cf1 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary_by_statement_latency.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary_by_statement_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638988540 +timestamp=0001790056255929441 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUM(count_star) AS total,\n SUM(sum_timer_wait) AS total_latency,\n SUM(max_timer_wait) AS max_latency,\n SUM(sum_lock_time) AS lock_latency,\n SUM(sum_rows_sent) AS rows_sent,\n SUM(sum_rows_examined) AS rows_examined,\n SUM(sum_rows_affected) AS rows_affected,\n SUM(sum_no_index_used) + SUM(sum_no_good_index_used) AS full_scans\n FROM performance_schema.events_statements_summary_by_user_by_event_name\n GROUP BY IF(user IS NULL, \'background\', user)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024user_summary_by_statement_type.frm b/.rtx5tmp/db/sys/x@0024user_summary_by_statement_type.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024user_summary_by_statement_type.frm rename to .rtx5tmp/db/sys/x@0024user_summary_by_statement_type.frm index a7b3f70..7730f03 100644 --- a/.rtx5tmp/d/sys/x@0024user_summary_by_statement_type.frm +++ b/.rtx5tmp/db/sys/x@0024user_summary_by_statement_type.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054638977621 +timestamp=0001790056255913162 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n SUBSTRING_INDEX(event_name, \'/\', -1) AS statement,\n count_star AS total,\n sum_timer_wait AS total_latency,\n max_timer_wait AS max_latency,\n sum_lock_time AS lock_latency,\n sum_rows_sent AS rows_sent,\n sum_rows_examined AS rows_examined,\n sum_rows_affected AS rows_affected,\n sum_no_index_used + sum_no_good_index_used AS full_scans\n FROM performance_schema.events_statements_summary_by_user_by_event_name\n WHERE sum_timer_wait != 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024wait_classes_global_by_avg_latency.frm b/.rtx5tmp/db/sys/x@0024wait_classes_global_by_avg_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024wait_classes_global_by_avg_latency.frm rename to .rtx5tmp/db/sys/x@0024wait_classes_global_by_avg_latency.frm index f8d616b..a2578a4 100644 --- a/.rtx5tmp/d/sys/x@0024wait_classes_global_by_avg_latency.frm +++ b/.rtx5tmp/db/sys/x@0024wait_classes_global_by_avg_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639110163 +timestamp=0001790056256044526 create-version=2 source=SELECT SUBSTRING_INDEX(event_name,\'/\', 3) AS event_class,\n SUM(COUNT_STAR) AS total,\n SUM(sum_timer_wait) AS total_latency,\n MIN(min_timer_wait) AS min_latency,\n IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0) AS avg_latency,\n MAX(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE sum_timer_wait > 0\n AND event_name != \'idle\'\n GROUP BY event_class\n ORDER BY IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024wait_classes_global_by_latency.frm b/.rtx5tmp/db/sys/x@0024wait_classes_global_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024wait_classes_global_by_latency.frm rename to .rtx5tmp/db/sys/x@0024wait_classes_global_by_latency.frm index 39f7cb8..dd68bd8 100644 --- a/.rtx5tmp/d/sys/x@0024wait_classes_global_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024wait_classes_global_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639123468 +timestamp=0001790056256056250 create-version=2 source=SELECT SUBSTRING_INDEX(event_name,\'/\', 3) AS event_class,\n SUM(COUNT_STAR) AS total,\n SUM(sum_timer_wait) AS total_latency,\n MIN(min_timer_wait) AS min_latency,\n IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0) AS avg_latency,\n MAX(max_timer_wait) AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE sum_timer_wait > 0\n AND event_name != \'idle\'\n GROUP BY SUBSTRING_INDEX(event_name,\'/\', 3)\n ORDER BY SUM(sum_timer_wait) DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024waits_by_host_by_latency.frm b/.rtx5tmp/db/sys/x@0024waits_by_host_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024waits_by_host_by_latency.frm rename to .rtx5tmp/db/sys/x@0024waits_by_host_by_latency.frm index c7d84fd..bcc6f51 100644 --- a/.rtx5tmp/d/sys/x@0024waits_by_host_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024waits_by_host_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639154765 +timestamp=0001790056256081825 create-version=2 source=SELECT IF(host IS NULL, \'background\', host) AS host,\n event_name AS event,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency,\n max_timer_wait AS max_latency\n FROM performance_schema.events_waits_summary_by_host_by_event_name\n WHERE event_name != \'idle\'\n AND sum_timer_wait > 0\n ORDER BY host, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024waits_by_user_by_latency.frm b/.rtx5tmp/db/sys/x@0024waits_by_user_by_latency.frm similarity index 99% rename from .rtx5tmp/d/sys/x@0024waits_by_user_by_latency.frm rename to .rtx5tmp/db/sys/x@0024waits_by_user_by_latency.frm index 8b773a9..a6dea92 100644 --- a/.rtx5tmp/d/sys/x@0024waits_by_user_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024waits_by_user_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639138158 +timestamp=0001790056256068728 create-version=2 source=SELECT IF(user IS NULL, \'background\', user) AS user,\n event_name AS event,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency,\n max_timer_wait AS max_latency\n FROM performance_schema.events_waits_summary_by_user_by_event_name\n WHERE event_name != \'idle\'\n AND user IS NOT NULL\n AND sum_timer_wait > 0\n ORDER BY user, sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/sys/x@0024waits_global_by_latency.frm b/.rtx5tmp/db/sys/x@0024waits_global_by_latency.frm similarity index 98% rename from .rtx5tmp/d/sys/x@0024waits_global_by_latency.frm rename to .rtx5tmp/db/sys/x@0024waits_global_by_latency.frm index 7acd404..faedb91 100644 --- a/.rtx5tmp/d/sys/x@0024waits_global_by_latency.frm +++ b/.rtx5tmp/db/sys/x@0024waits_global_by_latency.frm @@ -7,7 +7,7 @@ definer_user=mariadb.sys definer_host=localhost suid=0 with_check_option=0 -timestamp=0001790054639167366 +timestamp=0001790056256094196 create-version=2 source=SELECT event_name AS event,\n count_star AS total,\n sum_timer_wait AS total_latency,\n avg_timer_wait AS avg_latency,\n max_timer_wait AS max_latency\n FROM performance_schema.events_waits_summary_global_by_event_name\n WHERE event_name != \'idle\'\n AND sum_timer_wait > 0\n ORDER BY sum_timer_wait DESC; client_cs_name=utf8mb3 diff --git a/.rtx5tmp/d/test/db.opt b/.rtx5tmp/db/test/db.opt similarity index 100% rename from .rtx5tmp/d/test/db.opt rename to .rtx5tmp/db/test/db.opt diff --git a/.rtx5tmp/ddl_before.py b/.rtx5tmp/ddl_before.py new file mode 100644 index 0000000..b4d3714 --- /dev/null +++ b/.rtx5tmp/ddl_before.py @@ -0,0 +1,1026 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""pbl_runtime_event 表 DDL 单一权威生成器(M11b-1)。 + +范围(任务边界,勿越界):只负责 **schema 定义 + 按月 RANGE 分区 + append-only +约束** 的 DDL 生成与校验;不含事务写入逻辑、广播代码、轮询代码(那些属 M11b-2/-3, +在 pbl_runtime_ext/pbl_runtime_ext/{tx_write,partitions,broadcast}.py)。 + +归属模块(QC #22 决策 (b)):本表属 pbls 项目 generated_modules 中的 +``pbl_runtime_ext``(见 projects/pbls/pbls_spec.json 的 generated_modules 列表), +**不写在共享模块 world_sync 里**(world_sync 只保留 W-05 同步职责,已回退无关改动)。 + +设计决策(详见 projects/pbls/docs/02-develop/dev-notes-m11b1-pbl_runtime_event.md): + 1. 逻辑主键是 ``id``(AUTO_INCREMENT),但 MySQL/MariaDB 分区表要求 + 「每个唯一键必须包含全部分区列」,所以**物理主键是复合键 (id, created_at)**; + ``id`` 仍然全局唯一(AUTO_INCREMENT 保证),只是不再单独作 PRIMARY KEY。 + 2. 分区键选 ``created_at``(DATETIME,不用 TIMESTAMP:分区表达式不允许 TIMESTAMP), + 采用 ``PARTITION BY RANGE COLUMNS(created_at)`` + 命名月分区 p + + 末尾 ``pmax VALUES LESS THAN (MAXVALUE)`` 兜底,预建 6 个月。 + 3. append-only 双保险: + (a) 权限层 —— 迁移脚本 REVOKE app 账号的 UPDATE/DELETE(deploy 按需执行); + (b) 触发器层 —— BEFORE UPDATE / BEFORE DELETE 触发器调用存储过程 + ``pbl_assert_append_only()`` SIGNAL SQLSTATE '45000' 拒绝。 + 注:MySQL 系不允许在分区表上写视图/事件,但触发器是允许的; + 护栏防的是「误用与 ORM 隐式写入」,不防拥有 SET 权限的 DBA + (break-glass 变量 ``@pbl_guard_ctx`` 仅用于一次性历史数据回填)。 + 4. 与 sqlor ORM 的兼容性:sor.C() 只发 INSERT(不冲突);sor.U()/sor.D() 会被 + 触发器拒绝 —— 因此本模块所有写路径必须走 INSERT(tx_event/tx_write 已如此), + 迁移脚本与生成器**不产生任何** UPDATE/DELETE 语句。 + +用法: + python3 scripts/pbl_runtime_event_ddl.py --print # 打印建表 DDL + python3 scripts/pbl_runtime_event_ddl.py --emit [目录] # 生成迁移 SQL(幂等) + python3 scripts/pbl_runtime_event_ddl.py --verify # 离线静态自检 + python3 scripts/pbl_runtime_event_ddl.py --apply # 连库执行(读 env/*.json) + python3 scripts/pbl_runtime_event_ddl.py --verify-db # 连库验证分区裁剪/落分区/禁改禁删 + +退出码:0 成功 / 1 校验失败 / 2 环境不可用(DB 连不上,如实上报不谎报)。 +""" + +import argparse +import json +import os +import re +import sys +from datetime import date + +# 相对路径基准:本文件 = modules/pbl_runtime_ext/scripts/xxx.py → 上溯 3 级 = 机构工作空间 +HERE = os.path.dirname(os.path.abspath(__file__)) +MODULE_DIR = os.path.dirname(HERE) # modules/pbl_runtime_ext +WORKSPACE = os.path.dirname(os.path.dirname(MODULE_DIR)) # 机构工作空间根 +DEV_NOTES = "projects/pbls/docs/02-develop/dev-notes-m11b1-pbl_runtime_event.md" + +TABLE = "pbl_runtime_event" +PARTITION_COLUMN = "created_at" +PARTITION_PREFIX = "p" # p202609 ... +PARTITION_MAXVALUE = "pmax" +MONTHS_PRECREATE = 6 # 任务要求:预建 >= 6 个月分区 +RETENTION_MONTHS = 14 # 月分区保留数(超出由维护过程 DROP PARTITION) + +# ---------------------------------------------------------------- 列定义(唯一真源) +# (列名, 类型串, COMMENT);顺序 = 物理列顺序 +COLUMNS = [ + ("id", "BIGINT NOT NULL AUTO_INCREMENT", "自增ID(逻辑主键;物理主键=(id,created_at))"), + ("tenant_id", "VARCHAR(32) NOT NULL DEFAULT ''", "租户ID(多租户强制打头)"), + ("event_uid", "VARCHAR(64) NOT NULL", "事件UID(uuid,应用层生成)"), + ("event_code", "VARCHAR(64) NOT NULL DEFAULT ''", "事件编码"), + ("idem_key", "VARCHAR(128) NOT NULL DEFAULT ''", "幂等键(同键重复投递只落一条)"), + ("world_id", "BIGINT NOT NULL DEFAULT 0", "世界ID(引用 world 基表,只读)"), + ("scene_id", "BIGINT NOT NULL DEFAULT 0", "场景/会话ID(引用 scense 基表,只读)"), + ("session_id", "BIGINT NOT NULL DEFAULT 0", "游戏会话ID(M11a 语义,与 scene_id 同域)"), + ("entity_id", "VARCHAR(64) NOT NULL DEFAULT ''", "实体ID(引用 entity 基表,只读)"), + ("actor_id", "VARCHAR(64) NOT NULL DEFAULT ''", "触发者(服务端会话解析,客户端禁填)"), + ("event_type", "VARCHAR(64) NOT NULL", "事件类型"), + ("payload", "TEXT NULL", "事件负载JSON(任务书字段)"), + ("payload_json", "LONGTEXT NULL", "事件负载JSON(M11a 写路径列名,与 payload 同义留宽)"), + ("causation_id", "VARCHAR(64) NOT NULL DEFAULT ''", "因果链:引发本事件的事件UID"), + ("seq", "BIGINT NOT NULL DEFAULT 0", "会话内单调序号(轮询游标,应用层生成)"), + ("seq_no", "BIGINT NOT NULL DEFAULT 0", "会话内单调序号(M11a 写路径列名)"), + ("source", "VARCHAR(32) NOT NULL DEFAULT 'runtime'", "来源:runtime/agent/script/client_intent"), + ("state", "VARCHAR(16) NOT NULL DEFAULT 'applied'", "applied/rejected/rolled_back"), + ("state_version", "BIGINT NOT NULL DEFAULT 0", "本事件推进到的服务端权威版本"), + ("tx_group", "VARCHAR(64) NOT NULL DEFAULT ''", "事务组(同组同事务)"), + ("broadcast", "TINYINT NOT NULL DEFAULT 1", "是否参与广播 0/1"), + ("created_by", "BIGINT NOT NULL DEFAULT 0", "创建人"), + ("created_at", "DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP", "创建时间(分区键,禁TIMESTAMP)"), + ("updated_at", "DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP", "记录时间戳(append-only:永不 UPDATE)"), +] + +# 索引:(索引名, 类型, [列]);分区表铁律——唯一键必须包含全部分区列 +UNIQUE_KEYS = [ + ("uk_event_uid", ["tenant_id", "event_uid", PARTITION_COLUMN]), + ("uk_tenant_idem", ["tenant_id", "idem_key", PARTITION_COLUMN]), +] +SECONDARY_KEYS = [ + ("ix_scene_created", ["scene_id", PARTITION_COLUMN]), # 任务书要求的复合索引 + ("ix_tenant_session_seq", ["tenant_id", "session_id", "seq"]), + ("ix_tenant_session_seqno", ["tenant_id", "session_id", "seq_no"]), + ("ix_tenant_world_type", ["tenant_id", "world_id", "event_type"]), + ("ix_tx_group", ["tx_group"]), + ("ix_created_at", [PARTITION_COLUMN]), +] +PRIMARY_KEY = ["id", PARTITION_COLUMN] + +# M11a/M11b 现有写路径 INSERT 的列(自检据此断言 DDL 覆盖,防列名漂移) +INSERT_COLUMNS = ["tenant_id", "event_uid", "session_id", "world_id", "actor_id", + "event_type", "payload_json", "causation_id", "state_version", + "seq", "occurred_at", "created_at"] +# tx_event.py(M11a 单事务写路径)使用的列 +TX_EVENT_COLUMNS = ["tenant_id", "event_code", "idem_key", "world_id", "session_id", + "entity_id", "event_type", "payload", "seq_no", "source", "state", + "tx_group", "broadcast", "created_by", "created_at", "updated_at"] +# occurred_at 是 M11a 写路径与 partitions.py 曾用的分区列名 —— 迁移时必须一并落列, +# 否则旧 INSERT 直接报错。保留为兼容列(分区键已改为 created_at)。 +LEGACY_COLUMNS = ["occurred_at"] + +GUARD_ADMIN_CTX = "append_only_admin" + + +def column_names(): + return [c[0] for c in COLUMNS] + LEGACY_COLUMNS + + +# ---------------------------------------------------------------- DDL 片段生成 +def month_start(d): + return date(d.year, d.month, 1) + + +def add_months(d, n): + total = d.year * 12 + (d.month - 1) + n + return date(total // 12, total % 12 + 1, 1) + + +def partition_plan(today=None, months=None): + """返回 [(分区名, 上界 date), ...],含当月共 months 个月(>=6)。""" + today = today or date.today() + months = max(1, int(months or MONTHS_PRECREATE)) + first = month_start(today) + out = [] + for i in range(months): + ms = add_months(first, i) + out.append(("%s%s" % (PARTITION_PREFIX, ms.strftime("%Y%m")), add_months(ms, 1))) + return out + + +def create_table_sql(today=None, months=None): + """建表 DDL(含 RANGE COLUMNS 月分区 + pmax 兜底)。幂等:IF NOT EXISTS。""" + lines = ["CREATE TABLE IF NOT EXISTS `%s` (" % TABLE] + body = [] + for name, typ, comment in COLUMNS: + body.append(" `%s` %s COMMENT '%s'" % (name, typ, comment)) + for legacy in LEGACY_COLUMNS: + body.append(" `%s` DATETIME NULL COMMENT '兼容列(M11a 旧分区键,新写入可空)'" % legacy) + body.append(" PRIMARY KEY (%s)" % ", ".join("`%s`" % c for c in PRIMARY_KEY)) + for name, cols in UNIQUE_KEYS: + body.append(" UNIQUE KEY `%s` (%s)" % (name, ", ".join("`%s`" % c for c in cols))) + for name, cols in SECONDARY_KEYS: + body.append(" KEY `%s` (%s)" % (name, ", ".join("`%s`" % c for c in cols))) + lines.append(",\n".join(body)) + lines.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci") + lines.append(" COMMENT='运行时事件流(append-only,按月RANGE分区,保留%d个月)' " % RETENTION_MONTHS) + plan = partition_plan(today, months) + parts = [" PARTITION `%s` VALUES LESS THAN (DATE '%s')" % (n, b.isoformat()) + for n, b in plan] + parts.append(" PARTITION `%s` VALUES LESS THAN (MAXVALUE)" % PARTITION_MAXVALUE) + lines.append("PARTITION BY RANGE COLUMNS(`%s`) (\n%s\n);" % (PARTITION_COLUMN, ",\n".join(parts))) + return "\n".join(lines) + + +def append_only_sql(): + """append-only 约束:存储过程 + BEFORE UPDATE/DELETE 触发器(幂等)。""" + return """-- append-only 断言过程:非白名单操作一律 SIGNAL 拒绝 +DROP PROCEDURE IF EXISTS `pbl_assert_append_only`; +CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + IF p_table <> '%(table)s' THEN + RETURN; -- 只守护事件表,其他表不受影响 + END IF; + IF IFNULL(@pbl_guard_ctx, '') = '%(ctx)s' THEN + RETURN; -- break-glass:一次性历史数据回填 + END IF; + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; +END; + +-- BEFORE UPDATE 护栏:把违规语句原文带进错误消息,便于定位调用方 +DROP TRIGGER IF EXISTS `trg_%(table)s_append_only_upd`; +CREATE TRIGGER `trg_%(table)s_append_only_upd` + BEFORE UPDATE ON `%(table)s` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = '%(ctx)s' THEN + SET v_msg = CONCAT('break-glass update on ', '%(table)s'); + ELSE + SET v_msg = CONCAT('UPDATE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('%(table)s', 'update', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> '%(ctx)s' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_UPDATE', + MYSQL_ERRNO = 45002; + END IF; +END; + +-- BEFORE DELETE 护栏 +DROP TRIGGER IF EXISTS `trg_%(table)s_append_only_del`; +CREATE TRIGGER `trg_%(table)s_append_only_del` + BEFORE DELETE ON `%(table)s` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = '%(ctx)s' THEN + SET v_msg = CONCAT('break-glass delete on ', '%(table)s'); + ELSE + SET v_msg = CONCAT('DELETE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('%(table)s', 'delete', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> '%(ctx)s' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_DELETE', + MYSQL_ERRNO = 45003; + END IF; +END; + +-- 权限层加固(可选,需 DBA 账号执行;app 账号只保留增/查) +-- GRANT INSERT, SELECT, UPDATE, DELETE ON `%(db)s`.`%(table)s` TO NULL; -- 占位,勿执行 +-- REVOKE UPDATE, DELETE ON `%(db)s`.`%(table)s` FROM '%(app_user)s'@'%%'; +""" % {"table": TABLE, "ctx": GUARD_ADMIN_CTX, "db": "%(dbname)s", "app_user": "%(app_user)s"} + + +def maintenance_sql(today=None, months=None): + """分区维护:过程(幂等补建月分区 / 到期 DROP 旧分区)+ 每月 EVENT。 + + QC #1 修复:正文含大量字面百分号(DATE_FORMAT(...,'%Y-%m-01')、'%Y%m'), + 原先用「三引号 % 字典」渲染会抛 ValueError: unsupported format character。 + 现改用 __TABLE__/__PMAX__/__MONTHS__ token + str.replace, + 字面百分号原样输出、无需再写双写转义。 + """ + months = int(months or MONTHS_PRECREATE) + body = """-- 1) 幂等补建未来月分区:pmax 存在时用 REORGANIZE PARTITION 拆出新月份(不丢数据) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_ensure_partitions`; +CREATE PROCEDURE `pbl_runtime_event_ensure_partitions`(IN p_months_ahead INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(16); + DECLARE v_upper DATE; + DECLARE v_exists INT DEFAULT 0; + DECLARE v_sql TEXT; + DECLARE cur CURSOR FOR + WITH RECURSIVE ms(month_start) AS ( + SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01') + UNION ALL + SELECT DATE_ADD(month_start, INTERVAL 1 MONTH) FROM ms + WHERE month_start < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), + INTERVAL p_months_ahead MONTH) + ) + SELECT CONCAT('p', DATE_FORMAT(month_start, '%Y%m')), + DATE_ADD(month_start, INTERVAL 1 MONTH) + FROM ms; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + OPEN cur; + read_loop: LOOP + FETCH cur INTO v_name, v_upper; + IF v_done = 1 THEN + LEAVE read_loop; + END IF; + SELECT COUNT(*) INTO v_exists FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '__TABLE__' + AND PARTITION_NAME = v_name; + IF v_exists = 0 THEN + SET @pbl_part_sql = CONCAT( + 'ALTER TABLE `__TABLE__` REORGANIZE PARTITION `__PMAX__` INTO (', + 'PARTITION `', v_name, '` VALUES LESS THAN (DATE ''', v_upper, '''), ', + 'PARTITION `__PMAX__` VALUES LESS THAN (MAXVALUE))'); + PREPARE pbl_part_st FROM @pbl_part_sql; + EXECUTE pbl_part_st; + DEALLOCATE PREPARE pbl_part_st; + END IF; + END LOOP; + CLOSE cur; +END; + +-- 2) 到期归档:整月 DROP PARTITION(append-only 表唯一合规的清理手段) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_prune_partitions`; +CREATE PROCEDURE `pbl_runtime_event_prune_partitions`(IN p_keep_months INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(64); + DECLARE v_cutoff DATE; + DECLARE cur CURSOR FOR + SELECT PARTITION_NAME FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '__TABLE__' + AND PARTITION_NAME IS NOT NULL + AND PARTITION_NAME <> '__PMAX__' + AND PARTITION_NAME < CONCAT('p', DATE_FORMAT(v_cutoff, '%Y%m')); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + SET v_cutoff = DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL -p_keep_months MONTH); + OPEN cur; + prune_loop: LOOP + FETCH cur INTO v_name; + IF v_done = 1 THEN + LEAVE prune_loop; + END IF; + SET @pbl_drop_sql = CONCAT('ALTER TABLE `__TABLE__` DROP PARTITION `', v_name, '`'); + PREPARE pbl_drop_st FROM @pbl_drop_sql; + EXECUTE pbl_drop_st; + DEALLOCATE PREPARE pbl_drop_st; + END LOOP; + CLOSE cur; +END; + +-- 3) 每月自动补分区(需 event_scheduler=ON;否则用 cron,见开发说明) +-- SET GLOBAL event_scheduler = ON; +DROP EVENT IF EXISTS `ev___TABLE___partition_maintain`; +CREATE EVENT IF NOT EXISTS `ev___TABLE___partition_maintain` + ON SCHEDULE EVERY 1 MONTH + STARTS TIMESTAMP(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01 03:00:00')) + ON COMPLETION PRESERVE + ENABLE + COMMENT '每月预建未来 __MONTHS__ 个月分区' +DO CALL pbl_runtime_event_ensure_partitions(__MONTHS__); +""" + return (body + .replace("__TABLE__", TABLE) + .replace("__PMAX__", PARTITION_MAXVALUE) + .replace("__MONTHS__", str(months))) + + +def migrate_from_legacy_sql(): + """M11a 非分区表 → M11b 分区表的一次性改造(幂等:已分区则跳过)。""" + return """-- 一次性改造(仅当 pbl_runtime_event 已存在且未分区时手工执行;先备份): +-- 1) CREATE TABLE pbl_runtime_event_new ... (本文件 A 段 DDL,改名 _new) +-- 2) SET @pbl_guard_ctx = '%(ctx)s'; -- break-glass,仅回填期间 +-- INSERT INTO pbl_runtime_event_new (...) SELECT ... FROM pbl_runtime_event; +-- SET @pbl_guard_ctx = NULL; +-- 3) RENAME TABLE pbl_runtime_event TO pbl_runtime_event_m11a_bak, +-- pbl_runtime_event_new TO pbl_runtime_event; +-- 4) 重放 append-only 触发器段(B 段),核对 EXPLAIN 分区裁剪后删备份表。 +-- 本脚本不自动执行改造:DROP/RENAME 生产表必须人工确认(见开发说明「回滚」段)。 +SELECT 'm11b-1 migrate: 人工执行,见注释' AS note; +""" % {"ctx": GUARD_ADMIN_CTX} + + +def full_script(dbname="pbls", app_user="pbls", today=None, months=None): + ddl = create_table_sql(today, months) + guard = append_only_sql().replace("%(dbname)s", dbname).replace("%(app_user)s", app_user) + maint = maintenance_sql(today, months) + head = ("-- ===========================================================================\n" + "-- %s 表 DDL + 按月 RANGE 分区 + append-only 约束(M11b-1)\n" + "-- 由 scripts/pbl_runtime_event_ddl.py 生成,改表结构只改生成器再 --emit。\n" + "-- 目标引擎 mariadb(projects/pbls/env/test.json: db.engine=mariadb)。\n" + "-- 执行:mysql --protocol=tcp -u -p < 本文件\n" + "-- 说明:触发器含多语句体,须用 mysql CLI(DELIMITER)执行;\n" + "-- 应用侧 ensure_tables() 只执行 A 段单语句 CREATE TABLE。\n" + "-- 开发说明:%s\n" + "-- ===========================================================================\n\n" + % (TABLE, DEV_NOTES)) + return (head + + "-- ---------------------------------------------------------------- A. 建表(分区)\n" + + ddl + "\n\n" + + "DELIMITER $$\n\n" + + "-- ---------------------------------------------------------------- B. append-only\n" + + _with_delimiter(guard) + + "\n-- ---------------------------------------------------------------- C. 分区维护\n" + + _with_delimiter(maint) + + "\nDELIMITER ;\n\n" + + "-- ---------------------------------------------------------------- D. 一次性改造\n" + + migrate_from_legacy_sql()) + + +_BLOCK_OPEN = re.compile(r"^BEGIN\b", re.I) +_BLOCK_CLOSE = re.compile(r"^END\s*;?\s*$", re.I) +_SUB_CLOSE = re.compile(r"^END\s+(IF|LOOP|CASE)\b", re.I) +_STMT_HEAD = re.compile( + r"^(DROP|CREATE|GRANT|REVOKE|SET|SELECT|CALL|ALTER|WITH|INSERT|UPDATE|DELETE|START)\b", re.I) +# 一个 $$ 段内不应再出现的「另一条 DDL 语句头」——出现即说明两条语句被黏在了一起 +_INLINE_DDL_HEAD = re.compile( + r"^\s*(DROP|CREATE)\s+(PROCEDURE|TRIGGER|EVENT|TABLE|FUNCTION)\b", re.I) +# 裸关键字残缺行:`CREATE$$` / `DROP$$`(QC #12 的致命产物形态) +_BARE_TOKEN = re.compile(r"^(CREATE|DROP|ALTER|GRANT|REVOKE)\s*\$\$\s*$", re.I) + + +def _with_delimiter(body, delim="$$"): + """把过程/触发器/EVENT 正文按语句切分,逐条以 $$ 收尾,交给 mysql CLI(DELIMITER)执行。 + + QC #12 修复(致命缺陷:迁移资产整体不可执行): + 旧实现 `re.split(r"(?<=;)\n(?=(DROP|CREATE|...))", body)` 的前瞻里带**捕获组**, + re.split 会把捕获到的文本('CREATE' / 'DROP')作为独立元素插进结果列表;这些孤立 token + 随后被当成一条完整语句,拼成裸 `CREATE$$` / `DROP$$` 行写进 .sql。在 `DELIMITER $$` 下 + 服务端把 `CREATE` 当独立语句解析 → ERROR 1064,02/03/canonical 三个文件全部无法执行。 + 另外旧实现把 `DROP PROCEDURE/TRIGGER/EVENT` 留在 `;` 结尾,而 DELIMITER 已改成 `$$`, + 客户端只认 `$$` 为语句结束符,`;` 结尾的 DROP 会与下一条 CREATE 黏成一条语句。 + 现改为按行扫描 + BEGIN/END 嵌套深度判定语句边界(不再使用带捕获组的 re.split): + · 每条语句去掉结尾 `;` 后以 `$$` 结束(含 DROP ... IF EXISTS); + · `--` 注释行原样保留、不加 `$$`(否则 `$$` 被行注释吞掉,语句永不结束); + · 结构上只可能产出以完整关键字开头的语句段,不可能产出裸 `CREATE`/`DROP`。 + """ + out = [] + buf = [] + cmts = [] + depth = [0] + + def flush(): + if not buf: + if cmts: + out.append("\n".join(cmts)) + del cmts[:] + return + stmt = re.sub(r";\s*$", "", "\n".join(buf).strip()) + head = ("\n".join(cmts) + "\n") if cmts else "" + out.append(head + stmt + delim) + del buf[:] + del cmts[:] + + for raw in body.replace("\r\n", "\n").split("\n"): + line = raw.rstrip() + s = line.strip() + if not s: + continue + if not buf: + if s.startswith("--") or s.startswith("#") or not _STMT_HEAD.match(s): + cmts.append(line) + continue + if _BLOCK_OPEN.match(s): + depth[0] += 1 + elif _BLOCK_CLOSE.match(s) and depth[0] > 0: + depth[0] -= 1 + buf.append(line) + if depth[0] == 0 and s.endswith(";") and not _SUB_CLOSE.match(s): + flush() + flush() + return "\n\n".join(out) + "\n" + + +def _delimiter_integrity_errors(text, label=""): + """DELIMITER 语句完整性静态断言(QC #16:PASS 要能证明「可执行」,而非只查关键字存在)。 + + 断言项: + 1) `DELIMITER x` 与 `DELIMITER ;` 严格配对,文件结束时不残留未闭合块; + 2) 每个 `$$` 段首个代码行必须是**完整**语句头(关键字 + 对象类型), + 禁止 `CREATE$$` / `DROP$$` 这类孤立残缺 token(服务端 ERROR 1064); + 3) 一个 `$$` 段内不得再出现第二条 DDL 语句头(防止 `;` 结尾语句与下一条黏连); + 4) 未以 `$$` 收尾的残段里若含可执行语句(纯注释尾巴放行)即判失败。 + 返回缺陷描述列表;空列表 = 结构通过。 + """ + errs = [] + pfx = ("[%s] " % label) if label else "" + lines = text.split("\n") + delim = [None] + seg = [[]] + + def code_of(ls): + return [x.strip() for x in ls if x.strip() and not x.strip().startswith("--") + and not x.strip().startswith("#")] + + def close_segment(): + code = code_of(seg[0]) + if not code: + seg[0] = [] + return + d = delim[0] or "$$" + first_words = code[0].replace(d, "").split() + if len(first_words) < 2: + errs.append(pfx + "残缺语句 token(服务端按独立语句解析 → ERROR 1064): %r" % code[0]) + for x in code[1:]: + if _INLINE_DDL_HEAD.match(x): + errs.append(pfx + "一个 %s 段内黏连了多条 DDL 语句: %r" % (d, x.strip())) + seg[0] = [] + + for i, ln in enumerate(lines, 1): + s = ln.strip() + if _BARE_TOKEN.match(s): + errs.append(pfx + "L%d 裸关键字$$ 残缺行: %r" % (i, s)) + if s.upper().startswith("DELIMITER"): + parts = s.split(None, 1) + new = parts[1].strip() if len(parts) > 1 else ";" + if seg[0]: + close_segment() + if delim[0] is None: + if new == ";": + errs.append(pfx + "L%d 出现没有配对的 `DELIMITER ;`" % i) + else: + delim[0] = new + else: + if new != ";": + errs.append(pfx + "L%d DELIMITER %s 未闭合就切换到 %s" + % (i, delim[0], new)) + delim[0] = new + else: + delim[0] = None + continue + if delim[0]: + seg[0].append(ln) + if s.endswith(delim[0]): + close_segment() + if seg[0]: + errs.append(pfx + "DELIMITER 块末尾存在未以 %s 收尾的可执行残段: %r" + % (delim[0] or "$$", code_of(seg[0])[0][:60])) + seg[0] = [] + if delim[0] is not None: + errs.append(pfx + "文件结束时 DELIMITER %s 仍未闭合" % delim[0]) + return errs + + +# ---------------------------------------------------------------- 迁移文件产出 +MIGRATION_FILES = [ + ("20260919_m11b_01_create_pbl_runtime_event.sql", + lambda db: create_table_sql() + "\n"), + ("20260919_m11b_02_pbl_runtime_event_append_only.sql", + lambda db: "DELIMITER $$\n\n" + _with_delimiter( + append_only_sql().replace("%(dbname)s", db).replace("%(app_user)s", db)) + + "\nDELIMITER ;\n"), + ("20260919_m11b_03_pbl_runtime_event_partition_maintenance.sql", + lambda db: "DELIMITER $$\n\n" + _with_delimiter(maintenance_sql()) + + "\nDELIMITER ;\n"), +] + + +def emit(out_dir=None, dbname="pbls"): + out_dir = out_dir or os.path.join(MODULE_DIR, "scripts", "migrations") + os.makedirs(out_dir, exist_ok=True) + written = [] + for name, fn in MIGRATION_FILES: + path = os.path.join(out_dir, name) + with open(path, "w", encoding="utf-8") as f: + f.write("-- 生成器: scripts/pbl_runtime_event_ddl.py --emit (M11b-1)\n" + "-- 开发说明: %s\n-- 幂等: CREATE ... IF NOT EXISTS / DROP ... IF EXISTS\n\n" + % DEV_NOTES) + f.write(fn(dbname)) + written.append(path) + canon = os.path.join(MODULE_DIR, "sql", "m11b_partitions.sql") + os.makedirs(os.path.dirname(canon), exist_ok=True) + with open(canon, "w", encoding="utf-8") as f: + f.write(full_script(dbname=dbname)) + written.append(canon) + return written + + +# ---------------------------------------------------------------- 离线静态自检 +def verify(): + """静态断言:返回 (ok, msgs)。不连库,可离线取证。""" + msgs = [] + ok = True + ddl = create_table_sql() + cols = column_names() + + # 1. 任务书字段齐备 + for need in ["event_id", "scene_id", "entity_id", "event_type", "payload", + PARTITION_COLUMN, "seq"]: + hit = need in cols or (need == "event_id" and "event_uid" in cols) + if not hit: + ok = False + msgs.append("FAIL 缺字段 %s(event_id 由 event_uid 承载)" % need) + msgs.append("PASS 任务书字段齐备: %s" % ",".join(cols)) + + # 2. 物理主键含分区键;唯一键含分区键 + if PARTITION_COLUMN not in PRIMARY_KEY: + ok = False + msgs.append("FAIL 物理主键未包含分区键 %s" % PARTITION_COLUMN) + else: + msgs.append("PASS 物理主键=%s(逻辑主键 id + 分区键)" % ",".join(PRIMARY_KEY)) + for name, kcols in UNIQUE_KEYS: + if PARTITION_COLUMN not in kcols: + ok = False + msgs.append("FAIL 唯一键 %s 未含分区键" % name) + msgs.append("PASS 唯一键均含分区键: %s" % ",".join(n for n, _ in UNIQUE_KEYS)) + + # 3. 索引要求:scene_id+created_at 复合索引、event_uid 唯一索引 + if not any(set(k) == {"scene_id", PARTITION_COLUMN} for _, k in SECONDARY_KEYS): + ok = False + msgs.append("FAIL 缺 scene_id+created_at 复合索引") + else: + msgs.append("PASS 存在 (scene_id, created_at) 复合索引 ix_scene_created") + if not any(k[:2] == ["tenant_id", "event_uid"] for _, k in UNIQUE_KEYS): + ok = False + msgs.append("FAIL 缺 event_uid 唯一索引") + else: + msgs.append("PASS 存在 event_uid 唯一索引 uk_event_uid") + + # 4. 分区:>=6 个月 + MAXVALUE 兜底 + 分区键为 DATETIME + plan = partition_plan() + if len(plan) < MONTHS_PRECREATE: + ok = False + msgs.append("FAIL 预建分区数 %d < %d" % (len(plan), MONTHS_PRECREATE)) + else: + msgs.append("PASS 预建 %d 个月分区: %s + %s(MAXVALUE)" + % (len(plan), ",".join(n for n, _ in plan), PARTITION_MAXVALUE)) + if "PARTITION BY RANGE COLUMNS(`%s`)" % PARTITION_COLUMN not in ddl: + ok = False + msgs.append("FAIL 未声明 RANGE COLUMNS 分区") + if "VALUES LESS THAN (MAXVALUE)" not in ddl: + ok = False + msgs.append("FAIL 缺 MAXVALUE 兜底分区") + if re.search(r"`%s`\s+TIMESTAMP" % PARTITION_COLUMN, ddl): + ok = False + msgs.append("FAIL 分区键用了 TIMESTAMP(MySQL 不允许)") + else: + msgs.append("PASS 分区键类型 DATETIME(非 TIMESTAMP)") + + # 5. append-only:DDL/迁移全文不得出现对本表的 UPDATE/DELETE 语句 + all_sql = ddl + append_only_sql() + maintenance_sql() + for bad in [r"UPDATE\s+`%s`" % TABLE, r"DELETE\s+FROM\s+`%s`" % TABLE]: + if re.search(bad, all_sql, re.I): + ok = False + msgs.append("FAIL 生成的 SQL 含违规写语句 %s" % bad) + if "BEFORE UPDATE" not in append_only_sql() or "BEFORE DELETE" not in append_only_sql(): + ok = False + msgs.append("FAIL append-only 触发器缺失") + else: + msgs.append("PASS append-only: BEFORE UPDATE + BEFORE DELETE + pbl_assert_append_only()") + + # 6. 与既有写路径列名兼容(防 DDL 漂移把 M11a/M11b 代码打挂) + for col in set(INSERT_COLUMNS) | set(TX_EVENT_COLUMNS): + if col not in cols: + ok = False + msgs.append("FAIL 写路径引用列 %s 不在 DDL 中" % col) + msgs.append("PASS 覆盖 M11a/M11b 写路径全部列名(%d 个)" + % len(set(INSERT_COLUMNS) | set(TX_EVENT_COLUMNS))) + + # 7. 幂等性:所有 DDL 语句可重复执行 + idem_ok = ("CREATE TABLE IF NOT EXISTS" in ddl + and "DROP PROCEDURE IF EXISTS" in append_only_sql() + and "DROP TRIGGER IF EXISTS" in append_only_sql() + and "DROP EVENT IF EXISTS" in maintenance_sql()) + if not idem_ok: + ok = False + msgs.append("FAIL DDL 非幂等(缺 IF EXISTS / DROP IF EXISTS)") + else: + msgs.append("PASS 幂等:IF NOT EXISTS + DROP ... IF EXISTS + 分区存在性判断") + + # 8. DELIMITER 语句完整性(QC #16:PASS 必须能证明「可执行」,不能只查关键字存在性) + artifacts = [ + ("01", create_table_sql()), + ("02", MIGRATION_FILES[1][1]("pbls")), + ("03", MIGRATION_FILES[2][1]("pbls")), + ("canonical", full_script()), + ] + struct_errs = [] + for label, text in artifacts: + struct_errs.extend(_delimiter_integrity_errors(text, label)) + if struct_errs: + ok = False + for e in struct_errs: + msgs.append("FAIL DELIMITER 语句完整性: " + e) + else: + msgs.append("PASS DELIMITER 语句完整性: 4 个产物 DELIMITER 配对正确、%d 个 $$ 段首关键字完整、" + "无裸 CREATE$$/DROP$$ 残缺行" + % sum(len(re.findall(r"\$\$\s*$", t, re.M)) for _, t in artifacts)) + + # 9. 幂等/结构关键字逐产物覆盖(QC #17:完整陈述,不再跳号回避缺陷) + need_map = [ + ("01", ("CREATE TABLE IF NOT EXISTS", "PARTITION BY RANGE COLUMNS", + "VALUES LESS THAN (MAXVALUE)")), + ("02", ("DROP PROCEDURE IF EXISTS", "DROP TRIGGER IF EXISTS", + "BEFORE UPDATE", "BEFORE DELETE")), + ("03", ("DROP PROCEDURE IF EXISTS", "DROP EVENT IF EXISTS", "CREATE EVENT")), + ] + by_label = dict(artifacts) + miss_all = [] + for label, needs in need_map: + miss_all.extend("%s:%s" % (label, n) for n in needs if n not in by_label[label]) + if miss_all: + ok = False + msgs.append("FAIL 幂等/结构关键字缺失: " + ", ".join(miss_all)) + else: + msgs.append("PASS 幂等关键字逐文件覆盖: 01 建表分区 / 02 过程+双触发器 / 03 双过程+EVENT") + return ok, msgs + + +# ---------------------------------------------------------------- 连库执行 / 验证 +def _db_conf(): + """读项目唯一事实源 env/test.json(禁止硬编码连接串)。 + + 沙箱库开关(harness,QC #1 配套的验证隔离能力):环境变量 PBL_DDL_DB_HOST / + PBL_DDL_DB_PORT **只覆盖 host/port**,供 CI / 验证 harness 把连库分支指向一次性沙箱库 + ——破坏性判定(DROP PARTITION、探针 INSERT、guard break-glass)不能拿共享 test/prod 库做实验。 + · user / password / dbname 一律仍只来自 env/*.json:本函数不接受任何环境变量覆盖, + 也不内置默认主机、默认端口、默认账号(禁止硬编码); + · 两个变量都不设置时,返回值与引入该开关之前逐字一致(零行为变化); + · 覆盖生效时 env_name 追加 "+harness" 后缀,日志与 --verify-db 输出可一眼看出连的是沙箱库。 + """ + for env_name in ("test", "prod"): + path = os.path.join(WORKSPACE, "projects", "pbls", "env", "%s.json" % env_name) + if os.path.exists(path): + with open(path, encoding="utf-8") as f: + conf = json.load(f) + db = conf.get("db") or {} + if db.get("host"): + host = (os.environ.get("PBL_DDL_DB_HOST") or "").strip() + port = (os.environ.get("PBL_DDL_DB_PORT") or "").strip() + if host: + db = dict(db, host=host) + env_name = "%s+harness" % env_name + if port: + if not port.isdigit(): + raise RuntimeError("PBL_DDL_DB_PORT 必须是数字端口号: %r" % port) + db = dict(db, port=int(port)) + if "+harness" not in env_name: + env_name = "%s+harness" % env_name + return env_name, db + return None, None + + +def _connect(): + import pymysql + env_name, db = _db_conf() + if not db: + raise RuntimeError("未找到 projects/pbls/env/*.json 的 db 段") + return pymysql.connect(host=db["host"], port=int(db.get("port") or 3306), + user=db.get("user"), password=db.get("password"), + database=db.get("dbname"), charset="utf8mb4", + autocommit=True), env_name, db + + +def apply_ddl(): + """连库执行 A 段建表 + B 段 append-only + C 段维护(逐语句,幂等)。""" + conn, env_name, db = _connect() + cur = conn.cursor() + statements = [create_table_sql()] + statements += _split_procedural(append_only_sql() + .replace("%(dbname)s", db.get("dbname") or "pbls") + .replace("%(app_user)s", db.get("user") or "pbls")) + statements += _split_procedural(maintenance_sql()) + done, failed = [], [] + for stmt in statements: + s = stmt.strip().rstrip(";").strip() + if not s or s.startswith("--"): + continue + try: + cur.execute(s) + done.append(s.split("\n")[0][:70]) + except Exception as exc: # noqa: BLE001 + failed.append((s.split("\n")[0][:70], str(exc)[:200])) + cur.close(); conn.close() + print("[apply] env=%s db=%s 成功 %d 条,失败 %d 条" + % (env_name, db.get("dbname"), len(done), len(failed))) + for f in failed: + print(" FAIL %s -> %s" % f) + return 0 if not failed else 1 + + +def _split_procedural(body): + """按 DDL 边界切语句:CREATE PROCEDURE/TRIGGER/EVENT 取到结尾分号(含内部 ;)。""" + out, buf, inside = [], "", False + for line in body.splitlines(): + low = line.strip().lower() + if not inside and (low.startswith("create procedure") or low.startswith("create trigger") + or low.startswith("create event")): + inside = True + buf += line + "\n" + if inside and line.strip() in ("END;", "END;$$", ";"): + out.append(buf); buf, inside = "", False + elif not inside and low.endswith(";"): + out.append(buf); buf = "" + if buf.strip(): + out.append(buf) + return [x.replace("$$", "").rstrip() for x in out] + + +def _norm_part(name): + """分区名统一口径(QC #1 附带缺陷:两处来源比对方式不一致)。 + + information_schema.PARTITIONS 的 PARTITION_NAME 与 EXPLAIN FORMAT=JSON 计划里的 + partitions 元素,跨引擎/版本可能带反引号、双引号、空白或大小写差异。两边都过这个 + 归一化再比对,避免「分区确实存在但判定说不属于清单」的假失败。 + """ + if not name: + return "" + text = name.decode("utf-8", "replace") if isinstance(name, (bytes, bytearray)) else str(name) + return text.strip().strip("`").strip('"').strip("'").lower() + + +def _render(sql, args=None, placeholders=None): + """SQL 的 % 转义统一出口:可选渲染标识符 + fail-fast 自检(QC #1 的根因处置)。 + + 约定:模板中由 Python 侧填入的标识符(表名/分区名)写 %s;要留给 DBAPI 绑参的 + 百分号占位符一律写 %%s,标识符渲染后即变回 %s。 + · args 不为 None:先执行 sql % args 完成标识符渲染; + · args 为 None:视为调用方已完成渲染(模板就地 % 过),本函数只做转义自检。 + 自检两条,任一不满足立即抛 RuntimeError(而不是丢给驱动报 + "unsupported format character",那会在 verify_db 里被 except 吞成一条模糊失败): + · 结果仍残留 '%%' → 转义写错; + · '%s' 个数与 placeholders 不符 → 漏写/多写绑参占位符。 + 渲染单独成行、括号显式定界,不再依赖「相邻字面量先拼接、再整体 %」的隐式优先级。 + """ + if args is not None: + sql = sql % tuple(args) + if "%%" in sql: + raise RuntimeError("SQL 渲染后仍残留 '%%',转义写法有误: " + sql[:200]) + if placeholders is not None and sql.count("%s") != placeholders: + raise RuntimeError("SQL 渲染后 DBAPI 占位符应为 %d 个,实际 %d 个: %s" + % (placeholders, sql.count("%s"), sql[:200])) + return sql + + +def _explain_partitions(cur, sql, params=None): + """EXPLAIN FORMAT=JSON 取执行计划实际扫描的分区清单(QC #6)。 + + 不再用旧的 PARTITIONS 扩展语法(EXPLAIN 后跟 PARTITIONS 关键字那种):那种写法把分区列固定在 + 结果集第 4 列(下标 3),列序随 MariaDB/MySQL 版本变化,且该扩展语法在新版 MySQL 已废弃。 + JSON 计划里的 partitions 字段两版一致。 + 取不到(引擎不支持/解析失败)返回 [],由调用方判失败,不猜。 + """ + # QC #1(转义):传进来的 sql 必须已完成标识符渲染,只剩 DBAPI 占位符 %s;残留 '%%' 说明 + # 调用方转义写错,直接抛出让它响,别丢给驱动报 "unsupported format character"。 + if "%%" in sql: + raise RuntimeError("EXPLAIN SQL 仍残留 '%%',转义写法有误: " + sql[:200]) + args = tuple(params) if params else None + if args is not None and sql.count("%s") != len(args): + raise RuntimeError("EXPLAIN SQL 占位符 %d 个与参数 %d 个不符: %s" + % (sql.count("%s"), len(args), sql[:200])) + try: + cur.execute("EXPLAIN FORMAT=JSON " + sql, args) + row = cur.fetchone() + except Exception: # noqa: BLE001 + return [] + raw = row[0] if row else None + if isinstance(raw, (bytes, bytearray)): + raw = raw.decode("utf-8", "replace") + if not raw: + return [] + try: + plan = json.loads(raw) + except (ValueError, TypeError): + return [] + found = [] + + def walk(node): + if isinstance(node, dict): + for key, val in node.items(): + if key == "partitions" and isinstance(val, list): + for p in val: + name = _norm_part(p) + if name and name not in found: + found.append(name) + else: + walk(val) + elif isinstance(node, list): + for val in node: + walk(val) + + walk(plan) + return found + + +def _row_in_partition(cur, part, uid): + """SELECT ... FROM t PARTITION(p) 反查:探针行是否物理落在该分区。""" + sql = _render("SELECT id FROM `%s` PARTITION (`%s`)" + " WHERE tenant_id='t_probe' AND event_uid=%%s" % (TABLE, _norm_part(part)), + placeholders=1) + try: + cur.execute(sql, (uid,)) + except Exception: # noqa: BLE001 + return False + return bool(cur.fetchone()) + + +def _locate_row_partition(cur, uid, ts, part_names): + """定位某探针行实际所在分区(QC #6)。 + + 1) 首选按 information_schema 分区清单逐个 PARTITION(p) 反查物理位置——与 EXPLAIN + 输出列序无关,最可靠; + 2) 反查不中(引擎不支持 PARTITION 子句等)时退回 EXPLAIN FORMAT=JSON 解析 + partitions(带 tenant_id+event_uid+created_at 等值条件,裁剪后应只剩 1 个分区)。 + """ + # 1) 逐个 PARTITION(p) 物理反查(复用 _row_in_partition,SQL 只在其内拼装一次, + # 避免同一份转义逻辑在两处各写一遍、改一处漏一处) + for part in part_names: + if _row_in_partition(cur, part, uid): + return _norm_part(part) + # 2) 反查不中才退回 EXPLAIN FORMAT=JSON;标识符渲染与转义自检统一走 _render + probe_sql = _render("SELECT id FROM `%s` WHERE tenant_id='t_probe'" + " AND event_uid=%%s AND created_at=%%s" % TABLE, + placeholders=2) + planned = _explain_partitions(cur, probe_sql, (uid, ts)) + if len(planned) == 1: + return planned[0] + return ",".join(planned) or "?" + + +def verify_db(): + """连库验证:分区裁剪 / 数据落分区 / UPDATE·DELETE 被拒。""" + conn, env_name, db = _connect() + cur = conn.cursor() + results = [] + + cur.execute("SELECT COUNT(*) FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=DATABASE()" + " AND TABLE_NAME=%s AND PARTITION_NAME IS NOT NULL", (TABLE,)) + n_parts = cur.fetchone()[0] + results.append(("分区数", n_parts >= MONTHS_PRECREATE + 1, "实际 %d(含 pmax)" % n_parts)) + + # 分区清单:以 information_schema.PARTITIONS 为权威来源(按 ordinal 排序), + # 后面「落哪个分区」「分区裁剪」两项判定都基于这份清单(QC #6) + cur.execute("SELECT PARTITION_NAME, PARTITION_DESCRIPTION FROM information_schema.PARTITIONS " + "WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=%s " + "AND PARTITION_NAME IS NOT NULL ORDER BY PARTITION_ORDINAL_POSITION", (TABLE,)) + part_rows = [(r[0], r[1]) for r in cur.fetchall()] + part_names = [n for n, _ in part_rows if n] + results.append(("MAXVALUE 兜底", PARTITION_MAXVALUE in part_names, ",".join(part_names))) + # 分区名比对统一走归一化口径(information_schema 与 EXPLAIN JSON 计划两来源一致) + part_norm = set(_norm_part(n) for n in part_names) + + # 插入两条不同月份的探针行 → 应落在两个不同的物理分区 + probe = "m11bprobe%s" % date.today().strftime("%H%M%S") + probes = (("%s_a" % probe, "2026-01-05 00:00:00"), + ("%s_b" % probe, "2027-03-05 00:00:00")) + ins_sql = _render("INSERT INTO `%s` (tenant_id,event_uid,event_type,scene_id,seq,created_at)" + " VALUES ('t_probe',%%s,'probe',0,%%s,%%s)" % TABLE, + placeholders=3) + try: + for i, (uid, ts) in enumerate(probes): + cur.execute(ins_sql, (uid, i + 1, ts)) + except Exception as exc: # noqa: BLE001 + results.append(("跨月插入", False, str(exc)[:160])) + else: + results.append(("跨月插入", True, "%d 条探针行(不同月份)" % len(probes))) + located = [_locate_row_partition(cur, uid, ts, part_names) for uid, ts in probes] + distinct = len(set(located)) == 2 + in_list = all(_norm_part(x) in part_norm + for p in located for x in str(p).split(",")) + results.append(("跨月落不同分区", distinct and in_list, + " | ".join("%s -> %s" % (uid, p) + for (uid, _), p in zip(probes, located)))) + + # 分区裁剪:created_at 区间只应命中该区间所属的少数分区,而非全部分区。 + # 旧写法(PARTITIONS 扩展语法 + 取结果集下标 3 那一列):列序跨版本不稳定,新版 MySQL 已废弃。 + prune_sql = _render("SELECT id FROM `%s` WHERE created_at>='2026-01-01'" + " AND created_at<'2026-02-01'" % TABLE, + placeholders=0) + pruned = _explain_partitions(cur, prune_sql) + results.append(("分区裁剪", + bool(pruned) and all(p in part_norm for p in pruned) + and len(pruned) < max(1, len(part_names)), + "命中 %d/%d 分区: %s" % (len(pruned), len(part_names), + ",".join(pruned) or "N/A"))) + + # append-only:UPDATE / DELETE 必须被拒 + for verb, sql in (("UPDATE", "UPDATE `%s` SET event_type='x' WHERE tenant_id='t_probe'" % TABLE), + ("DELETE", "DELETE FROM `%s` WHERE tenant_id='t_probe'" % TABLE)): + try: + cur.execute(sql) + results.append(("%s 被拒" % verb, False, "居然执行成功了(护栏未生效)")) + except Exception as exc: # noqa: BLE001 + msg = str(exc) + results.append(("%s 被拒" % verb, "APPEND_ONLY" in msg or "45000" in msg or "4500" in msg, + msg[:160])) + + # 清理探针(break-glass,仅验证脚本使用) + try: + cur.execute("SET @pbl_guard_ctx='%s'" % GUARD_ADMIN_CTX) + cur.execute("DELETE FROM `%s` WHERE tenant_id='t_probe'" % TABLE) + cur.execute("SET @pbl_guard_ctx=NULL") + except Exception as exc: # noqa: BLE001 + results.append(("探针清理", False, str(exc)[:120])) + + ok = True + print("[verify-db] env=%s db=%s" % (env_name, db.get("dbname"))) + for name, passed, detail in results: + ok = ok and passed + print(" %s %-16s %s" % ("PASS" if passed else "FAIL", name, detail)) + cur.close(); conn.close() + return 0 if ok else 1 + + +def main(argv=None): + ap = argparse.ArgumentParser(description="pbl_runtime_event DDL 生成器(M11b-1)") + ap.add_argument("--print", action="store_true", help="打印建表 DDL") + ap.add_argument("--print-guard", action="store_true", help="打印 append-only 段") + ap.add_argument("--print-maintain", action="store_true", help="打印分区维护段") + ap.add_argument("--emit", nargs="?", const="", default=None, help="生成迁移 SQL 到目录") + ap.add_argument("--dbname", default="pbls") + ap.add_argument("--verify", action="store_true", help="离线静态自检") + ap.add_argument("--apply", action="store_true", help="连库执行(读 env/*.json)") + ap.add_argument("--verify-db", action="store_true", help="连库验证分区/append-only") + args = ap.parse_args(argv) + + if args.print: + print(create_table_sql()) + if args.print_guard: + print(append_only_sql()) + if args.print_maintain: + print(maintenance_sql()) + if args.emit is not None: + for p in emit(args.emit or None, args.dbname): + print("WROTE %s (%d bytes)" % (p, os.path.getsize(p))) + if args.verify: + ok, msgs = verify() + for m in msgs: + print(m) + print("VERIFY %s" % ("PASS" if ok else "FAIL")) + return 0 if ok else 1 + if args.apply: + try: + return apply_ddl() + except Exception as exc: # noqa: BLE001 + print("APPLY SKIP(环境受限): %s" % str(exc)[:200]) + return 2 + if getattr(args, "verify_db"): + try: + return verify_db() + except Exception as exc: # noqa: BLE001 + print("VERIFY-DB SKIP(环境受限): %s" % str(exc)[:200]) + return 2 + if not any([args.print, args.print_guard, args.print_maintain, args.emit is not None]): + print(__doc__) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.rtx5tmp/full.sql b/.rtx5tmp/full.sql new file mode 100644 index 0000000..1c7cd0b --- /dev/null +++ b/.rtx5tmp/full.sql @@ -0,0 +1,237 @@ +-- =========================================================================== +-- pbl_runtime_event 表 DDL + 按月 RANGE 分区 + append-only 约束(M11b-1) +-- 由 scripts/pbl_runtime_event_ddl.py 生成,改表结构只改生成器再 --emit。 +-- 目标引擎 mariadb(projects/pbls/env/test.json: db.engine=mariadb)。 +-- 执行:mysql --protocol=tcp -u -p < 本文件 +-- 说明:触发器含多语句体,须用 mysql CLI(DELIMITER)执行; +-- 应用侧 ensure_tables() 只执行 A 段单语句 CREATE TABLE。 +-- 开发说明:projects/pbls/docs/02-develop/dev-notes-m11b1-pbl_runtime_event.md +-- =========================================================================== + +-- ---------------------------------------------------------------- A. 建表(分区) +CREATE TABLE IF NOT EXISTS `pbl_runtime_event` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID(逻辑主键;物理主键=(id,created_at))', + `tenant_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '租户ID(多租户强制打头)', + `event_uid` VARCHAR(64) NOT NULL COMMENT '事件UID(uuid,应用层生成)', + `event_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事件编码', + `idem_key` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '幂等键(同键重复投递只落一条)', + `world_id` BIGINT NOT NULL DEFAULT 0 COMMENT '世界ID(引用 world 基表,只读)', + `scene_id` BIGINT NOT NULL DEFAULT 0 COMMENT '场景/会话ID(引用 scense 基表,只读)', + `session_id` BIGINT NOT NULL DEFAULT 0 COMMENT '游戏会话ID(M11a 语义,与 scene_id 同域)', + `entity_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '实体ID(引用 entity 基表,只读)', + `actor_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '触发者(服务端会话解析,客户端禁填)', + `event_type` VARCHAR(64) NOT NULL COMMENT '事件类型', + `payload` TEXT NULL COMMENT '事件负载JSON(任务书字段)', + `payload_json` LONGTEXT NULL COMMENT '事件负载JSON(M11a 写路径列名,与 payload 同义留宽)', + `causation_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '因果链:引发本事件的事件UID', + `seq` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(轮询游标,应用层生成)', + `seq_no` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(M11a 写路径列名)', + `source` VARCHAR(32) NOT NULL DEFAULT 'runtime' COMMENT '来源:runtime/agent/script/client_intent', + `state` VARCHAR(16) NOT NULL DEFAULT 'applied' COMMENT 'applied/rejected/rolled_back', + `state_version` BIGINT NOT NULL DEFAULT 0 COMMENT '本事件推进到的服务端权威版本', + `tx_group` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事务组(同组同事务)', + `broadcast` TINYINT NOT NULL DEFAULT 1 COMMENT '是否参与广播 0/1', + `created_by` BIGINT NOT NULL DEFAULT 0 COMMENT '创建人', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(分区键,禁TIMESTAMP)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间戳(append-only:永不 UPDATE)', + `occurred_at` DATETIME NULL COMMENT '兼容列(M11a 旧分区键,新写入可空)', + PRIMARY KEY (`id`, `created_at`), + UNIQUE KEY `uk_event_uid` (`tenant_id`, `event_uid`, `created_at`), + UNIQUE KEY `uk_tenant_idem` (`tenant_id`, `idem_key`, `created_at`), + KEY `ix_scene_created` (`scene_id`, `created_at`), + KEY `ix_tenant_session_seq` (`tenant_id`, `session_id`, `seq`), + KEY `ix_tenant_session_seqno` (`tenant_id`, `session_id`, `seq_no`), + KEY `ix_tenant_world_type` (`tenant_id`, `world_id`, `event_type`), + KEY `ix_tx_group` (`tx_group`), + KEY `ix_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci + COMMENT='运行时事件流(append-only,按月RANGE分区,保留14个月)' +PARTITION BY RANGE COLUMNS(`created_at`) ( + PARTITION `p202609` VALUES LESS THAN (DATE '2026-10-01'), + PARTITION `p202610` VALUES LESS THAN (DATE '2026-11-01'), + PARTITION `p202611` VALUES LESS THAN (DATE '2026-12-01'), + PARTITION `p202612` VALUES LESS THAN (DATE '2027-01-01'), + PARTITION `p202701` VALUES LESS THAN (DATE '2027-02-01'), + PARTITION `p202702` VALUES LESS THAN (DATE '2027-03-01'), + PARTITION `pmax` VALUES LESS THAN (MAXVALUE) +); + +DELIMITER $$ + +-- ---------------------------------------------------------------- B. append-only +-- append-only 断言过程:非白名单操作一律 SIGNAL 拒绝 +DROP PROCEDURE IF EXISTS `pbl_assert_append_only`$$ + +CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + IF p_table <> 'pbl_runtime_event' THEN + RETURN; -- 只守护事件表,其他表不受影响 + END IF; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + RETURN; -- break-glass:一次性历史数据回填 + END IF; + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; +END$$ + +-- BEFORE UPDATE 护栏:把违规语句原文带进错误消息,便于定位调用方 +DROP TRIGGER IF EXISTS `trg_pbl_runtime_event_append_only_upd`$$ + +CREATE TRIGGER `trg_pbl_runtime_event_append_only_upd` + BEFORE UPDATE ON `pbl_runtime_event` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + SET v_msg = CONCAT('break-glass update on ', 'pbl_runtime_event'); + ELSE + SET v_msg = CONCAT('UPDATE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('pbl_runtime_event', 'update', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> 'append_only_admin' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_UPDATE', + MYSQL_ERRNO = 45002; + END IF; +END$$ + +-- BEFORE DELETE 护栏 +DROP TRIGGER IF EXISTS `trg_pbl_runtime_event_append_only_del`$$ + +CREATE TRIGGER `trg_pbl_runtime_event_append_only_del` + BEFORE DELETE ON `pbl_runtime_event` FOR EACH ROW +BEGIN + DECLARE v_sql TEXT; + DECLARE v_msg VARCHAR(255); + SET v_sql = ''; + BEGIN + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sql = ''; + SELECT INFO INTO v_sql FROM information_schema.processlist + WHERE ID = CONNECTION_ID(); + END; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + SET v_msg = CONCAT('break-glass delete on ', 'pbl_runtime_event'); + ELSE + SET v_msg = CONCAT('DELETE denied: ', LEFT(IFNULL(v_sql, 'n/a'), 120)); + END IF; + CALL pbl_assert_append_only('pbl_runtime_event', 'delete', v_msg); + IF IFNULL(@pbl_guard_ctx, '') <> 'append_only_admin' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED_DELETE', + MYSQL_ERRNO = 45003; + END IF; +END$$ + +-- 权限层加固(可选,需 DBA 账号执行;app 账号只保留增/查) +-- GRANT INSERT, SELECT, UPDATE, DELETE ON `pbls`.`pbl_runtime_event` TO NULL; -- 占位,勿执行 +-- REVOKE UPDATE, DELETE ON `pbls`.`pbl_runtime_event` FROM 'pbls'@'%'; + +-- ---------------------------------------------------------------- C. 分区维护 +-- 1) 幂等补建未来月分区:pmax 存在时用 REORGANIZE PARTITION 拆出新月份(不丢数据) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_ensure_partitions`$$ + +CREATE PROCEDURE `pbl_runtime_event_ensure_partitions`(IN p_months_ahead INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(16); + DECLARE v_upper DATE; + DECLARE v_exists INT DEFAULT 0; + DECLARE v_sql TEXT; + DECLARE cur CURSOR FOR + WITH RECURSIVE ms(month_start) AS ( + SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01') + UNION ALL + SELECT DATE_ADD(month_start, INTERVAL 1 MONTH) FROM ms + WHERE month_start < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), + INTERVAL p_months_ahead MONTH) + ) + SELECT CONCAT('p', DATE_FORMAT(month_start, '%Y%m')), + DATE_ADD(month_start, INTERVAL 1 MONTH) + FROM ms; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + OPEN cur; + read_loop: LOOP + FETCH cur INTO v_name, v_upper; + IF v_done = 1 THEN + LEAVE read_loop; + END IF; + SELECT COUNT(*) INTO v_exists FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pbl_runtime_event' + AND PARTITION_NAME = v_name; + IF v_exists = 0 THEN + SET @pbl_part_sql = CONCAT( + 'ALTER TABLE `pbl_runtime_event` REORGANIZE PARTITION `pmax` INTO (', + 'PARTITION `', v_name, '` VALUES LESS THAN (DATE ''', v_upper, '''), ', + 'PARTITION `pmax` VALUES LESS THAN (MAXVALUE))'); + PREPARE pbl_part_st FROM @pbl_part_sql; + EXECUTE pbl_part_st; + DEALLOCATE PREPARE pbl_part_st; + END IF; + END LOOP; + CLOSE cur; +END$$ + +-- 2) 到期归档:整月 DROP PARTITION(append-only 表唯一合规的清理手段) +DROP PROCEDURE IF EXISTS `pbl_runtime_event_prune_partitions`$$ + +CREATE PROCEDURE `pbl_runtime_event_prune_partitions`(IN p_keep_months INT) + MODIFIES SQL DATA +BEGIN + DECLARE v_done INT DEFAULT 0; + DECLARE v_name VARCHAR(64); + DECLARE v_cutoff DATE; + DECLARE cur CURSOR FOR + SELECT PARTITION_NAME FROM information_schema.PARTITIONS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pbl_runtime_event' + AND PARTITION_NAME IS NOT NULL + AND PARTITION_NAME <> 'pmax' + AND PARTITION_NAME < CONCAT('p', DATE_FORMAT(v_cutoff, '%Y%m')); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1; + SET v_cutoff = DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL -p_keep_months MONTH); + OPEN cur; + prune_loop: LOOP + FETCH cur INTO v_name; + IF v_done = 1 THEN + LEAVE prune_loop; + END IF; + SET @pbl_drop_sql = CONCAT('ALTER TABLE `pbl_runtime_event` DROP PARTITION `', v_name, '`'); + PREPARE pbl_drop_st FROM @pbl_drop_sql; + EXECUTE pbl_drop_st; + DEALLOCATE PREPARE pbl_drop_st; + END LOOP; + CLOSE cur; +END$$ + +-- 3) 每月自动补分区(需 event_scheduler=ON;否则用 cron,见开发说明) +-- SET GLOBAL event_scheduler = ON; +DROP EVENT IF EXISTS `ev_pbl_runtime_event_partition_maintain`$$ + +CREATE EVENT IF NOT EXISTS `ev_pbl_runtime_event_partition_maintain` + ON SCHEDULE EVERY 1 MONTH + STARTS TIMESTAMP(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01 03:00:00')) + ON COMPLETION PRESERVE + ENABLE + COMMENT '每月预建未来 6 个月分区' +DO CALL pbl_runtime_event_ensure_partitions(6)$$ + +DELIMITER ; + +-- ---------------------------------------------------------------- D. 一次性改造 +-- 一次性改造(仅当 pbl_runtime_event 已存在且未分区时手工执行;先备份): +-- 1) CREATE TABLE pbl_runtime_event_new ... (本文件 A 段 DDL,改名 _new) +-- 2) SET @pbl_guard_ctx = 'append_only_admin'; -- break-glass,仅回填期间 +-- INSERT INTO pbl_runtime_event_new (...) SELECT ... FROM pbl_runtime_event; +-- SET @pbl_guard_ctx = NULL; +-- 3) RENAME TABLE pbl_runtime_event TO pbl_runtime_event_m11a_bak, +-- pbl_runtime_event_new TO pbl_runtime_event; +-- 4) 重放 append-only 触发器段(B 段),核对 EXPLAIN 分区裁剪后删备份表。 +-- 本脚本不自动执行改造:DROP/RENAME 生产表必须人工确认(见开发说明「回滚」段)。 +SELECT 'm11b-1 migrate: 人工执行,见注释' AS note; diff --git a/.rtx5tmp/load.err b/.rtx5tmp/load.err new file mode 100644 index 0000000..874ca47 --- /dev/null +++ b/.rtx5tmp/load.err @@ -0,0 +1,20 @@ +-------------- +CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + IF p_table <> 'pbl_runtime_event' THEN + RETURN; + END IF; + IF IFNULL(@pbl_guard_ctx, '') = 'append_only_admin' THEN + RETURN; + END IF; + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; +END +-------------- + +ERROR 1064 (42000) at line 65: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; + END IF; + IF IFNULL(@pbl_guard_ctx, '') = 'app...' at line 6 diff --git a/.rtx5tmp/my.pid b/.rtx5tmp/my.pid index 8c61d23..7ed6ff8 100644 --- a/.rtx5tmp/my.pid +++ b/.rtx5tmp/my.pid @@ -1 +1 @@ -58 +5 diff --git a/.rtx5tmp/patch_rtx0005.py b/.rtx5tmp/patch_rtx0005.py new file mode 100644 index 0000000..5e7b061 --- /dev/null +++ b/.rtx5tmp/patch_rtx0005.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""PBL-RTX-0005 生成器补丁:修 pbl_assert_append_only 过程体 + _with_delimiter 行尾注释加固。 + +每处替换都断言命中,未命中即 rc=1(禁止静默漏改)。 +""" +import io +import os +import re +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +MODULE_DIR = os.path.dirname(HERE) +TARGET = os.path.join(MODULE_DIR, "scripts", "pbl_runtime_event_ddl.py") + +src = io.open(TARGET, encoding="utf-8").read() +orig = src +applied = [] + + +def rep(old, new, tag): + global src + n = src.count(old) + if n != 1: + print("FAIL 定位不唯一(%d):%s" % (n, tag)) + sys.exit(1) + src = src.replace(old, new) + applied.append(tag) + + +# ---------------------------------------------------------------- 1) 过程体 RETURN; → 正向条件 SIGNAL +rep( + """CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + IF p_table <> '%(table)s' THEN + RETURN; -- 只守护事件表,其他表不受影响 + END IF; + IF IFNULL(@pbl_guard_ctx, '') = '%(ctx)s' THEN + RETURN; -- break-glass:一次性历史数据回填 + END IF; + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; +END;""", + """CREATE PROCEDURE `pbl_assert_append_only`( + IN p_table VARCHAR(64), IN p_priv VARCHAR(16), IN p_detail VARCHAR(255)) + READS SQL DATA +BEGIN + -- PBL-RTX-0005:MariaDB 存储过程体禁用 RETURN(RETURN 只在 FUNCTION 中合法), + -- 旧写法 `IF ... THEN RETURN; END IF;` 在建过程阶段即 ERROR 1064,导致本过程 + -- 连同其后的触发器/维护过程全部未创建。改为等价正向条件单语句 SIGNAL: + -- 仅「是本表」且「非 break-glass 上下文」时才拒绝,其余情形不执行任何语句, + -- 与旧的两段提前返回语义完全一致。 + IF p_table = '%(table)s' + AND IFNULL(@pbl_guard_ctx, '') <> '%(ctx)s' THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'PBL_APPEND_ONLY_DENIED', + MYSQL_ERRNO = 45001; + END IF; +END;""", + "append_only_sql: RETURN; -> 正向条件 SIGNAL", +) + +# ---------------------------------------------------------------- 2) _with_delimiter 行尾注释加固 +rep( + '''_BARE_TOKEN = re.compile(r"^(CREATE|DROP|ALTER|GRANT|REVOKE)\\s*\\$\\$\\s*$", re.I)''', + '''_BARE_TOKEN = re.compile(r"^(CREATE|DROP|ALTER|GRANT|REVOKE)\\s*\\$\\$\\s*$", re.I) +# 语句末行的「代码 + 行尾注释」形态:`$$` 若与 `-- 注释` 同行,会被行注释吞掉, +# 客户端永远等不到语句结束符(PBL-RTX-0005 加固项:注释上移,`$$` 独占行尾)。 +_TRAILING_COMMENT = re.compile(r"^(?P\\S.*?\\s)(?P(?:--|#)\\s.*|/\\*.*\\*/)$") +# 过程/函数/触发器体内非法的裸 RETURN(MariaDB 仅 FUNCTION 允许 RETURN;PROCEDURE 报 1064) +_ILLEGAL_RETURN = re.compile(r"^RETURN\\s*;?\\s*$", re.I)''', + "_with_delimiter: 新增 _TRAILING_COMMENT / _ILLEGAL_RETURN 常量", +) + +rep( + """ def flush(): + if not buf: + if cmts: + out.append("\\n".join(cmts)) + del cmts[:] + return + stmt = re.sub(r";\\s*$", "", "\\n".join(buf).strip()) + head = ("\\n".join(cmts) + "\\n") if cmts else "" + out.append(head + stmt + delim) + del buf[:] + del cmts[:]""", + """ def flush(): + if not buf: + if cmts: + out.append("\\n".join(cmts)) + del cmts[:] + return + lines = list(buf) + # 末行行尾注释上移到语句之前:否则产出 `... -- note$$`,`$$` 落在注释内 + # → 客户端认为语句未结束,与下一条语句黏连(同类 1064 根因)。 + tail_cmts = [] + m = _TRAILING_COMMENT.match(lines[-1].rstrip()) + if m and not m.group("code").lstrip().startswith(("--", "#")): + tail_cmts.append(m.group("cmt")) + lines[-1] = m.group("code") + stmt = re.sub(r";\\s*$", "", "\\n".join(lines).strip()) + head_lines = cmts + tail_cmts + head = ("\\n".join(head_lines) + "\\n") if head_lines else "" + out.append(head + stmt + delim) + del buf[:] + del cmts[:]""", + "_with_delimiter.flush(): 末行行尾注释上移", +) + +# ---------------------------------------------------------------- 3) 静态断言:禁止过程体裸 RETURN +rep( + '''def _delimiter_integrity_errors(text, label=""):''', + '''def _procedure_body_return_errors(text, label=""): + """PBL-RTX-0005 回归门禁:`CREATE PROCEDURE` 体内不得出现裸 `RETURN`。 + + MariaDB/MySQL 的 RETURN 语句只允许出现在 FUNCTION(及触发器外的函数语义)中; + 存储过程里写 `RETURN;` 会在 CREATE PROCEDURE 阶段直接 ERROR 1064,且因为整段 + 在 `DELIMITER $$` 块内,失败会连带后续触发器/维护过程一起未创建(现场表现为 + `SHOW PROCEDURE STATUS` 0 个 + CALL 报 1305 does not exist)。 + 返回缺陷描述列表;空列表 = 通过。 + """ + errs = [] + pfx = ("[%s] " % label) if label else "" + in_proc = False + for i, ln in enumerate(text.split("\\n"), 1): + s = ln.strip() + if re.match(r"^CREATE\\s+(OR\\s+REPLACE\\s+)?PROCEDURE\\b", s, re.I): + in_proc = True + continue + if in_proc and re.match(r"^CREATE\\s+\\w", s, re.I): + in_proc = False + if in_proc and _ILLEGAL_RETURN.match(s): + errs.append(pfx + "L%d 存储过程体内出现裸 RETURN(MariaDB 过程体非法 → ERROR 1064): %r" + % (i, s)) + return errs + + +def _delimiter_integrity_errors(text, label=""):''', + "新增 _procedure_body_return_errors() 回归门禁函数", +) + +rep( + """ struct_errs = [] + for label, text in artifacts: + struct_errs.extend(_delimiter_integrity_errors(text, label))""", + """ struct_errs = [] + for label, text in artifacts: + struct_errs.extend(_delimiter_integrity_errors(text, label)) + # PBL-RTX-0005:过程体裸 RETURN 静态门禁(实库 1064 的根因形态) + struct_errs.extend(_procedure_body_return_errors(text, label))""", + "verify(): 接入过程体 RETURN 静态门禁", +) + +if "PBL_APPEND_ONLY_DENIED" not in src or src.count("RETURN;") > 0: + print("FAIL 校验:src 中仍残留 `RETURN;`") + sys.exit(1) + +io.open(TARGET, "w", encoding="utf-8").write(src) +print("OK 已应用 %d 处替换:" % len(applied)) +for a in applied: + print(" -", a) +print("bytes %d -> %d" % (len(orig), len(src))) diff --git a/.rtx5tmp/server.err b/.rtx5tmp/server.err index 96116d8..a32d9fe 100644 --- a/.rtx5tmp/server.err +++ b/.rtx5tmp/server.err @@ -1,22 +1,100 @@ -2026-09-22 13:23:59 0 [Note] Starting MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1 source revision fe8047caf26d20e98ea7f6ec1dce3924e696703f server_uid 6zZIOKRSqPQHqChGdC3VR9ExRq0= as process 58 -2026-09-22 13:23:59 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 -2026-09-22 13:23:59 0 [Note] InnoDB: Number of pools: 1 -2026-09-22 13:23:59 0 [Note] InnoDB: Using AVX512 instructions -2026-09-22 13:23:59 0 [Note] InnoDB: Using liburing -2026-09-22 13:23:59 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728 -2026-09-22 13:23:59 0 [Note] InnoDB: Completed initialization of buffer pool -2026-09-22 13:23:59 0 [Note] InnoDB: 128 rollback segments are active. -2026-09-22 13:23:59 0 [Note] InnoDB: Creating shared tablespace for temporary tables -2026-09-22 13:23:59 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... -2026-09-22 13:23:59 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. -2026-09-22 13:23:59 0 [Note] InnoDB: 10.6.23 started; log sequence number 42486; transaction id 14 -2026-09-22 13:23:59 0 [Note] Plugin 'FEEDBACK' is disabled. -2026-09-22 13:23:59 0 [Note] InnoDB: Loading buffer pool(s) from /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/d/ib_buffer_pool -2026-09-22 13:23:59 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work. -2026-09-22 13:23:59 0 [Note] Server socket created on IP: '127.0.0.1'. -2026-09-22 13:23:59 0 [Note] InnoDB: Buffer pool(s) load completed at 260922 13:23:59 -2026-09-22 13:23:59 0 [Warning] 'user' entry 'root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. -2026-09-22 13:23:59 0 [Warning] 'user' entry '@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. -2026-09-22 13:23:59 0 [Warning] 'proxies_priv' entry '@% root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. -2026-09-22 13:23:59 0 [Note] mariadbd: ready for connections. +2026-09-22 13:50:56 0 [Note] Starting MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1 source revision fe8047caf26d20e98ea7f6ec1dce3924e696703f server_uid 6zZIOKRSqPQHqChGdC3VR9ExRq0= as process 59 +2026-09-22 13:50:56 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 +2026-09-22 13:50:56 0 [Note] InnoDB: Number of pools: 1 +2026-09-22 13:50:56 0 [Note] InnoDB: Using AVX512 instructions +2026-09-22 13:50:56 0 [Note] InnoDB: Using liburing +2026-09-22 13:50:56 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728 +2026-09-22 13:50:56 0 [Note] InnoDB: Completed initialization of buffer pool +2026-09-22 13:50:56 0 [Note] InnoDB: 128 rollback segments are active. +2026-09-22 13:50:56 0 [Note] InnoDB: Creating shared tablespace for temporary tables +2026-09-22 13:50:56 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... +2026-09-22 13:50:56 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. +2026-09-22 13:50:56 0 [Note] InnoDB: 10.6.23 started; log sequence number 42514; transaction id 14 +2026-09-22 13:50:56 0 [Note] Plugin 'FEEDBACK' is disabled. +2026-09-22 13:50:56 0 [Note] InnoDB: Loading buffer pool(s) from /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/db/ib_buffer_pool +2026-09-22 13:50:56 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work. +2026-09-22 13:50:56 0 [Note] InnoDB: Buffer pool(s) load completed at 260922 13:50:56 +2026-09-22 13:50:56 0 [Note] Server socket created on IP: '127.0.0.1'. +2026-09-22 13:50:56 0 [Warning] 'user' entry 'root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:50:56 0 [Warning] 'user' entry '@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:50:56 0 [Warning] 'proxies_priv' entry '@% root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:50:56 0 [Note] mariadbd: ready for connections. Version: '10.6.23-MariaDB-0ubuntu0.22.04.1' socket: '/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/my.sock' port: 13401 Ubuntu 22.04 +2026-09-22 13:52:06 0 [Note] Starting MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1 source revision fe8047caf26d20e98ea7f6ec1dce3924e696703f server_uid 6zZIOKRSqPQHqChGdC3VR9ExRq0= as process 5 +2026-09-22 13:52:06 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 +2026-09-22 13:52:06 0 [Note] InnoDB: Number of pools: 1 +2026-09-22 13:52:06 0 [Note] InnoDB: Using AVX512 instructions +2026-09-22 13:52:06 0 [Note] InnoDB: Using liburing +2026-09-22 13:52:06 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728 +2026-09-22 13:52:06 0 [Note] InnoDB: Completed initialization of buffer pool +2026-09-22 13:52:06 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=42514,42514 +2026-09-22 13:52:06 0 [Note] InnoDB: To recover: 90 pages +2026-09-22 13:52:06 0 [Note] InnoDB: 128 rollback segments are active. +2026-09-22 13:52:06 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1" +2026-09-22 13:52:06 0 [Note] InnoDB: Creating shared tablespace for temporary tables +2026-09-22 13:52:06 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... +2026-09-22 13:52:06 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. +2026-09-22 13:52:06 0 [Note] InnoDB: 10.6.23 started; log sequence number 166585; transaction id 44 +2026-09-22 13:52:06 0 [Note] InnoDB: Loading buffer pool(s) from /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/db/ib_buffer_pool +2026-09-22 13:52:06 0 [Note] Plugin 'FEEDBACK' is disabled. +2026-09-22 13:52:06 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work. +2026-09-22 13:52:06 0 [Note] InnoDB: Buffer pool(s) load completed at 260922 13:52:06 +2026-09-22 13:52:06 0 [Note] Server socket created on IP: '127.0.0.1'. +2026-09-22 13:52:06 0 [Warning] 'user' entry 'root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:06 0 [Warning] 'user' entry '@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:06 0 [Warning] 'proxies_priv' entry '@% root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:06 0 [Note] mariadbd: ready for connections. +Version: '10.6.23-MariaDB-0ubuntu0.22.04.1' socket: '/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/my.sock' port: 13401 Ubuntu 22.04 +2026-09-22 13:52:07 0 [Note] mariadbd (initiated by: unknown): Normal shutdown +2026-09-22 13:52:15 0 [Note] Starting MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1 source revision fe8047caf26d20e98ea7f6ec1dce3924e696703f server_uid 6zZIOKRSqPQHqChGdC3VR9ExRq0= as process 5 +2026-09-22 13:52:15 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 +2026-09-22 13:52:15 0 [Note] InnoDB: Number of pools: 1 +2026-09-22 13:52:15 0 [Note] InnoDB: Using AVX512 instructions +2026-09-22 13:52:15 0 [Note] InnoDB: Using liburing +2026-09-22 13:52:15 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728 +2026-09-22 13:52:15 0 [Note] InnoDB: Completed initialization of buffer pool +2026-09-22 13:52:15 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=42514,42514 +2026-09-22 13:52:15 0 [Note] InnoDB: To recover: 90 pages +2026-09-22 13:52:15 0 [Note] InnoDB: 128 rollback segments are active. +2026-09-22 13:52:15 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1" +2026-09-22 13:52:15 0 [Note] InnoDB: Creating shared tablespace for temporary tables +2026-09-22 13:52:15 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... +2026-09-22 13:52:15 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. +2026-09-22 13:52:15 0 [Note] InnoDB: 10.6.23 started; log sequence number 166665; transaction id 44 +2026-09-22 13:52:15 0 [Note] InnoDB: Loading buffer pool(s) from /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/db/ib_buffer_pool +2026-09-22 13:52:15 0 [Note] Plugin 'FEEDBACK' is disabled. +2026-09-22 13:52:15 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work. +2026-09-22 13:52:15 0 [Note] InnoDB: Buffer pool(s) load completed at 260922 13:52:15 +2026-09-22 13:52:15 0 [Note] Server socket created on IP: '127.0.0.1'. +2026-09-22 13:52:15 0 [Warning] 'user' entry 'root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:15 0 [Warning] 'user' entry '@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:15 0 [Warning] 'proxies_priv' entry '@% root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:52:15 0 [Note] mariadbd: ready for connections. +Version: '10.6.23-MariaDB-0ubuntu0.22.04.1' socket: '/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/my.sock' port: 13401 Ubuntu 22.04 +2026-09-22 13:52:16 0 [Note] mariadbd (initiated by: unknown): Normal shutdown +2026-09-22 13:53:09 0 [Note] Starting MariaDB 10.6.23-MariaDB-0ubuntu0.22.04.1 source revision fe8047caf26d20e98ea7f6ec1dce3924e696703f server_uid 6zZIOKRSqPQHqChGdC3VR9ExRq0= as process 5 +2026-09-22 13:53:09 0 [Note] InnoDB: Compressed tables use zlib 1.2.11 +2026-09-22 13:53:09 0 [Note] InnoDB: Number of pools: 1 +2026-09-22 13:53:09 0 [Note] InnoDB: Using AVX512 instructions +2026-09-22 13:53:09 0 [Note] InnoDB: Using liburing +2026-09-22 13:53:09 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728 +2026-09-22 13:53:09 0 [Note] InnoDB: Completed initialization of buffer pool +2026-09-22 13:53:09 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=42514,42514 +2026-09-22 13:53:09 0 [Note] InnoDB: To recover: 90 pages +2026-09-22 13:53:09 0 [Note] InnoDB: 128 rollback segments are active. +2026-09-22 13:53:09 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1" +2026-09-22 13:53:09 0 [Note] InnoDB: Creating shared tablespace for temporary tables +2026-09-22 13:53:09 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ... +2026-09-22 13:53:09 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB. +2026-09-22 13:53:09 0 [Note] InnoDB: 10.6.23 started; log sequence number 166745; transaction id 44 +2026-09-22 13:53:09 0 [Note] InnoDB: Loading buffer pool(s) from /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/db/ib_buffer_pool +2026-09-22 13:53:09 0 [Note] Plugin 'FEEDBACK' is disabled. +2026-09-22 13:53:09 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work. +2026-09-22 13:53:09 0 [Note] InnoDB: Buffer pool(s) load completed at 260922 13:53:09 +2026-09-22 13:53:09 0 [Note] Server socket created on IP: '127.0.0.1'. +2026-09-22 13:53:09 0 [Warning] 'user' entry 'root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:53:09 0 [Warning] 'user' entry '@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:53:09 0 [Warning] 'proxies_priv' entry '@% root@instance-jo93aa2m-2' ignored in --skip-name-resolve mode. +2026-09-22 13:53:09 0 [Note] mariadbd: ready for connections. +Version: '10.6.23-MariaDB-0ubuntu0.22.04.1' socket: '/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.rtx5tmp/my.sock' port: 13401 Ubuntu 22.04 +2026-09-22 13:53:10 0 [Note] mariadbd (initiated by: unknown): Normal shutdown diff --git a/.rtx5tmp/t1.err b/.rtx5tmp/t1.err new file mode 100644 index 0000000..b7d3341 --- /dev/null +++ b/.rtx5tmp/t1.err @@ -0,0 +1,14 @@ +-------------- +CREATE PROCEDURE t1p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END +-------------- + +ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END' at line 4 diff --git a/.rtx5tmp/t1.out b/.rtx5tmp/t1.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t1.sql b/.rtx5tmp/t1.sql new file mode 100644 index 0000000..7271c1c --- /dev/null +++ b/.rtx5tmp/t1.sql @@ -0,0 +1,10 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t1p$$ +CREATE PROCEDURE t1p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t2.err b/.rtx5tmp/t2.err new file mode 100644 index 0000000..fc58dc0 --- /dev/null +++ b/.rtx5tmp/t2.err @@ -0,0 +1,13 @@ +-------------- +CREATE PROCEDURE t2p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END +-------------- + +ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_...' at line 4 diff --git a/.rtx5tmp/t2.out b/.rtx5tmp/t2.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t2.sql b/.rtx5tmp/t2.sql new file mode 100644 index 0000000..e79696f --- /dev/null +++ b/.rtx5tmp/t2.sql @@ -0,0 +1,10 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t2p$$ +CREATE PROCEDURE t2p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; -- 只守护事件表 + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t3.err b/.rtx5tmp/t3.err new file mode 100644 index 0000000..dc23d12 --- /dev/null +++ b/.rtx5tmp/t3.err @@ -0,0 +1,16 @@ +-------------- +CREATE PROCEDURE t3p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; + + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END +-------------- + +ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; + + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END' at line 4 diff --git a/.rtx5tmp/t3.out b/.rtx5tmp/t3.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t3.sql b/.rtx5tmp/t3.sql new file mode 100644 index 0000000..e2a2648 --- /dev/null +++ b/.rtx5tmp/t3.sql @@ -0,0 +1,11 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t3p$$ +CREATE PROCEDURE t3p(IN p INT) +BEGIN + IF p <> 1 THEN + RETURN; + -- 只守护事件表 + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t4.err b/.rtx5tmp/t4.err new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t4.out b/.rtx5tmp/t4.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t4.sql b/.rtx5tmp/t4.sql new file mode 100644 index 0000000..f81954f --- /dev/null +++ b/.rtx5tmp/t4.sql @@ -0,0 +1,10 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t4p$$ +CREATE PROCEDURE t4p(IN p INT) +lbl: BEGIN + IF p <> 1 THEN + LEAVE lbl; + END IF; + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'x'; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t5.err b/.rtx5tmp/t5.err new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t5.out b/.rtx5tmp/t5.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t5.sql b/.rtx5tmp/t5.sql new file mode 100644 index 0000000..1458358 --- /dev/null +++ b/.rtx5tmp/t5.sql @@ -0,0 +1,10 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t5p$$ +CREATE PROCEDURE t5p(IN p INT) +BEGIN + IF p = 1 THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'x', MYSQL_ERRNO = 45001; + END IF; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t6.err b/.rtx5tmp/t6.err new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t6.out b/.rtx5tmp/t6.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t6.sql b/.rtx5tmp/t6.sql new file mode 100644 index 0000000..9a8b84e --- /dev/null +++ b/.rtx5tmp/t6.sql @@ -0,0 +1,10 @@ +DELIMITER $$ +DROP FUNCTION IF EXISTS t6f$$ +CREATE FUNCTION t6f(p INT) RETURNS INT +BEGIN + IF p <> 1 THEN + RETURN 0; + END IF; + RETURN 1; +END$$ +DELIMITER ; diff --git a/.rtx5tmp/t7.err b/.rtx5tmp/t7.err new file mode 100644 index 0000000..f904742 --- /dev/null +++ b/.rtx5tmp/t7.err @@ -0,0 +1,9 @@ +-------------- +CREATE PROCEDURE t7p(IN p INT) +BEGIN + RETURN; +END +-------------- + +ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; +END' at line 3 diff --git a/.rtx5tmp/t7.out b/.rtx5tmp/t7.out new file mode 100644 index 0000000..e69de29 diff --git a/.rtx5tmp/t7.sql b/.rtx5tmp/t7.sql new file mode 100644 index 0000000..b2bb18f --- /dev/null +++ b/.rtx5tmp/t7.sql @@ -0,0 +1,7 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS t7p$$ +CREATE PROCEDURE t7p(IN p INT) +BEGIN + RETURN; +END$$ +DELIMITER ;