CXPACKET等待型別分析

z_cloud_for_SQL發表於2023-01-03
背景
客戶反饋今天8點鐘開始進入業務高峰期後,資料庫的CPU利用率非常高,基本達到了100%,前端應用也非常慢。懷疑是昨晚業務系統升級導致,請我們緊急協助分析。

現象

登入到SQL專家雲,進入相關時間的活動會話的原始資料頁面,看到很多會話的等待型別是CXPACKET,並且等待時間達到了幾十秒。

檢視具體的SQL語句,發現都很簡單。

分析

首先簡單介紹一下CXPACKET等待型別:當SQL Server進行某些複雜的運算(例如大表或索引的掃描)時,為了加快執行速度,採用多執行緒並行的方式進行,每個執行緒處理一部分資料,最後再進行結果合併,在等待一個或多個執行緒返回結果時就會產生 CXPACKET等待型別,類似的等待型別還有 CXCONSUMER。 對於 複雜的 SQ L語句 並行的方式 可以大幅的 執行時 但是對於簡單的、 高並 的SQL語句, CXP A C KET 等待類 型就會產生嚴重的效能問題。

如此簡單的SQL語句還要使用並行,第一反應就是缺少合適的索引,透過SQL專家雲的智慧分析,在執行計劃中發現行數為1900多萬的表上有缺失索引,而且影響度非常高。

解決

表上建立好索引後, 該語句的執行時間降低到幾百毫秒,CXPACKET等待型別大幅減少,CPU利用率下降到10%以下。

經驗


如果您的資料庫有大量的 CXPACKET等待型別,並且CPU利用率非常高,以下的經驗基本可以幫助您解決問題
  1. 配置最大並行度 (Max Degree of Parallelism)引數,該引數是 例項級別的(2016以後版本中可以對單獨資料庫設定) 。預設是0,對於一個SQL請求,可以使用全部的CPU核數進行並行排程,對於單個SQL請求來說是最好的,但是資料庫是有併發的,就會導致其他的請求沒有CPU資源,所以要在單個語句的執行時間和整體的併發之間取得一個平衡,對於OLTP系統,建議設定成4或者8,對於OLAP系統,可根據實際的併發請求數適當放大。
  2. 建立合適的索引, 一個很 簡單的語句產生 CXPACKET等待,絕大多數原因是沒有合適的索引,建立合適索引後,語句會有幾倍到幾十倍的提升。
  3. 找到高併發的SQL語句分析並行的原因並進行最佳化,避免並行。

北京格瑞趨勢科技有限公司是聚焦於資料服務的高新技術企業,成立於2008年,創始團隊及核心技術人員來自微軟和雅虎。微軟資料平臺金牌合作伙伴,衛寧健康資料平臺戰略合作伙伴。透過產品+服務雙輪驅動的業務模式,14年間累計服務4000+客戶,覆蓋網際網路、市政、交通、電信、醫療、教育、電力、製造業等各個領域。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70023658/viewspace-2930645/,如需轉載,請註明出處,否則將追究法律責任。

相關文章