SQL SERVER CXPACKET-Parallelism Wait Type 的解决方案

CXPACKET 已经成为所有等待类型中最常见的一种了。我通常会在多CPU系统的前五位等待类型统计中看见CXPACKET.

 

  联机丛书:

    当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。

 CXPACKET 解释:

    当为SQL查询创建一个并行操作时,会有多个线程去执行这个查询。每个查询处理不同的数据集或行集。

      因为某些原因,一个或多个线程滞后,而产生了CXPACKET等待状态。

      有一个组织/协调(organizer/coordinator)线程(Thread 0),它需要等待所有线程完成并聚合数据来呈现给客户端。

      组织线程必须等待所有线程完成处理才能进行下一步。由于组织线程等待缓慢的线程完成处理所产生的等待,就叫CXPACKET等待。

      请注意,并不是所有的CXPACKET等待类型都是不好的事情。你也许会遇某个CXPACKET等待是完全有意义的案例,有时它也是不可避免的。

      如果你在任何查询上禁止此种等待,那么查询也许会变慢,因为不能为它执行并行操作。

 减少CXPACKET等待:

    我们不能抛开服务器负载类型来讨论减少CXPACKET等待。

   OLTP: 在纯OLTP系统上,它的事务较短,查询也不长,但是通常很快速。设置“Maximum degree of Parallelism”(MAXDOP)为1

          这样做可以确保查询永远不必使用并行方式运行,并且不会导致更多的数据库引擎开销。         

EXEC sys.sp_configure N ' cost threshold for parallelism ', N ' 1 '
GO
RECONFIGURE  WITH OVERRIDE
GO

   Data-warehousing / Reporting server: 因为查询执行时间一般较长,建议设置“Maximum degree of Parallelism”(MAXDOP)为0。

                                            这样大多数查询将会利用并行处理,执行时间较长的查询也会受益于多处理器而提高性能。      

EXEC sys.sp_configure N ' cost threshold for parallelism ', N ' 0 '
GO
RECONFIGURE  WITH OVERRIDE
GO

     Mixed System (OLTP & OLAP):这样环境会是一个挑战,必须找到正确的平衡点。我采取了非常简单的方法。

                                 我设置“Maximum degree of Parallelism”(MAXDOP)为2,这样意味着查询仍会使用并行操作但是仅利用2颗CPU。

                                 然而,我把“并行查询阀值”设置为较高的值,这样的话,不是所有的查询都有资格使用并行,除了那些查询成本较高的查询。

                                 在一个即有OLTP查询又有报表服务器的系统上,我发现这样做运行得很好。

                                 在这里我将会设置“‘Cost Threshold for Parallelism’”为25(如图)。你可以选择任何值。但你只能通过在系统上做实验来找到合适的值。

                                 在下面的脚本中,我设置“Max Degree of Parallelism”为2,这样的话,那些具有较高成本的查询(这里是25),将会在2颗CPU上执行并行查询。

                                 同时,不管服务器有多少颗CPU,查询只会选择两颗CPU来执行。               

EXEC sys.sp_configure N ' cost threshold for parallelism ', N ' 25 '
GO
EXEC sys.sp_configure N ' max degree of parallelism ', N ' 2 '
GO
RECONFIGURE  WITH OVERRIDE
GO

--------------------------------------------

如蒙转载或引用,请保留以下内容:
Joe's Blog:http://www.cnblogs.com/Joe-T/


完整维护过程:

这里涉及两个值:

cost threshold for parallelism 是默认设定 5S. the estimated cost 高于5S才安排并发

sp_configure 'show advanced options', 1;

GO

RECONFIGURE WITH OVERRIDE;

GO

sp_configure 'max degree of parallelism', 2;--假如是8个(核)cpu

GO

RECONFIGURE WITH OVERRIDE;

GO

max degree of parallelism 能最大限制的控制并行导致CPU不可用而造成的短查询的等待

sp_configure 'show advanced options', 1;

GO

RECONFIGURE WITH OVERRIDE;

GO

sp_configure 'cost threshold for parallelism', 10;--将此时间增加

GO

RECONFIGURE WITH OVERRIDE;

GO

也可以单独指定option(maxdop 1)来限制

<think>好的,我现在需要帮用户查找关于Flink中`table.exec.resource.default-parallelism`配置项的信息。首先,我得确认这个配置的作用和适用场景。根据之前的记忆,Flink的并行度设置对于作业的资源分配和性能优化非常重要,而`table.exec.resource.default-parallelism`应该是用于Table API或SQL作业的默认并行度配置。 接下来,我需要验证这个配置的具体用途。可能它定义了在没有显式设置并行度时,Flink Table作业的各个算子会使用的默认并行度。这样的话,用户可以通过调整这个值来控制任务的并发度,从而影响资源使用和作业的执行效率。 然后,我应该考虑这个配置的使用方法。用户可能在`flink-conf.yaml`中设置,或者在代码中通过`TableConfig`来动态配置。需要确认这两种方法的具体语法和示例,确保用户能够正确应用。 另外,需要注意这个配置的版本兼容性。比如,Flink的不同版本可能有不同的配置方式,或者某些版本引入了这个参数。需要提醒用户检查他们的Flink版本是否支持该配置。 用户可能想知道这个配置和DataStream API中的`setParallelism()`有什么区别,以及何时应该使用这个配置而不是其他并行度设置。这时候需要解释不同配置的优先级和应用场景,帮助用户理解如何选择。 还有,用户可能关心如何验证配置是否生效,以及如何监控并行度的实际使用情况。可能需要指导他们查看Flink Web UI或者日志来确认并行度的设置情况。 最后,应该生成相关问题,帮助用户进一步探索相关配置和优化策略,比如其他影响并行度的参数、动态调整并行度的方法,或者资源管理的最佳实践。</think>关于Flink的`table.exec.resource.default-parallelism`配置项,以下是详细说明: ### 1. 配置项作用 该参数用于定义Flink Table API/SQL作业中算子的默认并行度。当未显式指定算子并行度时,系统将使用此值作为计算资源的分配基准。主要影响以下场景: - SQL查询中未指定`/*+ OPTIONS('parallelism'='n') */`提示时 - Table API作业未调用`setParallelism()`方法时 - 未通过`ExecutionConfig`设置全局并行度时[^1] ### 2. 配置方式 #### (1) 配置文件设置 在`flink-conf.yaml`中添加: ```yaml table.exec.resource.default-parallelism: 4 ``` #### (2) 代码动态配置 ```java TableConfig tableConfig = TableEnvironment.getTableEnvironment(env).getConfig(); tableConfig.set("table.exec.resource.default-parallelism", "4"); ``` ### 3. 优先级顺序 当存在多个并行度设置时,优先级从高到低为: 1. 算子级提示(SQL Hint) 2. 执行环境级设置(`env.setParallelism()`) 3. 本配置项 4. 集群默认配置(默认1) ### 4. 使用建议 - 生产环境建议设置为集群可用slot总数与任务复杂度的平衡值 - 需配合`taskmanager.numberOfTaskSlots`参数协调设置 - 对批处理作业更敏感,流处理作业建议结合反压监控动态调整[^1] ```sql -- 示例:使用SQL Hint覆盖默认值 SELECT /*+ OPTIONS('parallelism'='8') */ user_id, COUNT(*) FROM clicks GROUP BY user_id; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值