我有一个问题,即人们不能使用intranet应用程序来查询与我从SQL Server Management Studio中查询的表相同的表。他们必须等待,直到查询完成,这可能会持续大约10分钟。
我已经reduced the deadlock-priority of SSMS了,但现在似乎对延迟没有影响。
我认为SQL-Server应该可以并行处理这两个查询,或者至少可以选择降低SSMS的优先级。那么,有什么方法/选项可以确保某些进程(如w3sp.exe )在处理器时间内获得高优先级,而其他“内部”(与SSMS相关的查询)获得低优先级呢?服务器一点也不忙,只占用了6%的CPU,为什么会这样呢?另外,为什么SQL-Server似乎会锁定查询到的表,而不做任何更改(更新/删除)。我能避免这种情况吗?
提前谢谢你。
发布于 2011-06-14 17:13:57
您可以降低由intranet应用程序和SSMS查询中的一个或两个执行的某些/全部只读操作的事务隔离级别。但如果这样做,就必须小心脏读(从表中读取一行或多行,这些行后来被证明不是由它们所拥有的事务提交的)之类的事情。
SQL Server中没有针对连接的优先级设置(除了您已经提到的自愿成为死锁牺牲品之外)。操作系统级别设置(例如,进程优先级)不会对SQL Server产生任何影响-它只关心锁,以及这些锁在不同连接之间是否兼容。
您可以使用SET TRANSACTION ISOLATION LEVEL语句来更改连接级别的隔离,也可以在语句中的各个表上使用locking hints (比如WITH NOLOCK),以便更精细地控制所采用的锁。
但是,请注意,如果您正在运行DML语句(例如INSERT或DELETE),这些语句仍然需要使用排它锁,因此,如果您的intranet应用程序希望查询相同的表,它必须等待DML语句完成,或者必须修改它以重新启动其隔离。没有办法从您自己的查询中指定其他连接的行为-它们必须选择自己的隔离设置。
https://stackoverflow.com/questions/6341357
复制相似问题