Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL并发,多余锁_Sql_Sql Server_Concurrency_Timeout - Fatal编程技术网

MS SQL并发,多余锁

MS SQL并发,多余锁,sql,sql-server,concurrency,timeout,Sql,Sql Server,Concurrency,Timeout,我在ms sql 2000上有一个数据库,一次被数百个用户访问。有大量报告使用reporting services 2005访问同一数据库 当有很多报告在运行,并且有人同时使用数据库时,我们会看到阻塞进程的程度,以至于在这种情况下一段时间后,系统开始给任何事务超时 是否有一种全局方法来最小化阻塞,以便事务可以继续进行。如果更新不经常发生,并且数据库主要用于报告,请使用乐观锁定 SQL Server有一个相当悲观的锁定默认值 如果更新不经常发生并且数据库主要用于报告,则可以使用乐观锁定 SQL S

我在ms sql 2000上有一个数据库,一次被数百个用户访问。有大量报告使用reporting services 2005访问同一数据库

当有很多报告在运行,并且有人同时使用数据库时,我们会看到阻塞进程的程度,以至于在这种情况下一段时间后,系统开始给任何事务超时


是否有一种全局方法来最小化阻塞,以便事务可以继续进行。

如果更新不经常发生,并且数据库主要用于报告,请使用乐观锁定

SQL Server有一个相当悲观的锁定默认值


如果更新不经常发生并且数据库主要用于报告,则可以使用乐观锁定

SQL Server有一个相当悲观的锁定默认值


查看一下就可以开始了。

报告可以使用
和(NOLOCK)


其他可能性是让报表运行数据库的只读副本或运行数据库的数据仓库版本,该版本针对报表需要进行了优化。

报表可以使用
和(NOLOCK)


其他可能性包括让报告运行数据库的只读副本或运行数据库的数据仓库版本,该版本针对报告需要进行了优化。

因为您已经在使用NOLOCK提示并读取报告的未提交隔离级别,调查需要转向即将到来的事务查询。这可能会很深。也许应用程序将事务保持在打开状态的时间过长。也可能是在其他一些查询卷中有很多表扫描或范围扫描,这些扫描可能持有长时间运行事务的共享锁。这些共享锁将阻止您的写入程序

您需要开始查看sp_lock,查看哪些类型的锁是未完成的,查看被阻止的查询试图获取哪些锁,然后检查阻止请求者的查询

如果您不熟悉SQL Server锁定,这将对您有所帮助:


另外,也许您可以描述一下您的磁盘子系统。它可能太小。

因为您已经在使用NOLOCK提示并读取报告的未提交隔离级别,所以调查需要转向即将到来的事务查询。这可能会很深。也许应用程序将事务保持在打开状态的时间过长。也可能是在其他一些查询卷中有很多表扫描或范围扫描,这些扫描可能持有长时间运行事务的共享锁。这些共享锁将阻止您的写入程序

您需要开始查看sp_lock,查看哪些类型的锁是未完成的,查看被阻止的查询试图获取哪些锁,然后检查阻止请求者的查询

如果您不熟悉SQL Server锁定,这将对您有所帮助:


另外,也许您可以描述一下您的磁盘子系统。它可能太小了。

谢谢大家的支持。我们所做的是创建一个新的数据库,每小时执行一次日志传送过程,以保持与真实数据库的同步。不需要实时数据的报告指向该数据库,而需要实时数据的报告受到限制,因此只有少数人可以访问它们。这种方法的缺点是,数据将长达一小时不同步,我们只需要为此目的创建一个新服务器。此外,当loggshipping过程运行时,每个连接都会在很短的时间内断开,但真正长的过程或报告可能会出现问题。在此之后,我将验证报告中的查询,以便了解可以优化的内容。谢谢,我会把这个网站推荐给整个IT部门。

谢谢大家的支持。我们所做的是创建一个新的数据库,每小时执行一次日志传送过程,以保持与真实数据库的同步。不需要实时数据的报告指向该数据库,而需要实时数据的报告受到限制,因此只有少数人可以访问它们。这种方法的缺点是,数据将长达一小时不同步,我们只需要为此目的创建一个新服务器。此外,当loggshipping过程运行时,每个连接都会在很短的时间内断开,但真正长的过程或报告可能会出现问题。在此之后,我将验证报告中的查询,以便了解可以优化的内容。谢谢,我会把这个网站推荐给整个IT部门。

我们要解决的问题是,必须制作大量的报告以实时获取最新数据。这让复制成为一个让人头疼的问题。您对“最新”的定义可能意味着编写数据的人必须等待—毕竟,他们可能会使报告无效……我们要解决的问题是,必须使报告中的一部分实时获得最新数据。这使复制成为keepup的一个难题。您对“最新”的定义可能意味着编写数据的人必须等待—毕竟,他们可能会使报告无效。。。