MS SQL的内部运作

Paste_Image.png

主要模块作用

  • SNI (Server Network Interface): 主要负责SQL Server与网络传输接收资料
  • Relation Engine:数据库的核心,解析所有SQL语法、运算最高的查询效率
  • Storage Engine: 主要决定数据库的存取方式,Memory(内存) or Disk(硬盘)
  • Buffer Pool: SQL Server内存中主要存放的快照内容(data or Query Plan)

Query的流程

  1. Client端送出SQL Query通过TDS(Tabular Data Stream)通讯协议送至SQL Server。例如:Select * from tb_name。
  2. SQL Server SNI 收到该指令,转交由Cmd Parser处理,解析该指令与语法。
  3. Cmd Parser 转交由Optimizer计算怎样的执行方式会比较效率,要透过Index Scan or Index Seek,如果没有Index要怎样存取等。根据数据的量、Query语法、join table、统计资讯等,相对计算出较便宜的cost执行。
  4. 选择较便宜cost的query plan之后,交由Query Executor执行。
  5. SQL执行时,Access Methods会考量如何存取所要的资料,通过内存或者硬盘。
  6. 6/7Buff Manager会协助管理存取记忆体的资料内容。如果记忆体中已有之前的资料或者query plan,Buffer Manager会由记忆体直接取用,否则就到硬盘中存取。
  7. 8/9/10 接着将取到的资料回传,Query Executor =>SNI=>再通过SNI网络传输至Client。

Query的流程跟数据库效能的关系

  1. Query需要经常Re-Compile,Recompile会耗用CPU性能
  2. Index会间接影响Query Plan与数据库存取的方式、查询的效率等
  3. Select * ...这样的查询会增加SQL SERVER到磁盘的存取的次数以及SNI与网络资料量的传输
  4. 内存的大小会影响data cache与plan cache是不是有效率。对于电脑来说,至内存(Memory)存取的单位为naro sec,而至硬盘的存取却是mili sec。

CPU Pressure

有可能是 CPU privileged time造成 > 因为high Disk I/O > 因为SQL Server 找不到 memory cache 资料,也可能是因为query的语法造成需要常常Re-compile。

Memory Pressure

  • page in/out 的次数很多
  • 内存很小
  • 因为查询语法造成
  • Index没有效率
  • Memory Pressure可以从Available Bytes, Page out, Page Life Expectancy等performance counters中进一步观察,确定原因。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容