0

每天我们都会运行一个 SSIS 包来将数据导入数据库。

有时人们同时查询数据库。

加载(数据导入)超时,因为特定表上有表锁。

同时插入数据和查询数据的标准协议是什么?

4

2 回答 2

2

首先你需要弄清楚这些锁是从哪里来的。使用链接查看是否有任何锁。

如何:确定哪些查询持有锁

如果您有另一个持有表锁的进程,那么您无能为力。

您确定错误是“无法获得表锁”。如果是这样,请考虑将您的 SSIS 包更改为不使用表锁。

于 2012-08-22T20:33:53.060 回答
2

有几种策略。

一种方法是设计 ETL 管道以最小化锁定时间。所有数据都在暂存表中准备好,然后在完成后使用快速分区切换操作进行切换,请参阅使用分区切换有效地传输数据。这样,ETL 块会在很短的时间内读取 onyl。它还有一个优点是读取可以一次看到所有 ETL 数据,而不是中间阶段。缺点是实施困难。

另一种方法是在数据库中启用快照隔离和/或读取提交的快照,请参阅数据库引擎中基于行版本控制的隔离级别。这种方式读取不再阻塞在 ETL 持有的锁后面。缺点是资源消耗,硬件必须能够驱动行版本控制的额外负载。

还有一种方法是将数据查询移动到只读备用服务器,例如。使用日志传送

于 2012-08-22T20:23:29.703 回答