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

来源:http://www.mnuet.com 作者:产品分类 人气:190 发布时间:2019-10-15
摘要: 一.概念   SOS_SCHEDULER_YIELD等待类型是三个职分自愿废弃当前的能源占用,让给别的职务使用。  那一个等待类型与CPU有一直关乎,与内部存款和储蓄器与也可以有直接关联,与CPU有涉

 一.概念

   SOS_SCHEDULER_YIELD等待类型是三个职分自愿废弃当前的能源占用,让给别的职务使用。   那一个等待类型与CPU有一直关乎,与内部存款和储蓄器与也可以有直接关联,与CPU有涉嫌是因为在sql server里是经过职分调整SCHEDULEPAJERO来波及CPU。 通过SCHEDULE奥迪Q7下的Worker线程来拍卖SQL任务。为啥跟内具备关系啊,是因为获取的财富要求内部存款和储蓄器来承载。 
  Yelding的发生:是指SCHEDULECR-V上运转的Worker都以非抢占式的, 在 SCHEDULE大切诺基上Worker由于财富等待,让出当前Worker给任何Worker就叫Yielding。 关于SCHEDULE奥迪Q3_YIELD产生的准绳查看  sqlserver 任务调解与CPU。SOS_SCHEDULER_YIELD 等待的意况能够精通到:

  (1)CPU有压力

  (2) SQL Server CPU scheduler 使用方便管理就能够效用高。

1.1 从实例等级来查看等待数

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 like 'SOS_SCHEDULER_YIELD%' 
order by wait_type

  查询如下图所示: 

图片 1

  那一个等待类型排行第二,从呼吁的次数来讲有693670伍拾陆遍,也正是说该线程用完了4ms的流年片,主动废弃cpu。假若未有大气的runnable队列也许大批量的signal wait,表明不料定是cpu难点。因为这多少个指标是cpu压力的四个展现。供给检查实行安排中是还是不是留存大气围观操作。

1.2 通过dmv scheaduler的陈述查看cpu压力

SELECT scheduler_id, current_tasks_count, runnable_tasks_count, work_queue_count, pending_disk_io_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255

  如下图所示:

图片 2

  假如你注意到runnable_tasks_count计数有两位数,持续相当长日子(一段时间内),你就能领会CPU压力。两位数字常常被感觉是一件坏事 不能够应对脚下负荷。其他能够由此质量监视器%Processor Time 来查阅CPU的情状。

1.3 通过案例实时查看sql语句级的财富等待

SELECT * FROM sys.dm_exec_requests  WHERE wait_type LIKE 'SOS_SCHEDULER_YIELD%'

  -- 或探索能源等待的
  SELECT session_id ,status ,blocking_session_id
  ,wait_type ,wait_time ,wait_resource
  ,transaction_id
  FROM sys.dm_exec_requests
  WHERE status = N'suspended';

  如下图所示 运维sys.dm_exec_requests 表,由于字段多截取了三断。会话202的sql 语句上二回等待类型是SOS_SCHEDULER_YIELD。之所以相会世YIELD,是因为SCHEDULEENVISION下的Worker已经发起了task 命令,但由于能源等待 如锁恐怕磁盘输入/输出等,Worker又是非抢占式,所以让出了当前的Worker。

图片 3

图片 4

图片 5

1.4 减少sos_scheduler_yield 等待

  正如上面所探讨的,这种等待类型与CPU压力有关。扩大越多CPU是回顾的建设方案,不过完毕这些应用方案并不便于。当以此等待类型异常高时,你能够设想别的的事情。这里通过从缓存中找到与CPU相关的最值钱的SQL语句。

--查询编写翻译以来 cpu耗费时间总的数量最多的前50条(Total_woker_time) 第一种查询
select
'total_worker_time(ms)'=(total_worker_time/1000),
q.[text], --DB_NAME(dbid),OBJECT_NAME(objectid),
execution_count,
'max_worker_time(ms)'=(max_worker_time/1000),
'last_worker_time(ms)'=(last_worker_time/1000),
'min_worker_time(ms)'=(min_worker_time/1000),
'max_elapsed_time(ms)'=(max_elapsed_time/1000),
'min_elapsed_time(ms)'=(min_elapsed_time/1000),
'last_elapsed_time(ms)'=(last_elapsed_time/1000),
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_reads,
last_logical_reads,
max_logical_reads,
creation_time,
last_execution_time
from
(select top 50 qs.* from sys.dm_exec_query_stats qs order by qs.total_worker_time desc)
as highest_cpu_queries cross apply sys.dm_exec_sql_text(highest_cpu_queries.plan_handle) as q
order by highest_cpu_queries.total_worker_time DESC

 

本文由广东十一选五一定牛发布于产品分类,转载请注明出处:sql server 性能调优 资源等待之SOS_SCHEDULER_YIELD

关键词:

上一篇:MySQL版本详解

下一篇:没有了

最火资讯