SQL パフォーマンス チューニング ~ プランガイドの利用~

Slides:



Advertisements
Similar presentations
Silverlight Producer コンテンツ作成 第一回 GKB48 セミナー 「学習型クラウド共有スペース GKB コモンズは何を目指すか」 2013.oct.30.
Advertisements

販売店エリア更新処理 仕様確認資料 2013年8月. Copyright© 2013 Esri Japan Corporation All Rights Reserved 処理概要 販売店エリアデータ更新処理 ・既存の販売店エリアデータ削除 ・新規販売店エリアデータ取り込み 販売店エリアデータ更新処理.
Outlook メール文字化けの原因と対策 Exchange Server 環境編. 目次はじめに文字化けのよくある原因と回避策 1. A:半角英数字、ヨーロッパ言語などが混在した 文字化け B : 送信済みメールの宛先や CC の文字化け 2. 返信、転送時の、ユーザー名や件名の文字化け 3. 日本語が半角英数字に文字化け.
IBM SmarterCloud Control Desk 7.5 新機能ガイド - 資産と構成アイテムの同期
Microsoft Office 2010 クイックガイド ~OneNote編~
7-1.WEKOコンテンツ 一括登録 マニュアル Version2.5
TeX で数式を書くための PowerPoint アドイン Ver (2011/06/26) Ver. 0.1 (2007/5/30)
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
PostGIS - 1 (入門編).
Windows 7 における デフォルト ユーザー プロファイルの カスタマイズ方法
SQL データベースアクセスのための文法と MySQL
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
SAP システムにおける SQL Server 運用ノウハウ
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
Lync 会議 Lync 会議に参加する Lync 2013 クイック リファレンス Lync 会議のスケジュール
ファイルやフォルダを検索する ①「スタート」→「検索」→「ファイルとフォルダ」とクリックする。
SharePoint Server において 構成ウィザードが失敗する場合の トラブルシューティング
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
2007 Microsoft Office system クイックガイド
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
SQL J2EE I 第3回 /
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Windows Server 2008 フェールオーバー クラスタ におけるディスク障害の対処方法
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
T-SQL の Parse と Generate
EBSCOhost 詳細検索 チュートリアル support.ebsco.com.
 データベースによる並列処理 情報論理工学研究室  三宅健太.
パフォーマンスチューニング on Rails
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
マイクロソフト Access を使ってみよう 第4回
Microsoft Office 2010 クイックガイド ~OneNote編~
第2回 SQL インジェクション その攻撃と対処 NECラーニング 山崎 明子.
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
SQL パフォーマンス チューニング ~ カバーリングインデックス/クエリヒントの利用~
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
わんくま同盟・techbank.jp 夏椰 Insight Technology, Inc. 今川 美保
マイクロソフト Access での SQL 演習 第5回 副問い合わせ
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
Javaによる Webアプリケーション入門 第7回
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
情報システム1及び演習 第一回 データベースの概要.
~let's take fun when you can do it~
3.リレーショナルデータベース,主キー, SQL
SQL Server 2008 および 更新プログラムの一括セットアップ
ファイルやフォルダを検索する ①「スタート」→「検索」とクリックする。 ②「表示項目」から適当なものを選択する。
Excelによる3-D/等高線グラフの描画 2変数関数の描画 Excel によるグレイスケールマップ風描画
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
Microsoft SharePoint Online の Web サイトを カスタマイズする方法
TableAdapterとSQLDependency 便利さを使い倒そう。 by えムナウ
SQL パフォーマンス チューニング ~ パフォーマンス改善 最初の一歩 ~
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
Molecular Devices Japan
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SYSVOL複製 を DFS レプリケーションに移行する
中上級編 vol. 3 前編: SQLDiag ツールの利用
SQL J2EE I (データベース論) 第3回 /
SQL データベース論 第11回.
Presentation transcript:

SQL パフォーマンス チューニング ~ プランガイドの利用~ 中上級編 vol. 2 前編:クエリヒント Seminar Name

SQL パフォーマンス チューニング 中上級編 3回シリーズ 2010年9月公開 中上級編 vol. 1 カバーリングインデックス/クエリヒントの利用 2010年10月公開 中上級編 vol. 2 プランガイドの利用 2010年11月公開予定 中上級編 vol. 3 PSSDIAG/SQLNEXUS ツールの利用 Seminar Name

