Ssis

什麼可能導致 SSIS 執行 SQL 任務“滯後”?

  • March 21, 2016

最近我注意到我的 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 會話以擷取執行期間的鎖定和阻塞。

引用自:https://dba.stackexchange.com/questions/122791