【997755.com澳门葡京】透过分析等待类型解决系统发出问题,性能调优

一.概述 

  与网络I/O相关的等候的要紧是ASYNC_NETWORK_IO,是指当sql
server重回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput
cache),同时网络层会开首将出口缓存里的数量打包,由客户端接收。如果客户端接收数据包慢,sql
server没有地方存放新数据结果时,那时义务进入ASYNC_NETWORK_IO等待状态。

【997755.com澳门葡京】透过分析等待类型解决系统发出问题,性能调优。  1. 从实例级别查看ASYNC_NETWORK_IO

   997755.com澳门葡京 1

   平均耗时: 46366950.0/43014737.0=1.077ms, 最大等待时间:~40秒。

  2. 重现ASYNC_NETWORK_IO等待

     为了演示ASYNC_NETWORK_IO
现象,我们要求输出一个大结果集。当sql
server内存完全被使用后,大量的数码填充到缓存里,此时sql
server没有地点存放新数据结果,进入等待情状。

-- 一次查询100000条数据输出到客户端
SELECT TOP 100000 * FROM PUB_Stock WITH(nolock)

  监听到的对话如下:

  997755.com澳门葡京 2

  使用dbcc inputbuffer 查询64结果如下:

    997755.com澳门葡京 3

  3.分析与解决

    这几个等待出现的题目强调以下几点:

    (1) 客户端没有把多少立马取走,调整sqlserver
的布置一般景色下是或不是有何大的赞助。

    (2) 网络层可能是问题的案由。 
解决:1是削减对客户端大批量数码输出。 2是加大sqlserver 的network packe
size,从一定水平上优化网络转输的性质,但会追加内存的成本(提议小于设置小于8kb)。

    network packe
size是客户端与sqlserver通讯的各样数据包大小有涉嫌。network packe
size设置的多寡包存放于内存功能组件的connection序列里。默许是4kb设置,输入输出缓存会放在buffer
pool里,若是改成了8kb 或更大,输入输出缓存会放在multi-page里
关于内存可查阅sql server
内存初探。 设置network
packe size 可以由sp_configure控制。客户端应用程序可以覆盖此值如在.net
里陈设如下。

Data Source=(local);Initial Catalog=AdventureWorks;"Integrated Security=SSPI;Packet Size=512

    演示将 net work packe size设置成6050字节

USE AdventureWorks2012 ;  
GO  
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE ;  
GO  
EXEC sp_configure 'network packet size', 6500 ;  
GO  
RECONFIGURE;  
GO 

   也足以能过界面来配置

  997755.com澳门葡京 4

    (3) 应用程序端性能问题,也会导致sql
server里的ASYNC_NETWORK_IO等待。

      sqlserver
的网络层将结果集打包好发向客户端未来,要等到客户端确认收到,才会随着发下一个包。

    (4) 分布式锁

      要是长日子观察ASYNC_NETWORK_IO,同时在sqlserver内部又导致了绿灯,并且该等待持续了很久,就该怀疑是还是不是是分布式的死锁。

  总结:当遇到ASYNC_NETWORK_IO等待,需求检查应用程序自己的健康境况,也要反省选择是不是有须要向sql
server 申请这么大的结果集再次来到,一般来讲sqlserver 本身并未怎么问题。

背景环境:

背景条件:

等候分类与缓解中央流程:

二. 其他网络I/O等待

  那里还有其余几个NET_WAITFOR_PACKET,PROXY_NETWORK_IO,EXTERNAL_SCRIPT_NETWORK_IOF。
  2.1 NET_WAITFOR_PACKET: 在msdn中表明是
网络读取进程中,连接正在等候网络数据包时出现。

    实际级等待如下图所示:
    997755.com澳门葡京 5
  
2.2
前面二个proxy_network_io,external_script_network_iof。在生产环境下没有数据。在msdn中也未尝找到相应解释。只可以通过字面意义去解释。

SQL
Server 2005或以上

SQL Server 2005或以上

 

Select * from
某个表,表的数据量约为30万行,在执行语句时通过观看sys.dm_exec_requests中的wait_type列发现是ASYNC_NETWORK_IO等待,在当地MSSQL2012上测试时发现了PREEMPTIVE_OS_WAITFORSINGLEOBJECT等待,在地面2008R2测试时发现唯有ASYNC_NETWORK_IO等待。

