在我们的webapp中,我们运行了大量查询。他们中的大多数人都在阅读数据,但可能会有一些高优先级的更新查因为,我们要取消读取查询,但在使用KILL时,我希望读取查询在收到取消时返回某些数据集结果或执行结果。
我的目的是模仿C程序中信号的行为,在接收到杀死信号时调用信号处理程序。
是否有任何方法可以为SP定义异步KILL信号处理程序?
答案 0 :(得分:0)
这不是一个经过充分测试的答案。但它不仅仅是一个评论。
一个是脏读(使用nolock)。 这部分是我经常测试的。 构建一个大型可扩展的应用程序,您需要诉诸于此并进行管理。 脏读不会阻止更新。 你可以得到 - 脏读。 很多人认为脏读可能会导致数据损坏。 如果你正在向约翰逊更新史密斯,那么选择不会变得更加平静。 选择将获得史密斯,它将立即陈旧。 但是,如果采用读锁定怎么会更糟? read get smith并阻止更新。 清除读锁后,它会更新。 我认为阻止更新也是陈旧的数据。
如果您正在使用阅读器,我认为您可以将相同的取消令牌传递给每个选择,然后只取消一个令牌。
但是如果在读取行之前可能不会处理CancellationToken,那么它可能无法取消查询尚未返回任何行的长时间运行的查询。
DbDataReader.ReadAsync Method (CancellationToken)
或者如果您不使用读者,请查看
SqlCommand.Cancel
获取取消以返回备用数据。我怀疑SQL会这样做。