【发布时间】:2019-03-26 05:20:39
【问题描述】:
我们开发了一个windows应用程序,该应用程序使用起来就像普通应用程序一样工作;收集大量信息,对其进行处理并生成报告……为了存储我们使用 SQL Server 的数据。对于报表,我们使用 Crystal Reports。
我们办公室有 150 多名员工在使用该应用程序。他们中的大多数是数据输入操作员。因此,当数据存储假设有人尝试生成报告时,应用程序停止工作并发生死锁。为存储信息创建了不同的线程,为检索相同的信息(或生成报告)创建了不同的线程。
所以问题是如何避免死锁的情况,因为存储数据和生成报告是一个连续的过程,不能要求先存储数据,然后对其进行处理,然后生成报告......
如何同时做这两件事,即存储和检索数据? 有什么办法不会发生死锁?
欢迎任何与此相关的建议或查询..
更新
在这种情况下,使用 Views 有用吗?
谢谢!!
【问题讨论】:
-
真正的问题是,谁 收藏了这个问题
-
如何使用DB事务来防止脏读/写和死锁?
-
数据库死锁是一个潜在问题和修复的兔子洞。有很多关于可能的原因和可能的解决方案的信息。但是,我们无法为您提供可靠的建议或使用如此多的信息解决您的问题。因此这个问题太宽泛了
-
第一个答案是良好的索引 :) 服务器根据它使用的索引知道要锁定多少数据。例如,如果您的报告基于某个日期的所有记录,那么如果您在该日期有索引,则服务器将能够准确锁定这些记录。如果您没有同时按日期写入相同的记录,则应避免出现问题。如果您无法创建明确区分记录读取和写入的索引,则有一些方法可以强制读取忽略任何锁定 - 如果您愿意报告可能刚刚更改的数据。
-
你绝对 100% 在谈论死锁而不是正常的标准锁。死锁仅在引擎检测到两个(或更多)进程由于持有第二个进程需要访问的锁而永远无法完成时发生,反之亦然。有时它可以像检查 SQL 代码/存储过程的逻辑一样简单,并确定您是否真的需要对“其他”对象进行锁定。绝对不是说这是“如何解决所有死锁”,但它可能是一种选择。
标签: c# sql-server windows winforms database-deadlocks