如图SQL服务器引擎主要有四个主要组成部分:协议,关系引擎(也称为查询处理器),存储引擎,SQLOS。
从任何客户端应用程序提交SQL服务器执行的语句,都必须和这四个要素交互。
协议层接收该请求,并将之转化成关系引擎能配合工作的内容,它也会将最终的结果如有疑问,状态讯息,或错误消息,翻译成客户端可以理解的信息 传送给客户端。
关系引擎层接受SQL batches 并决定哪些给他们做。为查询和程序设计,进行解析,编译,优化请求和监督执行,当Batch已经执行,如果需要数据,就会向数据存储引擎发送一个请求。
存储引擎管理所有的数据访问,transaction-based命令和大量的操作,如备份,批量插入,某些DBCC(数据库一致性检查)的命令,都需要存储引擎的管理。
SQLOS层处理的活动通常认为是承担和操作系统进行交互的责任,例如:线程管理(调度),同步原语,死锁检测,内存管理,包括缓冲池。
行为观测引擎
SQL 允许开发者和数据库管理员了解SQL内部运行状况,这些元数据对象被称为动态管理视图(DMVs)和动态管理过程(DMFs)。你可以访问他们,他们不是真正的对象。使用和跟踪并不总是直接可用来检测资源问题或状态变化。一些DMVs和DMFs能让详细跟踪资源的历史使用状况,而且有80多个这样的对象,你可以直接查询和加入SQL选择报表。DMVs and DMFs能收集服务器状态信息,他们可能跨越多个sessions,多步transactions,多个用户的要求。这些对象可以用来诊断,内存和CPU的调整,并监控服务器上的所有会话
DMVsand DMFs 不是基于真实的表存储,但是都基于服务器的内部构架,其中一些我们会在本章内讨论。对象分为几个类型进行显示。所有的系统构架名字以dm_开头,后面跟着一个代码,代表服务器的对象的详细说明,主要的类型如下:
- dm_exec_* 包含用户直接或者间接的执行代码内容和关联的相关连接,如:sys.dm_exec_sessions .返回每一行包含每一个SQL服务器认证的session
- dm_os_* Contains 包含底层的系统信息,如:内容、索、调度,如:sys.dm_os_schedulers是一个DMV返回每一个计划的信息,主要用来监控调度的使用情况,确认不正常的任务信息
- dm_tran_* 显示当前的交易状况.如: sys.dm_tran_locks 返回当前的活动的锁资源 .每一行表示当前的锁请求提交给锁管理组件的情况,通过或者未通过的情况
- dm_io_* 关注磁盘和网络的I/O的情况 如: sys.dm_io_virtual_file_stats 返回data和log文件的I/O统计
- dm_db_* 返回数据库和数据库相关的信息,如索引,如:sys.dm_db_index_physical_stats 返回表和视图的索引碎片情况和存储情况
SQL 还有动态管理对象为其功能组成,其中包括全文搜索目录、服务审核、复制、通用语言运行时(CLR)提供动态管理。