楼主: 丸喵喵

讨论送书:收获,不止SQL优化——抓住SQL的本质

[复制链接]
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:42:02秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 14:51:162015年中国系统架构师大会纪念徽章
日期:2015-09-16 12:54:392014系统架构师大会纪念章
日期:2015-09-16 12:54:392013系统架构师大会纪念章
日期:2015-09-16 12:54:392012系统架构师大会纪念章
日期:2015-09-16 12:54:392011系统架构师大会纪念章
日期:2015-09-16 12:54:392010系统架构师大会纪念
日期:2015-09-16 12:54:39秀才
日期:2015-12-25 15:31:10
41#
发表于 2017-5-31 14:29 | 只看该作者
本帖最后由 xuexiaogang 于 2017-6-16 12:53 编辑

1. SQL优化可以用到那些性能工具
答:书中提到了一种是不同调优场景的分析,可分为单纯场景的优化和复杂场景的优化;
(这种我平时经常遇到的就算这种,最高纪录是15小时的SQL调到6秒)
而另一种是基于这些场景的工具应用,就是针对单纯场景的优化手段和复杂场景的优化手段。几个工具AWR、ASH、ADDM、AWRDD,EM,执行计划工具都用上。可能需要结合业务或者算法、乃至实现逻辑等都要慎重的考量。

2. 如何缩短SQL调优时间
答:这个有点歧义。是说如何将10S的调到1S。还是说用半个小时做到了调优,怎么能在5分钟内做到同样效果。
如果说是前者我觉得应该是,分析执行慢的原因,是嵌套问题,还是全表扫描导致,是返回行数过多,还是索引失效等各种各样的问题。找到问题选择合适的对策都应该可以解决的。
如果说是后者的话,那么就考验DBA的功底和对系统的熟悉程度。迅速定位的问题所在。这是需要一些功力的。优化的核心就是减轻IO。我记得有一句话说的是,优化就是降低单位时间内的负载。

3. 影响性能的常见因素
答:我经历最多的有以下问题:
没有索引;
有索引但是where的谓词没有用到;
索引为差异度低的列上;
没有用到先导列;
笛卡尔积;
应该关联查询,变成了嵌套查询;
数据查询集量过大;
没有绑定变量;
第一位为%通配符;
没有where条件,全表检索或者多表全表关联;
大量无意义的排序(count时,插入时);
IO性能低;以及IO争用严重;
单次提交,没有批量提交;
大量insert update 最后delete;
建立了不合适的视图,以此为基础进行大量查询;
死锁;


4. 学习索引的重要性
答:索引不仅仅有普通的B-tree索引,还有位图索引,分区索引,反向索引,全文索引、函数索引等等。
任何一种都有其应用场景,换句话说都有自己的优势和劣势。我们要恰当使用,用它擅长的一面,而不用乱用。否则不仅无助于系统性能提高,反而让系统性能下降。学习到深入就发现,其实Oracle MySQL 还有PG等 查询优化器都是基于成本的。而这些成本就来自于统计信息。Oracle特有还有直方图的概念。只有结合这些设计索引才是好的索引。


5. SQL优化的误区
答:不能觉得比原来快了就是优化好了,而是看看是不是优化到极致了。比如原来10S,现在1S了。不一定是大功告成了,有可能还可以做到10毫秒。
不能仅仅是对SQL的优化,如果仅仅改写SQL,那么优化范围很小。如果提出表设计要改动,那么这个就是一个大的变革了。即优化不仅仅是SQL,还可能是设计。
另外还可以问问业务到底要什么,看看实现上是不是可以改进。这就是逻辑实现了。
还可以根据需求,看看有什么算法可以使用的,而不是简单粗暴的把要求的过滤条件一个个拼接在where后面。
还有一些简单的,不是每一列都来一个单独索引;
也不是强制索引就好;
更加不是一味的提升硬件加内存,加CPU。有时候不仅加了没有用而且就是投入1000倍的成本不见得有1000倍的提升。



使用道具 举报

回复
论坛徽章:
0
42#
发表于 2017-5-31 16:34 | 只看该作者
新手一枚,估计拿书是无望

使用道具 举报

回复
论坛徽章:
10
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51秀才
日期:2015-12-21 09:48:112015年新春福章
日期:2015-03-06 11:58:18暖羊羊
日期:2015-03-04 14:53:00马上有车
日期:2014-11-27 15:58:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42奥运会纪念徽章:赛艇
日期:2012-09-19 16:35:32奥运会纪念徽章:乒乓球
日期:2012-09-07 12:54:43秀才
日期:2016-01-21 13:42:39
43#
发表于 2017-6-1 09:54 | 只看该作者
之前有拜读PDF版,里面的内容内容通俗易懂,将晦涩的专业语言转化成易懂的日常用语,也没谁了,必须顶起

使用道具 举报

回复
论坛徽章:
0
44#
发表于 2017-6-1 11:01 | 只看该作者
1. SQL优化可以用到那些性能工具
    在操作系统中查看cpu和内存使用情况,了解数据库/实例是否消耗过多的资源,从整体上了解是否存在比较大的性能问题。
    通过各种数据库自带的工具,如awr,ash,查看哪些语句存在性能问题。查看语句的执行计划,了解哪些步骤耗费的资源较多,哪些不是按预期的执行。通过10053/10046等事件来进一步的了解执行计划的生成、得到其解析次数.执行次数,CPU使用时间等信息

