sql server 性能调优之 资源等待 CXPACKET

原文:sql server 性能调优之 资源等待 CXPACKET

一.概述

   CXPACKET是指:线程正在等待彼此完成并行处理。什么意思呢? 当sql server发现一条指令复杂时,会决定用多个线程并行来执行,由于某些并行线程已完成工作,在等待其它并行线程来同步,这种等待就叫CXPACKET。

  为什么会有并行线程呢?  因为在sql server 里有个任务调度SCHEDULER是跟操作系统CPU个数 默认是一 一匹配的,  我们也可能通过sp_configure来设置最大并行度,也就是Max Degree of Parallelism (MAXDOP)。 关于调度可参考" sql server 任务调度与CPU"

  并行处理的优势: 用多个线程来执行一个指令,当sql server发现一条指令复杂时或语句中含有大数据量要处理,此时执行计划会决定用多个线程并行来执行,从而提高整体响应时间,例如一个指令读入100w条记录, 如果用一个线程做 可能需要10秒, 如果10个线程来做 可能只需要1秒,加上线程间同步时间也不过2秒。

  并行处理的劣势:1是并行线程要等待同步。2是由于这10个线程全力以赴,就有10个对应的cpu,这样别的用户发过来的指令就会受到影响,甚至拿不到cpu来执行。所以对于并发度要求高的需要及时响应的,一般会建议手动设置每个指令的并行线程数。反之可以不设置Max Degree of Parallelism由系统默认去并行或者设少一点并行度。

   1.1   查询 CXPACKET的等待

  借助上一次性能调优的资源等待统计图,会发现等待时间最长的就是CXPACKET类型。

  

 1.2  模拟CXPACKET的并行处理 

下面是一个分组查询,在执行计划中看到,以采用了并行处理

 

下面是通过sys.dm_os_waiting_tasks 来查看该语句的task任务。

或采用sys.sysprocesses查看结果。下面一个举例中 会话session是SPID 56。 这里我们明显看到,SQL Server使用了5个线程kpid 来执行这个query。

    

 1.3  分析CXPACKET的并行处理

  由于并行的原因而从出现了Expacket 的等待。是否并行的执行,通过执行计划可以查看到,下面是查询大表中的数据,sql server自动加启了并行执行。

  

  

  共调用了32个线程来并行查询

  

1.4  控制CXPACKET并行度

   有时后台执行的sql, 对于并发度要求不高,  不需要及时响应的,一般会建议手动设置每个指令的并行线程数。

  

    设置可以发现并行度就二个线程。

    

1.5  CXPACKET资源等待总结

 (1) 通过实例级别查出CXPACKET的等待时间包括总等时间,平均等待时间,最大等待时间。

 (2) 查看并行的前十条语句 (这种查询不建议使用,因为条件是查找含有并行parallel的执行计划,查询响应很慢)。

SELECT TOP 10
        p.* ,
        q.* ,
        qs.* ,
        cp.plan_handle
FROM    sys.dm_exec_cached_plans cp
        CROSS APPLY sys.Dm_exec_query_plan(cp.plan_handle) p
        CROSS APPLY sys.Dm_exec_sql_text(cp.plan_handle) AS q
        JOIN sys.dm_exec_query_stats qs ON qs.plan_handle = cp.plan_handle
