译:SOS_SCHEDULER_YIELD类型等待在虚拟机环境中的增多

原文出处:Increased SOS_SCHEDULER_YIELD waits on virtual machines

注:

原文的用词是Increased,想译作增强(增长),或者加强,这么译起来是褒义词,而原文要表达的Increased并没有褒义的含义,
最起码是一个中性的含义,想来想起用一个“滋长”偏编译的含义还是比较合适的,感觉还是有点过于贬义了,还是用最通俗的增多吧。
个人英语水平有限,另外就是对于文中提到的“rdtsc周期”也不是非常清楚,翻译的也不是很清楚,权当是自娱自乐。
总是原文的意思就是虚拟环境下:因为虚拟CPU与物理CPU之间的调度关系(而不是SQLOS直接调度物理CPU),因此在虚拟环境下,sqlserver的SOS_SCHEDULER_YIELD等待类型会出现的机会将会更多。

译文:

当我在几个月之前讲授等待统计(wait statistics)的时候,被问到sqlserver运行在虚拟机上的时候,是否存在与预期不同的等待统计(waits stats )
我的答案为“是”,如果某种因素妨碍了虚拟机运行的情况下,有可能会看到更长的等待时间,
由于等待时间是基于rdtsc计数器(本质上是处理器的处理器时钟周期数)在等待开始和结束时间的不同。
因为虚拟主机基于物理硬件的CPU被超额“虚拟化”,VM必须等待虚拟CPU的调度,在SQL Server中所记录到的实际资源等待时间将包括VM无法运行的时间,
因此等待时间将会比VM没有被延迟的时间长。

这一点是否存在疑问是非常有意思的,但是我的观点是,为此可以导致一些人去调整sqlserver性能问题(译注:认为是SQL Server自身调度所导致的SOS_SCHEDULER_YIELD),
而事实上是虚拟机性能问题,注意:这不是虚拟层的问题,而是因为虚拟机环境的错误配置。
不管怎么说,课程结束后,我开始考虑通一个VM上的线程调度的普遍性存在的问题,它周期性地被延迟运行是否会对等待统计数据产生其他有趣的影响。
尤其是,我之前会关注有关于SOS_SCHEDULER_YIELD 的等待,这是一种典型的等待,
当一个线程能够使用4ms的CPU时间(称之为线程时间片)不需要暂停等待不可用的资源,
简单地说就是,一个线程必须经常调用SQLOS层,以检查它是否已经耗尽了线程的时间片,如果是这样的话,它必须主动地放弃处理器,
当这种情况发生时,一个上下文的切换就发生了,此时一个等待类型必须被等级下来:SOS_SCHEDULER_YIELD,
对这种等待类型的更深层次的解释是在我这里(here)等待文章中。

我的推测就是:
如果一个虚拟机被阻止运行几毫秒或更多,这可能意味着一个正在执行的线程可能会耗尽它的线程时间片而不会得到4ms的CPU时间,
因此让出处理器导致一个SOS_SCHEDULER_YIELD 类型的等待被记录
如果这种情况发生了很多,它可能会生成一组等待的统计数据,这些统计数据显示有大量的 SOS_SCHEDULER_YIELD产生,
而实际上,这实际上是一个VM性能问题,而 SOS_SCHEDULER_YIELD等待实际上是“假的”。

我与来自SQL产品组的好朋友Bob Ward讨论这个问题,在进行了一些内部讨论之后,
他们同意这是一种可能,因为线程的时间片耗尽时间是在线程开始执行时使用rdtsc进行计算的,所以VM运行的任何延迟都可能产生我所建议的效果。

鉴于我是一个虚拟机新手,我让Jonathan 去执行一些我们虚拟机实验室环境内部去观察他是否能发生这个问题,
他运行了我们在浸入式事件中使用的已知工作负载,以演示主机过度订阅(译者注:可以理解为一台物理机虚拟出来过多的虚拟机)的性能影响,促使虚拟机被延迟,
看吧,对比在相同的VM上运行相同的工作负载而不需要任何延迟的条件下,(虚拟机被延迟的情况下)他看到了大量的SOS_SCHEDULER_YIELD等待(大约20倍多)的工作负载水平。

在我们的超v实验室环境中重复了同样的测试,在硬件和VM配置中都是一样的,在VMware环境中也一样,类似的多发性的SOS_SCHEDULER_YIELD等待也被看到,
因此,这个问题肯定不是特定于任何给定的虚拟层或者虚拟平台,这完全与主机承受的工作负载有关,而SQL Server VM必须等待CPU资源继续执行。

这里我有意不展示Jonathan的测试结果,
因为我不具备解释VMware esxtop输出或Hyper-V性能计数器值以及它们如何与SSOS_SCHEDULER_YIELD数据产生的结果相关联来揭示问题的关联性,
Jonathan将在接下来的一两周内做一篇后续文章,从虚拟化的角度来解释这些结果。

尽管如此,通过一组简单的测试,我们可以通过运行延迟的VM来显示SQL Server工作负载可以显示更高的SOS_SCHEDULER_YIELD 等待,因为使用rdtsc来计算线程的时间片耗尽时间。
这是非常有趣的,因为这是一个VM性能问题,导致等待类型出现,而不仅仅是导致等待时间更长。

如果你正在研究多发性的SOS_SCHEDULER_YIELD 等待,你一定要考虑这个现象,一个工作负载性能问题,并且你的工作组是运行在虚拟机上,
在下一篇文章中,我将在它发布时链接到这里,Jonathan将解释如何将这些等待与VM性能问题的迹象相关联。

  希望有所帮助。

