SQL服务器碎片locking问题

在我的车辆跟踪应用程序,即时通讯使用sqlServer数据库,其中有一个高度填充和高度访问表“VehilcePosition”,存储所有车辆的位置。 为了显示车辆的最新位置,我必须通过自我join和date时间组函数MAX查询表。 我已经把索引放在列上,但是读取查询需要一些时间,并获得共享锁,这会阻止表中的插入。 当这个表正在更新(INSERTION of rows)和读取频率最高。 由于READ期间的共享locking和写入期间的独占locking,应用程序通常会由于超时exception而停止。 我需要一个build议,我怎么可以优化我的数据库,以避免这种情况。 即时通讯使用Core i7 PC(不是服务器机器),是否有唯一的解决scheme升级硬件一些服务器机器。

NOLOCK的问题是你偶尔会得到错误的答案。

硬件也不是问题。

最好的解决scheme是使用SQL Server的“读取已恢复快照隔离”这是一个数据库级别的设置,在更新行的同时向读者返回最新版本的行。 这通常是解决这类问题的方法。

另一个解决scheme是使用表分区,但是这是一个企业版(和开发版)function。 使用SQL 2008中的表分区,您可以指定设置locking扩展Auto,这会将锁升级到分区级别。 如果你有足够的分区(15,000允许),大多数查询不会阻止。

但读取提交快照隔离是最好的解决scheme。

但读取查询需要一些时间并获取共享锁,这会阻止表中的插入

你不想锁,告诉SQL Server不要把锁放在那里。 这是一个暗示。

我正在使用Core i7 PC(不是服务器机器),是否只有将硬件升级到一些的解决scheme
服务器机器。

顺便说一句,这更多的是“学习正确使用sql server通过阅读文档”,即你升级新的硬件。 作为一种告诉读取查询不要locking行的方法,NOLOCK就是一个例子。