譯:SOS_SCHEDULER_YIELD類型等待在虛擬機環境中的增多

来源:http://www.cnblogs.com/wy123/archive/2017/06/18/7045635.html
-Advertisement-
Play Games

原文出處:Increased SOS_SCHEDULER_YIELD waits on virtual machines 註: 原文的用詞是Increased,想譯作增強(增長),或者加強,這麼譯起來是褒義詞,而原文要表達的Increased並沒有褒義的含義,最起碼是一個中性的含義,想來想起用一個“ ...


 

原文出處: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性能問題的跡象相關聯。

 

  希望有所幫助。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML 和 HTML 列表 HTML 類 可以通過 和 將 HTML 元素組合起來。 HTML 塊元素 大多數 HTML 元素被定義為塊級元素或內聯元素。 編者註:"塊級元素"譯為 block level element,"內聯元素"譯為 inline element。 塊級元素在瀏覽器顯示時,通... ...
  • getMeasuredWidth 為view的測量寬度。 getWidth為view的最終寬度。 (這裡只討論寬度,高度也是一樣的道理) 那麼它們之間有什麼區別呢? 測量寬度是在view的measure過程中形成的,而最終寬度是view的layout過程中形成的。這是它們之間的區別,它們的大小在大多 ...
  • 1、DeviceFamily-Type文件夾 將Index.xaml拷貝到DeviceFamily-Desktop 和DeviceFamily-Mobile,刪除這2個目錄下的Index.xmal.cs 文件。 2、DeviceFamily-Type擴展 通過創建新的XAML視圖達到同樣的效果,使用 ...
  • 很多初學者都會犯一個錯誤 ,就是在onCreate或者onStart裡面去獲取view的大小,然而這樣獲取到的寬高通常都是0,為什麼呢?因為view的測量過程和activity的生命周期不是同步的,因此無法保證執行了onCreate、onStart、onResume的時候view已經測量完畢。如果還 ...
  • 先看效果: 這個是用Pivot來實現 1、自定義Pivot的樣式,使用Blend工具生成模板,將HeaderTemplate的佈局都隱藏 1 <Style x:Key="PivotStyle1" TargetType="Pivot"> 2 <Setter Property="Margin" Valu ...
  • 歡迎討論歡迎一起學習:微信jkxx123321 這是一篇關於LIstView實現動態數據渲染的文章![RN] 首先我們講講數據是如何來規劃的 一般情況下我們有兩種規劃方案前提比如我們數據是100條+ 第一:一次性把100條數據fetch過來 然後由前端JS代碼來做分頁處理(如每次渲染10條) 第二: ...
  • 最近遇到一個 SQL Server 排序的問題,以前也沒瞭解過,然後這次碰到了。 才發現 SQL Server 排序的問題,在指定的排序列中 null 值會預設排在最前面,因為在 SQL Server 中 null 值預設為最小值。 後來問了一下萬能的百度,找到了下麵一種比較簡單的處理方法。 首先建 ...
  • Sql Server 2008 MSDN下載地址: http://www.msdn.hk/7/176/ 下載完成後的iso文件目錄結構如下,點擊安裝程式: 點擊安裝全新的sql server: 必備檢測項,下一步: 這裏會自動填充產品密鑰: 一直往下,選擇功能也全部選擇,下一步: 選擇默認數據庫實例 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...