SQL洞察和审计功能在全量请求和安全审计的基础上,融合了搜索、SQL洞察、安全审计以及流量回放和压测四个功能,帮助您更好地获取SQL语句的具体信息、排查各种性能问题、识别高危风险来源、验证实例规格等。

前提条件

  • 您的账号已购买DAS专业版。如何购买请参见DAS专业版购买
  • RDS MySQL实例为高可用版、三节点企业版。
  • 如果是RAM用户,则必须具备RDS的读写权限,例如AliyunRDSFullAccess权限。如何为RAM用户授权,请参见通过RAM对RDS进行权限管理

计费

请参见DAS专业版费用

说明 开通SQL洞察和审计之后,原SQL洞察的费用也统一由DAS专业版收取,RDS侧不再收取SQL洞察的费用。

功能介绍

  • 搜索:查询并导出SQL语句执行历史及其对应的各种信息,如数据库、状态、执行时间等。
  • SQL洞察:对SQL进行健康情况诊断、性能问题排查、业务流量分析等。
  • 安全审计:可自动识别高危SQL、SQL注入、新增访问来源等风险。
  • 流量回放和压测:提供流量回放和压测功能,帮助您验证您的实例规格是否需要扩容,有效应对业务流量高峰。

开启SQL洞察和审计

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > SQL洞察和审计
  3. 在右侧页面中,单击一键开启,并在弹出的窗口中根据界面提示开通DAS专业版,详细信息请参见购买DAS专业版
    说明

使用搜索功能

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > SQL洞察和审计
  3. 在右侧页面中单击搜索页签,设置查询条件。
    参数 说明
    时间范围

    根据实际需要选择查询的时间范围。

    在线查询时间范围最多为24小时,您可以在数据库实例SQL洞察存储时长范围内设置任意的查询开始时间,查看最多24小时的数据。这是因为SQL洞察记录所有数据库行为,会记录大量SQL语句,在线查询选择时间范围过大,会导致长时间没有返回查询结果,甚至查询超时。
    说明
    • 如果需要查询更大时间范围的SQL记录,请您导出后进行查询。导出功能会异步导出日志,适合大时间范围内的查询。
    • 只能查询开启DAS专业版后且在数据存储时长范围内的数据。
    关键字 可多字段组合查询,不支持模糊查询,字段间以空格分隔。
    说明 查询的关键字至少包含4个字符。
    用户 用户名,可组合查询,如:user1 user2 user3。
    数据库 可组合查询,如:DB1 DB2 DB3。
    操作类型 选择需要查询的操作类型,可多选。
    说明 单击开启高级查询输入更多信息以缩小搜索范围。
  4. 单击查询,即可在下方的日志列表中展示搜索结果。
    说明 您可单击页面右侧的导出,勾选需要的导出字段并选择导出时间范围,单击确认导出当前日志列表。

使用SQL洞察功能

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > SQL洞察和审计
  3. 在右侧页面中单击SQL洞察页签即可查看相关信息。关于SQL洞察的更多信息,请参见SQL洞察

使用安全审计功能

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > SQL洞察和审计
  3. 在右侧页面中单击安全审计页签即可查看相关信息。关于安全审计的更多信息,请参见安全审计

使用流量回放和压测功能

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中,选择自治服务 > SQL洞察和审计
  3. 在右侧页面中单击流量回放和压测页签即可查看相关信息。关于流量回放和压测的更多信息,请参见流量回放和压测

常见问题

Q:SQL洞察全量请求统计区域中的logout!语句是什么?

A:logout!是指连接断开。logout!的耗时,是指上一次交互时间到logout!发生时间的差值,可以理解为连接空闲的时长。状态列的1158是指网络链接断开,其可能的原因是:
  • 客户端连接超时。
  • 服务端异常断开。
  • 服务端连接Reset(超过interactive_timeout或wait_timeout时长)。

Q:SQL洞察来源统计中,为什么会出现%访问来源

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