新足迹

 找回密码
 注册

精华好帖回顾

· 分享哈瓦那之行,欢迎拍砖,欢迎加分! (2011-8-22) haoyue · 酥皮系列——又是超简单,迷你蝴蝶酥 (2009-6-25) edith921
· 《The Man in the Iron Mask 》 (2005-1-3) leeshine · 寻房记 (2009-4-18) 让你久等了
Advertisement
Advertisement
查看: 3956|回复: 75

谁懂 database tuning [复制链接]

头像被屏蔽

禁止发言

发表于 2011-1-24 10:05 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
database tuning 是个大话题吧??

对于一个.net developer 应该掌握到啥程度?? 请双胸和各位高手回答。 非常谢谢。
Advertisement
Advertisement

退役斑竹

发表于 2011-1-24 10:07 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
俺觉得developer需要知道的一个很重要的东西是index.

当你写一个大query之后,你需要给调用的表加适当的index以提高performance

评分

参与人数 1积分 +4 收起 理由
澳贼 + 4 具体说说!!

查看全部评分

参与宝库编辑功臣

发表于 2011-1-24 10:09 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
确实有点宽泛,能否说的细致点?

发表于 2011-1-24 10:16 |显示全部楼层
此文章由 bulaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bulaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 澳贼 于 2011-1-24 11:05 发表
database tuning 是个大话题吧??

对于一个.net developer 应该掌握到啥程度?? 请双胸和各位高手回答。 非常谢谢。


这个名字好....
头像被屏蔽

禁止发言

发表于 2011-1-24 10:16 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-1-24 11:09 发表
确实有点宽泛,能否说的细致点?


因为我一点也不懂,所以才问问各位大虾
签名被屏蔽
头像被屏蔽

禁止发言

发表于 2011-1-24 10:17 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
那就给加20分吧

原帖由 bulaohu 于 2011-1-24 11:16 发表


这个名字好....
签名被屏蔽
Advertisement
Advertisement

发表于 2011-1-24 10:18 |显示全部楼层
此文章由 LoveAu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 LoveAu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
先说为什么要tuning?
头像被屏蔽

禁止发言

发表于 2011-1-24 10:18 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 LoveAu 于 2011-1-24 11:18 发表
先说为什么要tuning?


提高perfermance
签名被屏蔽

发表于 2011-1-24 10:20 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我觉得有2个东西比performance tunning重要很多:

1. normalization/de-normalozation
2. 大query的框架/design

只有1/2弄对了,performance tunning才有意义,否则大方向都不对,tunning提高不了太多的performance.

很多时候要写不同形式的query,作batch比较他们的performance,之后才是看execution plan,这也是一门学问。

如果泛指performance tunning的话,1/2也应该算,看如何划分了。

[ 本帖最后由 乱码 于 2011-1-24 11:22 编辑 ]

评分

参与人数 1积分 +4 收起 理由
澳贼 + 4 能否举例说明?

查看全部评分

参与宝库编辑功臣

发表于 2011-1-24 10:22 |显示全部楼层

回复 5# 的帖子

此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
作为developer,了解些query optimization 和 performance tuning的东西还是很有必要的。

参与宝库编辑功臣

发表于 2011-1-24 10:22 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 澳贼 于 2011-1-24 11:18 发表


提高perfermance


网上找optimization tips 研究实践下

评分

参与人数 1积分 +2 收起 理由
澳贼 + 2 分不多了,别介意。

查看全部评分

永远的junior programmer
Advertisement
Advertisement

参与宝库编辑功臣

发表于 2011-1-24 10:24 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-1-24 11:20 发表
我觉得有2个东西比performance tunning重要很多:

1. normalization/de-normalozation
2. 大query的框架/design

只有1/2弄对了,performance tunning才有意义,否则大方向都不对,tunning提高不了太多的performance.

很多 ...


很多平台的数据库设计作为一般的程度开发员不太容易改动的。我觉得奥贼问的是提高query的performance吧
永远的junior programmer

发表于 2011-1-24 10:26 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
database tuning is DBA's job.
Not .net developer's business.

My thought is:
Mostly, there are few steps we can follow:
1) Identify issues with report or profiler, from here we know which query or proc has problem.
2) Take the slow query to run it manually, with: set statistics IO on, set statistics time on, and show the plan.
3) find out the top costs, mostly they are index scan / table scan / loops...
4) Change the query to utilise existed index or apply new index