概要 シナリオ 前編 プランガイドの利用確認 まとめ 後編 シナリオ 1: クエリヒント シナリオ 2: 特定のクエリ実行プラン パフォーマンスに関する悩み シナリオ シナリオ 1: クエリヒント シナリオ 2: 特定のクエリ実行プラン プランガイドの利用確認 まとめ 前編 後編 Seminar Name

パフォーマンスに関する悩み プランガイドが有効な状況 クエリヒントやテーブルヒントの追加、もしくは、特定のクエリ実行プランにてパフォーマンスが向上できることが分かっている 既存のクエリ内容が変更できない (サード・パーティ製アプリケーションなど)

プランガイドとは クエリ内容を変更せず、クエリヒントや特定のクエリ実行プランを使用することが可能 指定するクエリヒントや特定のクエリ実行プランを、特定のクエリに紐付け、指定したヒントやクエリ実行プランを利用して特定のクエリを実行することが可能 SQL Server 2005 以降より利用可能

シナリオ 1: クエリヒント 問題   クエリヒント(“FORCESEEK”)を該当クエリに追加することにより、処理時間が改善されることが確認できているが、既存のクエリ内容を変更することができない 対処方法 クエリヒントを使用したプランガイドを利用する

シナリオ 1: クエリヒント クエリヒントを使用したプランガイドを作成する テーブル名 tab1 a1 int a2 a3 nchar(2000) パフォーマンスを向上させたいクエリ select a1,a2,a3 from tab1 where a1 > 18000 クエリヒント“FORCESEEK”を使用するプランガイドを作成するために、下記クエリを実行する EXEC sp_create_plan_guide @name = N'PLANGUIDE1', @stmt = N'select a1,a2,a3 from tab1 where a1 > 18000',  @type = N'SQL', @module_or_batch = NULL, @params = NULL, @hints = N'OPTION (TABLE HINT (tab1,FORCESEEK))'

シナリオ 1:クエリヒント 準備1 -- データベースを作成 create database Scenario_2 go ALTER DATABASE [Scenario_2] SET AUTO_UPDATE_STATISTICS OFF WITH NO_WAIT -- テーブルを作成 use Scenario_2 create table tab1 (a1 int, a2 int, a3 nchar(2000)) Go

シナリオ 1:クエリヒント 準備2 -- インデックス作成 create index IX_tab1_a1 on tab1(a1) go --不適切なインデックスを使用するよう、あえて統計情報の自動更新をOFFに設定 EXEC sp_autostats tab1,'OFF'  -- データの挿入 declare @icnt int set @icnt=1 while @icnt < 20001 begin insert into tab1 values(@icnt,@icnt,N'チューニング') set @icnt = @icnt + 1 end

シナリオ 1:クエリヒント プランガイドを利用しないクエリ -- Management Studio で ”実際の実行プランを表示する” を選択 --  プランガイドを利用しない場合のクエリを実行 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON select a1,a2,a3 from tab1 where a1 > 18000 SET STATISTICS TIME OFF SET STATISTICS IO OFF SET STATISTICS PROFILE OFF

シナリオ 1:クエリヒント プランガイドを利用しないクエリの実行結果 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 10000、物理読み取り数 80 SQL Server 実行時間: CPU 時間 = 78 ミリ秒、経過時間 = 1061 ミリ秒

シナリオ 1:クエリヒント プランガイドを作成 -- プランガイド作成 -- 該当のクエリをクエリヒント"FORCESEEK" を指定したうえで、実行プランを作成 EXEC sp_create_plan_guide   @name = N'PLANGUIDE1',   @stmt = N‘select a1,a2,a3 from tab1 where a1 > 18000’,   @type = N'SQL', @module_or_batch = NULL, @params = NULL, @hints = N'OPTION (TABLE HINT (tab1,FORCESEEK))'; オプション設定   @stmt :プランを強制させたいクエリを記載。この部分のステートメントは、実際に実行されるステートメントを厳密に指定する必要がある。例えばスペースや改行の違いによっても、プランガイドは使用されなくなるため、注意が必要。   @hints :クエリヒントを記載。

