【发布时间】:2019-11-12 23:29:57
【问题描述】:
我有近百个服务向我们的消息队列发送数据。此数据由 Java 服务处理并加载到我们的 SQL Server 中的导入表中。加载数据后,会执行一些将这些数据加载到适当表中的过程。最近我们不得不添加新的服务读取和加载消息实例。有人建议我们应该将数据库隔离模型更改为快照(我对数据库不太习惯,所以我只是按照建议的方式进行了操作)。不幸的是,我们遇到了很多问题,所以我们不得不复制导入表和前面提到的过程——这当然导致了我目前正在尝试清理的巨大混乱。
我目前的理解是,建议使用快照隔离,以便服务可以使用同一个表工作,而不会出现我们遇到的问题和错误,这些问题和错误源于我们(开发人员)方面的一些误解或不正确的实施。
我的问题是:是否有可能,如果是,那么如何将数据批量加载到单个表中,将其转换并加载到目标表中(一切都是并行的,所以可以说有 3 或 4 个服务在做)以不会导致死锁或数据丢失的方式。
我们的 SQL Server 是:Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64)
我知道的不多,但我知道例如我们不支持分区或在线索引创建 - 也许这会有所帮助。
【问题讨论】:
标签: sql-server concurrency bulkinsert isolation-level