Select * from
某个表,表的数据量约为30万行,在履行语句时通过观看sys.dm_exec_requests中的wait_type列发现是ASYNC_NETWORK_IO等待,在地面MSSQL2012上测试时发现了PREEMPTIVE_OS_WAITFORSINGLEOBJECT等待,在本土2008R2测试时发现唯有ASYNC_NETWORK_IO等待。

997755.com澳门葡京 6

可以选取如下语句询问有关等待的等候时间:

可以动用如下语句询问相关等待的等候时间:

 

select 
 session_id,
 db_name(database_id) as "db_name",
 status,
 wait_type,
 wait_time,
 text
from sys.dm_exec_requests cross apply sys.dm_exec_sql_text(sql_handle) 
where session_id>50
select 
 session_id,
 db_name(database_id) as "db_name",
 status,
 wait_type,
 wait_time,
 text
from sys.dm_exec_requests cross apply sys.dm_exec_sql_text(sql_handle) 
where session_id>50

步骤1.定位问题

系统等待往往能直观的反映出种类问题。通过有些普遍的等候类型,同样可以找到系统瓶颈,结合性能计数器往往固化更精确。

如:系统中留存大气IO类等待,那么可能代表你的磁盘或内存是语句运行缓慢的原由,也是系统的瓶颈所在。

至于网络协议:

有关网络协议:

广大的等候类型

      • CXPACKET
        : 当尝试联机查询电脑互换迭代器时出现。如若针对该等待类型的争用成为问题时,可以考虑下降并行度。
      • IO_COMPLETION :   在等待 I/O
        操作已毕时出现。寻常,该等待类型表示非数据页 I/O。
      • PAGEIOLATCH_ : 在职分等待 I/O 请求中缓冲区的闩锁时暴发。
      • PAGELATCH_ : 在职分等待不处在 I/O
        请求中的缓冲区闩锁时发生。
      • LCK_ :等待闩锁时出现。
      • ASYNC_NETWORK_IO :
        当职责被拦住在网络之后时出现在网络写入中。验证客户端是还是不是正在处理来自服务器的多寡。 
      • OLEDB :当 SQL Server 调用 Microsoft SQL Native Client OLE
        DB 访问接口时现身。该等待类型不用于共同。而是用来提示调用
        OLE DB 访问接口的持续时间 
      • WRITELOG
        :等待日志刷新已毕时出现。导致日志刷新的科普操作是检查点和事务提交。 

 

 

 

 

 

叩问到:shared
memory协议开启时,使用本机名登录会优先选取shared
memory协议,因而此协议只适用于本地连接。

打听到:shared
memory协议开启时,使用本机名登录会优先利用shared
memory协议,因而此协议只适用于本地连接。

步骤2.分析

题材与解决

可以经过如下SQL获取具有非系统会话的网络协议使用情形:

可以通过如下SQL获取具有非系统会话的网络协议使用意况:

CXPACKET 

CXPACKET
这一个等待可以简简单单明了成CPU相关的等候,紧要发生在交互安排中。由于相互之间安顿必要一块多少个task同时工作,那么“协同”分配等等操作的时候现身的就是以此等待。

假定 CXPACKET
在你系统中是无比惨重的守候,那时候一般的显示是你的CPU很高。

997755.com澳门葡京 7

 

解决方案:适当调整并行度

 

 

997755.com澳门葡京 8

 

 

 一般指出系统一旦跨越32个CPU
那么设置成8或者4,如果系统中都是特意短小且反复的话语提议安装成1(取消语句并行,要慎重真的适合您的现象才好)

    并行费用的阀值,紧要控制SQL优化器何时选拔并行布署,提出默许值,此值设置的越小优化器越不难拔取并行布署。

    并行度的装置是对准实例级其余装置(2016中得以对单身数据库设置)

select 
 session_id,
 most_recent_session_id,
 net_transport,
 auth_scheme,
 client_net_address,
 client_tcp_port,
 local_net_address,
 local_tcp_port 
from sys.dm_exec_connections
select 
 session_id,
 most_recent_session_id,
 net_transport,
 auth_scheme,
 client_net_address,
 client_tcp_port,
 local_net_address,
 local_tcp_port 
from sys.dm_exec_connections

