我正在使用具有 500 DWU 的專用 SQL 池突觸。ADF 在分配給 largec 組且具有 above_normal 重要性的作業負載分類器下運行:
我在 ADF foreach 回圈中有一個存盤程序,foreach 回圈上的活動并行運行(最多并行 20 個批次計數)。
存盤程序是從 OPENJSON 查詢(??包含 json 的表在復制的突觸表上)到暫存 HEAP 突觸表的 INSERT INTO 陳述句。
問題是當我查詢動態視圖以監視在突觸上運行的查詢時,我看到一次只運行一個 INSERT 陳述句,所有其他陳述句都被掛起。
這是鎖問題嗎?是他們對查詢進行更改以同時執行多個插入的內容。

這是回圈內的存盤程序:
CREATE PROC [staging].[usp_stg_load_SrcChroniquesPGA] @file_name
[varchar](100) AS
BEGIN
DECLARE @json nvarchar(max) = (select json_file from [staging].
[xml_to_json] where [file_name] = @file_name) ;
INSERT INTO [staging].[SrcChroniquesPGA]
select
@file_name as [NomFichier]
,[DatePublication],[NomSource],[Pas],[Type],[DateChronique]
,CASE WHEN Pas = 'H' AND DATEPART(hh, DateChronique) BETWEEN 0 AND 5 THEN DATEADD(day, -1, CAST(DateChronique AS DATE))
ELSE CAST(DateChronique AS DATE) END
AS [DateJourneeGaziere]
,[HorodateMaj],[Qualite]
,[ValeurChronique],[DateStatut],[HorodateMajStatut],[ValeurStatut]
from OPENJSON( @json ,'$')
WITH (
[DatePublication] [datetime2](7) '$.Transaction.HorodateInfos',
[PGA] nvarchar(MAX) '$.PGA' as JSON
) j
CROSS APPLY OPENJSON(PGA)
WITH (
[NomSource] [nvarchar](256) '$.PCEIdentification.NomSource',
[PGAStatut] nvarchar(MAX) '$.PGAStatut' as JSON,
[PGAChronique] nvarchar(MAX) '$.PGAChronique' as JSON
)
CROSS APPLY OPENJSON(PGAChronique)
WITH (
[Pas] [nvarchar](256) '$.Pas',
[Type] [nvarchar](256) '$.Type',
--[Unite] nvarchar(100) '$.Unite',
[Mesure] nvarchar(MAX) '$.Mesure' as JSON
)
CROSS APPLY OPENJSON([Mesure])
WITH (
[DateChronique] [datetime2](7) '$.Date',
[ValeurChronique] [float] '$.Valeur',
[HorodateMaj] [datetime2](7) '$.HorodateMaj',
[Qualite] [nvarchar](256) '$.Qualite'
) msr
OUTER APPLY (
SELECT * FROM OPENJSON(PGAStatut)
WITH (
[DateStatut] [datetime2](7) '$.Date',
[HorodateMajStatut] [datetime2](7) '$.HorodateMaj',
[ValeurStatut] [nvarchar](256) '$.Valeur'
)
WHERE [DateStatut] = [DateChronique]
) jj
END
uj5u.com熱心網友回復:
最好的方法是去掉 ADF 中的 for 回圈,并將其更改為決議所有 JSON 行的單個插入陳述句。這應該會大大提高性能并消除對單個目標表的鎖定。我相信鎖定是根本的阻礙。而且在 Synapse 中,大插入比數千個小插入執行得更好。
我建議你重構你的INSERT陳述。而不是FROM OPENJSON( @json ,'$')嘗試FROM staging.xml_to_json CROSS APPLY OPENJSON(json_file)……您應該嘗試在一次插入中加載所有檔案路徑。
uj5u.com熱心網友回復:
因此,根據檔案, DWU 500 有 20 個并發查詢、20 個并發槽,而更大的 c 需要 4 個槽。因此,您可以預期的最大并發數為 5,并且不包括任何其他正在運行的查詢。
我建議降低資源類或嘗試靜態資源類。您也可以嘗試提高 DWU,但顯然這更昂貴。試驗你的作業量,看看什么效果最好。奇怪的是,您一次只運行一個查詢 - 檢查您的 For Each 活動未在順序模式下運行,并使用 DMV (sys.dm_pdw_exec_requests) 來檢查其他正在執行和排隊的查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/341811.html
