mysql 慢sql自动化优化处理和跟踪

背景:
数据库的工作中,最常见就是慢sql优化了,但是DBA怎么才能从这种繁杂的工作中抽出身来,比前就是自己去数据库里查,或者其他的途径发现一个慢sql,然后就丢给开发,DBA就像一个后妈一样在跟在屁股后面去催开发优化,这个方式不但工作效率低下,也影响消耗DBA的时间,DBA应该从这些日常繁杂的事情中抽身出来去对接业务,研究新技术,架构等,更多时间去做一些更加有价值的事情
解决方案:
目前公司的主要业务都在放在阿里云的RDS上,阿里云提供接口去访问慢sql日志
一,原数据准备
1,写一个小程序定时去抽取所有实例的慢sql存放在表中
2,把所有的sql打上标签,方便后面的分析
3,输出慢sql的执行计划并存储在表中
二,数据分析和慢sql处理流程
1,通过这些原数据,从sql执行时间,次数,扫描的行数,排序,索引的使用情况等多个维度来分析sql,并输出分析结果
2,把经过处理的慢sql和tapd项目管理系统打通,把每个sql自动分配到相关的开发责任人
3,输出优化结果报表,每个项目每周的慢sql优化情况
三总结:
1,通过这种方式可以减少DBA的工作量
2,通过平台来管理和跟踪慢sql的优化,会让整个工作流更加清晰和高效
3,通过报表让整个优化工作更加清晰,调动开发积极性,让得优化工作可以量化

四,代码和结果截图:
1,拉取慢sql:

2,结果生成Html

3,生成报表:

结果展示:
1,慢sql日志:

2,tapd工单:

3,报表:

唠叨:
1,因为代码码也比较多,所以只是随便贴了一点代码
2,只是展示其中一些输出结果
3,目前还没有做成平台,因为俺的前端开发还不大会,哈哈!目前先做成这样子,但是这样也能有效提高工作效率了
4,在这里只抛砖引玉,和大家分享一下自己的一些思路,欢迎大家留言,期待大牛的方案和指导,谢谢

原文地址:http://blog.51cto.com/538858/2327460

时间: 2024-11-06 03:35:36

mysql 慢sql自动化优化处理和跟踪的相关文章

MySQL之SQL语句优化

一 SQL语句优化的一般步骤: 1 通过show status命令了解各种SQL语句的执行频率 mysql> show status;                #show status:显示服务器状态信息 +-----------------------------------------------+-------------+ | Variable_name                                 | Value       | +---------------

MySQL常用SQL语句优化

SQL语句写得不严谨或者不适当,没有正确的使用上索引,会带来很严重的性能问题,这时DBA们又要来收拾这些烂滩子了,所以SQL语句的优化,在日常工作中,是占很重要的一部份,当然还有比如OS优化,硬件优化,MySQL Server优化,数据类型优化,应用层优化.我们进行MySQL的一些相关优化进行探讨. 1.优化数据插入: DISABLE KEYS和ENABLE KEYS用来关闭或者打开MyISAM表非唯一索引的更新,当用load命令导入数据的时候,适当的设置可以提高导入的速度.只用于MyISAM存

[MySQL] 常用SQL的优化--18.4

这里介绍下,Insert.Group By等SQL语句的优化方法: 1.大批量数据插入 当load命令导入数据的时候,可以进行适当的设置提高导入速度. 1.1 对于MyISAM表,可以先禁用非唯一索引更新,再导入数据来快速导入大量的数据. alter table table_name disable keys; load date infile 'xxx.txt' into table_name; alter table table_name enable keys; 1.2 对于InnoDB表

【转】Mysql学习---SQL的优化

[原文]https://www.toutiao.com/i6594314336913588743/ mysql如何处理亿级数据,第一个阶段--优化SQL语句 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id

MySQL专题---SQL的优化

1:存储过程 1.1:什么是SQL的存储过程 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令,可以类似把他看成java的封装了一个方法,他里面有1W行SQL,之后翻遍 1.2:SQL的存储的过程有什么优缺点? 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速

千万级大数据的Mysql数据库SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

mysql的sql语句优化

对于经常使用mysql的兄弟们,对explain一定不会陌生.当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息.借助于EXPLAIN,你可以知道1)你什么时候必须为表加入索引以得到一个使用索引找到记录的更快的SELECT.2)你也能知道优化器是否以一个最佳次序联结表.为了强制优化器对一个SELECT语句使用一个特定联结次序,增加一个STRAIGHT_JOIN子句.官方的关于explain的文档在http://dev

MySQL的SQL语句优化-group by语句的优化

原文:http://bbs.landingbj.com/t-0-243202-1.html 默认情况下,MySQL排序所有GROUP BY col1, col2, ....,查询的方法如同在查询中指定ORDER BY col1, col2, .... 如果显式包括一个包含相同的列的ORDER BY子句,MySQL可以毫不减速地对它进行优化,尽管仍然进行排序. 如果查询包括GROUP BY但你想要避免排序结果的消耗,你可以指定ORDER BY NULL禁止排序. 例如: INSERT INTO f

Mysql性能优化----SQL语句优化、索引优化、数据库结构优化、系统配置优化、服务器硬件优化

一.SQL语句优化 1-1.MySQL慢日志 1).慢日志开启方式和存储格式 如何发现有问题的SQL? 使用Mysql慢日志对有效率问题的SQL进行监控 前期准备 mysql> show variables like '%log_queri%'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_no