SQL服务器 Archi结构 (已解释)

MS SQL Server 是一种客户端-服务器架构。MS SQL Server 进程从客户端应用程序发送请求开始。SQL Server 接受、处理并使用处理后的数据回复请求。让我们详细讨论下面显示的整个架构:

如下图所示,SQL Server 中有三个主要组件 Archi結構:

  1. 协议层
  2. 关系引擎
  3. 储存引擎
SQL服务器 Archi质地
SQL服务器 Archi结构图

协议层-SNI

MS SQL SERVER 协议层支持 3 种类型的客户端服务器 Archi我们将从 “三种类型的客户端服务器 Archi结构” MS SQL Server 支持。

共享内存

让我们重新考虑一下清晨的谈话场景。

协议层-SNI

妈妈和汤姆 – 在这里,汤姆和他的妈妈在同一个地方,也就是他们家。汤姆可以要咖啡,妈妈可以给他端上热咖啡。

MS SQL 服务器 – 服务 MS SQL 服务器提供 共享内存协议。 这里 客户MS SQL 服务器在同一台机器上运行。两者可以通过共享内存协议进行通信。

比喻: 让我们映射上述两种场景中的实体。我们可以轻松地将 Tom 映射到客户端,将 Mom 映射到 SQL 服务器,将 Home 映射到机器,将 Verbal Communication 映射到共享内存协议。

从配置和安装台开始:

连接到本地数据库 – 在 SQL管理Studio,“服务器名称”选项可以是

“。”

“本地主机”

“127.0.0.1”

“机器\实例”

协议层-SNI

TCP / IP协议

现在想象一下晚上,汤姆正想参加派对。他想从一家知名的咖啡店订购一杯咖啡。这家咖啡店距离他家 10 公里。

TCP / IP协议

这里,汤姆和星巴克位于不同的物理位置。汤姆在家里,星巴克在繁忙的市场。他们通过蜂窝网络进行通信。同样,MS SQL SERVER 提供了通过以下方式进行交互的功能 TCP / IP协议其中 CLIENT 和 MS SQL Server 彼此远程且安装在单独的机器上。

比喻: 让我们映射上述两种场景中的实体。我们可以轻松地将 Tom 映射到客户端,将星巴克映射到 SQL 服务器,将家庭/市场映射到远程位置,最后将蜂窝网络映射到 TCP/IP 协议。

配置/安装台的说明:

  • 在 SQL Management Studio 中 - 对于通过 TCP\IP 连接,“服务器名称”选项必须是“服务器的计算机\实例”。
  • SQL 服务器使用 TCP/IP 中的端口 1433。

TCP / IP协议

命名管道

现在终于到了晚上,汤姆想喝一杯她的邻居塞拉精心准备的淡绿茶。

命名管道

服务 Tom 和他的 邻居、塞拉利昂,都处于同一 位置,互为邻居。 他们通过 网络内。 同样, 微软 SQL 服务器 提供通过交互的能力 命名管道 协议。这里的客户端和 微软 SQL 服务器 通过以下方式连接 局域网.

比喻: 让我们映射上述两种场景中的实体。我们可以轻松地将 Tom 映射到客户端,将 Sierra 映射到 SQL 服务器,将邻居映射到 LAN,最后将内部网络映射到命名管道协议。

配置/安装台的说明:

  • 通过命名管道进行连接。 此选项默认是禁用的,需要由 SQL 配置管理器启用。

什么是TDS?

现在我们知道了客户端-服务器有三种类型 Archi结构,让我们看一下TDS:

  • TDS 代表表格数据流。
  • 这 3 种协议都使用 TDS 数据包。TDS 封装在网络数据包中。这使得数据能够从客户端计算机传输到服务器计算机。
  • TDS 最初由 Sybase 开发,现在归 Microsoft

关系引擎

关系引擎也称为查询处理器。它具有 SQL服务器 确定查询具体需要做什么以及如何最好地完成查询的组件。它负责通过从存储引擎请求数据并处理返回的结果来执行用户查询。

如图所示 Archi结构图有 3个主要组件 关系引擎。让我们详细研究一下这些组件:

CMD解析器

从协议层接收到的数据随后被传递给关系引擎。 “CMD 解析器” 是关系引擎接收查询数据的第一个组件。CMD 解析器的主要工作是检查查询是否 句法和语义错误。 最后,它 生成查询树。我们来详细讨论一下。

CMD解析器

语法检查:

  • 与其他编程语言一样,MS SQL 也具有预定义的关键字集。此外,SQL Server 具有 SQL Server 可以理解的自己的语法。
  • SELECT、INSERT、UPDATE 和许多其他关键字属于 MS SQL 预定义关键字列表。
  • CMD Parser 进行语法检查。如果用户的输入不符合这些语言语法或语法规则,它 返回错误。

示例: 假设一个俄罗斯人去了一家日本餐馆。他用俄语点了快餐。不幸的是,服务员只懂日语。最明显的结果是什么?

答案是——服务员无法进一步处理该订单。

