您可能已经降落在此页面上,因为您有一个MySQL RDS数据库,该数据库具有一个/许多大型桌子,并且每当您运行ALTER
时,都需要数小时甚至几天。不幸的是,MySQL不能提供一种轻松的监视方法,RDS也不会在AWS上进行监视或RDS性能见解。
幸运的是,由于MySQL 5.7已经支持了进度信息,并且使用舞台事件通过性能模式实现。我建议您阅读此出色的article,以详细说明(这也是MySQL 8中下面执行以下操作的更好方法)。在本文中,我将重点关注MySQL 5.7
那么您如何在RDS上进行操作?
- 将
performance_schema
参数设置为数据库参数组中的1(需要实例重新启动,以便应用参数) -
一旦应用了参数。运行以下查询
-- Enable events_stages_current to monitor threads UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_stages_current'; -- Check results of below to see that ENABLED -- and EnabledWithHierarchy are both "YES" SELECT NAME, ENABLED, sys.ps_is_consumer_enabled(NAME) AS EnabledWithHierarchy FROM performance_schema.setup_consumers WHERE NAME = 'events_stages_current';
-
如果上述有效,那么您就可以了。您现在可以启动更改并执行此查询以查看其进度
SELECT stmt.THREAD_ID, stmt.SQL_TEXT, stage.EVENT_NAME AS State, stage.WORK_COMPLETED, stage.WORK_ESTIMATED, ROUND(100*stage.WORK_COMPLETED/stage.WORK_ESTIMATED, 2) AS CompletedPct FROM performance_schema.events_statements_current stmt INNER JOIN performance_schema.events_stages_current stage ON stage.THREAD_ID = stmt.THREAD_ID AND stage.NESTING_EVENT_ID = stmt.EVENT_ID -- ALTERNATIVELY ---------------- -- SELECT -- thd_id, -- conn_id, -- db, -- command, -- state, -- current_statement, -- statement_latency, -- progress, -- current_memory, -- program_name -- FROM sys.session -- WHERE progress IS NOT NULL;
-
您应该看到这样的东西(其中
WORK_COMPLETED
是已更改的行,而WORK_ESTIMATED
是剩下多少行要更改,而CompletedPct
是完成百分比)。运行此查询的Everytine您需要查看更新的值。
就是这样 - 希望现在您可以在RDS数据库上监视长期运行的查询!
嗨,我是Emmanuel!我写有关软件,AWS和DevOps的文章。