
Paste_Image.png
主要模塊作用
- SNI (Server Network Interface): 主要負(fù)責(zé)SQL Server與網(wǎng)絡(luò)傳輸接收資料
- Relation Engine:數(shù)據(jù)庫(kù)的核心,解析所有SQL語法、運(yùn)算最高的查詢效率
- Storage Engine: 主要決定數(shù)據(jù)庫(kù)的存取方式,Memory(內(nèi)存) or Disk(硬盤)
- Buffer Pool: SQL Server內(nèi)存中主要存放的快照內(nèi)容(data or Query Plan)
Query的流程
- Client端送出SQL Query通過TDS(Tabular Data Stream)通訊協(xié)議送至SQL Server。例如:Select * from tb_name。
- SQL Server SNI 收到該指令,轉(zhuǎn)交由Cmd Parser處理,解析該指令與語法。
- Cmd Parser 轉(zhuǎn)交由Optimizer計(jì)算怎樣的執(zhí)行方式會(huì)比較效率,要透過Index Scan or Index Seek,如果沒有Index要怎樣存取等。根據(jù)數(shù)據(jù)的量、Query語法、join table、統(tǒng)計(jì)資訊等,相對(duì)計(jì)算出較便宜的cost執(zhí)行。
- 選擇較便宜cost的query plan之后,交由Query Executor執(zhí)行。
- SQL執(zhí)行時(shí),Access Methods會(huì)考量如何存取所要的資料,通過內(nèi)存或者硬盤。
- 6/7Buff Manager會(huì)協(xié)助管理存取記憶體的資料內(nèi)容。如果記憶體中已有之前的資料或者query plan,Buffer Manager會(huì)由記憶體直接取用,否則就到硬盤中存取。
- 8/9/10 接著將取到的資料回傳,Query Executor =>SNI=>再通過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到磁盤的存取的次數(shù)以及SNI與網(wǎng)絡(luò)資料量的傳輸
- 內(nèi)存的大小會(huì)影響data cache與plan cache是不是有效率。對(duì)于電腦來說,至內(nèi)存(Memory)存取的單位為naro sec,而至硬盤的存取卻是mili sec。
CPU Pressure
有可能是 CPU privileged time造成 > 因?yàn)閔igh Disk I/O > 因?yàn)镾QL Server 找不到 memory cache 資料,也可能是因?yàn)閝uery的語法造成需要常常Re-compile。
Memory Pressure
- page in/out 的次數(shù)很多
- 內(nèi)存很小
- 因?yàn)椴樵冋Z法造成
- Index沒有效率
- Memory Pressure可以從Available Bytes, Page out, Page Life Expectancy等performance counters中進(jìn)一步觀察,確定原因。