译: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性能问题的迹象相关联。
希望有所帮助。
译:SOS_SCHEDULER_YIELD类型等待在虚拟机环境中的增多的更多相关文章
- 虚拟机环境中安装ubuntu下的mysql-cluster7.3.2(单点服务器)
部署环境: 系统:ubuntu-12.04.2 LTS -server-i386.iso Cluster:mysql-cluster-gpl-7.3.2-linux-glibc23-i686.ta ...
- 浅析SQL Server 中的SOS_SCHEDULER_YIELD类型的等待
本文出处:http://www.cnblogs.com/wy123/p/6856802.html 进程的状态转换 在说明SOS_SCHEDULER_YIELD等待之前,先简要介绍一下进程的状态(迷迷糊 ...
- 她娇羞道“不用这样细致认真的说啊~~”———详细图解在Linux环境中创建运行C程序
她娇羞说,不用这样细致认真的说啊———详细图解在Linux环境中创建运行C程序“不,这是对学习的负责”我认真说到 叮叮叮,停车,让我们看看如何在Linux虚拟机环境中,创建运行C程序 详细图解在Lin ...
- 怎么发现RAC环境中'library cache pin'等待事件的堵塞者(Blocker)?
怎么发现RAC环境中的'library cache pin'等待事件的堵塞者(Blocker) 參考自 How to Find the Blocker of the 'library cache pi ...
- Mac OS X安装之虚拟机环境下的总结
最近一直忙着公司iOS Touch的新版发布,终于忙过了.现在,又开始了新的阶段,不过算是轻松了很多.回来一看,自己的博客空空如也,实在受不了了.于是,开始更一下吧,哈哈. 这个文档是我几个月前,开始 ...
- Virtualbox环境中安装Oracle 11gr2 RAC(ASM)
系统Oracle Linux 6.5,Oracle 11.2.0.1 终于开始安装ASM和RAC的行程了.开始前需要想清楚的几个事情: 如何规划网络配置(配置多网卡,实现连通性,规划内外网,eth0, ...
- Linux从入门到放弃、零基础入门Linux(第三篇):在虚拟机vmware中安装linux(二)超详细手把手教你安装centos6分步图解
一.继续在vmware中安装centos6.9 本次安装是进行最小化安装,即没有图形化界面的安装,如果是新手,建议安装带图形化界面的centos, 具体参考Linux从入门到放弃.零基础入门Linux ...
- K8S生产环境中实践高可靠的配置和技巧都有哪些?
K8S环境中实践高可靠的配置和技巧都有哪些? 磁盘类型及大小 磁盘类型: 推荐使用ssd 磁盘 对于worker节点,创建集群时推荐使用挂载数据盘.这个盘是专门给/var/lib/docker 存放本 ...
- 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群
前言: 由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.利用周末的时间在虚拟机上搭建了分布式存储系统,在搭建过程中,发现网上的资料说的并不是很全, ...
随机推荐
- 王者荣耀交流协会 -- 第5次Scrum会议
Scrum master : 任思佳 要求1 : 工作照片 照片由王超同学拍摄 ,王露芝同学(外援)没有参加本次会议. 要求2 : 时间跨度:2017年10月17日 18:00 - 18:25 共计2 ...
- erlang-gb_tree,gb_set
gb_tree, gb_set, 均为一个二叉树.具体怎么实现,这边不在累赘,官方有手册, how to use ? 才是我们的重点 1. 初始化 1> gb_trees:empty().{0, ...
- vue调用支付接口
html: <div class="paymentHtml" v-html="paymentHtml"></div> script: d ...
- robot framework程序运行过程中,遇到点击事件之后,未出现点击之后的效果(求解)
1.click Element操作,在实际过程中偶然会出现,日志显示已点击成功,但是实际自动化页面,没有点击成功之后的操作 现象: 现象描述:程序执行到点击侧边栏的[人员信息]之后,日志显示已经点击成 ...
- php配置php_pdo_mysql模块
网上的都是什么编译安装的,总算找到一个简单的方法 安装好PHP yum install php php-fpm -y 直接安装pdo模块 yum install php-pdo_mysql 在/etc ...
- 十五、springcloud(一)注册中心Eureka
1.Eureka的基本架构 a.Eureka Server 提供服务注册和发现 b.Service Provider 服务提供方 将自身服务注册到Eureka,从而使服务消费方能够找到 c.Servi ...
- Linux cp命令详解
Linux cp命令 Linux cp命令主要用于复制文件或目录,将源文件复制至目标文件,或将多个源文件复制至目标目录 用法: cp [选项]... [-T] 源文件 目标文件 cp [选项]... ...
- vs2012 函数参数内存对齐引发编译错误
编译一个游戏库时,遇到个奇怪的问题.一个模板函数,形参是按值传入的.编译时实参是内存对齐过的,无法通过,引发类似下面的错误: error C2719: '_Val': formal parameter ...
- 关于rtsp的时间戳问题
这里主要关注的rtp包的时间戳,在rtsp中,播放器的1S钟的定义是和媒体的采样率有关的. 例如视频的采样率是90K,那么最小时间粒度(单位)是1/90000秒,再转换成ms就是 1/90毫秒,这个就 ...
- 寻找二叉树中的最低公共祖先结点----LCA(Lowest Common Ancestor )问题(递归)
转自 剑指Offer之 - 树中两个结点的最低公共祖先 题目: 求树中两个节点的最低公共祖先. 思路一: ——如果是二叉树,而且是二叉搜索树,那么是可以找到公共节点的. 二叉搜索树都是排序过的,位于左 ...