You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse专用SQL池并行插入staging表单任务运行问题咨询

你遇到的并行INSERT串行执行问题确实是锁机制导致的。

Azure Synapse专用SQL池的HEAP表默认会对写入操作触发锁升级,当单批次写入数据量达到阈值时,会将行/页级锁升级为全表排他锁,同一时间仅允许一个会话持有该锁,其余写入任务会进入挂起状态。你当前配置的500 DWU对应最高支持20个并发查询槽位,工作负载分类器的资源配置也足够支撑并行执行,瓶颈完全来自HEAP表的表锁阻塞。

可实施的调整方案

  • 修改目标staging表的存储结构
    优先将HEAP表改为聚集列存储索引(CCI)表,Synapse对CCI表的并行写入支持更优,默认不会触发全表排他锁,多个会话可同时写入不同的行组,是staging表的最优存储选择。修改参考语句:
    -- 重建表为CCI+轮询分布(可根据业务查询逻辑调整为哈希分布)
    CREATE TABLE [staging].[SrcChroniquesPGA_new]
    WITH (
        CLUSTERED COLUMNSTORE INDEX,
        DISTRIBUTION = ROUND_ROBIN
    )
    AS SELECT * FROM [staging].[SrcChroniquesPGA];
    
    -- 替换原表
    RENAME OBJECT [staging].[SrcChroniquesPGA] TO [SrcChroniquesPGA_old];
    RENAME OBJECT [staging].[SrcChroniquesPGA_new] TO [SrcChroniquesPGA];
    
  • 保留HEAP表时关闭锁升级
    如果需要保留HEAP表结构,可关闭表的锁升级机制,允许会话持有行/页级锁实现并行写入,仅适合单批次插入行数小于65536的场景:
    ALTER TABLE [staging].[SrcChroniquesPGA] SET (LOCK_ESCALATION = DISABLE);
    
  • 优化存储过程执行逻辑
    现有逻辑中先将全量JSON加载到nvarchar(max)变量的操作会额外占用内存,拉长锁持有时间,可直接关联源表减少执行耗时:
    ALTER PROC [staging].[usp_stg_load_SrcChroniquesPGA] @file_name [varchar](100) AS
    BEGIN
    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 [staging].[xml_to_json] t
        CROSS APPLY OPENJSON( t.json_file ,'$') 
        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',
            [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
        WHERE t.[file_name] = @file_name
    END
    
  • 调整ADF并行度配置
    完成上述锁优化后,可将ADF ForEach的最大并行批次调整为12~16,避免过高并行度带来的额外调度开销,充分利用DWU资源。

内容的提问来源于stack exchange,提问作者SniperPro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:04