SlideShare a Scribd company logo
1 of 29
Download to read offline
SQL Server 2012で振り返る、
SQLOSのスレッド スケジューリン
グ
          日本マイクロソフト
          古賀 啓一郎




 ©2012 Microsoft Corporation. All Rights
                                           1
              Reserved.
はじめに


•   SQL Server のスレッド スケジューリングとは
    – ノンプリエンプティブなスレッドスケジューリング
    – プリエンプティブ or ノンプリエンプティブ




                   ©2012 Microsoft Corporation. All Rights
                                                             2
                                Reserved.
Agenda
•   SQL Server スケジューリングの歴史 (5分)


•   SQL Serverのスレッド スケジューリング(25分)


•   SQLOS スケジューリング関連コンポーネント(15分)


•   質疑応答 (5分)




                   ©2012 Microsoft Corporation. All Rights
                                                             3
                                Reserved.
SQL Server スケジューリングの歴史




         ©2012 Microsoft Corporation. All Rights
                                                   4
                      Reserved.
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.
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
                                                                            6
                                       Reserved.
SQL Serverのスレッド スケジューリング




          ©2012 Microsoft Corporation. All Rights
                                                    7
                       Reserved.
PreemptiveとNon-Preemptive

•   Preemptive (Windows)
システム (OS) が、CPUを使用するスレッドを決定する。


•   Non-Preemptive (SQL Server)
ユーザープログラム(スレッド自身)が、 CPUを使用するスレッドを決定する。




                           ©2012 Microsoft Corporation. All Rights
                                                                     8
                                        Reserved.
Non-Preemptive実現性

•システムの観点から見て、完全なNon-Preemptiveスケジューリングを実装
することはできない


•ただし、プロセスという閉じた観点であれば、Non-Preemptiveスケジューリ
ングは実装可能




              ©2012 Microsoft Corporation. All Rights
                                                        9
                           Reserved.
Windowsのスケジューリング
CPUを使用するスレッドが切り替わるタイミング
•   クォンタムの終了
     実行中のスレッドが割り当てられたクォンタムを使い切った(CPU時間を使い
     切った)
•   自発的な待機
     イベント、セマフォなどの同期オブジェクト上で待機が発生
•   プリエンプション
     より高い優先度のスレッドによる横取り




                ©2012 Microsoft Corporation. All Rights
                                                          10
                             Reserved.
SQL Server(SQLOS)のスケジューリング


CPUを使用するスレッドが切り替わるタイミング

•   SQLOS Yield APIの呼び出し
     スレッドが任意のタイミングで自らCPUの使用権を放棄する
•   自発的な待機
     同期オブジェクト上での待機が発生




                ©2012 Microsoft Corporation. All Rights
                                                          11
                             Reserved.
SQL Server(SQLOS)のスレッド管理

• Running状態
  CPUを使用しているスレッド
• Runnable状態
  CPUの使用権を待機しているスレッド (Runnable
  Queueに存在している)
• Waiting状態
  同期オブジェクト上で待機しているスレッド (Wait
  Queueに存在している)


               ©2012 Microsoft Corporation. All Rights
                            Reserved.
SQL Server(SQLOS)のスレッド管理



• 具体例の紹介
  – SQLOS Yield APIの呼び出し
  – 同期オブジェクトの待機とは




             ©2012 Microsoft Corporation. All Rights
                          Reserved.
SQLOS Yield APIの処理
1. コールしたスレッド(自分)をRunnable Queueに
   追加する
  SOS上Runnable, Windows OS上はRunning

2. Runnable Queueで待機している先頭のスレッド
   をRunning状態にする

3. 別のスレッドがRunning状態してくれるのを待機
   する
  Windows OS上は待機状態


               ©2012 Microsoft Corporation. All Rights
                                                         14
                            Reserved.
Preemptiveの世界 (Code Sample)

    CSample::Execute()
    {

        Compile();

        Optimize();

        Execute();

    }



                      ©2012 Microsoft Corporation. All Rights
                                                                15
                                   Reserved.
SQLOSの世界 (Code Sample)
    CSample::Execute()
    {
      Compile();

        Yield();

        Optimize();

        Yield();

        Execute();
    }


                      ©2012 Microsoft Corporation. All Rights
                                                                16
                                   Reserved.
