Sql server 查询报告大量秒数“已锁定”

Sql server 查询报告大量秒数“已锁定”,sql-server,performance,stored-procedures,Sql Server,Performance,Stored Procedures,这是一个非常模棱两可的问题,因为我甚至不确定我在问什么,而是在寻求指导 基本上,一个系统在几周前就投入使用了。DBA向我发送了一个屏幕截图,它是由一个名为“Fog Light”的应用程序创建的,我相信它可以监视性能。它表明,大多数存储的进程被锁定的“持续时间”很低,大约每小时1000秒。然而,有一个报告的时间是73000秒 仅这个数字对我来说意义不大。也许这个过程被大量使用了?和其他人相比?但是,当我们执行它时,需要4秒钟才能在生产数据上运行。考虑到它在做什么,还不错。他们的DBA说这是可以接受

这是一个非常模棱两可的问题,因为我甚至不确定我在问什么,而是在寻求指导

基本上,一个系统在几周前就投入使用了。DBA向我发送了一个屏幕截图,它是由一个名为“Fog Light”的应用程序创建的,我相信它可以监视性能。它表明,大多数存储的进程被锁定的“持续时间”很低,大约每小时1000秒。然而,有一个报告的时间是73000秒

仅这个数字对我来说意义不大。也许这个过程被大量使用了?和其他人相比?但是,当我们执行它时,需要4秒钟才能在生产数据上运行。考虑到它在做什么,还不错。他们的DBA说这是可以接受的,但是他们关心的是它的锁定持续时间

这是什么意思?我从哪里开始寻找问题?该过程执行5个联合,并将结果集选择到临时表中。然后它对Temp执行一个简单的过滤,并返回结果


对不起,我没有更多的信息-我不知道从哪里开始寻找-和。。这甚至是一个问题吗?

我要做的第一件事是在有问题的存储过程的顶部添加以下行

将事务隔离级别设置为“读取未提交”

尝试筛选上的msdn页面

一般来说,这意味着您不必等待其他事务完成。 但以下是READ UNCOMMITTED的亮点

指定语句可以读取已被其他事务修改但尚未提交的行

在读取未提交级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。读取未提交的事务也不会被独占锁阻止,独占锁将阻止当前事务读取已修改但未由其他事务提交的行。设置此选项后,可以读取未提交的修改,这些修改称为脏读。在事务结束之前,数据中的值可以更改,行可以在数据集中出现或消失。此选项的效果与在事务中所有SELECT语句的所有表上设置NOLOCK相同。这是隔离级别中限制最少的


另外,我保证,如果您说SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED to someone,他们会认为您是个天才。

我要做的第一件事是在有问题的存储过程顶部添加以下行

将事务隔离级别设置为“读取未提交”

尝试筛选上的msdn页面

一般来说,这意味着您不必等待其他事务完成。 但以下是READ UNCOMMITTED的亮点

指定语句可以读取已被其他事务修改但尚未提交的行

在读取未提交级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。读取未提交的事务也不会被独占锁阻止,独占锁将阻止当前事务读取已修改但未由其他事务提交的行。设置此选项后,可以读取未提交的修改,这些修改称为脏读。在事务结束之前,数据中的值可以更改,行可以在数据集中出现或消失。此选项的效果与在事务中所有SELECT语句的所有表上设置NOLOCK相同。这是隔离级别中限制最少的


此外,我保证,如果您说SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED to某人,他们会认为您是一个天才。

我没有使用FogLight-大概这是阻塞等待锁的时间?在哪种情况下,它也会显示拦截器?不,我只显示了一个进程列表,最上面的一个进程持续时间为73000小时。所以,我认为这意味着它被另一个进程锁定了,还是被锁在了储物柜里?在过去的一个小时内持续了73000秒。如果能弄清楚这份报告是针对阻拦者还是被阻拦者,那就好了。还要检查您连接的隔离级别。谢谢Martin-我明天会问这些问题。正是我要找的。谢谢。好的,我被告知隔离级别是“读取已提交”。我没有使用雾灯-大概这是它在等待锁时被阻塞的时间?在哪种情况下,它也会显示拦截器?不,我只显示了一个进程列表,最上面的一个进程持续时间为73000小时。所以,我认为这意味着它被另一个进程锁定了,还是被锁在了储物柜里?在过去的一个小时内持续了73000秒。如果能弄清楚这份报告是针对阻拦者还是被阻拦者,那就好了。还要检查您连接的隔离级别。谢谢Martin-我会问的
明天再回答这些问题。正是我要找的。谢谢。好的,我被告知隔离级别为“读取已提交”。