译: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这个开源工具.利用周末的时间在虚拟机上搭建了分布式存储系统,在搭建过程中,发现网上的资料说的并不是很全, ...
随机推荐
- [转] ROS2源码编译和安装
机器人开源操作系统软件ROS在10年后, 终于推出全新架构的ROS2,代号“ardent”.中文意思为“热心的美洲鳖”,看来ROS2要从ROS1的“海龟”变成“土鳖”系列了. 与此同时,ROS2的编译 ...
- element ui表格相同内容自动合并
一开始觉得合并单元格很困难,什么鬼,后来仔细查看api,发现是可以实现的,特此记录下,直接看代码, 项目需求是第一列和第二列还有第16列需要相同内容进行合并,所以判断条件是不同的: 实现后效果如下: ...
- Codeforces1076F. Summer Practice Report(贪心+动态规划)
题目链接:传送门 题目: F. Summer Practice Report time limit per test seconds memory limit per test megabytes i ...
- 分布式高并发下Actor模型
分布式高并发下Actor模型 写在开始 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递.使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争.处理各种锁的问题是让人十分头痛的 ...
- kali安装Google浏览器之后的问题
kali中,在安装完Google浏览器后会出现点击图标却打不开的问题,解决方式如下: 2019-04-10 09:46:00
- Python基础-socketserver
ocketserver通讯模块实现并发操作,基于select.epoll.socket.多线程,实现的正真多线程多并发 socketserver通讯模块底层调用的socket模块,只是它作了处理基于l ...
- robot framework程序运行过程中,遇到点击事件之后,未出现点击之后的效果(求解)
1.click Element操作,在实际过程中偶然会出现,日志显示已点击成功,但是实际自动化页面,没有点击成功之后的操作 现象: 现象描述:程序执行到点击侧边栏的[人员信息]之后,日志显示已经点击成 ...
- spring mvc 为什么这么多xml
spring web mvc 处理流程 Architecture web.xml (webapp必要配置) 作用:spring web mvc 使用dispatcherServlet 分发reques ...
- 将struct转为map
package main import ( "fmt" "reflect" "time" ) type User struct { Id i ...
- SQL: 某个时间段范围内,产品有价格,且求平均数
select ID,AVG(fPrice) as avgPrice from Price where Hp_Date >='2017-07-04' and Hp_Date <='2017- ...