Paste_Image.png
主要模塊作用
- SNI (Server Network Interface): 主要負(fù)責(zé)SQL Server與網(wǎng)絡(luò)傳輸接收資料
- Relation Engine:數(shù)據(jù)庫(kù)的核心,解析所有SQL語(yǔ)法、運(yùn)算最高的查詢效率
- Storage Engine: 主要決定數(shù)據(jù)庫(kù)的存取方式瓦糕,Memory(內(nèi)存) or Disk(硬盤(pán))
- Buffer Pool: SQL Server內(nèi)存中主要存放的快照內(nèi)容(data or Query Plan)
Query的流程
- Client端送出SQL Query通過(guò)TDS(Tabular Data Stream)通訊協(xié)議送至SQL Server颓鲜。例如:Select * from tb_name望艺。
- SQL Server SNI 收到該指令相艇,轉(zhuǎn)交由Cmd Parser處理,解析該指令與語(yǔ)法姜凄。
- Cmd Parser 轉(zhuǎn)交由Optimizer計(jì)算怎樣的執(zhí)行方式會(huì)比較效率政溃,要透過(guò)Index Scan or Index Seek,如果沒(méi)有Index要怎樣存取等态秧。根據(jù)數(shù)據(jù)的量董虱、Query語(yǔ)法、join table申鱼、統(tǒng)計(jì)資訊等空扎,相對(duì)計(jì)算出較便宜的cost執(zhí)行。
- 選擇較便宜cost的query plan之后润讥,交由Query Executor執(zhí)行。
- SQL執(zhí)行時(shí)盘寡,Access Methods會(huì)考量如何存取所要的資料楚殿,通過(guò)內(nèi)存或者硬盤(pán)。
- 6/7Buff Manager會(huì)協(xié)助管理存取記憶體的資料內(nèi)容。如果記憶體中已有之前的資料或者query plan脆粥,Buffer Manager會(huì)由記憶體直接取用砌溺,否則就到硬盤(pán)中存取。
- 8/9/10 接著將取到的資料回傳变隔,Query Executor =>SNI=>再通過(guò)SNI網(wǎng)絡(luò)傳輸至Client规伐。
Query的流程跟數(shù)據(jù)庫(kù)效能的關(guān)系
- Query需要經(jīng)常Re-Compile,Recompile會(huì)耗用CPU性能
- Index會(huì)間接影響Query Plan與數(shù)據(jù)庫(kù)存取的方式匣缘、查詢的效率等
- Select * ...這樣的查詢會(huì)增加SQL SERVER到磁盤(pán)的存取的次數(shù)以及SNI與網(wǎng)絡(luò)資料量的傳輸
- 內(nèi)存的大小會(huì)影響data cache與plan cache是不是有效率猖闪。對(duì)于電腦來(lái)說(shuō),至內(nèi)存(Memory)存取的單位為naro sec肌厨,而至硬盤(pán)的存取卻是mili sec培慌。
CPU Pressure
有可能是 CPU privileged time造成 > 因?yàn)閔igh Disk I/O > 因?yàn)镾QL Server 找不到 memory cache 資料,也可能是因?yàn)閝uery的語(yǔ)法造成需要常常Re-compile柑爸。
Memory Pressure
- page in/out 的次數(shù)很多
- 內(nèi)存很小
- 因?yàn)椴樵冋Z(yǔ)法造成
- Index沒(méi)有效率
- Memory Pressure可以從Available Bytes, Page out, Page Life Expectancy等performance counters中進(jìn)一步觀察吵护,確定原因。