2012-08-22 29 views
0

我們每天都有一個SSIS包運行將數據導入數據庫。同時插入數據和查詢數據的標準協議

有時候人們在同一時間查詢數據庫。

加載(數據導入)超時,因爲特定表上有表鎖。

同時插入數據和查詢數據的標準協議是什麼?

+0

這一切都取決於數據和業務規則。沒有標準的協議。這表示拿桌鎖是非常極端的。他們應該有一個很好的理由。當我懷疑(或期望)在那段時間內更新表格的唯一過程時,我只需要表鎖。頁面鎖定是一種更好的性能組合,無需關閉整個表格。 – Paparazzi

+0

@Blam你是說SSIS過程不一定需要表鎖嗎? –

+0

對不起,我讀它的方式是通過除包以外的其他東西。所以表鎖是來自包裹?如果是的話,我會刪除我的評論。 – Paparazzi

回答

2

有幾種策略。

一種方法是設計ETL管道以儘量減少鎖定時間。所有數據都在暫存表中準備好,然後在完成後使用快速分區切換操作進行切換,請參閱Transferring Data Efficiently by Using Partition Switching。這種方式ETL塊讀取onyl很短的時間。它的優勢在於讀取一次可以看到所有的ETL數據,而不是中間階段。缺點是執行困難。

另一種方法是在數據庫中啓用快照隔離和/或讀取已提交的快照,請參閱Row Versioning-based Isolation Levels in the Database Engine。這種方式不再阻止ETL鎖定的鎖定。缺點是資源消耗,硬件必須能夠驅動額外的行版本加載。

另一種方法是將數據查詢移動到只讀備用服務器,例如,使用log shipping

2

首先你需要弄清楚這些鎖是從哪裏來的。使用鏈接查看是否有鎖。

How to: Determine Which Queries Are Holding Locks

如果有持有表鎖,然後沒有什麼可以做的另一種方法。

您確定錯誤是「無法獲取表鎖」。如果這樣看待更改您的SSIS包不使用表鎖。