IO类

  IO_COMPLETION和PAGEIOLATCH_和WRITELOG **那八个等待是无限常见的和磁盘相关的守候。他们的不一致点是 IO_COMPLETION
 首要针对
非数据页 I/O** ,如备份操作所需的磁盘交互。PAGEIOLATCH_
是数据页相关的磁盘等待。WRITELOG 是日记相关。

  若是系统中那多少个等待是非同寻常等待,表明系统磁盘存在压力或已经化为瓶颈。

  这里用PAGEIOLATCH_ 为例举行认证

  PAGEIOLATCH_的 官方解释:在职务等待 I/O
请求中缓冲区的闩锁时发生。闩锁请求处于“XX”方式。长日子的等候可能提醒磁盘子系统出现问题。

    PAGEIOLATCH_的连带等待:

 

PAGEIOLATCH_DT

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_EX

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“独占”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_KP

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“保持”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_NL

仅供内部使用。

PAGEIOLATCH_SH

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“共享”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_UP

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“更新”模式。长时间的等待可能指示磁盘子系统出现问题。

   
 怎么来驾驭那几个官方解释吗? 首先肯定一点,操作系统CPU操作的任何数据都是从内存中读取的,也就是说读取数据要通过这么的一条路:

这里的PAGEIOLATCH_ 就是暴发在, 磁盘中 ——>  内存中 

  以读取为例:要读取的多少页不在内存中,所以就要去磁盘上读取那部分数据页,去磁盘读取数据的时候就会发出PAGEIOLATCH_的连锁等待,若是磁盘压力大,长日子无法反回数据,那么PAGEIOLATCH_的光阴也会越长,语句执行的时光也会越长。

997755.com澳门葡京 9

 

注 : 当你的系统出现大批量的 PAGEIOLATCH_
类等待,表明您磁盘可能存在压力(磁盘速度不可能满意当下政工需要)或你的内存不够用,不可能缓存业务常用数据而日常要与磁盘交互!

 

997755.com澳门葡京, 

**WRITELOG
 
和磁盘有关的另一个守候状态,正在等候写日记记录,意味着写入速度也强烈跟不上。而速度跟不上一般有三种情景:磁盘压力大响应时间长或真的速度无法满意读写必要。**

 

997755.com澳门葡京 10

997755.com澳门葡京 11

PAGELATCH_ 

PAGELATCH_和 上面讲述的PAGEIOLATCH_
 
就像很像,但中间少了 IO 本条关键。

磁盘中——>内存中 的守候为PAGEIOLATCH_   而 内存中——> 最后利用
的等待为 PAGELATCH_

 当数据现已在内存中的时候SQL SERVER
想要使用这么些数据页就要给那么些数据页加锁。

当等待中冒出众多PAGELATCH_
等待,那么可以作证:

  1. SQL Server没有显然的内存和磁盘瓶颈。
  2. 应用程序发来大批量的并发语句在修改同一张表格里的笔录,而表格架构设计以及用户业务逻辑使得这么些修改都集中在同一个页面,或者数额不多的多少个页面上。那么些页面有的时候也被称作Hot
    Page
    。那样的瓶颈日常只会发出在现身用户比较多的、典型的OLTP系统上。
  3. 那种瓶颈是力不从心通过升高硬件配备解决的,只有通过改动表格设计依旧工作逻辑,让修改分散到尽可能多的页面上,才能拉长并发性能。

 

TempDB造成的 PAGELATCH_(其实也是一种Hot
Page),那里大致的看一个事例:

997755.com澳门葡京 12

 

    系统中设有大气的 PAGELATCH_UP伺机那么是何许成为了Hot
Page 
呢?为何说和TempDB有关呢?

     997755.com澳门葡京 13

 

     等待资源 “2:X:X:
”开首是TempDB,系统中留存多量且高产出的口舌使用临时表和表变量,所以引起TEMPDB瓶颈。请参见:TempDB的确诊和优化

 

从询问结果可以大体预计出当地SSMS作为一个客户端假使运用TCP/IP协议也是要走网卡的,而且执行结果突显了登录使用的情商以及登录验证办法还有使用的端口号。使用shared
memory协议的再三再四不经过socket通讯的不二法门获取数据,而是径直通过系统总线从共享内存读取。