时间: 2024-10-18 16:54:03

译:SOS_SCHEDULER_YIELD类型等待在虚拟机环境中的增多的相关文章

Android开发——VirtualBox环境中的虚拟机使用

题目想了半天,还是那么纠结,解释下吧.最近开始接触Android开发,开发环境的部署就不说了,各种费劲凿墙.好不容易搞定了,调试又来了问题.Android设备老旧,效率低下:AVD就是更不用说了,一张张图片看过去.好在有神器,Genymotion! 在此强力推荐~!性能甩各种android设备好几条街. 可是问题来了,本人有个癖好,喜欢将各种开发环境分别放到不同的虚拟机里,这样互相不会干扰,而且可以带来带去.但是Genymotion在虚拟机里用不了~,提示需要OpenGL2.0版本以上的支持.可

怎么发现RAC环境中'library cache pin'等待事件的阻塞者(Blocker)?

怎么发现RAC环境中的'library cache pin'等待事件的阻塞者(Blocker) 参考自 How to Find the Blocker of the 'library cache pin' in a RAC environment? (文档 ID 780514.1) 本文不做翻译,全文转载: Applies to: Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.1.0.7 [Release 9.2 to

Spring MVC环境中文件上传大小和文件类型限制以及超大文件上传bug问题

    在上一篇文章中,主要介绍了Spirng MVC环境下的正常情况下文件上传功能实现.在实际开发的时候,还会涉及到上传文件大小和类型的限制,接下来就会对Spirng MVC环境下文件上传大小和类型的限制进行介绍,还会讲解到文件上传大小tomcat服务器bug问题及解决方案. 一.文件上传大小限制 这里还是接着上篇文章先介绍Spring MVC下的文件上传大小限制,文件上传大小的限制在springmvc-config.xml中配置文件解析器CommonsMultipartResolver时即可

[译]通过存储在 64bit 环境中执行32 bit的SSIS包

最近碰到了一个众所周知的32bit的 SSIS 包在64bit的SQL Server环境的执行问题. 我看了一些解决方案,比如修改在SSDT里面修改 debug 选项(Run64BitRuntime = false) 或者建立一个job执行的时候强制以32bit方式运行. 不过我发现这些方式并不合适大型的自动化环境. 你可能在测试SSIS包的候会用这些方法 ,但是你部署到SSIS服务器的时候不一定想要这么做. 我想还有一个方法就是建立一个job, 强制包为32bit执行模式.然后建立一个脚本更改

Debian7.5.0安装流程(VirtualBox虚拟机环境)

Linux系统千千万,用哪个始终令人纠结.最后想到的好办法只有一个,每个都好好用一遍,你才知道自己真正想要的是什么. 在安装Debian系统的时候发现网上的流程解说都是中文环境的,据说Debian一直有中文乱码和字体不好看的问题,我想既然自己还算看得懂英文,就有人家的母语起码错误会少很多吧. 话是这么说,自己在安装的时候还是借鉴了人家的攻略,毕竟就算是字不一样,那位置还不得是一样一样滴~ 1.打开虚拟机,选择“新建” 2.系统类型选择对应的Linux中的Debian(32位)(话说其实我一直不太

Linux从入门到放弃、零基础入门Linux(第三篇):在虚拟机vmware中安装linux(二)超详细手把手教你安装centos6分步图解

一.继续在vmware中安装centos6.9 1.创建空白的虚拟机后界面 2.双击进入设置,点击CD/DVD设置,选择要安装的centos6.9的镜像文件位置 3.打开虚拟机电源,进行安装,进入虚拟机系统安装界面. 界面共有5个选项 Install or upgrade an existing system 安装或升级现有的系统 install system with basic video driver 安装过程中采用基本的显卡驱动 Rescue installed system 进入系统修

K8S生产环境中实践高可靠的配置和技巧都有哪些?

K8S环境中实践高可靠的配置和技巧都有哪些? 磁盘类型及大小 磁盘类型: 推荐使用ssd 磁盘 对于worker节点,创建集群时推荐使用挂载数据盘.这个盘是专门给/var/lib/docker 存放本地镜像.可以避免后续因镜像太多而造成磁盘根目录容量不够的情况.在运行一段时间后,本地会存在很多无用的镜像.比较快捷的方式就是,先下线这台机器,重新构建这个磁盘,然后再上线. 磁盘大小: kubernetes节点需要的磁盘空间也不小,Docker镜像.系统日志.应用日志都保存在磁盘上.创建kubern

Linux实现KVM+QEMU+libvirt的虚拟机环境 并使用virsh对虚拟机进行管理

说明: 本文使用的实验环境是运行在windows10上的Vmware workstation 12.5 pro,宿主机操作系统是Ubuntu16(机器名称为KVM_test),kvm+qemu+libvirt安装在KVM_test上.运行在KVM_test上的客户机操作系统也是Ubuntu16(机器名称为test_ubuntu). 本实验需要的软件有Vmware workstation.vnc viewer.ubuntu16的ios镜像.Vnc viewer需要注册码,请自行百度查找. 本实验所

ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

转:http://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解.由于内容比较多,一口气吃不成胖子,得慢慢来一步一个脚印,因此我对后期ZooKeeper的学习规划如下: 第一阶段: |---理解ZooKeeper的应用 |---ZooKeeper是什么 |--