原文出处: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性能问题的迹象相关联。

  希望有所帮助。

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

  1. 虚拟机环境中安装ubuntu下的mysql-cluster7.3.2(单点服务器)

      部署环境: 系统:ubuntu-12.04.2 LTS -server-i386.iso Cluster:mysql-cluster-gpl-7.3.2-linux-glibc23-i686.ta ...

  2. 浅析SQL Server 中的SOS_SCHEDULER_YIELD类型的等待

    本文出处:http://www.cnblogs.com/wy123/p/6856802.html 进程的状态转换 在说明SOS_SCHEDULER_YIELD等待之前,先简要介绍一下进程的状态(迷迷糊 ...

  3. 她娇羞道“不用这样细致认真的说啊~~”———详细图解在Linux环境中创建运行C程序

    她娇羞说,不用这样细致认真的说啊———详细图解在Linux环境中创建运行C程序“不,这是对学习的负责”我认真说到 叮叮叮,停车,让我们看看如何在Linux虚拟机环境中,创建运行C程序 详细图解在Lin ...

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

    怎么发现RAC环境中的'library cache pin'等待事件的堵塞者(Blocker) 參考自 How to Find the Blocker of the 'library cache pi ...

  5. Mac OS X安装之虚拟机环境下的总结

    最近一直忙着公司iOS Touch的新版发布,终于忙过了.现在,又开始了新的阶段,不过算是轻松了很多.回来一看,自己的博客空空如也,实在受不了了.于是,开始更一下吧,哈哈. 这个文档是我几个月前,开始 ...

  6. Virtualbox环境中安装Oracle 11gr2 RAC(ASM)

    系统Oracle Linux 6.5,Oracle 11.2.0.1 终于开始安装ASM和RAC的行程了.开始前需要想清楚的几个事情: 如何规划网络配置(配置多网卡,实现连通性,规划内外网,eth0, ...

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

    一.继续在vmware中安装centos6.9 本次安装是进行最小化安装,即没有图形化界面的安装,如果是新手,建议安装带图形化界面的centos, 具体参考Linux从入门到放弃.零基础入门Linux ...

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

    K8S环境中实践高可靠的配置和技巧都有哪些? 磁盘类型及大小 磁盘类型: 推荐使用ssd 磁盘 对于worker节点,创建集群时推荐使用挂载数据盘.这个盘是专门给/var/lib/docker 存放本 ...

  9. 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群

    前言:       由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.利用周末的时间在虚拟机上搭建了分布式存储系统,在搭建过程中,发现网上的资料说的并不是很全, ...

随机推荐

  1. 剑指Offer 14. 链表中倒数第k个结点 (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?t ...

  2. 2018年4月中旬的PTA(三)

    C高级第三次PTA作业(1) 题目6-1 输出月份英文名 1.设计思路 (1)算法(子函数) 第一步:定义字符型一级指针子函数名getmonth,形参整型n. 第二步:定义长度为12的字符数组指针mo ...

  3. GCD XOR(UVa 12716)

    题意:输入整数n(1<=n<=30000000),有多少对整数(a,b)满足1<=b<=a<=n,且gcd(a,b)=a xor b. 题解:设c=gcd(a,b),因为 ...

  4. Centos6.8 搭建Nginx服务器

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,其特点是占有内存少,并发能力强,业界内的评价一直很不错,反正用过的都说好,虽然我还 ...

  5. CVE-2017-11882 POC 全版本通杀

    POC https://github.com/embedi/CVE-2017-11882

  6. PythonStudy——Python 内置函数 Built-in function

    内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...

  7. 在干净的ubuntu 14.10上编译Qemu2.2.0的过程

    下载Qemu的源代码 从官网http://wiki.qemu.org/Main_Page 中下载最新的源代码,目前是2.2.0. 安装依赖库和编译 编译过程分两步1. ./configure 2. m ...

  8. zombodb sql functions 说明

    zombodb 提供了好多方便的sql 函数工具类以及帮助函数 查看zombodb 版本zdb.version() select * from zdb.version(); version ----- ...

  9. because there was insufficient free space available after evicting expired cache entries

    Tomcat运行的时候哗哗哗的报警告 版本是Tomcat 8.5.15 告警信息关键字如下 because there was insufficient free space available af ...

  10. Mysql组复制之单主模式(一)

    环境 系统:CentOS release 6.9 (Final) Mysql:5.7 机器: S1 10.0.0.7 lemon S2 10.0.0.8 lemon2 S3 10.0.0.9 lemo ...