シナリオ 1:クエリヒント プランガイドの確認 -- 作成したプランガイドを確認 select plan_guide_id, name,is_disabled,scope_type, query_text, hints from sys.plan_guides -- 無効化 (is_disabled 列が 1)となっている場合、作成したプランガイドを有効化 exec sp_control_plan_guide  @operation = N'ENABLE',  @name = N'PLANGUIDE1'

シナリオ 1:クエリヒント プランガイドを利用するクエリの実行結果確認 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 2017、物理読み取り数 2 SQL Server 実行時間: CPU 時間 = 78 ミリ秒、経過時間 = 283 ミリ秒

SQL パフォーマンス チューニング ~ プランガイドの利用~ 中上級編 vol. 2 後編:特定のクエリ実行プラン Seminar Name

シナリオ 2: 特定のクエリ実行プラン 問題 対処策 問題   特定のクエリ実行プランでは、処理時間が改善されることが確認できているが、既存のクエリ内容を変更することができない 対処策 処理時間の速いクエリ実行プランを使用してプランガイドを作成する

シナリオ 2: 特定のクエリ実行プラン 特定のクエリプランを使用するプランガイドを作成する テーブル名 tab1 a1 int a2 a3 nchar(2000) パフォーマンスを向上させたいクエリ select a1,a2,a3 from tab1 where a1 > 18000 ヒント付きクエリや、処理時間が速いと確認できている状況にて、プロファイラでクエリ実行プランを採取し、その特定のクエリ実行プランを使用するプランガイドを作成するために、下記クエリを実行する。 EXEC sp_create_plan_guide @name = N'PLANGuide2', @stmt = N'select a1,a2,a3 from tab1 where a1 > 18000', @type = N'SQL', @module_or_batch = NULL, @params = NULL, @hints = N‘OPTION (USE PLAN N’‘<ShowPlanXML・・・・・ BatchSequence></ShowPlanXML>'')'

シナリオ 2: 特定のクエリ実行プラン プランガイドを利用しないクエリ 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 10000、物理読み取り数 80 SQL Server 実行時間: CPU 時間 = 78 ミリ秒、経過時間 = 1061 ミリ秒

シナリオ 2: 特定のクエリ実行プラン 特定のクエリプランをXML形式で採取1 1) メニューから Microsoft SQL Server 2008(2005) - パフォーマンスツール - SQL Server Profiler を起動し、 [ファイル]-[新しいトレース]を選択。 2) 該当のインスタンスに接続。 3) 「全般」 タブにて、使用するテンプレートに 「Standard」 が選択されていることを確認。 4) [イベントの選択]タブで、「すべてのイベントを表示する」をチェック。  

シナリオ 2: 特定のクエリ実行プラン 特定のクエリプランをXML形式で採取2 5) 続けて、以下のイベントを追加。 - Performance   Showplan XML - TSQL   SQL:StmtStarting   SQL:StmtCompleted ※対象クエリが ストアドプロシージャ の場合は、以下を選択。 - Performance   Showplan XML - Stored Procedure   SP:StmtStarting   SP:StmtCompleted

シナリオ 2: 特定のクエリ実行プラン 特定のクエリプランをXML形式で採取3 6) 「実行」ボタンをクリック。トレース採取が開始される。 7) トレースを採取している状態で、対象クエリを実行。 クエリ実行が完了したことを確認し、トレースの採取を停止。 8) プロファイラにて、採取したトレースを確認。 ※ 下記は該当部分のみの抜粋です。 SQL:StmtStarting, SQL:StmtCompletedイベントの間に出力されているShowplan XMLが取得対象の実行プランです。

シナリオ 2: 特定のクエリ実行プラン 特定のクエリプランをXML形式で採取4 9) 該当のShowplan XML イベントの行を右クリックし、[イベント データの抽出] を選択。 保存先を指定して、任意のファイルとして保存。

シナリオ 2: 特定のクエリ実行プラン プランガイドを作成 -- 該当のクエリをXML形式で採取したクエリプラン を指定し、プランガイドを作成 EXEC sp_create_plan_guide   @name = N'PLANGUIDE2',   @stmt = N'select a1,a2,a3 from tab1 where a1 > 18000',   @module_or_batch = NULL, @params = NULL, @hints =N‘OPTION (USE PLAN N''<ShowPlanXML xmlns・・・/BatchSequence></ShowPlanXML>'')' オプション  @hints:プロファイラで取得したXML形式の実行プランを記載。N プレフィックスの後は、「’」(シングルクォーテーション)2つで囲む'')'

シナリオ 2:特定のクエリ実行プラン プランガイドを利用するクエリの実行結果確認 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 2017、物理読み取り数 0 SQL Server 実行時間: CPU 時間 = 62 ミリ秒、経過時間 = 226 ミリ秒

シナリオ 2:特定のクエリ実行プラン クエリプラン取得方法 プランガイドで指定するクエリ実行プランの取得方法は以下のいずれかで可能 SET SHOWPLAN_XML SET STATISTICS XML sys.dm_exec_query_plan 動的管理関数の query_plan 列へのクエリ SQL Server Profiler の Showplan XML イベント クラス、Showplan XML Statistics Profile イベント クラス、および Showplan XML For Query Compile イベント クラス([イベント データの抽出] を実行して XML プランをファイルに保存)  ※SQL Server Management Studio からクエリを実行する場合、出力文字列の制限によりすべて情報が表示されない可能性があるため、プロファイラでの採取を推奨。

プランガイドの利用確認 指定したクエリ実行プランが使用されているか確認1 -- プロファイラを使用して、指定したクエリ実行プランが使用されているか確認 1) メニューから Microsoft SQL Server 2008(2005) - パフォーマンスツール - SQL Server Profiler を起動し、 [ファイル]-[新しいトレース]を選択。 2) 該当のインスタンスに接続。 3) 「全般」 タブにて、使用するテンプレートに 「Standard」 が選択されていることを確認。 4) [イベントの選択]タブで、「すべてのイベントを表示する」をチェック。 Seminar Name

プランガイドの利用確認 指定したクエリ実行プランが使用されているか確認2 5) 以下のイベントを追加。 - Performance   Showplan XML - TSQL   SQL:StmtStarting   SQL:StmtCompleted ※対象クエリがストアドプロシージャの場合は、以下を選択。 - Stored Procedure   SP:StmtStarting   SP:StmtCompleted

プランガイドの利用確認 指定したクエリ実行プランが使用されているか確認3 6) 「実行」ボタンをクリック。トレース採取が開始。 7) トレースを採取している状態で、以下のクエリを実行。クエリ実行が完了したことを確認して、トレースの採取を停止。 ----------- dbcc freeproccache go 対象クエリ ※クエリ実行前にdbcc freeproccache を実行。本コマンドにより、プロシージャキャッシュをクリアし、キャッシュされているクエリ実行プランが使用されることを防止。

プランガイドの利用確認 指定したクエリ実行プランが使用されているか確認4 8) プロファイラにて、採取したトレースを確認。 対象クエリのShowplan XML イベントの行を右クリックし、[イベント データの抽出] を選択。保存先を指定して、任意のファイルとして保存。 9) 8) で、保存したファイルを開き、以下が含まれているかを確認。 <PlanGuideDB="データベース名" PlanGuideName="ガイド名"> 上記が含まれている場合、プランガイドで設定したプランが使用されていると判断可能。

まとめ プランガイド (SQL Server 2005/2008/2008R2) ヒント句 特定のクエリ実行プラン

参考情報 sp_create_plan_guide (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms179880.aspx    sys.plan_guides (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms178010.aspx   sp_control_plan_guide (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms188733.aspx クエリ ヒント (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms181714.aspx クエリ ヒント (Transact-SQL) : SQL Server 2005 http://msdn.microsoft.com/ja-jp/library/ms181714(SQL.90).aspx

参考情報 テーブル ヒント (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms187373.aspx テーブル ヒント (Transact-SQL) : SQL Server 2005 http://msdn.microsoft.com/ja-jp/library/ms187373(SQL.90).aspx   OPTION 句 (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms190322.aspx http://msdn.microsoft.com/ja-jp/library/ms190322(SQL.90).aspx プラン ガイドを使用した配置済みアプリケーションのクエリの最適化 http://msdn.microsoft.com/ja-jp/library/ms187032.aspx プラン ガイドを使用した配置済みアプリケーションのクエリの最適化 : SQL Server 2005 http://msdn.microsoft.com/ja-jp/library/ms187032(SQL.90).aspx

Ihr Potenzial. Unser Antrieb. Seminar Name