SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

栏目: 数据库 · 发布时间: 6年前

内容简介:本人新书上市,请多多关照:SQL Server on Linux被微软高管称为最成功的的SQL Server产品,除了一系列的平台兼容和大数据兼容之外,性能方面也有很重要的提升,接下来的几篇会介绍关于SQL Server On Linux性能方面改进。

本人新书上市,请多多关照: 《SQL Server On Linux运维实战 2017版从入门到精通》

SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

SQL Server on Linux被微软高管称为最成功的的SQL Server产品,除了一系列的平台兼容和大数据兼容之外,性能方面也有很重要的提升,接下来的几篇会介绍关于SQL Server On Linux性能方面改进。

内置扩展性简介

接下来的内容可能有点不好理解。SQL Server On Linux在设计和实现时,就考虑了如何动态扩展和最大化CPU、I/O及内存资源的使用,不管是在实体机还是虚拟机甚至容器中。

实现这些扩展的组件是SQLOS,它是内置的组件,用于调度资源和提供内存服务。所有的SQL Server引擎组件都使用SQLOS来创建和执行任务,这些任务又由工作线程池来实现。

SQLOS服务的调度系统是非抢占式的系统,这种非抢占式的行为(简单来说就是不提权操作)可以最小化内核上下文切换和最大化CPU资源利用。

要实现这种目标,SQLOS会根据已发现的逻辑CPU数量创建一个调度列表(schedulers list),并从整个工作线程池中分配一组工作线程给每个调度器。

当有一些如查询操作传入数据库时,就会产生新任务来处理这些操作,新任务会被分配到特定调度器的一个工作线程中执行。

具体内容可以参考 T-SQL执行内幕(2)——Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests

在NUMA架构中,调度系统可以自动侦查并通过节点来利用NUMA的优点。SQLOS可以把工作线程运行在NUMA节点中的任何CPU中,但是避免在非当前节点之外的节点上运行,从而减少外部内存访问的开销。对NUMA节点和CPU的识别使得SQL Server可以跨CPU执行工作从而最大化扩展性。简单来说NUMA 节点是CPU和内存的一个单元组,工作线程可以在一个节点内进行运作。并且列用节点之间的资源特别是CPU来分摊负载。另外SQL Server还可以按照节点和CPU对内部数据结构和列表进行分区,以确保高并发负载情况下代码尽可能少地出现瓶颈。不过作为普通用户,这部分不需要了解的非常深入。

使用DMV查看

前面的部分略微术语化,不是很直观,那么我们使用DMV来看一下到底是什么样子。

调度、节点和CPU

下面的DMVs可以用于查看这部分的信息:

  • sys.dm_os_schedulers:列出SQL Server用于工作线程调度的调度器,并且包括这些调度器的一些统计信息。

使用下面脚本查看信息

select scheduler_id,cpu_id,status,is_online,current_tasks_count,current_workers_count,active_workers_count,work_queue_count
from sys.dm_os_schedulers

本系列的演示环境结果如下:

SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

从图的第三列可以看到有4个“VISIBLE ONLINE”值,这些是常规调度器,用于运行SQL Server任务和工作线程。然后有数个HIDDENT ONLINE的schedulers,用于一些后台或其他任务比如备份。

有需要的可以参考一下官方文档的完整列表: sys.dm_os_schedulers (Transact-SQL)

  • sys.dm_os_nodes:列出所有已侦测的NUMA节点,如果没有NUMA架构则会有node_id=0的值,另外node_id=64是专用于DAC的节点。

    SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

任务、worker和线程

  • sys.dm_os_workers:列出SQL Server所有工作线程,工作线程由scheduler创建,用于执行特定的任务,默认情况下,max worker threads=0,即动态,由SQL Server根据 配置 max worker threads 服务器配置选项 中的公式创建:

SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性 可以使用sys.dm_os_sys_info来查看当前最大工作线程的值。这个配置值大部分情况下是最优配置,不建议修改,但是确实会有一些情况下会需要手动变更,在后续有机会在提及。

Auto Soft NUMA

这是从 SQL 2016开始出现的新特性,这也是为什么一开始会提及NUMA,现代硬件架构已经支持超过每个CPU拥有8个物理核心的架构,过去简单使用NUMA架构可能会对新架构造成限制,为此SQL Server引入Auto Soft NUMA用于对节点和CPU进行逻辑分区从而提供更好的扩展性。因为本人环境没有足够的CPU数量可以模拟,所以这里没法演示。只能从网上偷几个图来用一下:

下图显示机器有96个逻辑处理器,SQL Server一旦发现每个CPU有超过8个物理核心,就会自动启动Auto Soft NUMA,然后尝试对NUMA节点进行分区。使其逻辑NUMA节点尽可能接近每个节点8个CPU。

SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

自动经行NUMA和CPU的映射:

SQL Server On Linux(15)—— SQL Server On Linux性能(1)——内置特性(1)——内置扩展性

关于这个新特性的技术细节可以参考官方博客: How It Works (It Just Runs Faster): Auto Soft NUMA ,Auto Soft NUMA是默认开启,如果你觉得可能因此出现问题,可以使用ALTER SERVER CONFIGURATION来关闭。

本文以资源调度为切入点,简要提及一些在后续会用到的术语,比如调度、工作线程、任务,另外也介绍了一个SQL 2016的心特性Auto Soft NUMA技术。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Bulletproof Web Design

Bulletproof Web Design

Dan Cederholm / New Riders Press / 28 July, 2005 / $39.99

No matter how visually appealing or packed with content a Web site is, it isn't succeeding if it's not reaching the widest possible audience. Designers who get this guide can be assured their Web site......一起来看看 《Bulletproof Web Design》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具