PolarDB MySQL版的SQL洞察功能已升级为SQL洞察和审计。SQL洞察和审计由数据库自治服务DAS提供,在全量请求和安全审计的基础上,融合了搜索、SQL洞察、安全审计以及流量回放和压测等功能,帮助您更好地获取SQL语句的具体信息、排查各种性能问题、识别高危风险来源、验证实例规格。
背景信息
开启SQL洞察和审计功能可以记录所有DQL、DML和DDL操作信息,这些信息是通过数据库内核输出,对系统CPU消耗极低。
前提条件
如果是RAM用户,使用搜索功能时,需要为RAM用户授予AliyunPolardbReadOnlyWithSQLLogArchiveAccess权限。如何为RAM用户授权,请参见创建和管理RAM用户。
说明 您也可以通过自定义权限策略授予RAM用户使用搜索(包含导出)功能的权限,详情请参见通过自定义权限策略授权RAM用户使用SQL洞察和审计的搜索(包含导出)功能 。
功能说明
集群地域 | 支持的功能 | 计费 |
---|---|---|
华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华南1(深圳)、华北3(张家口)、华北5(呼和浩特)、西南1(成都)、华南3(广州)、华南2(河源)、华北6(乌兰察布)、中国(香港)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达) |
|
|
除上述地域、菲律宾(马尼拉)、泰国(曼谷)和韩国(首尔)之外的其他地域 |
| 由PolarDB MySQL版侧收取,详情请参见SQL洞察计费规则(可选)。 |
开通SQL洞察和审计
- 登录PolarDB控制台。
- 在控制台左上角,选择集群所在地域。
- 找到目标集群,单击集群ID。
- 在左侧导航栏中,选择 。
- 开通SQL洞察和审计。
- 如果PolarDB MySQL版集群处于华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华南1(深圳)、华北3(张家口)、华北5(呼和浩特)、西南1(成都)、华南3(广州)、华南2(河源)、华北6(乌兰察布)、中国(香港)、新加坡、马来西亚(吉隆坡)和印度尼西亚(雅加达),单击一键开启,开通SQL洞察和审计。说明 如果您当前的阿里云账号未开通DAS专业版,请按照界面提示,开通DAS专业版,详细信息请参见购买DAS专业版。
- 如果PolarDB MySQL版集群处于除上述地域、菲律宾(马尼拉)、泰国(曼谷)和韩国(首尔)之外的其他地域,单击正式版,选择SQL审计日志的存储时长并单击确定,开通SQL洞察和审计。说明
- SQL洞察和审计默认存储时长为30天,您可以在服务设置中修改存储时长。
- 超过存储时长的SQL日志将被删除。
- 如果PolarDB MySQL版集群处于华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华南1(深圳)、华北3(张家口)、华北5(呼和浩特)、西南1(成都)、华南3(广州)、华南2(河源)、华北6(乌兰察布)、中国(香港)、新加坡、马来西亚(吉隆坡)和印度尼西亚(雅加达),单击一键开启,开通SQL洞察和审计。
- 在右侧页面中单击对应功能页签即可查看相关信息。
修改SQL日志的存储时长
- 登录PolarDB控制台。
- 在控制台左上角,选择集群所在地域。
- 找到目标集群,单击集群ID。
- 在左侧导航栏中,选择 。
- 单击右上角服务设置。
- 修改存储时长并单击确认。
关闭SQL洞察和审计
说明 SQL洞察和审计功能关闭后,SQL审计日志会被清空。请将SQL审计日志导出并保存至本地后,再关闭SQL洞察和审计功能。当重新开启SQL洞察和审计功能时,SQL审计日志将从本次开启SQL洞察和审计的时间开始记录。
- 登录PolarDB控制台。
- 在控制台左上角,选择集群所在地域。
- 找到目标集群,单击集群ID。
- 在左侧导航栏中,选择 。
- 单击服务设置。
- 在弹出的对话框中,关闭开启SQL洞察开关后单击确认。
- 在弹出的对话框中,单击确定。
查看审计日志的大小和消费明细
- 登录阿里云管理控制台。
- 在页面右上角,选择费用 > 用户中心。
- 在左侧导航栏中,选择 。
- 在费用账单页签,单击账单明细页签,设置搜索实例ID并输入目标集群ID进行搜索。
- 查看计费项列为sql_explorer的费用明细。
常见问题
Q:SQL洞察的全量请求统计区域中的logout!
语句是什么?
A:
logout!
是指连接断开。logout!
的耗时,是指上一次交互时间到logout!
发生时间的差值,可以理解为连接空闲的时长。状态列的1158是指网络链接断开,其可能的原因是:- 客户端连接超时。
- 服务端异常断开。
- 服务端连接Reset(超过interactive_timeout或wait_timeout时长)。
Q:SQL洞察的来源统计中,为什么会出现%的访问来源?
A:该情况可能在您使用存储过程时出现。按如下示例可以复现这种情况:
说明 示例中数据库实例为RDS MySQL,测试账号为test_user,测试数据库为testdb。
- 在RDS控制台创建普通权限账号及其授权的数据库,详细操作请参见创建数据库和账号。
- 使用测试账号通过命令行方式连接数据库实例,详细操作请参见通过客户端、命令行连接RDS MySQL实例。
- 切换到测试数据库,并创建如下存储过程。
-- 切换到测试数据库 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;
- 使用高权限账号连接数据库实例,详细操作请参见通过客户端、命令行连接RDS MySQL实例。
- 调用存储过程。
-- 切换到测试数据库 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() | +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+