SQLServer CXPACKET等待事件

news2024/10/4 5:53:40

文章目录


SQL Server 中的 CXPACKET 等待类型是最容易被误解的等待统计之一。CXPACKET 这个术语来源于 “Class Exchange Packet”(类交换包)。其本质可以描述为在单个进程的两个并行线程之间交换数据行的过程。其中一个线程是“生产者线程”,另一个线程是“消费者线程”。这种等待类型与并行处理直接相关,它在 SQL Server 执行使用并行计划的查询时发生。
一般来说,CXPACKET 等待类型在 SQL Server 中是正常的,它表示 SQL Server 在执行查询时使用了并行计划,通常比串行执行的查询更快。当使用并行计划时,查询会在多个线程中执行,只有当所有并行线程完成后,查询才能继续。这意味着查询的速度将取决于最慢的线程。
下图将用于更好地理解 SQL Server CXPACKET 等待类型,并有助于解释它。
在这里插入图片描述
从这个图中可以看出,每当并行查询执行能为 SQL Server 提供好处时,它会为该语句创建多个线程,使每个并行进程都生成自己的数据子集。每个线程可以由一个独立的物理或逻辑 CPU 处理。生产者线程和消费者线程之间的通信是通过生产者-消费者队列进行的,该队列实际上是一个缓冲区。负责实现该队列的查询操作符称为Exchange 操作符。

  • 一个或多个生产者线程将生成数据包并将其发送到缓冲区,然后这些数据会由消费者线程从缓冲区读取。在此过程中,可能会遇到三种导致过多 CXPACKET 等待的情况:
    消费者无法读取数据包,因为缓冲区(队列)为空——这意味着生产者线程没有向缓冲区提供数据或* 提供数据的速度很慢。这意味着一些生产者线程由于等待资源(如 CPU、内存授权、I/O 等)而工作缓慢,或者某些生产者线程只是被阻塞了。
  • 生产者线程无法将数据包存储到缓冲区,因为缓冲区已满。这意味着消费者线程无法足够快地处理数据,导致生产者线程必须等待将数据存储到缓冲区,一旦缓冲区满了。
  • 对于小查询,过度的并行处理会导致创建并行计划和并行执行的成本高于串行计划,执行速度也更慢。
  • 在并行线程之间,数据包的不均衡分配可能导致某些线程的工作完成得比其他线程快,然后它们必须等待其他数据包完成工作

