如何避免同时存储和检索数据时发生数据库死锁?
How to avoid database-deadlock occurring while storing & retrieving data same time?
我们开发了一个 windows 应用程序,该应用程序像常规应用程序一样工作;收集大量信息、对其进行处理并生成报告...为了存储数据,我们使用了 SQL 服务器。对于报告,我们使用 Crystal 报告。
我们办公室有超过 150 名员工在使用该应用程序。他们中的大多数是数据输入操作员。因此,当数据存储假设任何人试图生成报告时,应用程序停止工作并发生死锁。创建了用于存储信息的不同线程和用于检索信息(或生成报告)的不同线程。
所以问题是如何避免死锁情况,因为存储数据和生成报告是连续的过程,不能要求先存储数据,然后对其进行处理,然后生成报告...
如何同时做这两件事,即存储和检索数据?
有什么办法不至于死锁吗?
欢迎任何与此相关的建议或查询..
更新
在这种情况下,使用 Views 有用吗?
谢谢!!
- 我必须使用不同的数据库,一个用于接收数据和处理,另一个用于保存报告数据。
- 允许脏读的业务规则,然后创建一个快照,其中数据从插入的数据同步到报告数据库。
- 业务规则没有脏读,然后在插入数据时同步并直接插入到报告数据库中。
- 填充的 table 不应是用于报告的
- 您可以进行交易,但这会使报告的等待时间更长。
我会在您的 sql 服务器中打开 Read Committed Snapshot Isolation
,这样作者就不会阻止读者。但是读者在提交之前无法读取写入的记录。
换句话说,不要阻塞读者,也不要做脏读
您可以试试这个来避免数据库死锁。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
默认情况下,对于 ODBC 连接,Crystal Reports 使用驱动程序支持的最高数据库隔离级别,即 Read Committed。您可以添加注册表项以指示 Crystal 使用较低的隔离级别。
这是一份提供完整说明的文档:
1216415 - How to change the isolation level for an ODBC connection in Crystal Reports?
我们开发了一个 windows 应用程序,该应用程序像常规应用程序一样工作;收集大量信息、对其进行处理并生成报告...为了存储数据,我们使用了 SQL 服务器。对于报告,我们使用 Crystal 报告。
我们办公室有超过 150 名员工在使用该应用程序。他们中的大多数是数据输入操作员。因此,当数据存储假设任何人试图生成报告时,应用程序停止工作并发生死锁。创建了用于存储信息的不同线程和用于检索信息(或生成报告)的不同线程。
所以问题是如何避免死锁情况,因为存储数据和生成报告是连续的过程,不能要求先存储数据,然后对其进行处理,然后生成报告...
如何同时做这两件事,即存储和检索数据? 有什么办法不至于死锁吗?
欢迎任何与此相关的建议或查询..
更新
在这种情况下,使用 Views 有用吗?
谢谢!!
- 我必须使用不同的数据库,一个用于接收数据和处理,另一个用于保存报告数据。
- 允许脏读的业务规则,然后创建一个快照,其中数据从插入的数据同步到报告数据库。
- 业务规则没有脏读,然后在插入数据时同步并直接插入到报告数据库中。
- 填充的 table 不应是用于报告的
- 您可以进行交易,但这会使报告的等待时间更长。
我会在您的 sql 服务器中打开 Read Committed Snapshot Isolation
,这样作者就不会阻止读者。但是读者在提交之前无法读取写入的记录。
换句话说,不要阻塞读者,也不要做脏读
您可以试试这个来避免数据库死锁。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
默认情况下,对于 ODBC 连接,Crystal Reports 使用驱动程序支持的最高数据库隔离级别,即 Read Committed。您可以添加注册表项以指示 Crystal 使用较低的隔离级别。
这是一份提供完整说明的文档: 1216415 - How to change the isolation level for an ODBC connection in Crystal Reports?