从询问结果能够大致估计出本土SSMS作为一个客户端若是利用TCP/IP协议也是要走网卡的,而且举办结果彰显了登录使用的商议以及登录验证措施还有使用的端口号。使用shared
memory协议的总是不通过socket通讯的不二法门获取数据,而是直接通过系统总线从共享内存读取。

LCK_ 

 LCK_序列中的所有很多,假诺那种等待在系统中大批量留存,可以作证,系统语句间的相互阻塞严重。如我们都掌握的当你update一张表的时候,你的select会被封堵直到update已毕。那里就只是多介绍场景了,主要看一下缓解此类等待的重点方法:

    1. 言辞优化,让语句执行的更快,减弱等候时间。
    2. 动用批量操作代替循环方式。
    3. 尽量减少事务的长短。
    4. 品味下降事务隔离级别。
    5. 上述都无法缓解…请接纳读写分离。

 

 LCK_类型中富含:(这里不做详细解读了)

LCK_M_RIn_NL

当某任务正在等待获取当前键值上的 NULL 锁以及当前键和上一个键之间的插入范围锁时出现。键上的 NULL 锁是指立即释放的锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RIn_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RIn_U

任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的插入范围锁。有关锁兼容性矩阵,请参阅sys.dm_tran_locks

LCK_M_RIn_X

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RS_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的共享范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RS_U

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的更新范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RX_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RX_U

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_RX_X

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_S

当某任务正在等待获取共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_SCH_M

当某任务正在等待获取架构修改锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_SCH_S

当某任务正在等待获取架构共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_SIU

当某任务正在等待获取共享意向更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_SIX

当某任务正在等待获取共享意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_U

当某任务正在等待获取更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_UIX

当某任务正在等待获取更新意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

LCK_M_X

当某任务正在等待获取排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks

有关等待事件:

关于等待事件:

ASYNC_NETWORK_IO 

  此等待状态出现在SQLServer已经把数量准备好,可是网络没有充裕的殡葬速度跟上,所以SQLServer的数量没地方存放。

  1. 现身那种情况相似不是数据库的题材,调整数据库配置不会有大的鼎力相助。
  2. 网络层的瓶颈当然是一个恐怕的由来:对此要考虑是或不是真有必要再次来到那么多多少?
  3. 应用程序端的性能问题,也会造成SQLServer里的ASYNC_NETWORK_IO等待。即使见到了这一个项目的等候,就要检讨应用程序的健康处境,也要反省接纳是或不是有要求想SQLServer申请这么大的结果集。
  4. 次第重临结果集的不二法门 。

ASYNC_NETWORK_IO

ASYNC_NETWORK_IO

This
wait type is where SQL Server has sent some data to a client
through TDS.aspx) and is waiting for the client to
acknowledge that is has consumed the data, and can also show up with
transaction replication if the Log Reader Agent job is running slowly
for some reason.

This wait type is where SQL Server has
sent some data to a client through TDS.aspx) and is waiting for the client to
acknowledge that is has consumed the data, and can also show up with
transaction replication if the Log Reader Agent job is running slowly
for some reason.

以此等待类型表示SQL
Server正在通过TDS向客户端传送请求的数额,也说不定意味着事情复制的日志读取代理由于一些原因运作缓慢。

那一个等待类型表示SQL
Server正在通过TDS向客户端传送请求的数码,也可能代表事情复制的日志读取代理由于某些原因运作缓慢。

(Books Online
description: “Occurs on network writes when the task
is blocked behind the network. Verify that the client is processing data
from the server.”)

(Books Online
description: “Occurs on network writes when the task
is blocked behind the network. Verify that the client is processing data
from the server.”)

(联机丛书的解说:当义务由于被卡住于网络时出现,证明客户端正在吸纳服务端的数码)

(联机丛书的解说:当职务由于被堵塞于网络时出现,注明客户端正在收取服务端的数量)

Other information:

Other information:

This
wait type is never indicative of a problem with SQL Server, and the vast
majority of the time it is nothing to do with the network either (it’s
very common to see advice stating that this is a network issue). A
simple test for network issues is to test the ping time between the SQL
Server and the client/application/web server, and if the ping time is
close to the average wait time, then the wait is because of the network
(which may just be the normal network latency, not necessarily a
problem).

