sql 语句性能分析

1、看 sql 语句执行时间

2、看 sql 的执行计划

3、查看 sql 的执行中各个环节耗时时间

4、查看mysql的执行进程,处理锁表的情况,命令 show PROCESSLIST, state 为LOCKED,说明产生锁表,ID为进程id,直接执行kill ID,就可以停止这个进程;

MySQL整个查询执行过程:

1、客户端同数据库服务层建立TCP连接。

2、客户端向MySQL服务器发送一条查询请求。

3、连接线程接收到SQL语句之后,将语句交给SQL语句解析模块进行语法分析和语义分析。

4、先看查询缓存中是否有结果,如果有结果可以直接返回给客户端。

5、如果查询缓存中没有结果,就需要真的查询数据库引擎层了,于是发给SQL优化器,进行查询的优化,生成相应的执行计划。

6、MySQL根据执行计划,调用存储引擎的API来执行查询

7、使用存储引擎查询时,先打开表,如果需要的话获取相应的锁。 查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。

8、当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的LRU表来管理缓存页,保证缓存的都是经常访问的数据。

9、最后,获取数据后返回给客户端,关闭连接,释放连接线程。

Procedure Analyse优化表结构

PROCEDURE ANALYSE() ,在优化表结构时可以辅助参考分析语句。通过分析select查询结果对现有的表的每一列给出优化的建议。

利用此语句,MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。

【只有表中有实际的数据,这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础的。】

PROCEDURE ANALYSE的语法如下:

SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])

max_elements:指定每列非重复值的最大值,当超过这个值的时候,MySQL不会推荐enum类型。(默认值256)

max_memory (默认值8192)analyse()为每列找出所有非重复值所采用的最大内存大小。

执行返回中的Optimal_fieldtype列是mysql建议采用的列。

样例程序

mysql> DESC user_account;

+-----------+------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+------------------+------+-----+---------+----------------+

| USERID | int(10) unsigned | NO | PRI | NULL | auto_increment |

| USERNAME | varchar(10) | NO | | NULL | |

| PASSSWORD | varchar(30) | NO | | NULL | |

| GROUPNAME | varchar(10) | YES | | NULL | |

+-----------+------------------+------+-----+---------+----------------+

rows in set (0.00 sec)

mysql> select * from user_account PROCEDURE ANALYSE(1)\G;

*************************** 1. row ***************************

Field_name: ibatis.user_account.USERID

Min_value: 1

Max_value: 103

Min_length: 1

Max_length: 3

Empties_or_zeros: 0

Nulls: 0

Avg_value_or_avg_length: 51.7500

Std: 50.2562

Optimal_fieldtype: TINYINT(3) UNSIGNED NOT NULL

*************************** 2. row ***************************

Field_name: ibatis.user_account.USERNAME

Min_value: dfsa

Max_value: LMEADORS

.........................................................

从第一行输出我们可以看到analyze分析ibatis.user_account.USERID列

最小值1,最大值103,最小长度1,最大长度3,字符串或0的个数为0;值为空的字段数为0;平均每个字段的值为51.7500

并给出了该字段的优化建议:建议将该字段的数据类型改成TINYINT(3) UNSIGNED NOT NULL。

查询语句出现sending data耗时解决

执行SHOW PROFILES 查出Query_ID后在执行 show profile for query Query_ID ,或者是show processlist,查看查询所耗时资源

得知查询到语句耗时主要集中在 sending data上

解决步骤:

1、查询资料需要开启查询缓存,执行命令查看开启情况 show variables like '%query_cache%',No则是未开启,改配置文件设置 query_cache_type=YES后重启

2、查看buffer 执行 show variables like 'innodb_buffer_pool%',可以看出innodb_buffer_pool_size只有8M大小

