WEB开发网
开发学院数据库MSSQL Server SQL Server查询速度缓慢解决办法 阅读

SQL Server查询速度缓慢解决办法

 2009-01-15 10:19:51 来源:WEB开发网   
核心提示: 选择这个并发选项OPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制,使用行版本控制,SQL Server查询速度缓慢解决办法(4),其中的表必须具有某种版本标识符,服务器可用它来确定该行在读入游标后是否有所更改,而且滚动锁被保留到提交之后,以维护

选择这个并发选项OPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制。使用行版本控制,其中的表必须具有某种版本标识符,服务器可用它来确定该行在读入游标后是否有所更改。在SQL Server中,这个性能由timestamp数据类型提供,它是一个二进制数字,表示数据库中更改的相对顺序。

每个数据库都有一个全局当前时间戳值:@@DBTS。每次以任何方式更改带有timestamp列的行时,SQL Server先在时间戳列中存储当前的@@DBTS值,然后增加@@DBTS的值。如果某个表具有timestamp列,则时间戳会被记到行级。服务器就可以比较某行的当前时间戳值和上次提取时所存储的时间戳值,从而确定该行是否已更新。服务器不必比较所有列的值,只需比较timestamp列即可。如果应用程序对没有timestamp列的表要求基于行版本控制的乐观并发,则游标默认为基于数值的乐观并发控制。SCROLL LOCKS这个选项实现悲观并发控制。在悲观并发控制中,在把数据库的行读入游标结果集时,应用程序将试图锁定数据库行。在使用服务器游标时,将行读入游标时会在其上放置一个更新锁。如果在事务内打开游标,则该事务更新锁将一直保持到事务被提交或回滚;当提取下一行时,将除去游标锁。如果在事务外打开游标,则提取下一行时,锁就被丢弃。

因此,每当用户需要完全的悲观并发控制时,游标都应在事务内打开。更新锁将阻止任何其它任务获取更新锁或排它锁,从而阻止其它任务更 新该行。然而,更新锁并不阻止共享锁,所以它不会阻止其它任务读取行,除非第二个任务也在要求带更新锁的读取。滚动锁根据在游标定义的 SELECT 语句中指定的锁提示,这些游标并发选项可以生成滚动锁。滚动锁在提取时在每行上获取,并保持到下次提取或者游标关闭,以先发生者为准。下次提取时,服务器为新提取中的行获取滚动锁,并释放上次提取中行的滚动锁。滚动锁独立于事务锁,并可以保持到一个提交或回滚操作之后。如果提交时关闭游标的选项为关,则COMMIT语句并不关闭任何打开的游标,而且滚动锁被保留到提交之后,以维护对所提取数据的隔离。所获取滚动锁的类型取决于游标并发选项和游标 SELECT 语句中的锁提示。锁提示 只读乐观数值

上一页  1 2 3 4 5  下一页

Tags:SQL Server 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接