评分

参与人数 3积分 +9 收起 理由
北风 + 4 你太有才了
bffbffbff + 3 谢谢奉献
澳贼 + 2 最后两分

查看全部评分

头像被屏蔽

禁止发言

发表于 2011-1-24 10:26 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
http://technet.microsoft.com/en-au/library/cc917715.aspx

这个您看行么?

原帖由 bffbffbff 于 2011-1-24 11:22 发表


网上找optimization tips 研究实践下
签名被屏蔽

退役斑竹

发表于 2011-1-24 10:32 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-1-24 11:26 发表
database tuning is DBA's job.
Not .net developer's business.

My thought is:
Mostly, there are few steps we can follow:
1) Identify issues with report or profiler, from here we know which query or pro ...


DB 的tuning是DBA的工作没错,但developer自己写的query应该自己tuning,这些在development环境下就应该做好的。

发表于 2011-1-24 10:32 |显示全部楼层
此文章由 LoveAu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 LoveAu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-1-24 11:26 发表
database tuning is DBA's job.
Not .net developer's business.

My thought is:
Mostly, there are few steps we can follow:
1) Identify issues with report or profiler, from here we know which query or proc has problem.
2) Take the slow query to run it manually, with: set statistics IO on, set statistics time on, and show the plan.
3) find out the top costs, mostly they are index scan / table scan / loops...
4) Change the query to utilise existed index or apply new index


很好的总结, 学习了!
Advertisement
Advertisement

参与宝库编辑功臣

发表于 2011-1-24 10:37 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 澳贼 于 2011-1-24 11:26 发表
http://technet.microsoft.com/en-au/library/cc917715.aspx

这个您看行么?



那个for Indexed Views, 我觉得不是你想要的,你想要的是类似于这种
http://www.mssqlcity.com/Tips/tipTSQL.htm
这类东西网上一找一堆,去sqlauthority找找best practice类的东西看看。

如同论坛DBA一姐月亮所说, 研究下index对performance很重要
再如it左胸乱码 所讲, 学习研究下normalization/denorm
永远的junior programmer

发表于 2011-1-24 10:38 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Back to 2009, our company asked microsoft's SQL expert to run a helth test to our DB system. Performance is one of the areaes they reported.

Then I was sent to Microsoft to take a SQL Performance course (3 days). Learnt a lot from there.  

Now the DB system is good & stable,...We don't need DBA anymore ....

参与宝库编辑功臣

发表于 2011-1-24 10:39 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2011-1-24 11:32 发表


DB 的tuning是DBA的工作没错,但developer自己写的query应该自己tuning,这些在development环境下就应该做好的。


不要互相推卸责任, dba有时候也需要对一些query进行code review
永远的junior programmer

参与宝库编辑功臣

发表于 2011-1-24 10:40 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-1-24 11:38 发表
Back to 2009, our company asked microsoft's SQL expert to run a helth test to our DB system. Performance is one of the areaes they reported.

Then I was sent to Microsoft to take a SQL Performance cou ...


有没有3天培训的video clips
永远的junior programmer

发表于 2011-1-24 10:44 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-1-24 10:40 发表


有没有3天培训的video clips

No.., don't have
Advertisement
Advertisement

发表于 2011-1-24 10:45 |显示全部楼层
此文章由 righttang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 righttang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一个负责的developer,就要对自己写的query做调整,及时发现和纠正一些很慢的query

如果是在是需要这么写,也能通过application server 等等把一些运算给分离出去,减轻数据库的负担。

如果还是不行,那就肯定是设计上的问题。想想是不是可以通过数据仓库或者异步查询来排除

评分

参与人数 1积分 +2 收起 理由
月亮 + 2 我很赞同

查看全部评分

发表于 2011-1-24 10:49 |显示全部楼层
此文章由 北风 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 北风 所有!转贴必须注明作者、出处和本声明,并保持内容完整
说的很好

原帖由 于 24/1/2011 10:26 发表
database tuning is DBA's job.
Not .net developer's business.

