关于插入数据和同时查询数据的标准协议

时间:2012-08-22 19:52:52

标签: sql sql-server sql-server-2008 tsql ssis

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

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

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

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

2 个答案:

答案 0 :(得分:2)

有几种策略。

一种方法是设计ETL管道以最小化锁定时间。所有数据都在登台表中准备好,然后在完成后使用快速分区切换操作切换,请参阅Transferring Data Efficiently by Using Partition Switching。这样,ETL块可以在很短的时间内读取onyl。它还具有以下优点:读取一次查看所有ETL数据,而不是中间阶段。缺点是难以实施。

另一种方法是在数据库中启用快照隔离和/或读取提交的快照,请参阅Row Versioning-based Isolation Levels in the Database Engine。这种方式不再阻止ETL持有的锁定。缺点是资源消耗,硬件必须能够驱动行版本控制的附加负载。

另一种方法是将数据查询移动到只读备用服务器,例如。使用log shipping

答案 1 :(得分:2)

首先,您需要确定这些锁的来源。使用链接查看是否有任何锁定。

How to: Determine Which Queries Are Holding Locks

如果你有另一个持有表锁的进程,那么你可以做的不多。

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