一文教會你數(shù)據(jù)庫性能調(diào)優(yōu),附某大型醫(yī)院真實案例
點擊上方SQL數(shù)據(jù)庫開發(fā),關(guān)注獲取SQL視頻教程
SQL專欄
前言

六大因素

硬件能力 系統(tǒng)規(guī)模 數(shù)據(jù)庫內(nèi)部因素 軟件環(huán)境
業(yè)務(wù)模型及架構(gòu) 代碼設(shè)計
實戰(zhàn)案例
時間:2019年10月某天? 事件:某醫(yī)院客戶?下午4點?突然出現(xiàn)大面積的卡慢。整個系統(tǒng)出現(xiàn)嚴(yán)重問題,信息中心電話打爆,醫(yī)院工程師手足無措。
硬件能力
CPU

Memory

可用內(nèi)存

IO

系統(tǒng)規(guī)模

數(shù)據(jù)庫內(nèi)部因素
等待

慢語句

什么導(dǎo)致的慢


微軟官方的描述:
場景
出現(xiàn)在數(shù)據(jù)庫編譯或重編譯時,將即席執(zhí)行計劃ad hoc plans 插入到計劃緩存中的時候 NUMA架構(gòu)下,內(nèi)存對象是按照節(jié)點來分區(qū)的
type,?pages_in_bytes,
CASE
WHEN?(0x20?=?creation_options?&?0x20)?THEN?'Global?PMO.?Cannot?be?partitioned?by?CPU/NUMA?Node.?TF?8048?not?applicable.'
WHEN?(0x40?=?creation_options?&?0x40)?THEN?'Partitioned?by?CPU.TF?8048?not?applicable.'
WHEN?(0x80?=?creation_options?&?0x80)?THEN?'Partitioned?by?Node.?Use?TF?8048?to?further?partition?by?CPU'
ELSE?'UNKNOWN'
END
from?sys.dm_os_memory_objects
order?by?pages_in_bytes?desc

補丁
https://support.microsoft.com/en-us/help/2492381
https://support.microsoft.com/zh-cn/help/3074425/fix-cmemthread-waits-occur-when-you-execute-many-ad-hoc-queries-in-sql
軟硬件環(huán)境

目前數(shù)據(jù)庫的版本是 11.0.5556.0 而前面提到的補丁,安裝后的版本是:11.0.5623.0
代碼設(shè)計
是什么語句產(chǎn)生了等待?
都是類似下面的語句,最高時,并發(fā)超過100.
SELECT?
????*?INTO?#Tmp?from?TB?where?1=2
特點如下:
語句簡單 開銷都小于5不會產(chǎn)生并行
都采用了select into #temptable的形式
就像上面分析的一樣,CMEMTHREAD等待是一個并發(fā)問題,而不是一個內(nèi)存問題。在其他方案行不通的時候,我們可以通過調(diào)整此類語句的寫法,減少CMEMTHREAD等待.
業(yè)務(wù)模型及架構(gòu)
解決方案
安裝最新的補丁
修改參數(shù)
增加TEMPDB數(shù)據(jù)文件的個數(shù)

遷移TEMPDB數(shù)據(jù)文件的位置
優(yōu)化程序的代碼
優(yōu)化效果
等待

慢語句

總結(jié)
參考
https://blogs.msdn.microsoft.com/psssql/2012/12/20/how-it-works-cmemthread-and-debugging-them/
作者:OwenZeng
鏈接:https://www.cnblogs.com/OwenZeng/p/8276892.html
——End——
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。 推薦閱讀
這是一個能學(xué)到技術(shù)的公眾號,歡迎關(guān)注
評論
圖片
表情