WHERE   cp.cacheobjtype = ‘Compiled Plan‘
        AND p.query_plan.value(‘declare namespace p="http://schemas.microsoft.com/SQL Server/2004/07/showplan";
max(//p:RelOp/@Parallel)‘, ‘float‘) > 0
OPTION  ( MAXDOP 1 )

(3) 找出cpu和i/o耗性能最高的sql语句, 查看执行计划是否有并行处理。

(4)  找出程序中感觉复杂的sql语句,查看执行计划。

(5)  避免或减少白天执行频繁复杂sql,优化sql 建好索引。

(6)  当执行计划发现并不需要用并行执行时,强制sql 使用OPTION ( MAXDOP x) 也不会采用并行执行。

最后考虑调整并行度的开销阈值或降低并行度。

  设置sql语句级的MAXDOP。如果MAXDOP=1的话,使得一个BATCH只对应一个TASK。如果没有设置MAXDOP,一个BATCH可能会产生多个TASKS,那么TASK之间的协调,等待等等,将是很大的开销。把MAXDOP设小,能同时减少WORKER的使用量。所以,如果我们看到等待类型为CXPACKET的话,那么我们可以设置MAXDOP,减少并行度。

原文地址:https://www.cnblogs.com/lonelyxmas/p/10229794.html

时间: 2024-10-10 09:44:23

sql server 性能调优之 资源等待 CXPACKET的相关文章

sql server 性能调优之 资源等待 LCk

原文:sql server 性能调优之 资源等待 LCk 一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出耗时最高的LOK锁. select wait_type, waiting_tasks_count, wait_time_ms , max_wait_time_ms, signal_wait_time_ms from sys.dm_os_wai

sql server 性能调优之 资源等待PAGEIOLATCH

原文:sql server 性能调优之 资源等待PAGEIOLATCH 一.概念 在介绍资源等待PAGEIOLATCH之前,先来了解下从实例级别来分析的各种资源等待的dmv视图sys.dm_os_wait_stats.它是返回执行的线程所遇到的所有等待的相关信息,该视图是从一个实际级别来分析的各种等待,它包括200多种类型的等待,需要关注的包括PageIoLatch(磁盘I/O读写的等待时间),LCK_xx(锁的等待时间),WriteLog(日志写入等待),PageLatch(页上闩锁)Cxpa

sql server 性能调优 资源等待之 LCk

一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 "sql server 锁与事务拨云见日".下面还是使用sys.dm_os_wait_stats 来查看,并找出耗时最高的LOK锁. select wait_type, waiting_tasks_count, wait_time_ms , max_wait_time_ms, signal_wait_time_ms from sys.dm_os_wait_stats where wait_type

sql server 性能调优 资源等待之网络I/O

原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput cache),同时网络层会开始将输出缓存里的数据打包,由客户端接收.如果客户端接收数据包慢,sql server没有地方存放新数据结果时,这时任务进入ASYNC_NETWORK_IO等待状态. 1. 从实例级别查看ASYNC_NETWORK_IO 平均耗时: 4636

sql server 性能调优之 逻辑内存消耗最大资源分析1 (自sqlserver服务启动以后)

原文:sql server 性能调优之 逻辑内存消耗最大资源分析1 (自sqlserver服务启动以后) 一.概述 IO 内存是sql server最重要的资源,数据从磁盘加载到内存,再从内存中缓存,输出到应用端,在sql server 内存初探中有介绍.在明白了sqlserver内存原理后,就能更好的分析I/O开销,从而提升数据库的整体性能. 在生产环境下数据库的sqlserver服务启动后一个星期,就可以通过dmv来分析优化.在I/O分析这块可以从物理I/O和内存I/O二方面来分析, 重点分

sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

原文:sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后) 一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效果,因为sql server系统作为一个整体性,它都是紧密相连的,例如:解决了sql语句中I/O开销较多的问题,那对应的CPU开销也会减少,反之解决了CPU开销最多的,那对应I/O开销也会减少.解

SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈

原文:SQL Server 性能调优(一)--从等待状态判断系统资源瓶颈 通过DMV查看当时SQL SERVER所有任务的状态(sleeping.runnable或running) 2005.2008提供了以下三个视图工详细查询: DMV 用处 Sys.dm_exec_requests 返回有关在SQL Server中执行的每个请求的信息,包括当前的等待状态 Sys.dm_exec_sessions 对于每个通过身份验证的会话都返回相应的一行.此时图是服务器范围的视图.此视图首先可以查到服务器负

sql server 性能调优之 SQL语句阻塞查询

原文:sql server 性能调优之 SQL语句阻塞查询 在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后.就需要检查数据库是否有出现阻塞 当时数据库的生产环境中主表数据量超过2000w,子表数据量超过1亿,且更新和新增频繁.再加上做了同步镜像,很消耗资源. 这时就要新建一个会话,大概需要了解以下几点: 1.当前活动会话量有多少? 2.会话运行时间? 3.会话之间有没有阻塞? 4.阻塞时间 ? 查询阻塞的方法有很多.有sql

sql server 性能调优之 当前用户请求分析 (1)

原文:sql server 性能调优之 当前用户请求分析 (1) 一. 概述 在生产数据库运行期间,有时我们需要查看当前用户会话状态或者是说数据库当前是否运行良好, 应用的场景比如:当运行的应用系统响应突然变慢时需要分析数据库的.或想分析当前的数据库是否繁忙,是否有长时间的等待, 又或者执行一个sql的回滚状态查看,想手动kill掉一个会话时 等等.都需要从当前的会话状态去分析. 这篇主要介绍sys.sysprocesses 函数,这里面包含了当前用户大量的信息,如会话进程有多少,等待时间,op