我们每天都运行SSIS包将数据导入数据库。
有时候人们会同时查询数据库。
加载(数据导入)超时,因为特定表上有表锁。
同时插入数据和查询数据的标准协议是什么?
答案 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包更改为不使用表锁。