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技术。


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

查看所有标签

猜你喜欢:

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

算法技术手册

算法技术手册

George T. Heineman、Gary Pollice、Stanley Selkow / 杨晨、李明 / 机械工业出版社 / 2010-3 / 55.00元

《算法技术手册》内容简介:开发健壮的软件需要高效的算法,然后程序员们往往直至问题发生之时,才会去求助于算法。《算法技术手册》讲解了许多现有的算法,可用于解决各种问题。通过阅读它,可以使您学会如何选择和实现正确的算法,来达成自己的目标。另外,书中的数学深浅适中,足够使您可以了解并分析算法的性能。 较之理论而言,《算法技术手册》更专注于应用。《算法技术手册》提供了高效的代码解决方案,使用多种语言......一起来看看 《算法技术手册》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具