zping

SQL SERVER,ORACLE数据库分析,设计,研究,优化,重构等

统计

常用链接

留言簿

友情衔接

阅读排行榜

评论排行榜

SQL server 系统优化--通过执行计划优化索引(1)

       前几天,远离上海,到了温州,在客户的这边处理系统慢,该系统每天正常down机7次左右,在线人员一多,系统运行缓慢,严重影响业务操作,到了无法忍耐的地步,这几天一直在这边处理优化中的问题和升级系统。将这些优化办法和思路记录下来,给大家在以后优化系统中提供思考和建议。

       这几天都在通过执行计划来优化索引:

       1,首先通过DMVs性能视图来查看那些性能问题是可以通过索引来优化的。先在生产数据库里执行下列查询:

            sql server性能分析--执行sql次数和逻辑次数

    查看部分得到结果(注意平均时间):        

    

     这里我们看到语句的执行时间和执行语句,我们拷贝一个运行比较慢的sql出来。预估sql执行计划,查看执行计划: 

      

    分析:这里我们看到整个复杂的执行计划中,通过RID查找数据的开销占到了80%的时间。我们这里看看他通过RID是查询什么数据。

   

    原来是通过RID只查询workflowid数据。上面是通过索引查找(index seek)来查询数据,这时最好是做到索引覆盖,将workflowid包含到上面的索引,这样一来该sql语句的执行速度大大提高。

   总结:

      这几天都是通过类似的方法来评估系统的使用,再优化索引提高速度,到现在为止系统性能比先前要提高很多。

      继续努力......

 热爱祖国

posted on 2008-09-11 15:51 zping 阅读(2251) 评论(11)  编辑 收藏 网摘 所属分类: SQL Server 优化

评论

#1楼 2008-09-11 16:33 寧愿為你       

学习~~~收藏下来。。在这里学到了不少东西。。
  回复  引用  查看    

#2楼 2008-09-11 16:42 Tony Zhou      

good   回复  引用  查看    

#3楼 2008-09-11 17:14 蛙蛙池塘      

个人认为以下链接对优化查询入门有很大帮助
优化 SQL Server 查询性能
http://technet.microsoft.com/zh-cn/magazine/cc137757.aspx" target="_new">http://technet.microsoft.com/zh-cn/magazine/cc137757.aspx
  回复  引用  查看    

#4楼 2008-09-11 17:15 蛙蛙池塘      

真要是真正搞懂上面那篇文章及背后隐含的信息,对索引优化应该比较得心应手了。   回复  引用  查看    

#5楼 2008-09-11 17:28 lygwujian[未注册用户]

在普通不过了,什么好技巧啊,搞笑了,还删我的评论   回复  引用    

#6楼[楼主] 2008-09-11 17:51 zping.com      

@蛙蛙池塘
你提到信息其实说的很好,但一般人是看不明白的,我这个优化只是结合实际更通俗一些。
  回复  引用  查看    

#7楼[楼主] 2008-09-11 17:54 zping.com      

@lygwujian
其实优化系统是一个细心和认真的事情,有时后并不是你用了多高深的技巧和技术。而是你花了多少心思在上面,我也不否认这是很普通的,但是我希望能给用户在系统使用上带来便利和享受,这是我掌握数据库技术的目的。
  回复  引用  查看    

#8楼 2008-09-13 11:06 NoText      

请问楼主,DMVs是分析跟踪器吗?   回复  引用  查看    

#9楼[楼主] 2008-09-15 22:33 zping.com      

@NoText
不是,dmv是sql server 2005里的动态管理视图
  回复  引用  查看    

#10楼 2008-09-23 16:37 zyli      

为什么我执行
SELECT creation_time N'语句编译时间'
,last_execution_time N'上次执行时间'
,total_physical_reads N'物理读取总次数'
,total_logical_reads/execution_count N'每次逻辑读次数'
,total_logical_reads N'逻辑读取总次数'
,total_logical_writes N'逻辑写入总次数'
, execution_count N'执行次数'
, total_worker_time/1000 N'所用的CPU总时间ms'
, total_elapsed_time/1000 N'总花费时间ms'
, (total_elapsed_time / execution_count)/1000 N'平均时间ms'
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) N'执行语句'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) not like '%fetch%'
ORDER BY total_elapsed_time / execution_count DESC;

提示错误:消息 102,级别 15,状态 1,第 1 行
'.' 附近有语法错误。
为什么会这样,我搞了很久都有这个问题
是不是要开启什么选项?
  回复  引用  查看    

#11楼[楼主] 2008-09-23 16:54 zping.com      

@zyli
将数据库兼容级别从“80”改成”90“
  回复  引用  查看    

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1288583




相关文章:

相关链接: