两台服务器对单个共享数据库 c# 运行相同的查询



我有两台服务器运行相同的查询,检查单个共享数据库中的特定值。如果查询找到这些值,它将更改这些值。同时,其他服务器可能会运行相同的查询,并且在尝试更改信息时会出现某种冲突。

问:如何最好地配置服务器不会同时运行其查询并保证它们不会发生冲突?

数据库会自动为您处理此问题。它们使用来确保一次只有一个查询访问特定数据。这些锁不必应用整个表;根据查询和事务类型,还可以使用每行锁。当您有两个应组合在一起的查询(例如选择和更新(时,事务将确保在两个查询完成之前不会释放第一个查询中的锁。

通常,数据库旨在快速提供查询(并释放其锁(,以便大约同时到达的两个查询将按顺序处理,对最终用户几乎没有可观察到的延迟。对于需要锁定大量数据、需要长时间运行的查询,或者当两个事务开始锁定不相关的数据但后来都需要另一个事务锁定数据时,锁可能会导致问题。这就是所谓的僵局。

锁的问题可以通过调整事务隔离级别来控制。但是,弄乱隔离级别通常是错误的。大多数情况下,默认值会满足您的需求,并且在不完全了解您正在做什么的情况下弄乱隔离级别可能会使情况变得更糟,并允许查询返回过时或错误的数据。

事务和隔离级别是你的朋友。您需要设置隔离级别,以便它们不会干扰。

有关需要设置的级别的指导,请参阅 https://msdn.microsoft.com/en-gb/library/ms173763.aspx。

您需要

在数据库(例如server_id(中有一个额外的列,并将查询编写为:

select * from database where server_id = 1 --for the first server
select * from database where server_id = 2 --for the second server

最新更新