我的提问 我要提问

江小白太白 2018-10-30 18:47:38

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

数据存储与数据库 SQL

对于慢sql有没有什么比较实用的诊断和处理方法?

回答(18)

无名海风 0

1.查看慢查询log,优化top n的慢查询
2.抽样general log,重点优化执行频率最多的SQL。统计分析执行最多的SQL,推荐使用percona toolkit的工具(pt-query-digest)
3.关于SQL优化,推荐一本书《数据库索引设计与优化》

熊在此处 0

1, 查看慢sql日志, 了解是哪些sql慢。
2, 针对慢的sql 查看执行计划, 确认具体慢的原因。

eninnan 0

1312312

galaxystar 0

xplay看慢sql执行计划,针对性做优化

孤独求败修 0

先看看必要的Index有没有加上,针对百万级以上的表会有明显的效果,另外也可以看看sql的cost,适当调整关联和where
条件的顺序和写法

lsug 0

不同的DB产品都有其诊断性能的功能或第三方插件,找到对应的功能插件测一下,再根据工具给出的优化建议优化下,应该就差不多了

dudu_leo 0

慢SQL的诊断方法,一方面与DB的产品比较相关,往往不同的DB产品会提供很多额外的检查手段,能够查看查询执行过程中的代价。需要与具体的DB产品架构相结合。另外一方面如果SQL很复杂,也可以通过拆解到子SQL,分别验证的方式,分解问题找到瓶颈点。

处理方式的话与具体诊断出的问题十分相关,并无通用的方法。如查询数据瓶颈,则需要通过增加索引;数据倾斜导致的长尾,则需要进行一定的打散策略。

xwaby 0

在SQL Server中查找慢SQL方法:
1、使用SQL 内置的动态管理视图(DMVs)查找慢查询
2、通过应用程序性能管理(APM)解决方案查询报告。在运行时对应用程序代码进行轻量级性能分析来收集这些数据。
3、Retrace高级SQL查询,能收集正在执行的每个SQL查询的性能统计信息。
4、SQL Server扩展事件。
5、SQL Azure查询性能洞察。SQL Azure的性能报告是建立在扩展事件之上的。在Azure Portal中,您可以访问各种性能报告和优化技巧。

1700649009404218 0

把sql语句打印出来,从技术视角分析一下:

  • 查询涉及的表的时候是否没有配置索引
  • 查询的数据量是否过大,没有分页
  • 查询逻辑是否存在冗余,比如多次查询的数据其实是一份数据等等

yu_hc200 0

一般慢sql都可以通过db的执行时间记录直接发现,对于慢sql的起因可以通过查执行计划,找到消耗最多的点。
一般的优化措施
1.大查询分页,不要一次返回太多数据
2.不做join,改为在数据库中做冗余
3.不做一次性的大批量update,宁愿一条一条的更新
4.尽量不在事务内做读操作或者其他远程访问操作,事务里面只做写,尽量保障事务短

程序界小强 0

配置mysql的慢查询,查看SQL的执行计划

时序 0

DB端:如果你不能接触到服务器,可以联系dba打开slow sql日志,批量跟踪一段时间内的慢sql。
开发端: 自己的设计的sql可以在各种数据库的客户端上走一下执行计划,这个功能每个数据库都有,可以预测一下有没有全表扫描等常见sql问题。 如果有,就要结合自己的表查询语句看看如何更好的优化一下当前的查询。

折子戏2019 0

Oracle的话,非常清楚哪条SQL就看执行计划,根据经验,一般都是业务逻辑不清导致胡乱join或者缺少join引起。纯技术一般要加hint解决。如果不清楚哪条SQL则调取aws报表查看top SQL。

1510805476609588 0

show processlist看看,找到sql就想办法优化吧,尽量不用join,缓存能不能帮上忙,执行计划看看索引执行情况,也就这些了

fuxt 0

查看SQL的执行计划

zengjianjay 0

慢SQL一般就直接在DB端可以全部输出来,提到解决方案,应该从多个方面入手解决:
1、如果慢SQL是因为业务设计原因,考虑是否通过业务改造避免,比如原来要查30天的数据,现在查7天也能满足需求
2、将DB的查询转成更高效的K-V或者内存缓存起来,有模糊查询的,走搜索引擎
3、进行SQL语句:看下表是否where、order的字段未加索引或者join出来太多行
4、进行分库分表,将大表拆小
5、分析服务器性能,看下是不是因为服务TPS过高导致
6、分析网络问题,执行简单的SQL看下服务器响应时间
总之,慢SQL需要从架构、业务代码、SQL本身、DB服务器、网络等多方面去排查和分析

李八郎 0

放到工具的优化建议跑一下

饭娱咖啡 2

诊断 SQL 执行的快慢有两种方法:
1.代码中的插件:你在执行功能的时候,通过控制台可以直接看到 SQL 的执行时间
2.数据库工具:Oracle 的工具 PL/SQL Developer,MySQL 的工具 Navicat。你直接把 SQL 语句放在工具中跑,你能直观的看到查询的结果以及执行的时间。

SQL调优:
可以参考《阿里巴巴Java开发手册(详尽版)》中,关于 MySQL 数据库的章节。
下面列举书中的几个点:
1.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。
2.建组合索引的时候,区分度最高的在最左边。
3.不要使用count(列名)或count(常量)来替代count(*)

相关问题