Ssis
什麼可能導致 SSIS 執行 SQL 任務“滯後”?
最近我注意到我的 ETL 過程中將數據載入到暫存區的部分有時需要更長的時間,有時需要更短的時間。
通過以下查詢(在集成服務目錄數據庫中執行),我比較了兩個不同的執行並發現重新創建表語句需要更長的時間(有時也是載入部分,但我認為主要問題是這個) . 這是比較不同執行的查詢:
select es1.execution_path, es1.execution_duration as es1dura, es2.execution_duration as es2dura, (es2.execution_duration * 1.0) / es1.execution_duration * 100 from catalog.executable_statistics es1 join catalog.executable_statistics es2 on es1.execution_path = es2.execution_path where es1.execution_id = 239 and es2.execution_id = 10290 and es1.execution_path like '%create table%' order by --(es2.execution_duration * 1.0) / es1.execution_duration * 100 desc es1.execution_path
結果的一部分是這樣的:
這對應於 ETL 的以下部分:
請不要介意螢幕截圖中的額外綠線,這只是 Visual Studio 中的混亂格式。沒有更多的任務並行執行,並且該作業在午夜左右執行,同時沒有其他作業在數據庫上執行。
這些任務非常簡單。例如,其中一項
Recreate table
任務如下所示:IF EXISTS ( SELECT * FROM sys.tables WHERE name = 'admin_perso_abteilung' ) DROP TABLE admin_perso_abteilung GO CREATE TABLE admin_perso_abteilung ( [id] int, [perso_abteilung] nvarchar(50) ) GO
無論如何,問題是,由於查詢結果表明,在並行執行重新創建表語句之前,整個過程被卡在那裡一段時間,這可能是什麼原因造成的?我可以進一步檢查什麼以縮小問題範圍?
由於我更像是開發人員而不是管理員,我在這裡有點迷失,請指導我一點。謝謝。
(長於評論……所以發佈為答案)
- 我建議你不要每次都創建表。**您可以截斷表格。**這將更有效率 - 除非我錯過了您在問題中沒有描述的一些依賴關係。
- 為數據流任務設置
DelayValidation
屬性。True
- 為單個數據流組件設置
ValidateExternalMetadata
為。False
- 為了加快數據載入速度,您可以在此處參考我的回答。
您的 drop/create 語句有時會互相阻塞。如前所述,您可以截斷表,但是一個相當簡單的測試是按順序執行刪除/創建任務,然後並行載入數據。
如果您迫切希望了解可變時間背後的詳細原因,請按照建議進行操作並執行跟踪或 XE 會話以擷取執行期間的鎖定和阻塞。