MS SQL的內(nèi)部運(yùn)作

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的流程

  1. Client端送出SQL Query通過TDS(Tabular Data Stream)通訊協(xié)議送至SQL Server。例如:Select * from tb_name。
  2. SQL Server SNI 收到該指令,轉(zhuǎn)交由Cmd Parser處理,解析該指令與語法。
  3. 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í)行。
  4. 選擇較便宜cost的query plan之后,交由Query Executor執(zhí)行。
  5. SQL執(zhí)行時(shí),Access Methods會(huì)考量如何存取所要的資料,通過內(nèi)存或者硬盤。
  6. 6/7Buff Manager會(huì)協(xié)助管理存取記憶體的資料內(nèi)容。如果記憶體中已有之前的資料或者query plan,Buffer Manager會(huì)由記憶體直接取用,否則就到硬盤中存取。
  7. 8/9/10 接著將取到的資料回傳,Query Executor =>SNI=>再通過SNI網(wǎng)絡(luò)傳輸至Client。

Query的流程跟數(shù)據(jù)庫(kù)效能的關(guān)系

  1. Query需要經(jīng)常Re-Compile,Recompile會(huì)耗用CPU性能
  2. Index會(huì)間接影響Query Plan與數(shù)據(jù)庫(kù)存取的方式、查詢的效率等
  3. Select * ...這樣的查詢會(huì)增加SQL SERVER到磁盤的存取的次數(shù)以及SNI與網(wǎng)絡(luò)資料量的傳輸
  4. 內(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)一步觀察,確定原因。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容