实例会话

当数据库出现性能问题或异常操作时,通常需要结合数据库的会话信息,快速定位和解决数据库的问题。数据库自治服务DAS(Database Autonomy Service)的实例会话功能,支持实时查看目标实例的会话信息,并提供会话运维操作,例如结束会话、10秒SQL分析、SQL限流以及优化等。

前提条件

目标数据库实例已接入DAS,并且接入状态显示为接入正常

说明

当前不支持RDS SQL Server数据库实例。

操作步骤

本文以RDS MySQL为例介绍如何使用实例会话功能。

  1. 登录DAS控制台

  2. 在左侧导航栏中,单击实例监控

  3. 找到目标实例,单击实例ID,进入目标实例详情页。

  4. 在左侧导航栏,单击实例会话

  5. 会话管理页面,可以查看目标实例当前的实例会话会话统计等详细信息。

    • 您可以在实例会话区域进行如下操作:

      • 查看实例会话信息:可以查看异常、活跃会话、最大执行时间、CPU使用率和连接使用率等信息。

      • 10秒SQL分析:单击页面右上角的10秒SQL分析,在弹出的对话框内查看10秒内的SQL统计、慢日志及SQL概览等信息,详细信息请参见10秒SQL分析

      • SQL限流:单击SQL限流,在弹出的SQL限流页面配置限流参数,对符合限流条件的实例会话进行SQL限流,详细操作请参见SQL限流

      • 优化:单击优化,对目标实例会话进行优化,详细操作请参见SQL优化

      • 导出活跃会话。

      • 结束会话。

        结束会话时,需要输入建立该会话的数据库账号和密码。您也可以使用更高权限的数据库账号(具有结束其他账号建立的会话的权限),例如高权限账号

        说明
        • 在会话列表的用户列,可以查看建立目标会话的数据库账号。

        • 单击结束会话历史记录,查看结束会话的历史记录。

    • 您可以在会话统计区域进行如下操作:

      • 查看会话统计信息:可以查看会话概要(如会话总数、运行中会话总数和运行中会话最长时间),查看按用户、按访问来源和按数据库等条件统计的会话总数及活跃数。

      • 导出会话统计信息:可以按概要、按用户统计、按访问来源统计和按数据库统计等条件导出会话统计信息。

常见问题

Q:为什么会出现%访问来源

A:该情况可能在您使用存储过程时出现。按如下示例可以复现这种情况:

说明

示例中数据库实例为RDS MySQL,测试账号为test_user,测试数据库为testdb。

  1. 在RDS控制台创建普通权限账号及其授权的数据库,详细操作请参见创建数据库和账号

  2. 使用测试账号通过命令行方式连接数据库实例,详细操作请参见通过客户端、命令行连接RDS MySQL实例

  3. 切换到测试数据库,并创建如下存储过程。

    -- 切换到测试数据库
    USE testdb;
    
    -- 创建存储过程
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `das` $$
    CREATE DEFINER=`test_user`@`%` PROCEDURE `das`()
    BEGIN
    SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID();
    END $$
    DELIMITER;
  4. 使用高权限账号连接数据库实例,详细操作请参见通过客户端、命令行连接RDS MySQL实例

  5. 调用存储过程。

    -- 切换到测试数据库
    USE testdb;
    
    -- 调用存储过程
    CALL das();
    
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | ID     | USER      | HOST   | DB     | COMMAND | TIME | STATE     | INFO                                                                    |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | 487818 | test_user | %:2065 | testdb | Query   |    0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+

Q:对于RDS MySQLPolarDB MySQL版实例,哪些会话会被标记为异常

A:如下的会话会被标记为异常:

  • 会话包含阻塞型SQL(执行时间超过30秒的SQL),例如报“Waiting for table metadata lock”的会话。阻塞型SQL会长时间占用资源,从而导致其他SQL无法正常执行。常见的阻塞型SQL,如:FLUSH TABLES WITH READ LOCK,悬挂事务导致DDL语句等待元数据锁等。

  • 会话中的事务持续时间超过30s。

  • 会话中包含长时间未提交的事务。如果一个会话中开启了事务,但是超过10秒未执行任何新的SQL,很可能是代码中遗漏了COMMIT命令,这可能导致事务一直持有资源,无法及时释放资源。