Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング          日本マイクロソフト          古賀 啓一郎 ©2012 Microsoft Corporation. All Rights       ...
はじめに•   SQL Server のスレッド スケジューリングとは    – ノンプリエンプティブなスレッドスケジューリング    – プリエンプティブ or ノンプリエンプティブ                   ©2012 Micro...
Agenda•   SQL Server スケジューリングの歴史 (5分)•   SQL Serverのスレッド スケジューリング(25分)•   SQLOS スケジューリング関連コンポーネント(15分)•   質疑応答 (5分)       ...
SQL Server スケジューリングの歴史         ©2012 Microsoft Corporation. All Rights                                                   4...
SQL Server Schedulingの歴史•   SQL Server 6.x     Preemptive Thread•   SQL Server 7/2000     Non-Preemptive Thread (UMS)•   S...
Why non-preemptive scheduling“RDBMSエンジンに関する調査研究によると、パフォーマンスとスケーラビリティの要件をみたすためには、non-preemptiveスケジューリングの効用が必要だということがわかった。”“...
SQL Serverのスレッド スケジューリング          ©2012 Microsoft Corporation. All Rights                                                 ...
PreemptiveとNon-Preemptive•   Preemptive (Windows)システム (OS) が、CPUを使用するスレッドを決定する。•   Non-Preemptive (SQL Server)ユーザープログラム(スレ...
Non-Preemptive実現性•システムの観点から見て、完全なNon-Preemptiveスケジューリングを実装することはできない•ただし、プロセスという閉じた観点であれば、Non-Preemptiveスケジューリングは実装可能      ...
WindowsのスケジューリングCPUを使用するスレッドが切り替わるタイミング•   クォンタムの終了     実行中のスレッドが割り当てられたクォンタムを使い切った(CPU時間を使い     切った)•   自発的な待機     イベント、セ...
SQL Server(SQLOS)のスケジューリングCPUを使用するスレッドが切り替わるタイミング•   SQLOS Yield APIの呼び出し     スレッドが任意のタイミングで自らCPUの使用権を放棄する•   自発的な待機     同...
SQL Server(SQLOS)のスレッド管理• Running状態  CPUを使用しているスレッド• Runnable状態  CPUの使用権を待機しているスレッド (Runnable  Queueに存在している)• Waiting状態  同...
SQL Server(SQLOS)のスレッド管理• 具体例の紹介  – SQLOS Yield APIの呼び出し  – 同期オブジェクトの待機とは             ©2012 Microsoft Corporation. All Rig...
SQLOS Yield APIの処理1. コールしたスレッド(自分)をRunnable Queueに   追加する  SOS上Runnable, Windows OS上はRunning2. Runnable Queueで待機している先頭のスレッ...
Preemptiveの世界 (Code Sample)    CSample::Execute()    {        Compile();        Optimize();        Execute();    }        ...
SQLOSの世界 (Code Sample)    CSample::Execute()    {      Compile();        Yield();        Optimize();        Yield();      ...
Quiz  SQLOSの世界において、次のコードはどこが問題か?   VOID WaitForLockResource (HANDLE hlockEvent)   {      //     // ロックリソースが解放されるまで待機する    ...
Answer • Running状態(SQLOS上)のまま待機に入って   いる (CPUを使用しない状態) • SQLOSの世界では、Windows APIの待機系関   数(同期オブジェクト)を直接使用することがで   きない • SQLO...
SQLOS待機系 APIの処理Waitメソッド1. コールしたスレッド(自分)をWait Queueに追加する2.   Runnable Queueで待機している先頭のスレッドをRunning状態に     する3.   待機状態に入る(シグナ...
まとめ:SQLOSスレッド状態の遷移• Yield API 呼び出し  Running ---> Runnable (Runnable Queue)• SOS 待機系 API 呼び出し Running ---> Waiting (Wait Qu...
SQLOS スケジューリング コンポーネント         ©2012 Microsoft Corporation. All Rights                                                   2...
SOS Schedulers • スレッドのスケジューリングを管理しているクラス   インスタンスはDMV sys.dm_os_schedulersで確認できる   CPU or Coreを表現するクラス   Runnable キューを保持して...
SystemThread and Worker • SystemThread   OSのスレッドを表現するクラス   DMV sys.dm_os_threadsで確認できる   スレッドのスレッドローカルストレージ(TLS)に保存されている •...
Thread Mode • Non-Preemptive Mode   – SOS Schedulerで管理されているスレッド モード     • これまでに説明してきたスレッド、自身でスレッドスケジュー       リングしなければならない ...
SQL Server2012 Preemptive スレッド • ヘルスチェック スレッド    sp_server_diagnosticsスレッド    Lease HandShake スレッド    など • Preemptiveの必要性 ...
Scheduler Monitor • Preemptiveスレッド • 5秒間隔で各スケジューラを監視   e.g Non-Yielding Scheduler監視   15 秒間 スケジューラを解放しないスレッドがいる (エラーロ   グ1...
まとめ•SQL Server はNon-Preemptiveなスレッドスケジューリングを実装している•   Non-Preemptiveなスレッドは、自身でCPU時間を管理する•CPU時間の管理(CPUの解放)はSQLOSが提供するAPIを使用...
質疑応答       ©2012 Microsoft Corporation. All Rights                                                 28                    R...
最後に      ©2012 Microsoft Corporation. All Rights                                                29                   Reser...
Upcoming SlideShare
Loading in …5
×

COD2012 C3 : SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング

2,102 views

Published on

  • Don't forget another good way of simplifying your writing is using external resources (such as ⇒ www.HelpWriting.net ⇐ ). This will definitely make your life more easier
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I'd advise you to use this service: ⇒ www.WritePaper.info ⇐ The price of your order will depend on the deadline and type of paper (e.g. bachelor, undergraduate etc). The more time you have before the deadline - the less price of the order you will have. Thus, this service offers high-quality essays at the optimal price.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

COD2012 C3 : SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング

  1. 1. SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング 日本マイクロソフト 古賀 啓一郎 ©2012 Microsoft Corporation. All Rights 1 Reserved.
  2. 2. はじめに• SQL Server のスレッド スケジューリングとは – ノンプリエンプティブなスレッドスケジューリング – プリエンプティブ or ノンプリエンプティブ ©2012 Microsoft Corporation. All Rights 2 Reserved.
  3. 3. Agenda• SQL Server スケジューリングの歴史 (5分)• SQL Serverのスレッド スケジューリング(25分)• SQLOS スケジューリング関連コンポーネント(15分)• 質疑応答 (5分) ©2012 Microsoft Corporation. All Rights 3 Reserved.
  4. 4. SQL Server スケジューリングの歴史 ©2012 Microsoft Corporation. All Rights 4 Reserved.
  5. 5. SQL Server Schedulingの歴史• SQL Server 6.x Preemptive Thread• SQL Server 7/2000 Non-Preemptive Thread (UMS)• SQL Server 2005/2008/2012 Non-Preemptive Thread (SQLOS) ©2012 Microsoft Corporation. All Rights 5 Reserved.
  6. 6. Why non-preemptive scheduling“RDBMSエンジンに関する調査研究によると、パフォーマンスとスケーラビリティの要件をみたすためには、non-preemptiveスケジューリングの効用が必要だということがわかった。”“As adequate research shows for RDBMS engine to meet performance andscalability requirements it needs to leverage non-preemptive scheduling.”Fromhttp://blogs.msdn.com/b/slavao/archive/2005/02/05/367816.aspx ©2012 Microsoft Corporation. All Rights 6 Reserved.
  7. 7. SQL Serverのスレッド スケジューリング ©2012 Microsoft Corporation. All Rights 7 Reserved.
  8. 8. PreemptiveとNon-Preemptive• Preemptive (Windows)システム (OS) が、CPUを使用するスレッドを決定する。• Non-Preemptive (SQL Server)ユーザープログラム(スレッド自身)が、 CPUを使用するスレッドを決定する。 ©2012 Microsoft Corporation. All Rights 8 Reserved.
  9. 9. Non-Preemptive実現性•システムの観点から見て、完全なNon-Preemptiveスケジューリングを実装することはできない•ただし、プロセスという閉じた観点であれば、Non-Preemptiveスケジューリングは実装可能 ©2012 Microsoft Corporation. All Rights 9 Reserved.
  10. 10. WindowsのスケジューリングCPUを使用するスレッドが切り替わるタイミング• クォンタムの終了 実行中のスレッドが割り当てられたクォンタムを使い切った(CPU時間を使い 切った)• 自発的な待機 イベント、セマフォなどの同期オブジェクト上で待機が発生• プリエンプション より高い優先度のスレッドによる横取り ©2012 Microsoft Corporation. All Rights 10 Reserved.
  11. 11. SQL Server(SQLOS)のスケジューリングCPUを使用するスレッドが切り替わるタイミング• SQLOS Yield APIの呼び出し スレッドが任意のタイミングで自らCPUの使用権を放棄する• 自発的な待機 同期オブジェクト上での待機が発生 ©2012 Microsoft Corporation. All Rights 11 Reserved.
  12. 12. SQL Server(SQLOS)のスレッド管理• Running状態 CPUを使用しているスレッド• Runnable状態 CPUの使用権を待機しているスレッド (Runnable Queueに存在している)• Waiting状態 同期オブジェクト上で待機しているスレッド (Wait Queueに存在している) ©2012 Microsoft Corporation. All Rights Reserved.
  13. 13. SQL Server(SQLOS)のスレッド管理• 具体例の紹介 – SQLOS Yield APIの呼び出し – 同期オブジェクトの待機とは ©2012 Microsoft Corporation. All Rights Reserved.
  14. 14. SQLOS Yield APIの処理1. コールしたスレッド(自分)をRunnable Queueに 追加する SOS上Runnable, Windows OS上はRunning2. Runnable Queueで待機している先頭のスレッド をRunning状態にする3. 別のスレッドがRunning状態してくれるのを待機 する Windows OS上は待機状態 ©2012 Microsoft Corporation. All Rights 14 Reserved.
  15. 15. Preemptiveの世界 (Code Sample) CSample::Execute() { Compile(); Optimize(); Execute(); } ©2012 Microsoft Corporation. All Rights 15 Reserved.
  16. 16. SQLOSの世界 (Code Sample) CSample::Execute() { Compile(); Yield(); Optimize(); Yield(); Execute(); } ©2012 Microsoft Corporation. All Rights 16 Reserved.
  17. 17. Quiz SQLOSの世界において、次のコードはどこが問題か? VOID WaitForLockResource (HANDLE hlockEvent) { // // ロックリソースが解放されるまで待機する // WaitForSingleObject(hlockEvent, LOCK_TIMEOUT); } ©2012 Microsoft Corporation. All Rights 17 Reserved.
  18. 18. Answer • Running状態(SQLOS上)のまま待機に入って いる (CPUを使用しない状態) • SQLOSの世界では、Windows APIの待機系関 数(同期オブジェクト)を直接使用することがで きない • SQLOSが提供する同期オブジェクトを使用しな ければならない ©2012 Microsoft Corporation. All Rights 18 Reserved.
  19. 19. SQLOS待機系 APIの処理Waitメソッド1. コールしたスレッド(自分)をWait Queueに追加する2. Runnable Queueで待機している先頭のスレッドをRunning状態に する3. 待機状態に入る(シグナル化待ち)Signalメソッド1. 同オブジェクトで待機しているスレッドをWait Queueからとりだす2. 取り出したスレッドを、Runnable Queueに追加する (Runnable状 態にする) ©2012 Microsoft Corporation. All Rights 19 Reserved.
  20. 20. まとめ:SQLOSスレッド状態の遷移• Yield API 呼び出し Running ---> Runnable (Runnable Queue)• SOS 待機系 API 呼び出し Running ---> Waiting (Wait Queue) ---> 同期オブ ジェクトのシグナル化 ---> Runnable (Runnable Queue) ©2012 Microsoft Corporation. All Rights 20 Reserved.
  21. 21. SQLOS スケジューリング コンポーネント ©2012 Microsoft Corporation. All Rights 21 Reserved.
  22. 22. SOS Schedulers • スレッドのスケジューリングを管理しているクラス インスタンスはDMV sys.dm_os_schedulersで確認できる CPU or Coreを表現するクラス Runnable キューを保持している Yield APIやSOS 待機系 API は最終的に、SOS SchedulerクラスのAPIを呼 び出して、スレッドを操作している (SOS上のContextSwitch) • SOS Schedulerには2つのタイプがある Hidden Scheduler システム スレッドが所属するスケジューラ Visible Scheduler ユーザーリクエストを実行するスレッドが所属するスケジューラ 1 CPU or Core 毎に 1インスタンス生成される ©2012 Microsoft Corporation. All Rights 22 Reserved.
  23. 23. SystemThread and Worker • SystemThread OSのスレッドを表現するクラス DMV sys.dm_os_threadsで確認できる スレッドのスレッドローカルストレージ(TLS)に保存されている • Worker ワーカースレッドを表現するクラス SystemThreadとバインドされて初めて使用可能となる DMV sys.dm_os_workersで確認できる ©2012 Microsoft Corporation. All Rights 23 Reserved.
  24. 24. Thread Mode • Non-Preemptive Mode – SOS Schedulerで管理されているスレッド モード • これまでに説明してきたスレッド、自身でスレッドスケジュー リングしなければならない • SQL Serverのほとんどのスレッドは、Non-Preemptiveスレッ ド • Preemptive Mode – SOS Schedulerの管理下にないスレッド モード • SOS 待機系関数を呼び出さないで待機状態となる可能性が ある場合 e.g Windows APIコール (GetGroupMember) ©2012 Microsoft Corporation. All Rights 24 Reserved.
  25. 25. SQL Server2012 Preemptive スレッド • ヘルスチェック スレッド sp_server_diagnosticsスレッド Lease HandShake スレッド など • Preemptiveの必要性 ユーザーリクエストに干渉されないため ©2012 Microsoft Corporation. All Rights 25 Reserved.
  26. 26. Scheduler Monitor • Preemptiveスレッド • 5秒間隔で各スケジューラを監視 e.g Non-Yielding Scheduler監視 15 秒間 スケジューラを解放しないスレッドがいる (エラーロ グ17833, mini-dump) How To Diagnose and Correct Errors 17883, 17884, 17887, and 17888 http://msdn.microsoft.com/en-us/library/cc917684.aspx ©2012 Microsoft Corporation. All Rights 26 Reserved.
  27. 27. まとめ•SQL Server はNon-Preemptiveなスレッドスケジューリングを実装している• Non-Preemptiveなスレッドは、自身でCPU時間を管理する•CPU時間の管理(CPUの解放)はSQLOSが提供するAPIを使用している• 一部のスレッドは、Preemptiveモードで動作する ©2012 Microsoft Corporation. All Rights 27 Reserved.
  28. 28. 質疑応答 ©2012 Microsoft Corporation. All Rights 28 Reserved.
  29. 29. 最後に ©2012 Microsoft Corporation. All Rights 29 Reserved.

×