This wait type is never indicative of a
problem with SQL Server, and the vast majority of the time it is nothing
to do with the network either (it’s very common to see advice stating
that this is a network issue). A simple test for network issues is to
test the ping time between the SQL Server and the client/application/web
server, and if the ping time is close to the average wait time, then the
wait is because of the network (which may just be the normal network
latency, not necessarily a problem).

这些等待类型表示毫不SQL
Server的题材,绝一大半气象下也与网络问题无关(很多时候我们都觉着是网络问题),一个简单易行的测试方法是从客户端ping一下服务端,如若推迟接近sys.dm_exec_requests中wait_time的平均值则表明的确与网络有关(很多时候都只是正常的网络延迟,并不是网络故障)。

其一等待类型表示绝不SQL
Server的题目,绝大部分境况下也与网络问题非亲非故(很多时候我们都认为是网络问题),一个简短的测试办法是从客户端ping一下服务端,若是延期接近sys.dm_exec_requests中wait_time的平均值则证实的确与网络有关(很多时候都只是常规的网络延迟,并不是网络故障)。

There
is usually nothing that you can do with your SQL Server code that will
affect this wait type. There are a few causes of this on the client
side, including:

There is usually nothing that you can do
with your SQL Server code that will affect this wait type. There are a
few causes of this on the client side, including:

  • The
    client code is doing what is known as RBAR (Row-By-Agonizing-Row),
    where only one row at a time is pulled from the results and
    processed, instead of caching all the results and then immediately
    replying to SQL Server and proceeding to process the cached
    rows.
  • The
    client code is running on a server that has performance issues, and
    so the client code is running slowly.
  • The
    client code is running on a VM on a host that is configured
    incorrectly or overloaded such that the VM doesn’t get to run
    properly (i.e. slowly or coscheduling issues).
  • The client code is doing what is known
    as RBAR (Row-By-Agonizing-Row), where only one row at a time is
    pulled from the results and processed, instead of caching all the
    results and then immediately replying to SQL Server and proceeding
    to process the cached rows.
  • The client code is running on a server
    that has performance issues, and so the client code is running
    slowly.
  • The client code is running on a VM on
    a host that is configured incorrectly or overloaded such that the VM
    doesn’t get to run properly (i.e. slowly or coscheduling
    issues).

针对此等候事件一般不要对SQL代码做什么样改观,引发此问题的来由基本都是由于来自客户端,例如:

本着此等候事件一般不要对SQL代码做怎么样改观,引发此问题的缘故基本都是由于来自客户端,例如:

  。客户端代码使用RBAR格局处理数据集,每回只从结果集拉取一条数据,而不是整套赢得已毕后再处理。

  。客户端代码使用RBAR格局处理数据集,每趟只从结果集拉取一条数据,而不是漫天取得落成后再处理。

  。客户端所在的服务器有几许性能问题,导致客户端运作缓慢。

  。客户端所在的服务器有好几性能问题,导致客户端运作缓慢。

  。客户端运行在配置错误或者过载的虚拟机上,由此可见也是服务器本身的题目。

  。客户端运行在布局错误或者过载的虚拟机上,同理可得也是服务器本身的题材。

On
the SQL Server side, the only possibility I know of for causing this is
using MARS (Multiple Active Result Sets) with large result sets.

On
the SQL Server side, the only possibility I know of for causing this is
using MARS (Multiple Active Result Sets) with large result sets.

You
can demonstrate this wait type easily by running a query with a large
result set through SSMS on the SQL Server itself, with no network
involved.

You can demonstrate this wait type easily
by running a query with a large result set through SSMS on the SQL
Server itself, with no network involved.

在数据库服务端,就自己所知唯一可能的原因就是行使了MARS的大结果集引起的。(其实就是因为结果集太大)

在数据库服务端,就自我所知唯一可能的缘由就是运用了MARS的大结果集引起的。(其实就是因为结果集太大)

您可以很随意的通过在数据库服务器上利用本机名登录的法子,运行一个获得大结果集的查询,来验证那些等待事件是不是会合世。

你可以很轻易的经过在数据库服务器上采取本机名登录的艺术,运行一个取得大结果集的询问,来证实那些等待事件是或不是会师世。

Some
other things you can try:

