前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL为什么慢,如何定位处理?

SQL为什么慢,如何定位处理?

作者头像
无忧摸鱼
发布2022-05-31 11:21:09
7790
发布2022-05-31 11:21:09
举报
文章被收录于专栏:摸鱼天堂

作为DBA在日常维护数据库中关键的就是数据库性能问题,对于服务百万级活跃用户,保障性能才是核心,功能全面,产品好,性能扛不住都是扯淡。 这里简单分析导致MySQL慢的可能因素,以及一些处理技巧:

一、导致MySQL慢可能的因素有 1、系统资源不足,配置低

2、系统层面未进行基本的优化,不同进程间资源抢占,所以推荐数据库服务器部署单实例

3、MySQL配置文件部分参数设置不合理

4、数据库垃圾SQL横行

二、查看系统层面负载手段 1、top查看整体负载情况,快速确认哪个进程系负载高

2、free查看内存情况,是否有内存泄露和用了swap等风险

3、vmstat/sar查看当前系统瓶颈到底在哪,如CPU、IO、网络等

4、perf top查看cpu消耗在哪些系统调用函数

三、查看MySQL的整体情况 1、观察show processlist输出中是否有临时表、排序、大量逻辑读、锁等待等状态

2、观察show engine innodb status输出中是否有大事务、长事务、锁等待等状态

四、处理垃圾SQL,常用手段 1、用explain、desc观察执行计划

2、用profiling定位sql执行的瓶颈

3、用pt-query-digest分析慢sql

五、附几个排查处理问题小技巧 1、mysqld进程消耗CPU长时间超过90%的话,99.9%是因为没用好索引

2、cpu的%sys高的话,大概率是swap或中断不均衡导致,也可能是有多个索引且超高并发写入(更新),或者有很严重的锁等待事件

3、最⼤的瓶颈通常是在磁盘I/O上,因此尽量用高速磁盘设备

4、如果物理磁盘无法再升级,则通过增加内存提升性能容量

5、遇到无法诊断的问题时,试试⽤perf top来观测跟踪

6、SQL执行慢,有时未必是效率低,也可能是因为锁等待,甚⾄是磁盘满了

六、常用的sql调优手段或工具 1、根据执行计划优化 通常使用desc或explain,主要注意点如下: 1.1、type:显示关联类型。重点关注ALL(全表扫描)、index(全索引扫描); 1.2、key_len:使用到索引的长度。通常该值大于30就要注意被选中的索引是否字符串类型,可否进一步优化; 1.3、rows:预估扫描的行数。通常该值大于1万就要注意可否选择更合适的索引减少扫描的行数; 1.4、extra:显示额外信息。重点关注Using temporary,Using filesort,尽量通过添加或调整来消除。

2、利用profiling优化 通过探针的方式详细记录sql执行过程详细代价,可以很清楚地了解到sql到底慢在哪个环节。 重点关注下列几种情况是否耗时较大: sending data creating sort index sorting result query end Waiting … lock Creating tmp table Copying to tmp table

3、利用optimizer_trace优化 可以输出优化器评估SQL执行计划的详细过程,尤其是每个可能的索引选择的代价。 利用它可以明白优化器为什么选中索引A,而不选中索引B。

4、利用session status优化 通过flush status重置session级别的状态值后,执行sql查看相应的状态变化量。 可重点关注几个信息: Created_tmp_tables,创建内存临时表 Created_tmp_disk_tables,创建磁盘临时表,尤其注意 Handler_read_rnd,随机读 Handler_read_rnd_next,全表扫描或者排序或者读下一行 Select_scan,全表扫描 Select_full_join,全表join Sort_merge_passes,多次归并排序

5、其他优化工具 MySQL workbench、pt-query-digest、soar、sqladvisor等

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档