Quiz
  SQLOSの世界において、次のコードはどこが問題か?

   VOID WaitForLockResource (HANDLE hlockEvent)
   {
      //
     // ロックリソースが解放されるまで待機する
     //

       WaitForSingleObject(hlockEvent, LOCK_TIMEOUT);

   }



                     ©2012 Microsoft Corporation. All Rights
                                                               17
                                  Reserved.
Answer

 • Running状態(SQLOS上)のまま待機に入って
   いる (CPUを使用しない状態)
 • SQLOSの世界では、Windows APIの待機系関
   数(同期オブジェクト)を直接使用することがで
   きない
 • SQLOSが提供する同期オブジェクトを使用しな
   ければならない



          ©2012 Microsoft Corporation. All Rights
                                                    18
                       Reserved.
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.
まとめ:SQLOSスレッド状態の遷移

• Yield API 呼び出し
  Running ---> Runnable (Runnable Queue)


• SOS 待機系 API 呼び出し
 Running ---> Waiting (Wait Queue) ---> 同期オブ
 ジェクトのシグナル化 ---> Runnable (Runnable
 Queue)



               ©2012 Microsoft Corporation. All Rights
                                                         20
                            Reserved.
SQLOS スケジューリング コンポーネント




         ©2012 Microsoft Corporation. All Rights
                                                   21
                      Reserved.
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.
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.
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.
SQL Server2012 Preemptive スレッド

 • ヘルスチェック スレッド
    sp_server_diagnosticsスレッド
    Lease HandShake スレッド
    など


 • Preemptiveの必要性
    ユーザーリクエストに干渉されないため



               ©2012 Microsoft Corporation. All Rights
                                                         25
                            Reserved.
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.
まとめ
•SQL Server はNon-Preemptiveなスレッドスケジューリングを実装し
ている


•   Non-Preemptiveなスレッドは、自身でCPU時間を管理する


•CPU時間の管理(CPUの解放)はSQLOSが提供するAPIを使用して
いる


•   一部のスレッドは、Preemptiveモードで動作する



                 ©2012 Microsoft Corporation. All Rights
                                                           27
                              Reserved.
質疑応答




       ©2012 Microsoft Corporation. All Rights
                                                 28
                    Reserved.
最後に




      ©2012 Microsoft Corporation. All Rights
                                                29
                   Reserved.

More Related Content

What's hot

SQL Server パフォーマンス問題対処 Deep Dive
SQL Server パフォーマンス問題対処 Deep DiveSQL Server パフォーマンス問題対処 Deep Dive
SQL Server パフォーマンス問題対処 Deep DiveKoichiro Sasaki
 
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターMasayuki Ozawa
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチMasayuki Ozawa
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解するdb tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解するMasayuki Ozawa
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Masayuki Ozawa
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaInsight Technology, Inc.
 
Sql database その裏側に迫る
Sql database その裏側に迫るSql database その裏側に迫る
Sql database その裏側に迫るMasayuki Ozawa
 
Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版elanlilac
 
SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能Masayuki Ozawa
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理Insight Technology, Inc.
 
オンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたオンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたMasayuki Ozawa
 
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみようSql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみようMasayuki Ozawa
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓貴仁 大和屋
 
Oracle と sql server 比べてみよう (sql server)
Oracle と sql server 比べてみよう (sql server)Oracle と sql server 比べてみよう (sql server)
Oracle と sql server 比べてみよう (sql server)Masayuki Ozawa
 
Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介Masayuki Ozawa
 
A25 sql server data page structure deep dive
A25 sql server data page structure deep diveA25 sql server data page structure deep dive
A25 sql server data page structure deep diveMasayuki Ozawa
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスMasayuki Ozawa
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!Masayuki Ozawa
 
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)Masayuki Ozawa
 

What's hot (20)

SQL Server パフォーマンス問題対処 Deep Dive
SQL Server パフォーマンス問題対処 Deep DiveSQL Server パフォーマンス問題対処 Deep Dive
SQL Server パフォーマンス問題対処 Deep Dive
 
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解するdb tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
 
Sql database その裏側に迫る
Sql database その裏側に迫るSql database その裏側に迫る
Sql database その裏側に迫る
 
Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版Sql server これだけはやっておこう 最終版
Sql server これだけはやっておこう 最終版
 
SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能SQL Server 2014 データベースエンジン新機能
SQL Server 2014 データベースエンジン新機能
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理
 
オンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたオンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみた
 
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみようSql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
Oracle と sql server 比べてみよう (sql server)
Oracle と sql server 比べてみよう (sql server)Oracle と sql server 比べてみよう (sql server)
Oracle と sql server 比べてみよう (sql server)
 
Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介Sql database 基本構成と直近で追加されていた機能の紹介
Sql database 基本構成と直近で追加されていた機能の紹介
 
A25 sql server data page structure deep dive
A25 sql server data page structure deep diveA25 sql server data page structure deep dive
A25 sql server data page structure deep dive
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンス
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
 
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)
Sql server 2012 の新機能を 3 つの視点でご紹介(大阪版)
 

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

C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎Insight Technology, Inc.
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境yoyamasaki
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境yoyamasaki
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法Meiji Kimura
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟貴仁 大和屋
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理junichi anno
 
Sc2012概説 120512
Sc2012概説 120512Sc2012概説 120512
Sc2012概説 120512wintechq
 
Intro2 Sqlanalyzer
Intro2 SqlanalyzerIntro2 Sqlanalyzer
Intro2 Sqlanalyzersaeka
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情Meiji Kimura
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信zuisener .
 
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_studyBeginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_studyzuisener .
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upzuisener .
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...Insight Technology, Inc.
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJavaTakashi Ito
 
Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Atsuo Yamasaki
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]日本マイクロソフト株式会社
 
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama Insight Technology, Inc.
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたSunao Tomita
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)Shinya Sugiyama
 

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

C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟
 
2011/11/26 Dot netlab
2011/11/26 Dot netlab2011/11/26 Dot netlab
2011/11/26 Dot netlab
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
Sc2012概説 120512
Sc2012概説 120512Sc2012概説 120512
Sc2012概説 120512
 
Intro2 Sqlanalyzer
Intro2 SqlanalyzerIntro2 Sqlanalyzer
Intro2 Sqlanalyzer
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
 
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_studyBeginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_study
 
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信upBeginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
 
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)
 

More from Masayuki Ozawa

Sql database managed instance overview and internals
Sql database managed instance overview and internalsSql database managed instance overview and internals
Sql database managed instance overview and internalsMasayuki Ozawa
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheetMasayuki Ozawa
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)Masayuki Ozawa
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tipsde:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux TipsMasayuki Ozawa
 
Managed Instance チートシート
Managed Instance チートシートManaged Instance チートシート
Managed Instance チートシートMasayuki Ozawa
 
Pacemaker 操作方法メモ
Pacemaker 操作方法メモPacemaker 操作方法メモ
Pacemaker 操作方法メモMasayuki Ozawa
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートMasayuki Ozawa
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Masayuki Ozawa
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
Sql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new featuresSql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new featuresMasayuki Ozawa
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供Masayuki Ozawa
 
Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能Masayuki Ozawa
 
SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料Masayuki Ozawa
 
SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料Masayuki Ozawa
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tipsMasayuki Ozawa
 
Sql server data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internalsMasayuki Ozawa
 
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントMasayuki Ozawa
 
和牛をおいしく食べるには
和牛をおいしく食べるには和牛をおいしく食べるには
和牛をおいしく食べるにはMasayuki Ozawa
 

More from Masayuki Ozawa (18)

Sql database managed instance overview and internals
Sql database managed instance overview and internalsSql database managed instance overview and internals
Sql database managed instance overview and internals
 
Power apps formula cheat sheet
Power apps formula cheat sheetPower apps formula cheat sheet
Power apps formula cheat sheet
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tipsde:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
 
Managed Instance チートシート
Managed Instance チートシートManaged Instance チートシート
Managed Instance チートシート
 
Pacemaker 操作方法メモ
Pacemaker 操作方法メモPacemaker 操作方法メモ
Pacemaker 操作方法メモ
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデート
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
Sql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new featuresSql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new features
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供
 
Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能Sql server 2016 ctp 3.0 新機能
Sql server 2016 ctp 3.0 新機能
 
SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料SQL Server 簡易診断サービス ご紹介資料
SQL Server 簡易診断サービス ご紹介資料
 
SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料SQL Server 現状診断サービス ご紹介資料
SQL Server 現状診断サービス ご紹介資料
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 
Sql server data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internals
 
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
 
和牛をおいしく食べるには
和牛をおいしく食べるには和牛をおいしく食べるには
和牛をおいしく食べるには
 

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

  • 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 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 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.
  • 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上はRunning 2. 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.