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

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

内容简介:本人新书上市,请多多关照: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技术。


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

查看所有标签

猜你喜欢:

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

图解CSS3

图解CSS3

廖伟华 / 机械工业出版社 / 2014-7-1 / CNY 79.00

本书是CSS3领域的标准性著作,由资深Web前端工程师根据CSS3的最新技术标准撰写。内容极为全面、丰富和翔实,由浅入深地讲解了CSS3新特性的语法、功能和使用技巧,涵盖选择器、边框、背景、文本、颜色、UI、动画、新型盒模型、媒体查询、响应式设计等各种模块;写作方式创新,有趣且易懂,用图解的方式来描述CSS3的每一个特性甚至每一个步骤都配有实战效果图;包含大量案例,实战性强,每个特性都有作者从实践......一起来看看 《图解CSS3》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

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

Base64 编码/解码