前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >imprison_rg 囚禁慢SQL

imprison_rg 囚禁慢SQL

原创
作者头像
贺春旸的技术博客
发布2023-09-26 11:31:40
1390
发布2023-09-26 11:31:40
举报
文章被收录于专栏:DBA 平台和工具

imprison_rg 囚禁慢SQL

数据库90%的性能问题由于SQL引起,线上SQL的执行快慢,直接影响着系统的稳定性。

如果你刚入职一家公司,线上数据库CPU被慢SQL给打爆,而你又不敢直接将慢SQL杀死,万一出点事自己负连带责任。

退而求其次,利用MySQL 8.0资源组该功能,有效解决慢SQL引发CPU告警。

资源组的作用是资源隔离(你可以理解为开通云主机时勾选的硬件配置),将线上的慢SQL线程id分配给CPU一个核,让它慢慢跑,从而不影响CPU整体性能。

这里我封装了一个PHP脚本,简化了DBA输入相关资源组命令操作,直接在SHELL里运行即可。

该工具默认把执行时间超过10秒的慢SQL(SELECT|INSERT|UPDATE|DELETE|ALTER),捆绑在CPU最后一个核。


环境准备

代码语言:javascript
复制
shell> yum install -y php php-mysql

修改配置文件

######下面的配置信息修改成你自己的!!!######

shell> vim imprison_rg.php

$hostip='127.0.0.1';

$username='admin';

$password='hechunyang';

$dbname='test';

$dbport=3306;

$long_time=10; //执行时间10秒


部署在主库运行:

php imprison_rg.php

关闭并删除资源组:

php imprison_rg.php --stop


会在工具目录下生成slowlog.txt文件保存慢SQL。

shell> cat slowlog.txt

2021-07-21 18:22:30

用户名:root

来源IP:localhost

数据库名:test

SQL语句:select sleep(3600)

资源组:slowsql_rg

执行时间:13 秒


注:资源组启动需开启CAP_SYS_NICE功能,并重启mysqld进程生效。

开启步骤如下:

代码语言:javascript
复制
shell> setcap cap_sys_nice+ep /usr/local/mysql/bin/mysqld
shell> getcap /usr/local/mysql/bin/mysqld
/usr/local/mysql/bin/mysqld = cap_sys_nice+ep(出现此信息表示已经开启CAP_SYS_NICE功能)
shell> systemctl restart mysqld.service

3、验证:

使用top命令查看CPU状态信息,发现慢SQL已经绑定在CPU最后一核上运行。对于复杂、执行时间长、消耗资源多的慢SQL,我们可以将其设置特定的资源组,限制SQL查询的使用资源,避免导致其它正常查询不被响应,甚至导致MySQL直接hang住。


测试用例:

代码语言:javascript
复制
DROP PROCEDURE bomb;
DELIMITER // 
CREATE PROCEDURE bomb(OUT ot BIGINT)  
BEGIN  
    DECLARE cnt BIGINT DEFAULT 0;  
    SET @FUTURE = (SELECT NOW() + INTERVAL 1800 SECOND);  
    WHILE NOW() < @FUTURE 
    DO  
        SET cnt = (SELECT cnt + 1);  
    END WHILE;  
    SELECT cnt INTO ot;  
END  //
DELIMITER ;

call bomb(@a);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • imprison_rg 囚禁慢SQL
  • php imprison_rg.php
  • php imprison_rg.php --stop
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档