楼主: stay_sun

[辩论] 【大话IT】DBA的痛:SQL优化的讨论(获奖名单已公布)

[复制链接]
论坛徽章:
3
慢羊羊
日期:2015-02-11 16:18:49喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47
41#
发表于 2016-6-7 14:36 | 只看该作者
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
     答:不需要“深入”学习数据库,但起码要知道相同写法不同性能SQL的对比,例如:
     1)何时用merge、update 优缺点;
     2)何时用rownum、row_number 优缺点;
     3)何时用exist、in 优缺点;
     ** 或者尽量加一些范围条件,减少数据扫描等;
     ** 基本的执行计划要了解;
2、在你工作中遇到什么样恶心的sql,吐槽下?
     答:恶心程度递减--
    1)笛卡尔乘积CARTESIAN
    2)深层(3层)子查询过滤条件和子查询(1层)做关联,会走Filter循环...极慢;
    3)使用(id = 1 or in 子查询 ) 走全扫循环,filter...极慢;
    4)是否存在没意义的关联条件
        ①、A.id in (Select id from a1) ① and A.id in (Select id from a1 where id=1)②
        ②、业务功能类似,功能1 需要范围abcde5张表,功能2范围abc3张表;范围2懒得去改/重写直接用范围1的sql只是减少显示字段..;
    5)大表不加过滤条件;
       ①、分区表不加分区条件;
       ②、上下业务能加选择性比较好的索引,不去衡量 直接不加找所有数据;
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
     答:实话(废话) DBA优化不了的情况
     1)全扫..需要开发根据上下逻辑业务加过滤条件;
     2)DBA优化SQL后没有达到开发/客户要求的消耗时间范围内时,需要开发去改;
     3)逻辑有问题的bug需要和开发沟通具体功能一起选择最优的方法;
4、大家有没有为了sql跟开发急眼的时候,分享下。
     答:开发会先实现功能后再考虑性能(开发也不容易相互理解,开发都会写高效SQL估计就不需要DBA了哇~..
            只要求会简单/常用SQL写法'如上提到的'就够了,或做开发编写规范和培训,减少消耗性能的sql,剩下复杂的改写分析可和DBA后续一起研究);
           

使用道具 举报

回复
论坛徽章:
0
42#
发表于 2016-6-7 14:46 | 只看该作者
确实应该学一些简单的优化, 开发的最终目标也是为了成为架构师(从钱,还是“前”,都应该这样), 这些是必备的知识。
一个好的系统架构师应该具备(架构师+DBA),这样确实能够征服只懂DB的人,并且征服了只懂开发的人。 不要说精力有限,专注一行只需10000小时就能成为专家。
系统架构师是需要10年工作经验来累积经验的。 所以综合性人才是很受欢迎的。



没有必要争吵:
学会理解,因为只有理解别人,才会被别人理解。
学会忍耐,因为事已成事实自己无法改变。
学会宽容,因为人生在世,谁能无过呢,人无完人。


都说程序员智商高,其实我们应该注意提高下自己的情商,懂得理解人,做好协调, 这样才能成为领导者。

使用道具 举报

回复
论坛徽章:
0
43#
发表于 2016-6-8 17:34 | 只看该作者
CBO时代:from TABLE 的先後順序 where 的順序 不影響效能的。

使用道具 举报

回复
论坛徽章:
3
ITPUB社区OCM联盟徽章
日期:2013-04-22 11:08:332014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
44#
发表于 2016-6-8 22:18 | 只看该作者
关键还是公司IT开发管理流程的问题。象我现在的公司,关键业务的SP从DEV->QA1->QA2-QA3>UAT->PP(product paraelle)->PROD,
一个SP 要经过一路的性能测试, 到PROD基本上这种性能问题不能有说完全没有,应该很少了。

使用道具 举报

回复
论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
45#
发表于 2016-6-9 12:29 | 只看该作者
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
      必须的啊!好的开发写的SQL简洁高效,易于维护迁移
2、在你工作中遇到什么样恶心的sql,吐槽下?
      三无人员,无注释,无文档,无人认领的历史遗留物,业务还在此基础上提需求
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
     老太婆的裹脚布,效率还低下,系统开销高,用户体验烂
4、大家有没有为了sql跟开发急眼的时候,分享下。
     

使用道具 举报

回复
论坛徽章:
1
BLOG每日发帖之星
日期:2009-07-20 01:01:02
46#
发表于 2016-6-9 21:09 | 只看该作者
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
开发人员是分等级的,有初级开发人员,高级开发人员,初级开发人员由于技术能力有限,大部分还停留在功能的实现上,没有足够的能力去理解如何优化sql,时间也不够。
高级人员由于有了一些经验,对于理解sql优化应该有一定的理解力,所以需要深入学习。
我不希望老是碰到低级的性能问题。

2、在你工作中遇到什么样恶心的sql,吐槽下?
我接触的是银行系统,长长的sql很少见到。最恶心的访问分区表不加分区字段。

