Your SlideShare is downloading. ×
COD2012 C3 : SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

789
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
789
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SQL Server 2012で振り返る、SQLOSのスレッド スケジューリング 日本マイクロソフト 古賀 啓一郎 ©2012 Microsoft Corporation. All Rights 1 Reserved.
  • 2. はじめに• SQL Server のスレッド スケジューリングとは – ノンプリエンプティブなスレッドスケジューリング – プリエンプティブ or ノンプリエンプティブ ©2012 Microsoft Corporation. All Rights 2 Reserved.
  • 3. Agenda• SQL Server スケジューリングの歴史 (5分)• SQL Serverのスレッド スケジューリング(25分)• SQLOS スケジューリング関連コンポーネント(15分)• 質疑応答 (5分) ©2012 Microsoft Corporation. All Rights 3 Reserved.
  • 4. SQL Server スケジューリングの歴史 ©2012 Microsoft Corporation. All Rights 4 Reserved.
  • 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. 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. SQL Serverのスレッド スケジューリング ©2012 Microsoft Corporation. All Rights 7 Reserved.
  • 8. PreemptiveとNon-Preemptive• Preemptive (Windows)システム (OS) が、CPUを使用するスレッドを決定する。• Non-Preemptive (SQL Server)ユーザープログラム(スレッド自身)が、 CPUを使用するスレッドを決定する。 ©2012 Microsoft Corporation. All Rights 8 Reserved.
  • 9. Non-Preemptive実現性•システムの観点から見て、完全なNon-Preemptiveスケジューリングを実装することはできない•ただし、プロセスという閉じた観点であれば、Non-Preemptiveスケジューリングは実装可能 ©2012 Microsoft Corporation. All Rights 9 Reserved.
  • 10. WindowsのスケジューリングCPUを使用するスレッドが切り替わるタイミング• クォンタムの終了 実行中のスレッドが割り当てられたクォンタムを使い切った(CPU時間を使い 切った)• 自発的な待機 イベント、セマフォなどの同期オブジェクト上で待機が発生• プリエンプション より高い優先度のスレッドによる横取り ©2012 Microsoft Corporation. All Rights 10 Reserved.
  • 11. SQL Server(SQLOS)のスケジューリングCPUを使用するスレッドが切り替わるタイミング• SQLOS Yield APIの呼び出し スレッドが任意のタイミングで自らCPUの使用権を放棄する• 自発的な待機 同期オブジェクト上での待機が発生 ©2012 Microsoft Corporation. All Rights 11 Reserved.
  • 12. SQL Server(SQLOS)のスレッド管理• Running状態 CPUを使用しているスレッド• Runnable状態 CPUの使用権を待機しているスレッド (Runnable Queueに存在している)• Waiting状態 同期オブジェクト上で待機しているスレッド (Wait Queueに存在している) ©2012 Microsoft Corporation. All Rights Reserved.
  • 13. SQL Server(SQLOS)のスレッド管理• 具体例の紹介 – SQLOS Yield APIの呼び出し – 同期オブジェクトの待機とは ©2012 Microsoft Corporation. All Rights Reserved.
  • 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. Preemptiveの世界 (Code Sample) CSample::Execute() { Compile(); Optimize(); Execute(); } ©2012 Microsoft Corporation. All Rights 15 Reserved.
  • 16. SQLOSの世界 (Code Sample) CSample::Execute() { Compile(); Yield(); Optimize(); Yield(); Execute(); } ©2012 Microsoft Corporation. All Rights 16 Reserved.
  • 17. Quiz SQLOSの世界において、次のコードはどこが問題か? VOID WaitForLockResource (HANDLE hlockEvent) { // // ロックリソースが解放されるまで待機する // WaitForSingleObject(hlockEvent, LOCK_TIMEOUT); } ©2012 Microsoft Corporation. All Rights 17 Reserved.
  • 18. Answer • Running状態(SQLOS上)のまま待機に入って いる (CPUを使用しない状態) • SQLOSの世界では、Windows APIの待機系関 数(同期オブジェクト)を直接使用することがで きない • SQLOSが提供する同期オブジェクトを使用しな ければならない ©2012 Microsoft Corporation. All Rights 18 Reserved.
  • 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. まとめ:SQLOSスレッド状態の遷移• Yield API 呼び出し Running ---> Runnable (Runnable Queue)• SOS 待機系 API 呼び出し Running ---> Waiting (Wait Queue) ---> 同期オブ ジェクトのシグナル化 ---> Runnable (Runnable Queue) ©2012 Microsoft Corporation. All Rights 20 Reserved.
  • 21. SQLOS スケジューリング コンポーネント ©2012 Microsoft Corporation. All Rights 21 Reserved.
  • 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. 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. 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. SQL Server2012 Preemptive スレッド • ヘルスチェック スレッド sp_server_diagnosticsスレッド Lease HandShake スレッド など • Preemptiveの必要性 ユーザーリクエストに干渉されないため ©2012 Microsoft Corporation. All Rights 25 Reserved.
  • 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. まとめ•SQL Server はNon-Preemptiveなスレッドスケジューリングを実装している• Non-Preemptiveなスレッドは、自身でCPU時間を管理する•CPU時間の管理(CPUの解放)はSQLOSが提供するAPIを使用している• 一部のスレッドは、Preemptiveモードで動作する ©2012 Microsoft Corporation. All Rights 27 Reserved.
  • 28. 質疑応答 ©2012 Microsoft Corporation. All Rights 28 Reserved.
  • 29. 最後に ©2012 Microsoft Corporation. All Rights 29 Reserved.