阿里云金牌合作伙伴-授权证书 长期稳定·永久朋友 产品专家1对1服务
阿里云购买咨询热线:158-0160-3153 凯铧互联客服

热门文章

阿里云常见售后问题集锦

阿里云RDS MySQL 管理长时间运行查询

发布:凯铧互联


问题场景
1. 出现长时间执行的查询的原因

2. 长时间执行的查询带来的问题

3. 如何避免长时间执行的查询

4. 如何处理长时间执行的查询

4.1 DMS 处理会话

4.2 设置查询最长执行时间

4.3 创建事件自动清理长时间执行的查询

下面凯铧互联小编详细进行说明

1. 出现长时间执行的查询的原因

在使用 RDS MySQL 的过程中,由于某些原因,比如被 SQL 注入、SQL执行效率较差、DDL 语句引起表元数据锁等待等等,会出现运行时间很长的查询。

由于SQL执行效率差而导致的长时间查询:

RDS MySQL 管理长时间运行查询

由于被SQL注入而导致的长时间查询:

RDS

由于DDL语句引起表元数据锁等待:

MySQL

注:对于元数据锁等待的问题的处理,请参考:RDS MySQL 表上 Metadata lock 的产生和处理

2. 长时间执行的查询带来的问题

通常来说,除非是BI/报表类查询,否则长时间执行的查询对于应用缺乏意义。

消耗系统资源,比如大量长时间查询可能会引起 CPU、IOPS 和/或 连接数 使用率过高等问题。

带来系统不稳定的隐患(比如 InnoDB 引擎表上的长时间查询可能会导致 ibdata1 系统文件尺寸的增加)。

3. 如何避免长时间执行的查询

应用方面应注意增加防止 SQL 注入的保护。

在新功能模块上线前,进行压力测试,避免出现执行效率很差的 SQL 大量执行的情况。

尽量在业务低峰期进行索引创建删除、表结构修改、表维护和表删除操作。

4. 如何处理长时间执行的查询

4.1 DMS 清理会话

DMS 实例信息 实例会话 检查实例当前运行的会话,清理长时间的查询。

阿里云RDS管理

Kill会话 - 终止选的的会话。
优化 - 给出对选择的会话查询的优化建议。
也可以通过命令 show processlist; 查看当前执行会话,清理长时间查询。

注:关于如何清理会话,请参考 RDS MySQL 如何终止会话。

4.2 设置查询最长执行时间

控制台 参数设置 设置 loose_max_statement_time 参数

可以通过设置 loose_max_statement_time 参数来限制查询的最长执行时间,该参数单位是 毫秒(MS)。

# 参数名称 默认值 最小值 最大值 作用
1 loose_max_statement_time 0 0 4294967295 限制SQL语句执行的最长时间,单位毫秒(ms)

 


比如:

 

阿里云RDS查询

MySQL长时间运行查询

注:

修改该参数设置,对修改设置前已经存在的会话不生效;对修改设置后新创建的会话有效。
loose_max_statement_time 限制 SQL 执行 时间;如果 DML 操作出现 InnoDB 行锁等待,锁等待时间是不计入执行时间的。
4.3 创建事件自动清理长时间执行的查询

创建 MySQL事件,自动清理长时间执行的查询。

比如下面的代码会每 5 分钟清理一次当前用户运行时间超过 1 个小时且非锁等待会话。

create event my_long_running_query_monitor
on schedule every 5 minute
starts '2015-09-15 11:00:00'
on completion preserve enable do
begin
declare v_sql varchar(500);
declare no_more_long_running_query integer default 0;
declare c_tid cursor for
select concat ('kill ',id,';') from
information_schema.processlist
where time >= 3600
and user = substring(current_user(),1,instr(current_user(),'@')-1)
and command not in ('sleep')
and state not like ('waiting for table%lock');
declare continue handler for not found
set no_more_long_running_query=1;

open c_tid;
repeat
fetch c_tid into v_sql;
set @v_sql=v_sql;
prepare stmt from @v_sql;
execute stmt;
deallocate prepare stmt;
until no_more_long_running_query end repeat;
close c_tid;
end;
注:样例仅供参考,请结合应用情况自行调整监控条件和运行间隔。

如果您不是专业人员,又对服务器的安全非常担忧,可以购买阿里云管家服务或相关防护软件,通过凯铧互联购买可以获得折上折优惠!如您的问题还未解决,请联系我方售后技术支持。若您需要帮助可以直接联系我方客服,阿里云代理商凯铧互联专业技术团队为您提供全面便捷专业的7x24技术服务。

为什么选择我们:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯等,作为阿里云,腾讯云,百度云,金山云重要的合作伙伴,专注于为企业用户提供云计算及云计算的解决方案。总部设在北京,并在内蒙设有办事处。做为一家综合性方案商,凯铧互联向各行业用户提供基于云计算的各种解决方案。为用户获得优质服务的同时,秉承"专业规划、周到服务"的服务理念,根据用户的实际情况,充分考虑各种网络资源的特点及功效,为用户量身定做一套适合于其实际应用需求的网络应用方案。帮助用户利用互联网的力量展开新的营销方式,并大大缩短了项目实施周期,获得用户的一致好评。

凯铧互联专属服务:阿里云代理商凯铧互联拥有专业的网络架构团队、云服务解决团队、阿里云产品服务团队能够帮助用户提供快捷、全面、高效的云上解决方案 。凯铧互联为每一个用户提供专属网络架构服务,提供7x24一对一技术服务,远程协助等。同时还能提供阿里云服务器ECS、阿里云CDN等产品等的专属折扣优惠购买,让用户能够便捷、更省的上云。如果您需要详细的为您的企业选择最适合自己的服务器配置类型,请您联系客服,专业人员为您提供服务,同时还能获得更多的优惠折扣,电话专线:136-5130-9831,QQ:3398234753。