My thought is:
Mostly, there are few steps we can follow:
1) Identify issues with report or profiler, from here we know which query or pro ...
If you let people believe that you are weak, sooner or later you’re going to have to kill them.
头像被屏蔽

禁止发言

发表于 2011-1-24 10:57 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-1-24 11:37 发表


那个for Indexed Views, 我觉得不是你想要的,你想要的是类似于这种
http://www.mssqlcity.com/Tips/tipTSQL.htm
这类东西网上一找一堆,去sqlauthority找找best practice类的东西看看。

如同论坛DBA一姐月亮所说, 研究 ...


非常谢谢
签名被屏蔽
头像被屏蔽

禁止发言

发表于 2011-1-24 11:07 |显示全部楼层
此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 righttang 于 2011-1-24 11:45 发表
一个负责的developer,就要对自己写的query做调整,及时发现和纠正一些很慢的query

如果是在是需要这么写,也能通过application server 等等把一些运算给分离出去,减轻数据库的负担。

如果还是不行,那就肯定是设计上的问题。想想是不是可以通过数据仓库或者异步查询来排除


俺一般对程序的每个步骤都精雕细琢。所以出活比较慢。惭愧中。。。。。。。。 不过由于一直是我自己干。所以缺乏工程的经验。那天听了一个高手说了“database tuning”.马上就过来问问。
签名被屏蔽

发表于 2011-1-24 11:10 |显示全部楼层
此文章由 IsDonIsGood 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 IsDonIsGood 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-1-24 11:20 发表
我觉得有2个东西比performance tunning重要很多:

1. normalization/de-normalozation
2. 大query的框架/design

只有1/2弄对了,performance tunning才有意义,否则大方向都不对,tunning提高不了太多的performance.

很多 ...


同意,适当的denormalization 可以很大程度上避免使用 join statement, 从而提高 query 的performance。
一般来说performance和数据量关系最大啦,同样的query 上万的数据量可能run出来的performance不错,上10W可以接受的慢,再多就可能会crash server。
个人感觉,join肯定是cost非常高的,尤其是left join.
pivot/unpivot的cost也高,order by 的cost再数据多没有index的情况下简直是nightmare.
Loop要慎用,不管是cursor还是while,曾经想过能不能用CLR的SP来实现loop会不会快点,不过没有动手试过,用过的大虾们指点一下.
还说个不算db tuning的不过我碰到过,SSRS的matrix可以动态生成列,这个功能很方便,但是当数据量过大的时候,虽然query可以很快run出结果,但是SSRS在rendering report的时候占用太多内存,最后crash server。

评分

参与人数 2积分 +6 收起 理由
+ 3 感谢分享
bffbffbff + 3

查看全部评分

Advertisement
Advertisement

参与宝库编辑功臣

发表于 2011-1-24 11:23 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
说道loop(cursor和while), 很多人都说避免使用,网上很多人讨论给出不同的替代方案,各位大牛有没有经历过非用cursor/while不可没法替代的时候?

退役斑竹

发表于 2011-1-24 11:29 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-1-24 12:23 发表
说道loop(cursor和while), 很多人都说避免使用,网上很多人讨论给出不同的替代方案,各位大牛有没有经历过非用cursor/while不可没法替代的时候?


只在两种情况下碰到过
1。表小
2。这个query运行次数极少,而且是在off peak的时候运行

参与宝库编辑功臣

发表于 2011-1-24 11:37 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2011-1-24 12:29 发表


只在两种情况下碰到过
1。表小
2。这个query运行次数极少,而且是在off peak的时候运行


我遇到用curosr的情况与表的大小倒没直接关系,经常是需要对loop里面的每一row数据进行比较复杂的运算或者逻辑

还有几次见到复杂的cursor甚至跨越了多个trigger 基本上当成是temp table用了
永远的junior programmer

发表于 2011-1-24 11:52 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-1-24 12:23 发表
说道loop(cursor和while), 很多人都说避免使用,网上很多人讨论给出不同的替代方案,各位大牛有没有经历过非用cursor/while不可没法替代的时候?


用loop的好处就是scan一遍table, 如果有的query看到它的excution plan scan了1遍以上,而且这种scan table是不可避免的,就可以考虑用loop,不过这种情况很少,很多人甚至都不会写cursor,我个人不看reference也不会写。

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部