SQL 服务器接受的语法或语言不应该有任何偏差。如果有偏差,SQL 服务器将无法处理它,因此将返回错误消息。

我们将在接下来的教程中进一步学习 MS SQL 查询。然而,请考虑以下最基本的查询语法:

SELECT * from <TABLE_NAME>;

现在,为了了解语法的作用,假设用户运行如下基本查询:

SELECR * from <TABLE_NAME>

请注意,用户输入的不是“SELECT”,而是“SELECR”。

结果: CMD 解析器将解析此语句并抛出错误消息。因为“SELECR”不遵循预定义的关键字名称和语法。这里 CMD 解析器期望的是“SELECT”。

语义检查:

  • 这是由 归一化器.
  • 最简单的形式是检查要查询的列名、表名是否存在于 Schema 中。如果存在,则将其绑定到查询。这也称为 捆绑.
  • 当用户查询包含 VIEW 时,复杂性会增加。Normalizer 使用内部存储的视图定义执行替换等操作。

让我们通过以下示例来理解这一点 -

SELECT * from USER_ID

结果: CMD 解析器将解析此语句以进行语义检查。解析器将抛出错误消息,因为 Normalizer 找不到请求的表 (USER_ID),因为它不存在。

创建查询树:

  • 此步骤生成可运行查询的不同执行树。
  • 请注意,所有不同的树都有相同的期望输出。

优化

优化器的工作是为用户的查询创建一个执行计划。这个计划将决定如何执行用户查询。

请注意,并非所有查询都经过优化。优化针对 DML(数据修改语言)命令,如 SELECT、INSERT、DELETE 和 UPDATE。此类查询首先被标记,然后发送给优化器。DDL 命令(如 CREATE 和 ALTER)未经过优化,而是被编译成内部形式。查询成本是根据 CPU 使用率、内存使用率和输入/输出需求等因素计算的。

优化器的作用是找到 最便宜的,而不是最好的,具有成本效益的执行方案。

在我们深入了解优化器的更多技术细节之前,请考虑以下现实生活中的例子:

示例:

假设您想开立一个网上银行账户。您已经知道有一家银行最多需要 2 天才能开立账户。但是,您还有一份其他 20 家银行的名单,这些银行可能需要或不需要少于 2 天的时间。您可以开始与这些银行联系,以确定哪些银行需要的时间少于 2 天。现在,您可能找不到一家需要的时间少于 2 天的银行,而且由于搜索活动本身而浪费了额外的时间。最好在第一家银行开立账户。

总结 明智地选择更为重要。确切地说,选择哪个 选择是最好的,而不是最便宜的。

同样地,MS SQL 优化器采用内置的穷举/启发式算法。目标是最大限度地缩短查询运行时间。 所有优化器算法都是 得体 Microsoft 和一个秘密。 尽管, 以下是 MS SQL Optimizer 执行的高级步骤。优化搜索遵循三个阶段,如下图所示:

优化

阶段 0:寻找简单计划:

  • 这也被称为 预优化阶段.
  • 在某些情况下,可能只有一个实用的、可行的计划,称为简单计划。没有必要创建优化计划。原因是,搜索更多会导致找到相同的运行时执行计划。而且还需要额外花费搜索优化计划的成本,而这完全没有必要。
  • 如果没有找到 Trivial 计划,则 1st 阶段开始。

第一阶段:搜索交易处理计划

  • 其中包括搜索 简单和复杂的计划.
  • 简单计划搜索:查询中涉及的列和索引的过去数据将用于统计分析。这通常由但不限于每个表一个索引组成。
  • 但是,如果未找到简单计划,则搜索更复杂的计划。它涉及每个表的多个索引。

第二阶段:并行处理和优化。

  • 如果上述策略均不起作用,优化器将寻找并行处理的可能性。这取决于机器的处理能力和配置。
  • 如果仍然不可能,则开始最终优化阶段。现在,最终优化目标是找到以最佳方式执行查询的所有其他可能选项。最终优化阶段 Algorithms 旨在 Microsoft 礼。

查询执行器

查询执行器

查询执行器调用 访问方法。 它为执行所需的数据获取逻辑提供执行计划。一旦从存储引擎接收到数据,结果就会发布到协议层。最后,数据被发送给最终用户。

储存引擎

存储引擎的工作是将数据存储在磁盘或 SAN 等存储系统中,并在需要时检索数据。在深入研究存储引擎之前,让我们先看看数据是如何存储在 数据库 可用文件类型。

数据文件和范围:

储存引擎

数据文件,物理上以数据页的形式存储数据,每个数据页大小为 8KB,是 SQL Server 中最小的存储单位。这些数据页在逻辑上分组形成区。在 SQL Server 中没有一个对象被分配一个页面。

对象的维护是通过区段进行的。页面有一个称为页头的部分,大小为 96 字节,其中包含有关页面的元数据信息,例如页面类型、页码、已用空间大小、可用空间大小以及指向下一页和上一页的指针等。

文件类型

