SQL Server 架构解释我们前两章讨论了“协议层、关系引擎”,在本教程中,raksmart日本服务器为您分享SQL Server 架构解释:命名管道、优化器、缓冲区管理器(三)。
存储引擎
存储引擎的工作是将数据存储在磁盘或 SAN 等存储系统中,并在需要时检索数据。在深入研究存储引擎之前,让我们看一下数据是如何存储在数据库中的以及可用文件的类型。
数据文件和范围:
Data File,以数据页的形式物理存储数据,每个数据页大小为8KB,构成SQL Server中最小的存储单元。这些数据页按逻辑分组以形成范围。在 SQL Server 中没有为任何对象分配页面。
对象的维护是通过范围来完成的。该页面有一个名为 Page Header 的部分,大小为 96 字节,携带有关页面的元数据信息,如页面类型、页码、已用空间大小、可用空间大小以及指向下一页和上一页的指针, 等等。
文件类型
主文件
每个数据库都包含一个主文件。
这存储了与表、视图、触发器等相关的所有重要数据。
扩展名是 . mdf通常但可以是任何扩展名。
次要文件
数据库可能包含也可能不包含多个辅助文件。
这是可选的,包含用户特定的数据。
扩展名是 . ndf通常但可以是任何扩展名。
日志文件
也称为预写日志。
扩展名是 . 低密度脂蛋白
用于事务管理。
这用于从任何不需要的实例中恢复。执行回滚到未提交事务的重要任务。
存储引擎有 3 个组件;让我们详细研究一下。
访问方法
它充当查询执行器和缓冲区管理器/事务日志之间的接口。
Access Method 本身不执行任何操作。
第一个动作是判断查询是否是:
选择语句 (DDL)
非选择语句 (DDL & DML)
根据结果,访问方法采取以下步骤:
如果查询是DDL, SELECT 语句,则将查询传递给缓冲区管理器进行进一步处理。
如果查询是否DDL,NON-SELECT 语句,则查询将传递给事务管理器。这主要包括 UPDATE 语句。
缓冲区管理器
缓冲区管理器管理以下模块的核心功能:
计划缓存
数据解析:缓冲区缓存和数据存储
脏页
我们将在本节学习计划、缓冲区和数据缓存。我们将在交易部分介绍脏页。
计划缓存
现有查询计划:缓冲区管理器检查执行计划是否存在于存储的计划缓存中。如果是,则使用查询计划缓存及其关联的数据缓存。
首次缓存计划:现有计划缓存从何而来?
如果首次查询执行计划正在运行并且很复杂,则将其存储在平面缓存中是有意义的。这将确保 SQL Server 下次获取相同查询时更快的可用性。因此,如果它是第一次运行,那么它只是存储计划执行的查询本身。
数据解析:缓冲区缓存和数据存储
缓冲区管理器提供对所需数据的访问。根据数据缓存中是否存在数据,可以使用以下两种方法:
缓冲区缓存 – 软解析:
缓冲区管理器在数据缓存的缓冲区中查找数据。如果存在,则此数据由查询执行器使用。这提高了性能,因为与从数据存储中获取数据相比,从缓存中获取数据时 I/O 操作的数量减少了。
数据存储 – 硬解析:
如果缓冲区管理器中不存在数据,则在数据存储中搜索所需数据。If 还将数据存储在数据缓存中以备将来使用。
脏页
它作为事务管理器的处理逻辑存储。我们将在事务管理器部分详细学习。
事务管理器
当访问方法确定 Query 是非选择语句时,将调用事务管理器。
日志管理器
日志管理器通过事务日志中的日志跟踪系统中完成的所有更新。
日志具有带有事务 ID 和数据修改记录的日志序列号。
这用于跟踪Transaction Committed 和 Transaction Rollback。
锁管理器
在 Transaction 期间,Data Storage 中的关联数据处于 Lock 状态。此过程由锁管理器处理。
这个过程保证了数据的一致性和隔离性。也称为 ACID 属性。
执行过程
Log Manager 开始记录,Lock Manager 锁定相关数据。
数据的副本保存在缓冲区缓存中。
应该更新的数据副本保存在日志缓冲区中,所有事件都更新数据缓冲区中的数据。
存储数据的页面也称为脏页。
检查点和预写日志记录:此过程运行并将所有页面从脏页标记到磁盘,但该页面仍保留在缓存中。频率约为每分钟 1 次运行。但页面首先从 Buffer 日志推送到日志文件的数据页面。这称为预写日志记录。
Lazy Writer: 脏页可以保留在内存中。当 SQL Server 观察到巨大的负载并且新事务需要缓冲内存时,它会从缓存中释放脏页。它在LRU(最近最少使用的算法)上运行,用于将页面从缓冲池清理到磁盘。
概括:
存在三种类型的客户端服务器架构:1)共享内存 2)TCP/IP 3)命名管道
TDS 由 Sybase 开发,现在归 Microsoft 所有,是一种封装在网络数据包中的数据包,用于从客户端机器到服务器机器的数据传输。
关系引擎包含三个主要组件:
CMD Parser:这负责语法和语义错误并最终生成查询树。
优化器:优化器的作用是找到最便宜的,而不是最好的,具有成本效益的执行计划。
查询执行器:查询执行器调用Access Method,为执行所需的数据获取逻辑提供执行计划。
三种类型的文件存在主文件、辅助文件和日志文件。
存储引擎:具有以下重要组件
访问方法:此组件 确定查询是 Select 还是 Non-Select 语句。相应地调用缓冲区和传输管理器。
缓冲区管理器:缓冲区管理器管理计划缓存、数据解析和脏页的核心功能。
事务管理器:它在日志和锁管理器的帮助下管理非选择事务。此外,还有助于实现 Write Ahead 日志记录和惰性写入器的重要实现。