2. 如何缩短SQL调优时间
   明确实际需求,了解真正的目的,分出哪些是要调优的,哪些是不要的,以及调优的程度、目标。花适当的时间得到合适的结果。
   首先先使用性能工具,了解哪些语句耗费的资源比较多、执行时间比较长。接着根据业务场景、sql语句执行的时间点等了解区分出哪些语句有进行优化的必要、优化的程度、目标是怎样的。如,有个语句A平时需要执行半个小时,而另一个语句B需要执行三十秒。并不是简单的从执行时间上去简单判断语句A需要优化而语句B不需要。有些时候,可以直接从业务层面上调整的,可以不需要在数据库层面上去优化sql。在优化的时候,需要根据实际情况评估出sql语句优化到什么程度,而不要为了一点点优化空间,而花费过多的时间。

3. 影响性能的常见因素
    表设计不合理,如对于存历史流水的表,可以考虑使用分区表来存储。这样也方便做数据归档等
    未根据实际情况,对表加必要的索引等。
    表统计信息和实际相差太大。如数据量突然大幅度增长,使用了不是最优或是次优的执行计划。如对于按月分区的数据,遇到月初第一次生成新分区的数据时,未对这一分区做表分析,将可能会出现性能问题。
    低效的sql语句,有些语句写的比较随便,只考虑到要得到正确的结果,而不考虑是否有些操作是可以省去、调整的。
    还有一些因素,如服务器性能、存储等
4. 学习索引的重要性
    必要的索引,可以提升性能,相应的,索引也会占用存储空间。不使用索引或者滥用索引,都会对数据库造成很大的影响。

5. SQL优化的误区
    a.一味的通过增加服务器的配置来提升性能
    b.通过使用hint,来强制限定语句的执行计划
    c.盲目的通过增加索引,来提高性能
    d.教条式的使用网上说的所谓的规则、写法来编写语句
    e.脱离实际情况、业务场景,花大量时间在不是很必要优化的语句上。时间花费多,而成效不大
    f.都只是从sql语句出发,而忽略了对象设计是否合理等


使用道具 举报

回复
论坛徽章:
1
秀才
日期:2017-07-11 13:54:02
45#
发表于 2017-6-2 09:06 | 只看该作者
第一次收到有作者亲笔签名的书,有些小激动。

使用道具 举报

回复
论坛徽章:
22
2010新春纪念徽章
日期:2010-03-01 11:06:29福特
日期:2013-11-06 19:08:01保时捷
日期:2013-11-15 07:54:26问答徽章
日期:2013-11-24 20:31:08马上有对象
日期:2014-03-20 13:07:43itpub13周年纪念徽章
日期:2014-10-08 15:13:38懒羊羊
日期:2015-03-04 14:48:162015年新春福章
日期:2015-03-06 11:57:31摩羯座
日期:2015-10-12 10:03:31蒙奇·D·路飞
日期:2017-06-19 23:56:57
46#
发表于 2017-6-2 13:05 | 只看该作者
书还没到手,期待中。梁老师的第一本书《收获,不止Oracle》,生动风趣,买了,而已推荐不少小伙伴读了。

使用道具 举报

回复
论坛徽章:
0
47#
发表于 2017-6-2 16:07 | 只看该作者
hyuyu20 发表于 2017-6-1 11:01
1. SQL优化可以用到那些性能工具
    在操作系统中查看cpu和内存使用情况,了解数据库/实例是否消耗过多 ...

啊啊啊。希望能中一本~

使用道具 举报

回复
论坛徽章:
0
48#
发表于 2017-6-2 16:34 | 只看该作者
真心不错的书,虽然我没有,但是我是真心想要啊,这两位老师我也是关注很久了,大力支持!!!

使用道具 举报

回复
论坛徽章:
57
秀才
日期:2016-03-24 09:20:52秀才
日期:2015-12-14 14:47:54秀才
日期:2015-11-30 09:59:23秀才
日期:2015-11-30 09:13:06秀才
日期:2015-11-23 10:17:19秀才
日期:2015-11-23 09:48:22秀才
日期:2015-11-12 17:43:40秀才
日期:2015-11-11 10:22:49秀才
日期:2015-11-11 10:07:14秀才
日期:2015-11-11 09:58:34
49#
发表于 2017-6-2 16:53 | 只看该作者
1. SQL优化可以用到那些性能工具
      ADDM,AWR,Statspack,一些DBA脚本,还有一些基本工具:动态性能表, 实例采集的统计和度量,企业管理器页面等

2. 如何缩短SQL调优时间
      根据一些工具或选择负载量高的TOP SQL,确定哪些SQL有问题,然后分析SQL,找到正确的解决方案

3. 影响性能的常见因素
     应用方面:写得不好的SQL,差的会话管理,索引的不合理;实例方面:内存不足,数据库结构不合理,实例的配置不当;操作系统方面:I/O争用,swap,参数的设置不当等等

4. 学习索引的重要性
      没有索引,就是全表扫描,建立合理的索引可以大大提高扫描的速度

5. SQL优化的误区
      没有定位到问题或影响最大的问题,就开始优化,一开始方向就可能错了

使用道具 举报

回复
论坛徽章:
9
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08秀才
日期:2017-08-18 11:04:35秀才
日期:2017-09-18 17:02:49
50#
发表于 2017-6-2 17:48 | 只看该作者
主要是针对ORACLE的,但是和 SQL SERVER 优化殊途同归.
我认为对数据库的优化应该从了解问题入手,了解背景,找到问题的症结,不要一来就进入到某个sql的优化。很多问题不仅仅是某个SQL 引起的

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表