3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
根据我很长时间的观察,sql只要有优化空间,我就会推动开发人员修改。
列出事实:这个交易cpu time用了多少?如果修改可以节省多少mipse。
4、大家有没有为了sql跟开发急眼的时候,分享下。
快上线的时候,有的时候急。应该银行都有交易响应时间和cpu time的限制。
不过大部分时候是写个文档,这个交易因为什么原因导致响应时间和cpu time偏高,同时cc给领导。

使用道具 举报

回复
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
47#
发表于 2016-6-12 11:02 | 只看该作者
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
答:非常应该,甚至有很多开发最后都转DBA了。很多面向数据库的开发如果不学习数据库,那么开发什么呢?只有了解自己的开发对象才能去做。而且面向数据库的开发主要开发语言可以说都是SQL。这才是最直接和数据库打交道的语言。甚至要学习到数据库的体系结构,知道最起码锁、事务、提交、回滚、一致性读、并发机制。可以不用去处理监听,主从和灾备、集群、但是SQL的写法,正确使用索引,各种函数的使用以及算法都是需要的。有的需求甚至多多种写法,SQL已经成为了一种艺术。而高斯和庞加莱的数字故事,有人用SQL算法来实现,这就是最高的境界了。SQL大赛的冠军哪个不是开发出身?

2、在你工作中遇到什么样恶心的sql,吐槽下?
答:有的一句SQL放在QQ中都发不出去,太长了。有的AWR报告也放不下。还有的各种奇葩的编码,怎么用全表扫描怎么做,凡是应该避免的都犯错了。like的时候前后%。一个报表一天一次,一次15个小时,该语句我优化后6秒。还有的SQL半小时一次,但是单次执行都要在半小时以上。还有的SQL不知道是哪个开发做的,但是拿出来给其他开发,大家都吐了。表示怎么看?没法动。即使开发也不愿意去读,都想重写。

3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
答:执行时间超过业务要求的周期;不能承受业务并发;无法维护;低级错误;还有极其消耗CPU、内存和IO资源的必须修改,这些不改,整个数据库就没有资源做其他事情了。另外,我听一个朋友说过,他下班时候提出了一些问题,交给开发改。第二天早上发现开发改得热火朝天,他过去打招呼,“哥们,来的挺早啊?”。开发说:“什么啊,一晚上没回去!”

4、大家有没有为了sql跟开发急眼的时候,分享下
答:有过。我说这里要绑定变量。开发说什么叫绑定变量?我说like不能第一位就%,这样等于遍历所有。这时和他说数据库有40亿数据全表扫描是很长时间的。开发说这是用户需求,你别和我说。还有我说这里需要索引,开发问什么是索引?我说这是不对的,这样是不当使用数据库,需要改变。而开发说是数据库不行。
当然有素质的开发或者是虚心学习的还是会改的。还有就是看领导支持程度。有的领导懂技术的,我只要一说,所有开发全部执行,毫无怨言。

使用道具 举报

回复
论坛徽章:
176
20周年集字徽章-20	
日期:2020-10-28 14:31:21ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB社区12周年站庆徽章
日期:2013-08-13 16:52:38itpub13周年纪念徽章
日期:2014-10-08 15:21:35ITPUB14周年纪念章
日期:2015-10-26 17:23:44ITPUB15周年纪念
日期:2018-02-09 14:12:58ITPUB18周年纪念章
日期:2018-09-17 10:09:4919周年集字徽章-庆
日期:2019-08-27 15:07:44状元
日期:2015-11-19 12:58:23
48#
发表于 2016-6-12 14:04 | 只看该作者
今天遇到一个奇葩开发,SQL语句 纠正了两遍还是写错!
他的上司给我的解释:工资太低……
WTF!

使用道具 举报

回复
论坛徽章:
0
49#
发表于 2016-6-12 14:43 | 只看该作者
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
  开发能学点数据库当然好,但不是必须;
  开发懂得界限及需要规避的事宜就可;术业有专功,如果今天DBA要开发学数据库管理,明天中间件还需要学习,那不开发了??
  如果有问题,除了进度问题,管理问题,流程控制及质量环节是否都需要把控?
本人作为DBA,最烦的是DBA不断抱怨不良SQL性能低下,压垮数据库等等;  开发不负责高性能语句,开发负责的是功能与进度;至于考虑性能的开发,那算高级及资深开发;
2、在你工作中遇到什么样恶心的sql,吐槽下?
     不断嵌套,多表多次全扫描; 还有就是SQL语句比其表达的语义更复杂

3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
    简单功能复杂实现;频繁执行不良SQL
4、大家有没有为了sql跟开发急眼的时候,分享下。
    无,干嘛要跟开发急, 一般的开发不需要负责很多的性能考虑;更多的是架构与设计师需要考虑的;
需要加强的更多的是过程控制。

使用道具 举报

回复
论坛徽章:
28
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442014年新春福章
日期:2014-02-23 23:08:492014年世界杯参赛球队: 葡萄牙
日期:2014-08-05 11:31:14马上有对象
日期:2014-11-21 22:36:46暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-06-23 14:15:06
50#
发表于 2016-6-12 16:29 | 只看该作者
路过 学习一下!。。

使用道具 举报

回复

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

本版积分规则 发表回复

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