设为首页 收藏本站
查看: 962|回复: 0

[经验分享] [原] JT SQL Server 性能调优札记之二

[复制链接]

尚未签到

发表于 2015-6-28 17:46:30 | 显示全部楼层 |阅读模式
分析问题
  将数据库备份到一台测试的服务器上,查看一下数据库的数据文件和日志文件情况,发现日志文件比较大,貌似这也是一个SQL Server 存在的问题,具体原因不清楚,但是解决方法已经非常成熟,该问题暂时不影响使用,先不管它。
DSC0000.png 上一篇定位了问题,找出了多条Top SQL,其中这条最过分。
  
exec oa_SWLIST
'glzyf',
'(s.fileSerialNumber like ''%%'' or s.title like ''%%'' or s.keywords like ''%%'' or s.fileZi like ''%%'') and ',
' (  ft.userid=''glzyf'' ) '
  
  分析一下这个存储过程,我习惯是先看看SQL语句的结构,而不是马上看执行计划,或者直接跑语句获得统计信息。



ALTER PROCEDURE [dbo].[oa_SWLIST]
@userID varchar(20),
@sql varchar(1000),
@userIDs varchar(1000)
AS
DECLARE @SQL1 nchar(4000) ;
DECLARE @SQL2 nchar(4000) ;
create table #employees(
[id] [int] IDENTITY(1,1) NOT NULL,parentId int,pkId int,status int,title nvarchar(1500),comeOrg nvarchar(100),
fileDate DateTime,fileName nvarchar(4000),filePath nvarchar(4000),readStatus nvarchar(10),optionStatus nvarchar(10),
depId nvarchar(20),urgencyLevel nvarchar(10));
set @SQL1='insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)
select distinct s.parentId,s.pkId,0,s.title,s.comeOrg,s.fileDate,
s.fileName,s.filePath,ft.readStatus,0,s.remark3,
case
when urgencyLevel=''普通'' then 0
when urgencyLevel=''急件'' then 1
when urgencyLevel=''特办'' then 2
when urgencyLevel=''特急件'' then 3
when urgencyLevel=''限时'' then 4
else 0
end as urgencyLevel
from ShouWen as s ,  
FlowTurning as ft where '+@sql+' ft.status=0 and ft.type=''sw''
and s.pkid=ft.pkid and s.status''4'' and '+@userIDs+' order by urgencyLevel desc,s.filedate desc'
set @SQL2='insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,
fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)
select distinct s.parentId,s.pkId,1,s.title,s.comeOrg,s.fileDate,
s.fileName,s.filePath,1,l.optionstatus,s.remark3,urgencyLevel
from shouwen as s, log as l where '+@sql+' s.status''4'' and s.pkid in
(
select distinct(mid) from log where uid='''+@userID+''' and typeid=''shouwen''
)and l.mid=s.pkid and uid='''+@userID+''' and typeid=''shouwen''
order by s.fileDate desc'
print (@SQL1);
exec (@SQL1)
print ('+++++++++++++++++++++++++++++++++++');   
print (@SQL2);
exec (@SQL2)
select * from #employees
delete from #employees
  从结果来看该存储过程其实就是执行了两条动态SQL,分别存在@SQL1和SQL2。我稍微修改了一下存储过程,加入了一些调试信息,打开统计器。



SET STATISTICS IO on;
SET STATISTICS TIME on;
  执行存储过程,这里由于信息量比较大,我就不贴了,上一张图吧。
DSC0001.png
  
  可见@SQL1的语句耗时并不多,@SQL2资源占用是非常厉害的。其中 Log 表扫描530次,这个表的数据量有257417条,说大不大,说小也不小了,而且还得扫描530次,唉,啥也不说了,而shouwen这张表就小很多也有25000+条记录。
  我将@SQL2的语句整理出来,去掉那个讨厌的 insert into #employees。



select distinct s.parentId,s.pkId,1,s.title,s.comeOrg,s.fileDate,
s.fileName,s.filePath,1,l.optionstatus,s.remark3,urgencyLevel
from shouwen as s,
log as l
where
(s.fileSerialNumber like '%%' or s.title like '%%'
or s.keywords like '%%' or s.fileZi like '%%')
and  s.status'4'
and s.pkid in
(select distinct(mid) from log where uid='glzyf' and typeid='shouwen')
and l.mid=s.pkid and uid='glzyf' and typeid='shouwen'
order by s.fileDate desc  
  看看这个select 语句的执行计划啦。
DSC0002.png
  以下才是重点,两个在Log表上面的“聚集索引扫描”:
DSC0003.png
  无论哪个RDBMS的语句调优,绝大部分的情况下都是将执行计划中的“扫描”转变为“查找”。下一篇讲解如何将“扫描”变为“查找”。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81280-1-1.html 上篇帖子: SQL Server BI Step by Step SSIS 4 下篇帖子: sql server:自定义函数初探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表