首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 散發代理 BULK INSERT 等待 RESOURCE_SEMAPHORE 解決方案

     編輯:關於SqlServer

問題現象

交易式複寫環境中,散發代理在套用極小資料量(僅幾十筆)的 BULK INSERT 時卡住,等待類型為 RESOURCE_SEMAPHORE,該 Session 申請記憶體高達 5 GB 以上,DBCC FREEPROCCACHE 無法釋放,重啟服務才能恢復。

根因分析

  • 記憶體授與機制對小批次 BULK INSERT 過度估算所需記憶體。
  • 大量並發或計畫快取汙染導致記憶體授與排隊。
  • SQL Server 2008 R2 SP1 已知問題,後續版本已修正。

緩解與修正措施

  1. 升級至 SQL Server 2008 R2 SP2 / SP3 或更新版本。
  2. 調整 MAXDOP、Memory Grant 相關設定。
  3. 避免在高併發時段執行大量初始化同步。
  4. 啟用追蹤旗標 8048(依版本支援)優化記憶體授與。

關鍵 DMV 查詢

-- 查詢記憶體授與等待
SELECT * FROM sys.dm_exec_query_memory_grants WHERE grant_time IS NULL;

-- 查詢散發代理 Session
SELECT * FROM sys.dm_exec_sessions WHERE program_name LIKE '%Distribution%';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved