SlideShare a Scribd company logo
SQL Server 2012
知られざるTips集
日本マイクロソフト
プレミアフィールドエンジニアリング
シニアプレミアフィールドエンジニア
平山 理
Agenda


        Lock 獲得動作の変更
        統計情報自動更新の変更
        FORCESEEK 機能拡張
        クエリプラン収集機能拡張
        ページ割り当て状況の確認方法の改善
        Cardinality Estimate Framework




©2011 Microsoft Corporation. All Rights Reserved.
Lock 獲得動作の変更




               3
SQL Server 2012 より前の動作


                                             クライアント A
                                             SELECT * FROM T
                                             - T はパーティションテーブル
                                             - SCH-S ロックが必要

                                             クライアント B
                                             ALTER TABLE T2 SWITCH PARTITION 1 TO T PARTITION 1
                                             - パーティションをスイッチするDDLを実行
                                             - SCH-M ロックが必要


                                             クライアント C
  DDL                                        - SELECT * FROM T WITH (NOLOCK)
  Starvation                                 - SCH-S ロックが必要(Dirty Read であっても)


©2011 Microsoft Corporation. All Rights Reserved.
SQL Server 2012 より前の動作(続き)

                                          SCH-S (スキーマ共有ロック)
                                          - DDL によるスキーマ変更防止
                                          - Dirty Read にも必要



                                          SCH-M
                                          - スキーマ変更ロック
         ロック                              - スキーマ変更時の排他制御




                                          SCH-S とSCH-Mは互換性なし




                                          -    後続の SCH-S が付与され続ける
         問題点                              -    SCH-M は待機し続ける


©2011 Microsoft Corporation. All Rights Reserved.
SQL Server 2012 の動作


                                             15000 パーティションまで分割可能




         パーティション数                            DDL Starvation の機会増加



                                             アルゴリズムの変更
                                             - FIFOの採用
                                             - SCH-SはSCH-Mをスキップしない



                                             旧動作への復帰
                                             - トレースフラグ 617
         改善策                                 - 再起動不要


©2011 Microsoft Corporation. All Rights Reserved.
統計情報

自動更新のための閾値変更




               7
従来の統計情報更新アルゴリズム




      テーブル基数 =< 500                                 500 回の変更で統計情報を更新




       テーブル基数 > 500                                 500 回+テーブル基数20% の変更で統計情報を更新


                                                    テーブル基数が大きい場合は統計情報の更新頻度低
                                                    例:
                                                    1,000,000,000 件のデータが存在するテーブルの場合

      考慮点                                           1,000,000,000 * 0.2 + 500 = 200,000,500


©2011 Microsoft Corporation. All Rights Reserved.
トレースフラグ 2371 の導入



                                                    例:
                                                    1,000,000,000 件のデータが存在するテーブルの場合
        更新タイミング:
        SQRT(データ件数*1000)                            SQRT(1,000,000,000*1000) = 1,000,000




        有効なバージョン:
        SQL Server 2012 RTM
        SQL Server 2008 R2 SP1 以降




        再起動不要

©2011 Microsoft Corporation. All Rights Reserved.
sys.dm_db_stats_properties 動的管理ビュー




        統計情報の内容を出力                                  サンプル数、更新日時、更新回数などを含む




        有効なバージョン:
        SQL Server 2012 SP1 以降
        SQL Server 2008 R2 SP2 以降




        DBCC SHOW_STATISTICS の代替

©2011 Microsoft Corporation. All Rights Reserved.
FORCESEEK クエリヒント機能拡張




                       11
FORCESEEK クエリヒント




                                     オプティマイザの決定をオーバライド




                                     SEEK 操作のみを使用してデータにアクセス




     FORCESEEK                       クラスタ化インデックス、非クラスタ化インデックスに有効



©2011 Microsoft Corporation. All Rights Reserved.
FORCESEEK クエリヒント




                                                    SEEK 操作のみ指定可能




   ~SQL Server 2008 R2                              select * from t with (forceseek)



                                                    SEEK 操作に使用するインデックスと列を指定可能




   SQL Server 2012                                  select * from t with with (forceseek (ix(c1, c2)) )

©2011 Microsoft Corporation. All Rights Reserved.
クエリプラン収集機能拡張




               14
SQL Server 2008 R2 までは…




           クエリプラン                         SQL Server
           収集方法                           プロファイラ       SQLTrace


                                          収集する

                                          OR

           収集条件                           収集しない        自由度低




                                                       収集できない
           収集時の負荷                         高い           環境が多い

©2011 Microsoft Corporation. All Rights Reserved.
SQL Server 2012 からは…




        ツールの追加                         拡張イベント


                                       Duration

                                       OR
        収集条件の                                       収集対象の    収集時の   収集可能な
        柔軟な設定                          CPU Time     絞り込み可能   負荷軽減   環境の増加




©2011 Microsoft Corporation. All Rights Reserved.
サンプルコード


      クエリプラン収集イベント:                                 収集条件:
      query_post_execution_showplan                 CPU使用時間 10 秒以上

       CREATE EVENT SESSION test_session
       ADD EVENT sqlserver.query_post_execution_showplan(
         WHERE ([cpu_time]>=(10000000)))
       ADD TARGET package0.event_file(SET filename=N'C:¥Program Files¥Microsoft SQL
       Server¥MSSQL11.ENGINE_DEV¥MSSQL¥Log¥test.xel')
       WITH (
       MAX_MEMORY=4096KB,
       EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
       MAX_DISPATCH_LATENCY=30 SECONDS,
       MAX_EVENT_SIZE=0 KB,
       MEMORY_PARTITION_MODE=NONE,
       TRACK_CAUSALITY=OFF,
       STARTUP_STATE=OFF
       )
       GO




©2011 Microsoft Corporation. All Rights Reserved.
ページ割り当て状況確認方法の改善




                   18
ページ割り当て状況確認




                                                                 DBCC IND
       ~SQL Server 2008 R2                    DBCC コマンドのみ        DBCC EXTENTINFO    データの加工に難あり




                                              動的管理関数:
       SQL Server 2012                        sys.dm_db_database_page_allocations   フィルタなどが容易




©2011 Microsoft Corporation. All Rights Reserved.
パラメータなど


                                      sys.dm_db_database_page_allocations
                                      ( データベースID,
                                      オブジェクトID,
                                      インデックスID,
                                      パーティションID,
                                      出力オプション) – ‘LIMITED’ / ‘DETAILED’
       パラメータ



                                      select * from sys.dm_db_database_page_allocations( DB_ID(‘db1') ,
                                      OBJECT_ID(‘tb1') , NULL , NULL , 'DETAILED' )
                                      go

       サンプルコード




©2011 Microsoft Corporation. All Rights Reserved.
Cardinality Estimate Framework




                                 21
クエリ実行に時間がかかる(終わらない)……




                                                                    統計情報不正

                        不適切な                        カージナリティ
                        クエリ実行プラン                    見積もり不正          インデックス不足

                                                    クエリ実行プラン収集:
                                                    実行プラン内の不正イテレータの特定



                        調査方法                        estimated = ×      actual = ○




©2011 Microsoft Corporation. All Rights Reserved.
Cardinality estimate framework



                                                SET STATISTICS XML ON


        ~SQL Server 2008 R2
        [Actual]プランの収集                          SET STATISTICS PROFILE ON   クエリが完了時に取得



                                                Cardinality estimate framework(拡張イベント):
                                                inaccurate_cardinality_estimate イベント


                                                イテレータの実際の出力件数と、見積もり件数との差が閾値を超
        SQL Server 2012                         えたタイミングでイベント発生




©2011 Microsoft Corporation. All Rights Reserved.
イベント発生のしきい値


       見積もり行数が1行の場合
       オプティマイザがイテレータの見積もり行数を1行と見積もったケース。
       イテレータの実際の処理数が2行以上になるとイベントが発生。




       見積もり行数が2から100,000の場合
       見積もり行数の5倍以上の行数をイテレータが処理するとイベントが発生。




       見積もり行数が100,000より大きい場合
       見積もり行数が、100,000より大きい場合。
       イベントが発生するときの閾値は次の式で算出。

       100,000 * (5-1.2) + 1.2 *[見積もり行数].




©2011 Microsoft Corporation. All Rights Reserved.
注意が必要なポイント

                                       クエリが効率的に実行されていてもイベントが発生す
                                       ることがある
      ノイズ                              (FALSE POSITIVE ケース)




      負荷                               内部的には statistics profile の収集が有効化される


                                       - 過少見積もり
                                          パフォーマンスへの影響大
      過剰見積もり                           - 過剰見積もり
      不検知                                 パフォーマンスへの影響小

                                       ノイズ 発生率高
                                       - 並列クエリの見積もり
                                          見積もり行数を単純に並列数で均等に割った値
                                       - 実際に各スレッドが処理する行数
      並列クエリ                               データの配置状況などによって必ずしも均等に処理されるとは限らない

©2011 Microsoft Corporation. All Rights Reserved.
©
 © 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.
                                        MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
                                                                                                                                                                                                            26

More Related Content

PPTX
Sql server 運用 101
PDF
待ち事象から考える、Sql server の改善ポイント
PDF
SQL Server パフォーマンス問題対処 Deep Dive
PDF
Azure Synapse Analytics 専用SQL Poolベストプラクティス
PDF
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
PPTX
SQL Server 入門
PPTX
ここからはじめる SQL Server の状態取得
PDF
Dbts2013 特濃jpoug log_file_sync
Sql server 運用 101
待ち事象から考える、Sql server の改善ポイント
SQL Server パフォーマンス問題対処 Deep Dive
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
SQL Server 入門
ここからはじめる SQL Server の状態取得
Dbts2013 特濃jpoug log_file_sync

What's hot (20)

PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
PPTX
Sql server のバックアップとリストアの基礎
PDF
あなたの知らないPostgreSQL監視の世界
PDF
Sql server よく聞く設定とその効果
PDF
SQL Server チューニング基礎
PDF
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
PDF
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
PDF
C16 45分でわかるPostgreSQLの仕組み by 山田努
PPTX
PostgreSQL共有バッファと関連ツール
PDF
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
PDF
Always on 可用性グループ 構築時のポイント
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PDF
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
PDF
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
PDF
45分で理解する SQL Serverでできることできないこと
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
Sql server 2016 always on 可用性グループ new features
PDF
まずやっとくPostgreSQLチューニング
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Sql server のバックアップとリストアの基礎
あなたの知らないPostgreSQL監視の世界
Sql server よく聞く設定とその効果
SQL Server チューニング基礎
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
C16 45分でわかるPostgreSQLの仕組み by 山田努
PostgreSQL共有バッファと関連ツール
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Always on 可用性グループ 構築時のポイント
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
45分で理解する SQL Serverでできることできないこと
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
PostgreSQLの運用・監視にまつわるエトセトラ
Sql server 2016 always on 可用性グループ new features
まずやっとくPostgreSQLチューニング
Ad

Similar to C13 SQL Server2012知られざるTips集 by 平山理 (20)

PDF
Seas で語られたこととは?
PDF
SQL Azure のシームレスな管理
PDF
C21 SQL Server のスレッド管理 by 古賀啓一郎
PDF
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
PPTX
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
PDF
クラウドで始める事業継続[クラウドEXPO2012]
PDF
[Japan Tech summit 2017] DAL 003
PDF
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
PDF
Share pointを支えるsql server2014最新情報 tokyo_公開用
PPTX
SQL Server 2019 とともに知る Microsoft Data Platform
PDF
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
PDF
20190530 osc hokkaido_public
PPTX
Microsoft Azure - SQL Data Warehouse
PDF
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
PPTX
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
PPTX
Azure SQLデータベース最新動向&TIPS
PDF
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
PDF
RWC2012(ワコムアイティ&テクノプロジェクト)
PDF
MySQL Cluster でもフラッシュドライブを活用してみる
PDF
Share pointを支えるsql server2014最新情報
Seas で語られたこととは?
SQL Azure のシームレスな管理
C21 SQL Server のスレッド管理 by 古賀啓一郎
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
クラウドで始める事業継続[クラウドEXPO2012]
[Japan Tech summit 2017] DAL 003
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
Share pointを支えるsql server2014最新情報 tokyo_公開用
SQL Server 2019 とともに知る Microsoft Data Platform
Sql server 2012 の bi関連 新機能の紹介 と 次回sqlto勉強会のお知らせ
20190530 osc hokkaido_public
Microsoft Azure - SQL Data Warehouse
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
Azure SQLデータベース最新動向&TIPS
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
RWC2012(ワコムアイティ&テクノプロジェクト)
MySQL Cluster でもフラッシュドライブを活用してみる
Share pointを支えるsql server2014最新情報
Ad

More from Insight Technology, Inc. (20)

PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
Docker and the Oracle Database
PDF
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
PDF
事例を通じて機械学習とは何かを説明する
PDF
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
PDF
MBAAで覚えるDBREの大事なおしごと
PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
DBREから始めるデータベースプラットフォーム
PDF
SQL Server エンジニアのためのコンテナ入門
PDF
Lunch & Learn, AWS NoSQL Services
PDF
db tech showcase2019オープニングセッション @ 森田 俊哉
PDF
db tech showcase2019 オープニングセッション @ 石川 雅也
PDF
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
PPTX
難しいアプリケーション移行、手軽に試してみませんか?
PPTX
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
PPTX
そのデータベース、クラウドで使ってみませんか?
PPTX
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
PDF
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
PPTX
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
PPTX
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
グラフデータベースは如何に自然言語を理解するか?
Docker and the Oracle Database
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
事例を通じて機械学習とは何かを説明する
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
MBAAで覚えるDBREの大事なおしごと
グラフデータベースは如何に自然言語を理解するか?
DBREから始めるデータベースプラットフォーム
SQL Server エンジニアのためのコンテナ入門
Lunch & Learn, AWS NoSQL Services
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
難しいアプリケーション移行、手軽に試してみませんか?
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
そのデータベース、クラウドで使ってみませんか?
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]

C13 SQL Server2012知られざるTips集 by 平山理

  • 2. Agenda  Lock 獲得動作の変更  統計情報自動更新の変更  FORCESEEK 機能拡張  クエリプラン収集機能拡張  ページ割り当て状況の確認方法の改善  Cardinality Estimate Framework ©2011 Microsoft Corporation. All Rights Reserved.
  • 4. SQL Server 2012 より前の動作 クライアント A SELECT * FROM T - T はパーティションテーブル - SCH-S ロックが必要 クライアント B ALTER TABLE T2 SWITCH PARTITION 1 TO T PARTITION 1 - パーティションをスイッチするDDLを実行 - SCH-M ロックが必要 クライアント C DDL - SELECT * FROM T WITH (NOLOCK) Starvation - SCH-S ロックが必要(Dirty Read であっても) ©2011 Microsoft Corporation. All Rights Reserved.
  • 5. SQL Server 2012 より前の動作(続き) SCH-S (スキーマ共有ロック) - DDL によるスキーマ変更防止 - Dirty Read にも必要 SCH-M - スキーマ変更ロック ロック - スキーマ変更時の排他制御 SCH-S とSCH-Mは互換性なし - 後続の SCH-S が付与され続ける 問題点 - SCH-M は待機し続ける ©2011 Microsoft Corporation. All Rights Reserved.
  • 6. SQL Server 2012 の動作 15000 パーティションまで分割可能 パーティション数 DDL Starvation の機会増加 アルゴリズムの変更 - FIFOの採用 - SCH-SはSCH-Mをスキップしない 旧動作への復帰 - トレースフラグ 617 改善策 - 再起動不要 ©2011 Microsoft Corporation. All Rights Reserved.
  • 8. 従来の統計情報更新アルゴリズム テーブル基数 =< 500 500 回の変更で統計情報を更新 テーブル基数 > 500 500 回+テーブル基数20% の変更で統計情報を更新 テーブル基数が大きい場合は統計情報の更新頻度低 例: 1,000,000,000 件のデータが存在するテーブルの場合 考慮点 1,000,000,000 * 0.2 + 500 = 200,000,500 ©2011 Microsoft Corporation. All Rights Reserved.
  • 9. トレースフラグ 2371 の導入 例: 1,000,000,000 件のデータが存在するテーブルの場合 更新タイミング: SQRT(データ件数*1000) SQRT(1,000,000,000*1000) = 1,000,000 有効なバージョン: SQL Server 2012 RTM SQL Server 2008 R2 SP1 以降 再起動不要 ©2011 Microsoft Corporation. All Rights Reserved.
  • 10. sys.dm_db_stats_properties 動的管理ビュー 統計情報の内容を出力 サンプル数、更新日時、更新回数などを含む 有効なバージョン: SQL Server 2012 SP1 以降 SQL Server 2008 R2 SP2 以降 DBCC SHOW_STATISTICS の代替 ©2011 Microsoft Corporation. All Rights Reserved.
  • 12. FORCESEEK クエリヒント オプティマイザの決定をオーバライド SEEK 操作のみを使用してデータにアクセス FORCESEEK クラスタ化インデックス、非クラスタ化インデックスに有効 ©2011 Microsoft Corporation. All Rights Reserved.
  • 13. FORCESEEK クエリヒント SEEK 操作のみ指定可能 ~SQL Server 2008 R2 select * from t with (forceseek) SEEK 操作に使用するインデックスと列を指定可能 SQL Server 2012 select * from t with with (forceseek (ix(c1, c2)) ) ©2011 Microsoft Corporation. All Rights Reserved.
  • 15. SQL Server 2008 R2 までは… クエリプラン SQL Server 収集方法 プロファイラ SQLTrace 収集する OR 収集条件 収集しない 自由度低 収集できない 収集時の負荷 高い 環境が多い ©2011 Microsoft Corporation. All Rights Reserved.
  • 16. SQL Server 2012 からは… ツールの追加 拡張イベント Duration OR 収集条件の 収集対象の 収集時の 収集可能な 柔軟な設定 CPU Time 絞り込み可能 負荷軽減 環境の増加 ©2011 Microsoft Corporation. All Rights Reserved.
  • 17. サンプルコード クエリプラン収集イベント: 収集条件: query_post_execution_showplan CPU使用時間 10 秒以上 CREATE EVENT SESSION test_session ADD EVENT sqlserver.query_post_execution_showplan( WHERE ([cpu_time]>=(10000000))) ADD TARGET package0.event_file(SET filename=N'C:¥Program Files¥Microsoft SQL Server¥MSSQL11.ENGINE_DEV¥MSSQL¥Log¥test.xel') WITH ( MAX_MEMORY=4096KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=30 SECONDS, MAX_EVENT_SIZE=0 KB, MEMORY_PARTITION_MODE=NONE, TRACK_CAUSALITY=OFF, STARTUP_STATE=OFF ) GO ©2011 Microsoft Corporation. All Rights Reserved.
  • 19. ページ割り当て状況確認 DBCC IND ~SQL Server 2008 R2 DBCC コマンドのみ DBCC EXTENTINFO データの加工に難あり 動的管理関数: SQL Server 2012 sys.dm_db_database_page_allocations フィルタなどが容易 ©2011 Microsoft Corporation. All Rights Reserved.
  • 20. パラメータなど sys.dm_db_database_page_allocations ( データベースID, オブジェクトID, インデックスID, パーティションID, 出力オプション) – ‘LIMITED’ / ‘DETAILED’ パラメータ select * from sys.dm_db_database_page_allocations( DB_ID(‘db1') , OBJECT_ID(‘tb1') , NULL , NULL , 'DETAILED' ) go サンプルコード ©2011 Microsoft Corporation. All Rights Reserved.
  • 22. クエリ実行に時間がかかる(終わらない)…… 統計情報不正 不適切な カージナリティ クエリ実行プラン 見積もり不正 インデックス不足 クエリ実行プラン収集: 実行プラン内の不正イテレータの特定 調査方法 estimated = × actual = ○ ©2011 Microsoft Corporation. All Rights Reserved.
  • 23. Cardinality estimate framework SET STATISTICS XML ON ~SQL Server 2008 R2 [Actual]プランの収集 SET STATISTICS PROFILE ON クエリが完了時に取得 Cardinality estimate framework(拡張イベント): inaccurate_cardinality_estimate イベント イテレータの実際の出力件数と、見積もり件数との差が閾値を超 SQL Server 2012 えたタイミングでイベント発生 ©2011 Microsoft Corporation. All Rights Reserved.
  • 24. イベント発生のしきい値 見積もり行数が1行の場合 オプティマイザがイテレータの見積もり行数を1行と見積もったケース。 イテレータの実際の処理数が2行以上になるとイベントが発生。 見積もり行数が2から100,000の場合 見積もり行数の5倍以上の行数をイテレータが処理するとイベントが発生。 見積もり行数が100,000より大きい場合 見積もり行数が、100,000より大きい場合。 イベントが発生するときの閾値は次の式で算出。 100,000 * (5-1.2) + 1.2 *[見積もり行数]. ©2011 Microsoft Corporation. All Rights Reserved.
  • 25. 注意が必要なポイント クエリが効率的に実行されていてもイベントが発生す ることがある ノイズ (FALSE POSITIVE ケース) 負荷 内部的には statistics profile の収集が有効化される - 過少見積もり パフォーマンスへの影響大 過剰見積もり - 過剰見積もり 不検知 パフォーマンスへの影響小 ノイズ 発生率高 - 並列クエリの見積もり 見積もり行数を単純に並列数で均等に割った値 - 実際に各スレッドが処理する行数 並列クエリ データの配置状況などによって必ずしも均等に処理されるとは限らない ©2011 Microsoft Corporation. All Rights Reserved.
  • 26. © © 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. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 26