3

我在 SQL Server 2012 中有一个大表,它包含大约 3400 万条记录。我有一个批处理程序,每 5 分钟插入/更新一次表,并且我有一个可以随时从表中读取的 Web 应用程序。

每次批处理程序写入表时,都会导致读取速度非常慢。我认为这与隔离级别有关,但我不太喜欢 SQL Server,所以我不知道如何修复它。

对我来说最好的方案是让插入不会阻止读取。是否可以在查询中指定?还是我必须更改读取查询以获取“脏行”?

该应用程序并不依赖于“新鲜”数据,因此如果我可以强制数据库允许脏读,那就没问题了。但我不知道如何实现这一点,或者它是否是更好的解决方案。

4

2 回答 2

1

有一个简单的答案和一个艰难的答案:

如果能开启并使用快照隔离,就很容易解决。这解决了读者的阻塞和一致性问题。

如果你不能这样做,问题可能很难解决,但这里没有足够的信息来回答。

因此,请尝试为读者使用快照隔离,并确保在使用前阅读它。

于 2012-11-24T19:29:53.387 回答
1

你当然不能停止插入/更新加锁,事情很快就会出错。您可以在读取操作上设置隔离级别以表示未提交读取,或者将其指定为选择中的提示。它们只是提示,如果存在丢失数据完整性的风险,而不是简单地返回脏数据(并且有很多陷阱),dbms 将完全正确地忽略它们。您可以做其他事情,但是如果您认真的话,请在其中获得一个sql server dba,这种事情已经超出了天才的业余水平,更不用说新手了。

于 2012-11-24T18:21:39.467 回答