如何使用性能模式在AWS RDS MySQL 5.7+中监视长期运行
#aws #mysql #查询 #rds

您可能已经降落在此页面上,因为您有一个MySQL RDS数据库,该数据库具有一个/许多大型桌子,并且每当您运行ALTER时,都需要数小时甚至几天。不幸的是,MySQL不能提供一种轻松的监视方法,RDS也不会在AWS上进行监视或RDS性能见解。

幸运的是,由于MySQL 5.7已经支持了进度信息,并且使用舞台事件通过性能模式实现。我建议您阅读此出色的article,以详细说明(这也是MySQL 8中下面执行以下操作的更好方法)。在本文中,我将重点关注MySQL 5.7

那么您如何在RDS上进行操作?

  1. performance_schema参数设置为数据库参数组中的1(需要实例重新启动,以便应用参数) Image description
  2. 一旦应用了参数。运行以下查询

    -- 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';
    
  3. 如果上述有效,那么您就可以了。您现在可以启动更改并执行此查询以查看其进度

    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;
    
  4. 您应该看到这样的东西(其中WORK_COMPLETED是已更改的行,而WORK_ESTIMATED是剩下多少行要更改,而CompletedPct是完成百分比)。运行此查询的Everytine您需要查看更新的值。
    Image description

就是这样 - 希望现在您可以在RDS数据库上监视长期运行的查询!


嗨,我是Emmanuel!我写有关软件,AWS和DevOps的文章。

如果您喜欢这篇文章并想查看更多信息,请在LinkedIn上添加我或在Twitter上关注我