这里设置成3G,SET GLOBAL innodb_buffer_pool_size = 3221225472,然后重启mysql(参考:https://www.cnblogs.com/wanbin/p/9530833.html)

3、查看表索引,show index from table_name发现cardinality的值为1,表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列包含多少个不同的值。如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了。

使用命令:analyze table table_name修复索引,如果修复失败,查看是否因为新添加的字段设置了相同的默认值

总结

从上面这个例子我们可以看出analyze能根据目前表中的数据情况给出优化建议。当数据库在生产环境运行一定时间以后,开发或是DBA能参考analyze的分析结果来对表结构做出一定的优化。

mysql 慢sql 十几秒_sql优化之慢sql耗时排查相关推荐

  1. sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

    概述 最近做查询,统计和汇总.由于数据量比较庞大,大部分表数据上百万,甚至有的表数据上千万.所以在系统中做sql优化比较多,特此写一篇文章总结一下关于sql优化方面的经验. 导致查询缓慢的原因 1.数 ...

  2. mysql种default约束的语句_sql语句大全之SQL DEFAULT 约束

    SQL DEFAULT约束 DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会将默认值添加到所有的新纪录. SQL DEFAULT Constraint on CREATE TA ...

  3. sql盲注 解决_sql盲注-和sql盲注相关的内容-阿里云开发者社区

    <白帽子讲WEB安全>学习笔记之第7章 注入攻击 第7章 注入攻击 SQL注入的两个条件:1,用户可以控制输入:2,原本执行的SQL语句并接了用户输入的数据. 7.1 sql注入 SQL注 ...

  4. mysql 8.0 新特性 统计直方图 优化执行计划SQL查询

    |  概览 MySQL8.0实现了统计直方图.利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段.这可以帮助查询优化器找到更优的执行计划.统计直方图的主要使用场景是用来计算字 ...

  5. mysql关于or的索引问题_SQL优化 MySQL版 - 避免索引失效原则(二)

    作者 : Stanley 罗昊 体验SQL优化中的概率情况 在上一篇文章结尾处,我们在执行查询计划的时候,却发现我明明加了索引,并且也满足了使用索引的条件,但是,给我的优化结果却是失败,从而,得出一个 ...

  6. mysql从大到小排序_sql语句时间排序 sql语句按照时间排序

    sql语句时间排序 sql语句按照时间排序以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL按时间排序 select ...

  7. .Net+SQL Server企业应用性能优化笔记3——SQL查询语句

    在上一篇文章中我们使用了几种方法来确定瓶颈,找到瓶颈,下面再回顾一下: LoadRunner压力测试+Windows计数器,这种方法主要是找出大概的性能问题是在哪台服务器,主要是哪个资源紧张. ANT ...

  8. 【转】sql语句优化工具LECCO SQL Expert

    软件说明: 更优更快 人工智能自动SQL优化----------http://www.sina.com.cn 2001/12/12 17:48 中国电脑教育报文/SQL爱好者 所谓SQL,就是指Str ...

  9. 使用工具 SQL Tuning Expert for Oracle 优化SQL语句

    自动SQL优化工具Tosska SQL Tuning Expert for Oracle,帮助SQL开发人员解决SQL性能问题. 官网下载 https://tosska.com/tosska-sql- ...

最新文章

  1. leetcode算法题--最后一块石头的重量 II★
  2. UVa 1590 - IP Networks
  3. Android控件系列之RadioButtonRadioGroup
  4. 【django】如何搭建虚拟环境(解决mkvirtualenv:未找到命令)
  5. 用MXNet实现mnist的生成对抗网络(GAN)
  6. 1.1.0-简介-P6-Paxos
  7. JavaScript(DOM编程一)
  8. “每天AI资讯这么多!该看哪些?”推荐一份优质资料清单
  9. C++之MFC之Unicode转char*
  10. 热点:安全问题是否能将DNS推入云服务
  11. linux cpu mysql_Linux 指定MySQL服务运行的CPU核心(数)
  12. 史上最全最新手机号码号段大全
  13. Linux字体库ttc还是ttf,几种操作系统字体格式:otf/ttf/ttc格式字体的区别
  14. 语音信号处理、语音信号分析
  15. iPhone iPad下载NBA2K22苹果版下载
  16. C# ActiveX 网页打包验证自动升级
  17. 6个好用免费的LiDAR数据处理软件【2021最新】
  18. java整数相乘得负数_关于java:将2(小)个数字相乘得到负数的解决方案,而不是溢出…为什么?...
  19. matlab 矩阵满秩分解
  20. 如何在别的电脑上用自己的系统------在移动硬盘上装win10

热门文章

  1. vue-默认插槽-具名插槽-作用域插槽-ref,props,mixin混入,插件
  2. python下的pyecharts应用1--统计目录文件相关信息绘制柱状图
  3. “视频号”能撑起微博的野心吗?
  4. UG拆电极的认识及注意事项
  5. 20223405 李硕 2022-2023-2 《Python程序设计》实验二报告
  6. Android开发 shape使用
  7. 太阳能光伏板故障缺陷分类
  8. 容器单机编排工具 Docker Compose,swap 限制,配置默认的CFS调度程序,Stress-ng 压力测试工具,docker官网镜像上传,及阿里云镜像上传,Docker 的资源限制
  9. 灯塔,大海,大风。Final.
  10. python ubuntu centos_ubuntu与centos系统对比