因此,让我们深入了解 SQL Server 的 CXPACKET 等待类型,以更详细地理解这个过程。让我们考虑在使用并行计划执行查询时的理想场景。
在这里插入图片描述
并行成本阈值(Cost Threshold for Parallelism,CTFP)的值以秒为单位,这意味着对于每个 SQL Server 估计运行时间超过 5 秒的查询,将创建一个并行计划。这个默认值是在上世纪九十年代设定的,当时使用的是单核计算机、慢速硬盘和内存,而对于现代计算机来说,这个值显然并不理想。在那个时代,执行 5 秒的查询,在现代机器上可能只需几毫秒。一般来说,以秒为单位估计查询执行时间并不是一个好方法,因为查询的成本实际上取决于 CPU、内存、I/O 等因素,SQL Server 并不知道 CPU 的速度、可用的核心/CPU 数量以及使用的 HDD/SSD 的速度。
为了防止不必要的并行性,可以增加 CTFP 数值,通常认为最小值应设为 25。最近的分析表明,现代计算机的最佳最小值应该是 50。然而,找到适当的 CTFP 数值并对其进行微调以获得最佳性能,必须通过分析查询计划和可用资源来确定具体系统的最佳 CTFP 配置。有关如何正确确定 CTFP 值的良好资源是《计划缓存》中的“调整并行成本阈值”。
因此,只有在上述资源耗尽且 CXPACKET 等待时间仍然很大时,才应该考虑调整最大并行度(Maximum Degree of Parallelism,MAXDOP)。MAXDOP 数值代表 SQL Server 将用于并行查询执行的 CPU 核心数量。MAXDOP 的默认设置为 0,意味着将使用所有 CPU 核心进行处理。对于现代计算机,拥有 8、12、32、64 或更多核心,不建议让单个查询占用所有核心。
当高 CXPACKET 值伴随有 LATCH_XX 以及 PAGEIOLATCH_XX 或 SOS_SCHEDULER_YIELD 时,表明慢/低效的并行性本身是性能问题的根本原因。在这种情况下,如果 LATCH_XX 等待是 ACCESS_METHODS_DATASET_PARENT 或 ACCESS_METHODS_SCAN_RANGE_GENERATOR 类,那么并行级别很可能是瓶颈,也是查询性能问题的真正根源。这是需要降低 MAXDOP 的典型例子。
对于那些希望了解如何为 Intel、AMD 和/或虚拟机正确设置 MAXDOP 的人,这里有一篇很好的文章,内容是配置 max degree of parallelism(服务器配置选项)
在这里插入图片描述上述所有描述的目标都是为了让大查询能够并行执行,因为它们可以从中显著受益,并确保小查询以序列化方式运行,因为这是对小查询来说更高效的方式。
另一个可能导致 SQL Server 中出现较高 CXPACKET 等待类型值的场景是数据在线程之间分布不均。这种情况下,CXPACKET 本身并不是问题,而是 CXPACKET 值表明存在其他问题。在这种情况下,排查应集中在其他潜在问题上,以更好地理解这个场景是如何导致 CXPACKET 值偏高的。以下图示将用于说明这一场景。
在这里插入图片描述
在这个特定场景中,可以看到线程 1 和线程 2 已经执行并完成了处理,所以它们现在在等待其他线程完成执行。正如在此特定案例中所示,线程 3 和线程 5 仍在运行。这种类型的线程等待称为 CXPACKET 等待。由于每个线程要处理的数据分布不均,有时 CXPACKET 等待类型的值可能会显著升高。大部分负担可能会集中在一两个线程上,而不是所有五个线程平分,如我们例子中所示,因此完成所需的时间会更长。在这种情况下,CXPACKET 等待再一次表明存在问题,虽然问题并不在于并行处理本身,而是由于外部资源导致线程间数据分布不均。应当通过调查问题源,例如不当的索引或过时的统计信息等原因,来排查问题。
也有可能是线程需要等待某些外部资源,最常见的情况是:

  • 当线程需要与另一个数据库或应用程序共享 I/O 资源时,这会导致处理速度变慢,需要更多时间来完成工作。
  • 一个执行时间较长的大型并行查询,不同的线程需要访问存储在不同物理或逻辑存储设备上的不同数据库,这些存储设备的速度可能不同。
  • 一些并行线程所需的资源被同时执行的临时查询阻塞。

这也是一个CXPACKET等待类型只是一个问题指示的例子。在这种情况下,建议查看相关的等待类型,如LCK_M_XX或PAGEIOLATCH_XX,以及经常伴随前两者的IO_COMPLETION和ASYNC_IO_COMPLETION等待。诊断和排查这些等待类型,而不是专注于CXPACKET,将有助于解决通过高CXPACKET等待类型值标示出的并行问题的根本原因。
总结一下,以下是诊断高CXPACKET等待统计值的原因时推荐的步骤(在对SQL Server做出任何仓促反应和更改之前):

  • 不要将 MAXDOP 设置为 1,因为这从来都不是解决方案。
  • 调查查询和 CXPACKET 的历史记录,了解并确定它是否只是发生过一两次,因为这可能是系统正常运行时的一个例外。
  • 检查查询中使用的表的索引和统计信息,确保它们是最新的。
  • 检查并确保并行度阈值(CTFP)设置的值适合你的系统。
  • 检查 CXPACKET 是否伴随有 LATCH_XX(可能还伴随有 PAGEIOLATCH_XX 或 SOS_SCHEDULER_YIELD)。如果是这种情况,那么应降低 MAXDOP 值以适应你的硬件。
  • 检查 CXPACKET 是否伴随有 LCK_M_XX(通常伴随 IO_COMPLETION 和 ASYNC_IO_COMPLETION)。如果是这种情况,并行处理并不是瓶颈。应排查这些等待类型,找到问题的根本原因和解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解Matplotlib构图组成

介绍 Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一系列丰富的工具,可以绘制高度自定义且适用于各种应用场景的图表。无论你是数据科学家、工程师,还是需要处理数据图形表示的任何人,理解如何操作和定制 Matplotlib 中的图表…

ElasticSearch 备考 -- 备份和恢复

一、题目 备份集群下的索引 task,存储快照名称为 snapshot_1 二、思考 这个涉及的是集群的备份,主要是通过创建快照,涉及到以下2步骤 Setp1:注册一个备份 snapshot repository Setp2:创建 snapshot 可以通过两种方…

Ubuntu18.04安装cuda11.1(出现c++版本问题)

