美文网首页
MS SQL的内部运作

MS SQL的内部运作

作者: Evan_Z | 来源:发表于2016-12-07 17:13 被阅读0次
    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中进一步观察,确定原因。

    相关文章

      网友评论

          本文标题:MS SQL的内部运作

          本文链接:https://www.haomeiwen.com/subject/pjzdmttx.html