打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
大型网站数据库优化和故障跟踪与排查(中篇)

大型网站数据库优化和故障跟踪与排查(中篇)

6)、复合索引的前导列,是最经常在查询条件中使用的

比如在 PUTDT,AUTHORNAME列上建立了复合的索引,其中PUTDT为前导列
对于如下的三条语句:
SELECT PUTDT, AGE FROM USER_NEWS WHERE PUTDT > '2007-1-16'
SELECT PUTDT, AGE FROM USER_NEWS WHERE PUTDT>'2007-1-16'and AUTHORNAME='DAVID'
SELECT PUTDT, AGE FROM USER_NEWS WHERE AUTHORNAME='DAVID'

说明:
第一条语句速度最快,其次为第二条,第三条最慢。
第三条中索引是无效的。所以建立复合索引,要注意细节。
第二条中条件语句的顺序不影响性能,"查询优化器"来做优化工作

7)、如果COUTN(*)只用于获取行数,可以使用ROWSET COUNT 。

8)、检查SQL 语句性能的方法
  
A、打开"查询分析器",打开"查询"菜单,点击"显示查询计划",执行下面的语句
   select title,price from titles where title_id in
(select title_id from sales where qty>30)


select title,price from titles where exists
(select * from sales where sales.title_id=titles.title_id and qty>30)

查看查询计划:

   



从套红的部分看,这两条语句性能是一样的,也验证了IN 和 EXISTS是等效的。

B、在各个select语句前加:declare @d datetime set @d=getdate()  并在select语句后加:select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

    可以知道SQL语句执行需要的毫秒数。


B、采用了以上的优化以后,发现数据库的进程占用的cup有所下降,但还是偏高。

请使用MS SQL事件探查器,跟踪MS SQL的请求



  打开“事件探查器”,新建“跟踪"


1)、如果“事件探查器”中,有很多的RPC事件,并且执行sp_cursoropen sp_cursorfetch

Sp_cursorclose ,说明在使用ASP数据集对象时,使用的游标服务不合适。

请使用“客户端游标”,代码:RS.CursorLocation=3 其中RS为数据集对象,3表示客户端游标,不要使用adUseClient,有时会有问题。

2)、数据集对象的操作要注意的地方

    RS.Open一般建议:

rs.open sql,conn,0,1 顺序遍历,不需要定位跳转,不需要添加删除更新操作,速度最快

rs.open sql,conn,1,3 遍历,可以进行更新操作,但不能进行定位跳转

rs.open sql,conn,2,3 可以进行所有操作,可以跳转

说明:第三个参数表示游标的类型,第四个参数表示锁类型

可以参考:http://www.cnblogs.com/David-weihw/archive/2007/01/10/616936.html

经过以上的优化,一般应该可以解决MS SQL进程占用cup过高的情况。如果还不行的话,就严重了,请重新设计数据库存储结构去吧。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
大型网站数据库优化和故障跟踪与排查(上篇) 【转】
Recordset对象操作数据库语法_湘
JDBC
Python连接Access07并操作数据库
C# 怎么执行SQL语句
js操作数据库
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服