围剿慢SQL,工行MySQL研发管控和治理实践(附PPT)

标签: dev | 发表时间:2022-01-13 00:00 | 作者:
出处:http://itindex.net/relian


生产上我们会通过监控自动查杀。但实际上,如果大家学过博弈论的话就会发现:是否查杀?到底怎么保持?这其实很难平衡,可能要通过实际场景去评估到底要不要去做。


接下来是慢SQL的治理。我们在2021年上半年大概发现了6670条慢SQL并落实版本优化,但正确率其实并不高,后续我们会考虑优化一些慢SQL的治理模型,将我们的准确率从20%再进行提升。


因为20%就意味着,我们的开发人员可能要花80%的无效时间去处理这方面的问题,显然违背了二八原则。虽然这个过程很痛苦,但我们确实收到一定的经营效果。本质上我们可以看到performance_schema可以用于监控MySQL运行过程中的资源消耗、资源等待等情况。这应该是MySQL 5.7以后会有的一个视图,这个视图中有一个表statements_summary_by_digest,它会记录每一条SQL的执行次数、时间,以及扫描的数据量等,通过对它们时间差的对比,获取真正的处理时间,从而判断语句是否存在问题。


Oracle的awr报告也是这样的道理,它是通过两个快照之间的差去进行比较。对于我们来说,比如8:00、9:00,我们的时间是一个语句。如图所示,它在8点执行了200次,执行时间是1800秒,扫描的记录数大概是1亿8000万;第二个是在9点,执行次数是300次,执行时间是2700秒。通过时间差可以判断,8:00~9:00之间只执行了100次,执行时间为900秒,那相当于一次执行花费了9秒,这其实就是一个标准的慢SQL。


虽然我不清楚在座各位所属应用对慢SQL的判定标准,默认应该是大于10秒的才算慢SQL。但对于我们金融行业来说,实际上超过一秒都属于慢SQL的处理范围。同时我们可以看到,它的扫描记录数大概是9000万,这样算来,它的扫描命中比例是900000:1,也就是说,我需要扫描90万条数据才能找到一条数据,这样的扫描比有很大的问题,显然存在效率问题,而我们的规范要求是100:1。


接下来是自动查杀。我们可以设置,当联机超过阈值时自动执行kill。但这样的做法在批量联机混合时存在风险,因为我们现在的批量联机用户实际上都是混合在一起的,而我们允许批量耗时超过10秒,这就很容易出现误杀。针对这一点,我们可以通过show processlist命令查看或者是通过 ps.threads去跟进线程的执行情况。


针对上述情况,我们做了两件事情:第一是推联机用户跟批量用户的分离,针对不同用户进行差异性处理。对于联机用户我们会进行自动查杀;而对于批量用户,因为我们判断它语句执行所花费的时间是合理的,所以就暂时先不管。


MySQL其实并不适合OLAP的应用,按照我的理解,我们可以通过大数据平台,也就是Hive、Spark,或者通过一些其他的方式去处理。这实际上就代表:MySQL仅局限于OLTP,其他像一些大数据平台等去做一些OLAP的处理,做到权责分离。


看到这里大家可能会说HTAP,我觉得这是一个老概念,属于新瓶装旧酒,以前Oracle其实就是HTAP数据库,但MySQL不行,所以需要结合实际业务场景做到功能和场景的分离。

相关 [sql 工行 mysql] 推荐:

MySql动态SQL

- - SQL - 编程语言 - ITeye博客
13.7. 用于预处理语句的SQL语法. MySQL 5.1对服务器一方的预制语句提供支持. 如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势. 候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET.

围剿慢SQL,工行MySQL研发管控和治理实践(附PPT)

- - IT瘾-dev
生产上我们会通过监控自动查杀. 但实际上,如果大家学过博弈论的话就会发现:是否查杀. 这其实很难平衡,可能要通过实际场景去评估到底要不要去做. 我们在2021年上半年大概发现了6670条慢SQL并落实版本优化,但正确率其实并不高,后续我们会考虑优化一些慢SQL的治理模型,将我们的准确率从20%再进行提升.

mysql记录耗时的sql

- - 数据库 - ITeye博客
mysql记录耗时的sql. mysql可以把耗时的sql或未使用索引的sql都记录在slow log里,供优化分析使用. 1.mysql慢查询日志启用:. mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢. 这说明slow log功能没有启用,要启用需要修改mysql的配置文件,在配置文件"[mysqld]"里添加如下俩参数:.

全国省市县 SQL (mysql)

- - 学习笔记
此城市区域内容可以配合ip.taobao.com api 使用.. 有些字段没有添加索引,用的时候根据实际情况做修改. 使用mysql来实现lbs(地理位置服务)功能. 10款对开发者有帮助的Android应用. DeployPHP 系列第 1 部分:优化 PHP 和 Oracle. 在 Oracle 和 PHP 中使用 LOB.

mysql的sql优化(前奏)

- - 数据库 - ITeye博客
要优化mysql首先要知道什么地方需要优化,然后才能针对具体问题进行优化. 什么分库分表,建立索引....摆脱不要那么官方好吗. 1.学会和培养使用mysql的查看命令的使用习惯. 什么你忘记如何创建表的语句了. SHOW CREATE TABLE Name: 'SHOW CREATE TABLE' Description: Syntax: SHOW CREATE TABLE tbl_name Shows the CREATE TABLE statement that creates the named table.

MySQL SQL Tuning:深入理解Order By

- - CSDN博客数据库推荐文章
在MySQL中ORDER BY按先后顺序有2种实现方式,先走索引无排序,如果不行,则用FILESORT. 走索引无排序需要满足2个条件:. ①排序字段和执行计划中所利用INDEX的索引键(或前面几个索引键)完全一致. ②表访问方式为index、ref或range [注释:explain输出中的Type可看出].

Mysql查看sql是否走事务

- - CSDN博客数据库推荐文章
可以看到监控日志是否开启的选项(off是关闭)on是开启. 接下来就可以直接进入shell中根据sql特征来查看我们sql会话信息. 126002192 Query select pk fromT_GANTT_CHART where pk =47 for update

//忽略其他的数据了.

利用tcpdump抓取mysql sql语句

- - 学习笔记
这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入. 脚本不是很长,但是效果很好. #!/bin/bash #this script used montor mysql network traffic.echo sql tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/;.

SQL监控:mysql及mssql数据库SQL执行过程监控审计

- - Seay's blog 网络安全博客
   最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在. 所以从今天起还是要继续拾起墨笔(键盘),继续好好维护这个博客,写出心里最真实的想法,写出平时接触到的一些人和事以及一些新的技术. 当然写博客也不是单纯的为了记录,也想通过博客来结交更多的朋友,今天在公司图书馆看到一句话大致说的是“在今天这个年代,已经很难等到三顾茅庐,诸葛亮也需要博客、微博和影响力”,在一年前就曾想过写一篇关于怎样通过博客来提高个人影响力的文章,我会尽快在这个月抽时间写出来,另外最近也看了几本书,过些时候给大家推荐.

PHP+MySQL环境下SQL Injection攻防总结

- rokeyhu - 老王的技术手册 ( 我的新博客:http://huoding.com )
程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过. 其实当黑客SQL Injection时,同样是一个TDD的过程:他们会先尝试着让程序报错,然后一点一点的修正参数内容,当程序再次运行成功之时,注入也就随之成功了. 假设你的程序里有类似下面内容的脚本:.