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 日志记录和惰性写入器的重要实现。

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注