Some other things you can try:

  • Look
    for incorrect NIC settings (e.g. TCP Chimney Offload enabled) with
    the help of your network/system administrator. Whether some settings
    should be enabled or not depends on the underlying OS version.
    See this
    post for some more details.
  • Consider
    increasing the TDS packet size (carefully) – see this
    post for more details.
  • Look for incorrect NIC settings (e.g.
    TCP Chimney Offload enabled) with the help of your network/system
    administrator. Whether some settings should be enabled or not
    depends on the underlying OS version. See this
    post for some more details.
  • Consider increasing the TDS packet
    size (carefully) – see this
    post for more details.

任何的片段品尝:

其余的一对品尝:

  。是还是不是有其它的网络设置错误,联系你的网络管理员修改部分注册表中的网络参数,一些参数在某些OS版本中是或不是应该被启用参考那里(见如上超链接)。

  。是或不是有其他的网络设置错误,联系你的网络管理员修改部分注册表中的网络参数,一些参数在好几OS版本中是否合宜被启用参考这里(见如上超链接)。

  。设想伸张TDS的包大小(谨慎一些),参考那里(见如上超链接)。

  。设想扩展TDS的包大小(谨慎一些),参考那里(见如上超链接)。

PREEMPTIVE_OS_WAITFORSINGLEOBJECT

PREEMPTIVE_OS_WAITFORSINGLEOBJECT

Description:

Description:

This
wait type is when a thread is calling the Windows WaitForSingleObject.aspx) function for synchronization with an
external client process that is communicating using that
object.

This wait type is when a thread is calling
the Windows WaitForSingleObject.aspx) function for synchronization with an
external client process that is communicating using that
object.

(Books Online
description: N/A
–代表联机丛书没有表明)

(Books Online
description: N/A
–表示联机丛书没有阐明)

本条等待事件代表一个线程正在向外部客户端进度同步某个对象的多少,由此应运而生此种等待。一般此种等待出现在SQL
Server 2012及以上的版本,往日用ASYNC_NETWORK_IO代替。

以此等待事件表示一个线程正在向外部客户端进度同步某个对象的多少,由此应运而生此种等待。一般此种等待出现在SQL
Server 2012及以上的本子,此前用ASYNC_NETWORK_IO代替。

Other information:

Other information:

This
wait type is commonly seen in conjunction(同时出现) with ASYNC_NETWORK_IO, depending on the network transport used
to communicate with the client, so to troubleshoot, follow the same
steps as for ASYNC_NETWORK_IO.

This wait type is commonly seen in
conjunction(同时出现) with ASYNC_NETWORK_IO, depending on the network transport used
to communicate with the client, so to troubleshoot, follow the same
steps as for ASYNC_NETWORK_IO.

Note
that when a thread calls out to Windows, the thread changes from
non-preemptive (SQL Server controls the thread) to preemptive (Windows
controls the thread) mode. The thread’s state will be listed as RUNNING, as SQL Server doesn’t know what Windows
is doing with the thread.

Note that when a thread calls out to
Windows, the thread changes from non-preemptive (SQL Server controls the
thread) to preemptive (Windows controls the thread) mode. The thread’s
state will be listed as RUNNING, as SQL Server doesn’t know what Windows
is doing with the thread.

那种等待事件一般与ASYNC_NETWORK_IO伺机事件联合出现,取决于连接所使用的网络传输类型,由此解决步骤参考ASYNC_NETWORK_IO的缓解办法。

那种等待事件一般与ASYNC_NETWORK_IO等候事件联合出现,取决于连接所选用的网络传输类型,因而解决步骤参考ASYNC_NETWORK_IO的解决办法。

小心,当一个接连线程被从SQL
Server控制(非抢占式)到被Windows控制(抢占式)的后,线程的场所就会变为running,此时SQL
Server并不知道windows在对此线程做哪些。

留意,当一个再三再三十二线程被从SQL
Server控制(非抢占式)到被Windows控制(抢占式)的后,线程的情状就会变为running,此时SQL
Server并不知道windows在对此线程做怎么样。

关于抢占式与非抢占式的界别,参考官网博客中关SQL
OS与Windows OS对线程的不一致处理情势的牵线。

有关抢占式与非抢占式的区分,参考官网博客中关SQL
OS与Windows OS对线程的不相同处理形式的牵线。

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website