Max Degree of Parallelism最大并行度配置--缓解CPU压力
配置 max degree of parallelism 服務(wù)器配置選項
https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-ver15
由于公司的業(yè)務(wù)在急速增長中,發(fā)現(xiàn)數(shù)據(jù)庫服務(wù)器已經(jīng)基本撐不住這么多并發(fā)。一方面,要求開發(fā)人員調(diào)整并發(fā)架構(gòu),利用緩存減少查詢。一方面從數(shù)據(jù)庫方面改善并發(fā)。數(shù)據(jù)庫的并行度可設(shè)置如下:
1)cost threshold for parallelism:數(shù)據(jù)庫引擎在編譯的時候,預(yù)估執(zhí)行計劃的cost;若此cost消耗超過cost threshold for parallelism設(shè)置的值;sqlserver就會使用并行執(zhí)行計劃。
2)max degree of parallelism:并行執(zhí)行計劃最多能使用多少線程并行執(zhí)行語句。默認(rèn)值為0
在OLTP環(huán)境中,會存在大量的并發(fā)查詢,因此會存在以下兩種情況:
1)單個查詢的并發(fā)過高,可能會導(dǎo)致等待并發(fā)同步的消耗
若SQL Server中有大量的CXPACKET等待類型,則可能由于是并發(fā)過高的原因,CXPACKET等待類型是由于等待一個或多個線程同步,而出現(xiàn)的等待類型。
然而并非說CXPACKET等待類型等待就是不好,我們只是需要減少此等待類型。具體查詢?nèi)缦?/p>
SELECT '查看百分比是否>10%,如果大于10%,考慮降低并行度' select cast([signal_wait_time_ms] as decimal(30,2))/[wait_time_ms] as [百分比],* from sys.dm_os_wait_stats (nolock) where [wait_time_ms]<>0 AND wait_type='CXPACKET'
2)單個查詢的并發(fā)過高,占用大量cpu資源,導(dǎo)致其他線程無法使用
若有許多查詢長期處于Runnable的狀態(tài),則可能是由于并發(fā)的影響,其他進(jìn)程拿不到cpu執(zhí)行。從而大量線程無法running。具體查詢?nèi)缦?/p>
SELECT '查看cpu任務(wù)' SELECT scheduler_id, current_tasks_count, runnable_tasks_count FROM sys.dm_os_schedulers (nolock) WHERE scheduler_id < 255
如何設(shè)置合理的并行度呢?
--配置最大并行度 sp_configure 'max degree of parallelism',1 go --使設(shè)置生效 Reconfigure go sp_configure 'cost threshold for parallelism',10--設(shè)置為10s go --使設(shè)置生效 Reconfigure go
1)在OLTP服務(wù)器環(huán)境中
a)對并發(fā)度要求高,對每個用戶請求都要及時響應(yīng),一般建議將max degree of parallelism 設(shè)置為1;因此cost threshold for parallelism 的值沒有作用,默認(rèn)為5即可
b)對并發(fā)度要求不高,經(jīng)常會有復(fù)雜查詢的數(shù)據(jù)庫,若cpu個數(shù)<8,一般建議將max degree of parallelism 設(shè)置為cpu數(shù)量;若cpu個數(shù)>=8建議將值設(shè)為8;cost threshold for parallelism默認(rèn)即可
2)在OLAP服務(wù)器環(huán)境中
由于查詢均比較復(fù)雜,則可將max degree of parallelism 設(shè)置為0,同時如果考慮到等待消耗問題,則可以考慮將cost threshold for parallelism的值設(shè)置為10,以降低并發(fā)執(zhí)行的可能
3)在OLTP和OLAP混合環(huán)境中
a)對并發(fā)度要求高,則可以考慮將max degree of parallelism 設(shè)置為<=4,cost threshold for parallelism值默認(rèn)即可
b)對并發(fā)度要求不高,經(jīng)常會有復(fù)雜查詢的數(shù)據(jù)庫,若cpu個數(shù)<8,一般建議將max degree of parallelism 設(shè)置為cpu數(shù)量;若cpu個數(shù)>=8建議將值設(shè)為8;cost threshold for parallelism默認(rèn)即可
OLAP和OLTP的 概念和區(qū)別
聯(lián)機(jī)事務(wù)處理OLTP(on-line transaction processing)主要是執(zhí)行基本的、日常的事務(wù)處理,比如在銀行存取一筆款,就是一個事務(wù)交易。OLTP的特點一般有:
1.實時性要求高;
2.數(shù)據(jù)量不是很大;
3.交易一般是確定的,所以O(shè)LTP是對確定性的數(shù)據(jù)進(jìn)行存取;(比如存取款都有一個特定的金額)
4.并發(fā)性要求高并且嚴(yán)格的要求事務(wù)的完整,安全性。(比如這種情況:有可能你和你的家人同時在不同的銀行取同一個帳號的款),
聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing)是數(shù)據(jù)倉庫系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。典型的應(yīng)用就是復(fù)雜的動態(tài)的報表系統(tǒng)。OLAP的特點一般有:
1.實時性要求不是很高,很多應(yīng)用的頂多是每天更新一下數(shù)據(jù);
2.數(shù)據(jù)量大,因為OLAP支持的是動態(tài)查詢,所以用戶也許要通過將很多數(shù)據(jù)的統(tǒng)計后才能得到想要知道的信息,例如時間序列分析等等,所以處理的數(shù)據(jù)量很大;
3.因為重點在于決策支持,所以查詢一般是動態(tài)的,也就是說允許用戶隨時提出查詢的要求。所以在OLAP中通過一個重要概念“維”來搭建一個動態(tài)查詢的平臺(或技術(shù)),供用戶自己去決定需要知道什么信息。
以下是大致的區(qū)分:
OLTP OLAP
用戶: 操作人員,低層管理人員 決策人員,高級管理人員
功能: 日常操作處理 分析決策
DB設(shè)計: 面向應(yīng)用 面向主題
數(shù)據(jù): 當(dāng)前的,最新的細(xì)節(jié)的,二維的分立的 歷史的,聚集的,多維的集成的, 統(tǒng)一的
存取: 讀/寫數(shù)十條記錄 讀上百萬條記錄
工作單位: 簡單的事務(wù) 復(fù)雜的查詢
用戶數(shù): 上千個 上百個
DB大小:100MB-GB 100GB-TB
這些概念(或技術(shù))都是應(yīng)用層面的,這個和用什么數(shù)據(jù)庫系統(tǒng)是無關(guān)的。有興趣的朋友如果愿意了解OLAP的具體應(yīng)用而又不愿意花太大的力氣,不妨到科研、教育、文化和衛(wèi)生系統(tǒng)去看一看,他們那里一般都有一個叫做SPSS的統(tǒng)計分析軟件,這是一個和SQLSERVER在同一層次上的世界級的、最權(quán)威的統(tǒng)計分析軟件,其菜單上有一個“分析”項目,其下拉的第一個項目就是OLAP,當(dāng)然也可以自己裝一個試試。
OLTP與OLAP是兩種很高級的應(yīng)用,以上只是點到了一些最表面的東西,給大家一個拋磚引玉的作用。紙上得來終覺淺,絕知此事要躬行
總結(jié)
以上是生活随笔為你收集整理的Max Degree of Parallelism最大并行度配置--缓解CPU压力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准北京时间同步
- 下一篇: 使用fiddler 软件监听手机app的