首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >server碎片锁问题

server碎片锁问题
EN

Server Fault用户
提问于 2012-10-12 06:20:21
回答 2查看 76关注 0票数 2

在我的车辆跟踪应用程序中,我使用的是sqlServer数据库,该数据库具有一个高度填充和高度访问的表"VehilcePosition",该表存储所有车辆位置。为了显示车辆的最新位置,我必须在dateTime上通过自连接和组函数MAX查询表。我已经在列上了索引,但是读取查询需要一些时间,并获得共享锁,这将阻止表中的插入。由于此表正在更新(插入行)并最频繁地读取。应用程序通常会因为超时异常而停止,因为在读取时使用共享锁,在写入过程中使用排他锁。我需要一个建议,我如何优化我的数据库,以避免这种情况。我使用的是核心i7 PC机(非服务器机),只有将硬件升级到某些服务器机器的解决方案。

EN

回答 2

Server Fault用户

发布于 2012-10-15 13:57:25

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

硬件也不是问题。

最好的解决方案是使用Server的“ReadCommited快照隔离”--这是一个数据库级别设置,在更新行时向读者返回行的最新版本。这往往是这类问题的解决办法。

另一个解决方案是使用表分区,但这是Enterprise (和Developer )特性。使用SQL 2008中的表分区,您可以指定set lock excalation,这将只将锁升级到分区级别。如果您有足够的分区(15,000个允许的),大多数查询不会阻塞。

但是,读取逗号快照隔离是最好的解决方案。

票数 3
EN

Server Fault用户

发布于 2012-10-12 07:42:07

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

您不希望使用锁,请告诉Server不要将锁放在那里。这是个暗示。

我正在使用核心i7 PC (非服务器机),是唯一的解决方案,以升级硬件到一些服务器机器。

顺便提一句,这是关于“通过阅读文档来学习正确使用sql server”的更多内容,用于升级新硬件。例如,NOLOCK作为告诉读取查询不锁定行的一种方式出现在我的脑海中。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/437618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档