文件类型

  1. 主文件
  • 每个数据库包含一个主文件。
  • 它存储与表、视图、触发器等相关的所有重要数据。
  • 扩展名是 。MDF 通常是,但可以是任何扩展。
  1. 二级文件
  • 数据库可能包含或不包含多个辅助文件。
  • 这是可选的,包含用户特定的数据。
  • 扩展名是 。国防军 通常是,但可以是任何扩展。
  1. 日志文件
  • 也称为预写日志。
  • 扩展名是 。低密度脂蛋白
  • 用于事务管理。
  • 这用于从任何不需要的实例中恢复。执行回滚未提交事务的重要任务。

存储引擎有 3 个组件;让我们详细了解一下它们。

访问方式

它充当查询执行器和 Buffer 管理器/交易日志。

访问方法本身不执行任何操作。

第一个动作是确定查询是否:

  1. 选择语句 (DDL)
  2. 非选择语句(DDL 和 DML)

根据结果​​,访问方法采取以下步骤:

  1. 如果查询是 DDL,SELECT 语句,查询将传递给 Buffer 经理 进行进一步处理。
  2. 如果查询 DDL,NON-SELECT 语句,查询被传递给事务管理器。这主要包括 UPDATE 语句。

访问方式

Buffer 经理

Buffer 管理器管理以下模块的核心功能:

  • 计划缓存
  • 数据解析: Buffer 缓存和数据存储
  • 脏页

我们将学习计划, Buffer 和数据缓存。我们将在事务部分介绍脏页。

Buffer 经理

计划缓存

  • 现有的查询计划: 缓冲区管理器检查存储的计划缓存中是否存在执行计划。如果是,则使用查询计划缓存及其相关的数据缓存。
  • 第一次缓存计划: 现有的 Plan 缓存来自哪里?如果正在运行首次查询执行计划并且该计划很复杂,则将其存储在 Plane 缓存中是有意义的。这将确保下次 SQL Server 获得相同查询时具有更快的可用性。因此,如果是首次运行,则存储 Plan 执行的只是查询本身。

数据解析: Buffer 缓存和数据存储

Buffer 管理器提供对所需数据的访问。根据数据缓存中是否存在数据,可以采用以下两种方法:

Buffer 缓存-软解析:

Buffer 缓存 - 软解析

Buffer 经理寻找数据 Buffer 在数据缓存中。如果存在,则查询执行器将使用此数据。这提高了性能,因为与从数据存储中获取数据相比,从缓存中获取数据时 I/O 操作的数量减少了。

数据存储-硬解析:

数据存储-硬解析

如果数据不存在 Buffer 管理器在数据存储中搜索所需数据。它还将数据存储在数据缓存中以供将来使用。

脏页

它作为事务管理器的处理逻辑存储。我们将在事务管理器部分详细学习。

交易经理

交易经理

当访问方法确定查询是非选择语句时,将调用事务管理器。

日志管理器

  • 日志管理器通过事务日志中的日志跟踪系统中完成的所有更新。
  • 日志有 记录序列号和事务 ID 以及数据修改记录.
  • 这用于跟踪 事务提交和事务回滚.

锁管理器

  • 在Transaction过程中,Data Storage中关联的数据处于Lock状态,这个过程由Lock Manager来处理。
  • 这个过程确保 数据一致性和隔离性. 又称为 ACID 特性。

执行流程

  • 日志管理器开始记录并且锁定管理器锁定相关数据。
  • 数据的副本保存在 Buffer 缓存。
  • 需要更新的数据副本保存在日志缓冲区中,所有事件都会更新数据缓冲区中的数据。
  • 存储数据的页面也称为 脏页.
  • 检查点和预写日志: 此进程运行并将所有页面从脏页标记为磁盘,但页面仍保留在缓存中。频率大约为每分钟运行 1 次。但页面首先从日志文件推送到数据页 Buffer 日志。这被称为 预写日志。
  • 懒惰的作家: 脏页可以保留在内存中。当 SQL Server 观察到巨大的负载时, Buffer 当新事务需要内存时,它会从缓存中释放脏页。它操作于 LRU – 最近最少使用算法将页面从缓冲池清理到磁盘。

总结

  • 三种类型的客户端服务器 Archi存在结构:1)共享内存 2)TCP/IP 3)命名管道
  • TDS 由 Sybase 开发,现在归 Microsoft,是封装在网络数据包中的数据包,用于从客户端机器向服务器机器传输数据。
  • 关系引擎包含三个主要组件:CMD解析器: 这负责句法和语义错误并最终生成查询树。优化器: 优化器的作用是寻找最便宜的,而不是最好、最划算的执行计划。

    查询执行器: 查询执行器调用访问方法并提供执行所需的数据获取逻辑的执行计划。

  • 存在三种类型的文件:主文件、辅助文件和日志文件。
  • 存储引擎:具有以下重要组件访问方法: 此组件确定查询是 Select 语句还是非 Select 语句。调用 Buffer 并相应地转移经理。Buffer 经理: Buffer 管理器管理计划缓存、数据解析和脏页的核心功能。

    交易经理: 它借助日志和锁管理器来管理非选择事务。此外,它还促进了预写日志和惰性写入器的重要实现。

了解更多 readmore