Your SlideShare is downloading. ×
0
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
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

C21 SQL Server のスレッド管理 by 古賀啓一郎

960

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
960
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
55
Comments
0
Likes
4
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のスレッド管理 1
  • 2. Agenda SQL Server スレッド スケジューリングの歴史 (5分) SQL Serverのスレッド スケジューリング(30分) SQL Serverのスレッド モード (5分) 質疑応答 (5分)©2012 Microsoft Corporation. All Rights Reserved. 2
  • 3. SQL Server スケジューリングの歴史 3
  • 4. SQL Server Schedulingの歴史 SQL Server 6.x Preemptive Thread SQL Server 7/2000 Non-Preemptive Thread (UMS) SQL Server 2005/2008/2008R2/2012 Non-Preemptive Thread (SQLOS)©2012 Microsoft Corporation. All Rights Reserved. 4
  • 5. Why non-preemptive scheduling “RDBMSエンジンに関する調査研究によると、パフォーマンスと スケーラビリティの要件をみたすためには、non-preemptiveス ケジューリングの効用が必要だということがわかった。” “As adequate research shows for RDBMS engine to meet performance and scalability requirements it needs to leverage non-preemptive scheduling.” From http://blogs.msdn.com/b/slavao/archive/2005/02/05/367816. aspx©2012 Microsoft Corporation. All Rights Reserved. 5
  • 6. SQL Serverのスレッド スケジューリング 6
  • 7. PreemptiveとNon-Preemptive • Preemptive (Windows) システム (OS) が、CPUを使用するスレッドを決定する。CPU使用 権の横取り。 • Non-Preemptive (SQL Server) ユーザープログラム(スレッド自身)が、 CPUを使用するスレッド を決定する。©2012 Microsoft Corporation. All Rights Reserved. 7
  • 8. Non-Preemptive実現性 システムの観点から見て、完全なNon-Preemptiveス ケジューリングを実装することはできない ただし、プロセスという閉じた観点であれば、Non- Preemptiveスケジューリングは実装可能©2012 Microsoft Corporation. All Rights Reserved. 8
  • 9. Windowsのスケジューリング CPUを使用するスレッドが切り替わるタイミング(コンテキストスイッチ) • クォンタムの終了 実行中のスレッドが割り当てられたクォンタムを使い切った(CPU 時間を使い切った) • 自発的な待機 イベント、セマフォなどの同期オブジェクト上で待機が発生 • プリエンプション より高い優先度のスレッドによる横取り©2012 Microsoft Corporation. All Rights Reserved. 9
  • 10. SQL Serverのスケジューリング CPUを使用するスレッドが切り替わるタイミング(コンテキストスイッチ) • SQLOS Yield APIの呼び出し スレッドが任意のタイミングで自らCPUの使用権を放棄する • 自発的な待機 同期オブジェクト上での待機が発生 (ロック、ラッチ待ちなど)©2012 Microsoft Corporation. All Rights Reserved. 10
  • 11. スレッドを管理しているコンポーネント • SOS Scheduler – Yield APIや、同期オブジェクトで待機する場合は最終的に、SOS SchedulerクラスのAPIを呼び出して、スレッドを操作している • スケジューラーごとにワーカープールを持っている • DMV sys.dm_os_shceduler©2012 Microsoft Corporation. All Rights Reserved.
  • 12. スレッドの状態 • Running状態 SQLOS上でCPUを使用しているスレッド • Runnable状態 SQLOS上でCPUの使用権を待機しているスレッド • Suspended (Waiting) 状態 同期オブジェクト上で待機しているスレッド©2012 Microsoft Corporation. All Rights Reserved. 12
  • 13. スレッドの状態遷移 同期オブジェクト CPU使用権放棄 Running 取得 同期オブジェクト 待機 Suspended Runnable CPU使用権譲受 (Waiting) 同期オブジェクト 取得©2012 Microsoft Corporation. All Rights Reserved.
  • 14. スレッド状態確認 • DMV sys.dm_os_workers – state カラム©2012 Microsoft Corporation. All Rights Reserved.
  • 15. スレッド状態確認 • DMV sys.dm_os_workers – state カラム©2012 Microsoft Corporation. All Rights Reserved.
  • 16. SQLスレッドのスケジューリング • SQLのスレッドは、他のスレッドからCPU使用権を譲りうける ことで初めて動作できる – Cooperative Scheduling コンテキストスイッチ T1 T1 がT2にCPU T 2がT1にCPU 使用権を譲渡 使用権を譲渡 T2 コンテキストスイッチ コンテキストスイッチ Running State Runnable State©2012 Microsoft Corporation. All Rights Reserved.
  • 17. CPUの使用権譲渡とは イベントオブジェクト(信号)をシグナル状態(青)に変えてあげること T1 T1 は誰かが自分のイベントオブジェクT1 は、T2が待機しているイベン トをシグナル化してくれるのを待機するトオブジェクトをシグナル化する T2 Signaled State Event Not Signaled State Event Running State Runnable State©2012 Microsoft Corporation. All Rights Reserved.
  • 18. コンテキストスイッチ時の重要な処理 • I/Oキューのチェック – 完了しているI/Oのチェックと、I/O完了ルーチンの呼び出し T1 Call Stack … Yield API コール ntdll!ZwSignalAndWaitForSingleObject+0xa kernel32!SignalObjectAndWait+0x110 sqldk!SystemThread::SignalAndWait+0x2a sqldk!SOS_Scheduler::Switch+0xb5 sqldk!SOS_Scheduler::SuspendNonPreemptive+0xd2コンテ … I/O キューのチェック ….キストスイッ … I/O 要求ごとの完了ルーチンを呼び出すチ処理 … Tnのイベントオブジェクトシグナル化©2012 Microsoft Corporation. All Rights Reserved.
  • 19. I/O完了ルーチン:具体例 I/Oラッチ I/Oラッチ:物理I/O中のメモリバッファにかける排他のしくみ T1 ① I/Oラッチをバッファにかける ② I/O完了ルーチンを設定 (ラッチ解放処理) I/O要求発行 ③ ReadFile/WriteFile API 非同期コール ④ I/O キューに発行したI/O要求を追加 I/O完了 ⑤ Yield API コール コンテ キスト スイッ ⑥ I/O キューのチェック チ処理 ⑦ I/O完了ルーチンの呼び出し (I/Oラッチの解放) ⑧ Tnのイベントオブジェクトシグナル化©2012 Microsoft Corporation. All Rights Reserved.
  • 20. I/O完了ルーチン:コールスタック例 0:073> k Child-SP RetAddr Call Site 00000000`0a8fcc00 000007fe`d7f21e10 sqlmin!FCB::PostRead+0x14 00000000`0a8fcc50 000007fe`d7f2163c sqlmin!BPool::ReadPageCompletion+0xe7 00000000`0a8fccc0 000007fe`db8709a8 sqlmin!FCB::IoCompletion+0x97 (Inline Function) --------`-------- sqldk!SOS_IOCompRequest::ExecuteCompRoutine+0x6 00000000`0a8fcd10 000007fe`db83222f sqldk!IOQueue::CheckForIOCompletion+0x18e 00000000`0a8fce10 000007fe`db83c169 sqldk!SOS_Scheduler::SwitchContext+0x67 00000000`0a8fd0b0 000007fe`db845ebc sqldk!SOS_Scheduler::SuspendNonPreemptive+0xd2 (Inline Function) --------`-------- sqldk!SOS_Scheduler::Suspend+0x20 00000000`0a8fd0f0 000007fe`db850ddf sqldk!SOS_Task::Sleep+0x1a8 00000000`0a8fd150 000007fe`d7f2258b sqldk!Worker::OSYieldNoAbort+0x2f (Inline Function) --------`-------- sqlmin!SOS_Task::OSYieldNoAbort+0x263 00000000`0a8fd180 000007fe`d7f07925 sqlmin!BPool::GetFromDisk+0x81b ...©2012 Microsoft Corporation. All Rights Reserved.
  • 21. その他のIO完了ルーチン [代表例] • ページ整合性検証 – チェックサム (既定) • Set the PAGE_VERIFY Database Option to CHECKSUM http://msdn.microsoft.com/en-us/library/bb402873.aspx – Stale Read Detection (Trace Flag 818) • Additional SQL Server diagnostics added to detect unreported I/O problems http://support.microsoft.com/kb/826433©2012 Microsoft Corporation. All Rights Reserved.
  • 22. I/Oキュー • I/Oキューの数 – sys.dm_os_schedulers の pending_disk_io_count • I/O要求の詳細 – sys.dm_io_pending_io_requests©2012 Microsoft Corporation. All Rights Reserved.
  • 23. IO完了ルーチン処理中の確認 • DMV sys.dm_os_workers – is_in_polling_io_completion_routine カラム©2012 Microsoft Corporation. All Rights Reserved.
  • 24. SQL Serverのスレッド モード 24
  • 25. ノンプリエンプティブスレッドの問題点 問題例 • 処理時間の長い Windows API 呼び出し • ユーザーが作成した拡張ストアドプロシージャの呼び出し CreateFile では内部でイ ベントオブジェクトを使 用し、自発的に待機状 T1 態となることがある I/O要求発行 … CreateFile API 呼び出し/ 完了待ち©2012 Microsoft Corporation. All Rights Reserved.
  • 26. 解決策:プリエンプティブスレッド スレッドを管理できなくなるタイミングで、プリエンプティブ モードにスイッチする T1 CPU使用権をT2に譲渡した後、 SOSで管理されないスレッドモー ドにスイッチ T2 I/O要求発行 … CreateFile API 呼び出し/ 完了待ち©2012 Microsoft Corporation. All Rights Reserved.
  • 27. スレッドモードの確認 • DMV sys.dm_os_workers – Is_preemptive カラム©2012 Microsoft Corporation. All Rights Reserved.
  • 28. プリエンプティブモードで動くスレッド • ヘルスチェック スレッド – sp_server_diagnosticsスレッド – Lease HandShake スレッド (Availability Group) – Scheduler Monitorスレッド など©2012 Microsoft Corporation. All Rights Reserved.
  • 29. まとめ • SQL Server はNon-Preemptiveなスレッドスケジューリング を実装している • Non-Preemptiveなスレッドは、自身でCPU時間を管理す る • SOSのコンテキストスイッチ時にはI/Oの完了がチェックさ れる • I/O完了時には、I/O完了ルーチンが実行される • SQL Serverのスレッドは必要に応じてプリエンプティブ モードにスイッチする©2012 Microsoft Corporation. All Rights Reserved.
  • 30. 参考 SQL Serverのスレッドスケジューリング (DB Online) http://enterprisezine.jp/dbonline/detail/4157 http://enterprisezine.jp/dbonline/detail/4168 SQLOS - unleashed http://blogs.msdn.com/b/slavao/archive/2005/02/05/367816.aspx SQL Server 2008 SQLOS http://blogs.technet.com/b/josebda/archive/2009/03/30/sql-server-2008- sqlos.aspx Q&A on Latches in the SQL Server Engine…. http://blogs.msdn.com/b/psssql/archive/2009/07/08/q-a-on-latches-in-the-sql- server-engine.aspx©2012 Microsoft Corporation. All Rights Reserved.
  • 31. 質疑応答©2012 Microsoft Corporation. All Rights 31 Reserved.
  • 32. © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. ©2012 Microsoft Corporation. All Rights MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 32 Reserved.

×