Mysql 性能模式监控 InnoDB 表的 ALTER TAB
2023-02-16 本文已影响0人
一介书生独醉江湖
# 启用stage/innodb/alter%仪器
SET SQL_SAFE_UPDATES = 0;
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES'
WHERE NAME LIKE 'stage/innodb/alter%';
# 启用舞台事件消费者表,其中包括 events_stages_current、 events_stages_history和 events_stages_history_long。
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%stages%';
# ALTER TABLE通过查询 Performance Schema events_stages_current表来 检查操作的进度。
# 显示的阶段事件根据 ALTER TABLE当前正在进行的阶段而有所不同。
# 该WORK_COMPLETED列显示已完成的工作。该 WORK_ESTIMATED列提供了对剩余工作的估计。
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
FROM performance_schema.events_stages_current;
# 如果操作已完成, 该events_stages_current表将返回一个空集。
# ALTER TABLE在这种情况下,您可以检查events_stages_history 表以查看已完成操作的事件数据。
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
FROM performance_schema.events_stages_history;
# 工作量评估
SELECT stmt.SQL_TEXT AS sql_text, concat(WORK_COMPLETED, '/', WORK_ESTIMATED) AS progress
, (stage.TIMER_END - stmt.TIMER_START) / 1e12 AS current_seconds
, (stage.TIMER_END - stmt.TIMER_START) / 1e12 * (WORK_ESTIMATED - WORK_COMPLETED) / WORK_COMPLETED AS remaining_seconds
FROM performance_schema.events_stages_current stage, performance_schema.events_statements_current stmt
WHERE stage.THREAD_ID = stmt.THREAD_ID
AND stage.NESTING_EVENT_ID = stmt.EVENT_ID;
参考:
# https://www.modb.pro/db/430549
# https://opensource.actionsky.com/20200724-mysql/
遇到问题:
# 由于我的生产数据库是5.5版本的,所以没有开启performance_schema;
# MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。
# 并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
# MySQL 5.5默认是关闭的,需要手动开启;在配置文件里添加:
# [mysqld]
# performance_schema=ON
# ** 启用Performance Schema功能,需要重启数据库实例,建议您在业务低峰期操作,并确保应用程序具有重连机制。
# 查看是否开启:
show variables like 'performance_schema';
测试库:
select version();
# '5.7.25-0ubuntu0.18.04.2'
show variables like 'performance_schema';
# 'performance_schema', 'ON'
select version();
# '5.5.62-0ubuntu0.14.04.1-log'
show variables like 'performance_schema';
# 'performance_schema', 'OFF'