您可以通过DAS的实例会话功能查看、导出和结束目标实例的会话,并且可以对目标实例进行10秒SQL分析、SQL限流和优化。本文以RDS MySQL为例介绍如何使用实例会话功能。

前提条件

  • 目标数据库实例为RDS MySQL时,仅支持高可用版、三节点企业版、集群版
    说明 RDS MySQL基础版实例不支持实例会话功能,请忽略DAS控制台中的相关界面。DAS支持的数据库引擎与功能,详情请参见支持的数据库引擎与功能
  • 目标数据库实例已接入DAS,并且接入状态显示为连接正常

操作步骤

  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() |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+