一、概述 需要使用到ubuntu18.04进行cuda的配置,最新版本的cuda跟pytorch的版本不太适配,所以为了能够复现,我选择了一些老版本的cuda11,其使用的范围更加广泛。将自己 二、具体操作 (一)安装流程 1.官网…

为什么疾风气象大模型比传统天气预报更准?

近年来,气象大模型逐渐成为天气预报的核心工具,其预测精度和可靠性远超传统天气预报方法。本文将探讨气象大模型为何比传统天气预报更加准确的原因,分析其优势以及在气象预测领域的应用前景。 1. 传统天气预报的局限性 传统天气预报通常依赖…

win11/win10/windows下快安装并使用git

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Git 的特点?二、GIT安装方法1.打开GIT官网2.下载git安装程序整个安装过程基本上直接用默认选项就可以 总结 前言 提示:GIT介绍 GI…

十一不停歇-学习ROS2第一天 (10.2 10:45)

话题通信 1.1 发布第一个节点: import rclpy #导入此类模块 rcl类型 from rclpy.node import Node #从这个子模块中导入这类函数 def main(): #定义这个函数 rclpy.init() #使用初始化函数 node Node(hello_python) 将类函数里面的内容调给…

Pikachu- SQL Inject - http header 头注入

header 头注入,是一种场景;跟以往的没区别,只是发生在 header 响应头; 有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证),或者通过http header头信息获取客户端的一些信息,比…

帝国CMS系统开启https后,无法登陆后台的原因和解决方法

今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…

【Kubernetes】常见面试题汇总(五十四)

目录 120.创建 init C 容器后,其状态不正常? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于【Kubernetes】的生产…

java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码

一、项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,…

关于邻域粗糙集的性质及自我理解

关于邻域粗糙集的性质及定理理解 以上是邻域粗糙集的一些基本定义。HU 等人提出了 NRS,是基于经典的在粗糙集模型提出的,该模型基于邻域关系而非等价关系,模型是建立在邻域结构上的,可以直接应用在连续型数据集上。 下面主要是对…

Navicat Premium 12 for Mac中文永久版

目录 一、安装二、修改rpk文件三、获取请求码四、获取jh码 Tip:由于一些jy词,一直不让我发布🙄,所以只能用拼音简写代替,是不是很无语,我也很无语,各位自行体会一下😒 为了避免每次换…

使用vscode调试wails项目(golang桌面GUI)

文章目录 安装 Golang 环境安装 NPM安装 VSCode安装 Go 插件安装 Go 插件依赖工具安装 Wails系统检查 准备项目Visual Studio Code 配置安装和构建步骤参考资料 安装 Golang 环境 访问 golang 官网下载环境安装包:https://go.dev/dl/ 安装 NPM 从 Node 下载页面 …

音视频入门基础:FLV专题(12)——FFmpeg源码中,解析DOUBLE类型的ScriptDataValue的实现

一、引言 从《音视频入门基础:FLV专题(9)——Script Tag简介》中可以知道,根据《video_file_format_spec_v10_1.pdf》第80到81页,SCRIPTDATAVALUE类型由一个8位(1字节)的Type和一个ScriptDataV…

ElasticSearch备考 -- 多字段查询

一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式: Center:有游戏物体父子关系的时候,中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 :调试/暂停/下一帧 快捷键 1.Alt鼠标左键:可以实现巡游角度查看场景 2.鼠标滚轮…

龙芯1B开发板自检程序

本代码为当时,参加嵌入式系统开发与应用赛项,训练时编写的自检程序,用于将程序烧录后,逐个演示板载模块功能是否正常,快速定位问题。这代码编写的时间为2023年,好像原代码是参考2023年官方案例来编写的。目…

计算机的错误计算(一百一十二)

摘要 计算机的错误计算(六十三)与(六十八)以及(六十九)分别探讨了大数与 附近数以及 附近数 的余切函数的计算精度问题。本节讨论余切序列(即迭代 )的计算精度问题。 余切序列是指…

沉迷赌博卖妻卖女,演员吴晓亮被骂到微博沦陷

《浴火之路》自10月1日上映以来,便因其暴力复仇之极致爽快、影像风格之震撼、演员演技之精湛而收获了极高的关注度。 其中,“无情无义人贩子”陆永安沉迷赌博,不惜拐卖亲生女儿小叶子,这一角色让人咬牙切齿,而饰演者演…

【计算机毕业设计】springboot学生考勤管理系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…