这是一个非常含糊不清的问题,因为我甚至不确定我在问什么,但寻找指导。
基本上,一个系统几个星期后就上线了。 DBA给我发了一个屏幕截图,它是由一个名为'Fog Light'的应用程序创建的,我相信它可以监控性能。它表明大多数存储过程都具有较低的“持续时间”被锁定,大约每小时1000秒。但是,有一个报告73,000秒。
对我而言,这个数字并不多。也许proc被大量使用?与其他人相比?但是,当我们执行它时,运行生产数据需要4秒。考虑到它在做什么,也不算太糟糕。他们的DBA说这是可以接受的,但是关心的是它所针对的锁定持续时间的数量。
这是什么意思?我会从哪里开始寻找问题? proc执行5个UNIONS,并将结果集选择到#temp表中。然后它在#Temp上做一个简单的过滤器,并返回结果。
抱歉,我没有太多信息 - 我不确定从哪里开始寻找 - 而且......它甚至是一个问题?
答案 0 :(得分:0)
我要做的第一件事是将以下行添加到有问题的存储过程的顶部。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
尝试通过isolation levels上的msdn页面进行筛选。
一般来说,这意味着您不必等待其他交易完成。 但这里是READ UNCOMMITTED的重点
指定语句可以读取已被其他事务修改但尚未提交的行。
在READ UNCOMMITTED级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。 READ UNCOMMITTED事务也不会被独占锁阻止,这会阻止当前事务读取已被修改但未被其他事务提交的行。设置此选项后,可以读取未提交的修改,这些修改称为脏读。可以更改数据中的值,并且在事务结束之前,行可以在数据集中显示或消失。此选项与在事务中所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是隔离级别中限制最少的。
此外,我保证,如果您向某人说“设置交易隔离级别读取不安”,他们会认为您是GENIUS。