SQL パフォーマンス チューニング ~ カバーリングインデックス/クエリヒントの利用~

Slides:



Advertisements
Similar presentations
SQL による数独の解法 青山学院大学理工学部 矢吹太朗・佐久田博司. 数独とは何か ナンプレとも呼ばれ る制約充足問題 各行・列・ブロック に 1 から 9 の数字を一 つずつ当てはめる 新聞等に載っている ものはとても簡単 人間には難しいもの → もある.
Advertisements

SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
SQLite3
インターネット技術特論 H:SQLite3 山口 実靖
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
PostGIS - 1 (入門編).
SQL データベースアクセスのための文法と MySQL
知的システム構築工房   Linux設定セミナーシリーズ 第6回 MySQL設定 2011年3月17日(木) 株式会社 アセンディア 1.
SAP システムにおける SQL Server 運用ノウハウ
Explaining Explain ~ PostgreSQLの実行計画を読む ~
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
SQL J2EE I 第3回 /
Windows Server 2008 フェールオーバー クラスタ におけるディスク障害の対処方法
T-SQL の Parse と Generate
Webコミュニケーショングループ ~CGI勉強会~ (データーベース編)
 データベースによる並列処理 情報論理工学研究室  三宅健太.
パフォーマンスチューニング on Rails
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
table 'results' SELECT name, teacher FROM results;
朝日大学大学院 経営学研究科 奥山 徹 データベース論 朝日大学大学院 経営学研究科 奥山 徹 2006/05/29 データベース論(7回目)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
世界初のX線光子データベース「MAXI地上データベース」の 実現に向けた性能試験
第2回 SQL インジェクション その攻撃と対処 NECラーニング 山崎 明子.
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
Oracle XEを使ってみよう 初音玲.
JDBC J2EE I 第4回 /
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SQL パフォーマンス チューニング ~ プランガイドの利用~
わんくま同盟・techbank.jp 夏椰 Insight Technology, Inc. 今川 美保
マイクロソフト Access での SQL 演習 第5回 副問い合わせ
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
JDBC データベース論 第12回.
Javaによる Webアプリケーション入門 第7回
09 06/23 PHP と SQL (MySQL) の連携 その1
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
「Webデータベースの構築技術」正誤表 ページ 項目 誤記 訂正 18 表1.4 アクセス 権限の削除 ・・・テーブル名 TO ユーザ名
1億円 45%OFF HP Enterprise Data Warehouse Appliance 2012年6月まで
09 06/23 PHP と SQL (MySQL) の連携 その2
Oracle XEを使ってみよう 初音玲.
データベース設計 第8回 クライアント=サーバーモデル(2)
JDBC J2EE I (データベース論) 第5回 /
Ajilius は、オープン ソースの手頃な価格と エンタープライズ レベルの機能との間にスイート スポットを発見
3.リレーショナルデータベース,主キー, SQL
JDBC ソフトウェア特論 第3回.
SQL Server 2008 および 更新プログラムの一括セットアップ
セカンダリ データベースを Linux に移行して 9 か月未満で投資を回収
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
関係データベースとSQL MZ Platform講習会(上級).
SQL パフォーマンス チューニング ~ パフォーマンス改善 最初の一歩 ~
09 06/23 PHP と SQL (MySQL) の連携 その3
フィンテック企業が Linux で SQL Server の パフォーマンスと スケーラビリティを取得
データ管理プラットフォームの 最適化によるサイバー セキュリティの強化
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
SYSVOL複製 を DFS レプリケーションに移行する
中上級編 vol. 3 前編: SQLDiag ツールの利用
地理情報システム論 第6回 GISによる処理技法 GIS入門(2)
SQL J2EE I (データベース論) 第3回 /
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
SQL データベース論 第11回.
Presentation transcript:

SQL パフォーマンス チューニング ~ カバーリングインデックス/クエリヒントの利用~ 中上級編 vol. 1

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

概要 パフォーマンスに関する悩み シナリオ シナリオ 1: カバーリングインデックス シナリオ 2: クエリヒント/テーブルヒント まとめ

パフォーマンスに関する悩み インデックスを設定しているが、より有効な インデックスを設定したい。 インデックスを設定しているが、より有効な インデックスを設定したい。 カバーリングインデックスの設定 チューニングを行った結果、特定の実行プランならばパフォーマンスが向上することが判明。特定の実行プランでクエリを実行したい。 クエリヒント/テーブルヒントの利用

シナリオ 1: カバーリングインデックス カバーリングインデックスとは 効果 クエリで利用する全ての列を含むインデックス コストのかかる nested loop の rid lookup や key lookup などのブックマーク参照を避ける クエリの論理読み取り数の削減

シナリオ 1: カバーリングインデックス カバーリングインデックスの作成方法 テーブル名 tab1 a1 int a2 a3 nchar(2000) パフォーマンスを向上させたいクエリ select a1,a2,a3 from tab1 where a1 > 10000 and a2 > 18000 カバーリングインデックス(付加列インデックス)を作成するために、下記クエリを実行します。 create index IX_tab1_a123 on tab1(a1,a2) include (a3)

シナリオ 1: カバーリングインデックス 準備 create database Scenario_1 use Scenario_1 go -- データベースを作成 create database Scenario_1 -- テーブルを作成 use Scenario_1 go create table tab1 (a1 int, a2 int, a3 nchar(2000), a4 nchar(2000)) -- クラスタ化インデックス作成 create clustered index IX_tab1_a1 on tab1(a1)  -- データの挿入 declare @icnt int  set @icnt = 1 while @icnt < 20001 begin   insert into tab1 values (@icnt,@icnt,'チューニング','パフォーマンス') set @icnt = @icnt + 1  end

シナリオ 1: カバーリングインデックス カバーリングインデックスを利用しないクエリ -- 非クラスタ化インデックス作成  create index IX_tab1_a1a2 on tab1(a1,a2) -- 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 > 10000 and a2 > 18000 SET STATISTICS TIME OFF SET STATISTICS IO OFF SET STATISTICS PROFILE OFF

シナリオ 1: カバーリングインデックス カバーリングインデックスを利用ないクエリの実行結果 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 24823、物理読み取り数 188 SQL Server 実行時間: CPU 時間 = 141 ミリ秒、経過時間 = 3776 ミリ秒

シナリオ 1: カバーリングインデックス カバーリングインデックスを利用するクエリ -- 作成済みの非クラスタ化インデックスの削除 drop index IX_tab1_a1a2 on tab1   --  カバーリングインデックス(付加列インデックス)を作成 create index IX_tab1_a123 on tab1(a1,a2) include (a3) --  カバーリングインデックスがある場合にクエリを実行 select a1,a2,a3 from tab1 where a1 > 10000 and a2 > 18000

シナリオ 1: カバーリングインデックス カバーリングインデックスを利用するクエリの実行結果 実行結果の一部 テーブル 'tab1'。スキャン回数 1、 論理読み取り数 5016、物理読み取り数 0 SQL Server 実行時間: CPU 時間 = 110 ミリ秒、経過時間 = 281 ミリ秒

シナリオ 2: クエリヒント クエリヒント/テーブルヒント クエリヒント/テーブルヒントとは オプティマイザに対して、明示的に指定した動作を実現するために、実行プランを作成させるようにする機能。 効果 目的に合わせて実行プランを変更することが出来る。 今回紹介する例 ハッシュ結合ヒント (SQL Server 2005/2008/2008R2) フォースシークヒント (SQL Server 2008/2008R2)

シナリオ 2:クエリヒント – HashJoin hint ハッシュ結合ヒントを利用しないクエリ --  ハッシュ結合ヒントを利用しないクエリ select A.a1,A.a3 from tab2 as A inner join tab3 as B on (A.a1 = B.a1) マージ結合が実行されていることがわかる。

シナリオ 2:クエリヒント – HashJoin hint ハッシュ結合ヒントを利用するクエリ --  ハッシュ結合ヒントを利用するクエリ select A.a1,A.a3 from tab2 as A inner join tab3 as B on (A.a1 = B.a1) option(HASH JOIN) ハッシュ結合ヒントにより、以下の通り実行プランがマージ結合からハッシュ結合に変更されている。

シナリオ 2:テーブルヒント – ForceSeek hint フォースシークヒントを利用しないクエリ (SQL Server 2008/2008 R2) --  フォースシークヒントを利用しないクエリ select a1,a2,a3 from tab1 where a1 > 19000 テーブルスキャンが実行されていることがわかる。

シナリオ 2:テーブルヒント – ForceSeek hint フォースシークヒントを利用するクエリ (SQL Server 2008/2008 R2) --  フォースシークヒントを利用するクエリ (1) select a1,a2,a3 from tab1 where a1 > 19000 option (TABLE HINT (tab1,FORCESEEK)) --  フォースシークヒントを利用するクエリ (2) select a1,a2,a3 from tab1(FORCESEEK) where a1 > 19000 フォースシークヒントにより、以下の通り実行プランが テーブルスキャンから、インデックスシークに変更されている。

まとめ カバーリングインデックス ハッシュ結合ヒント (SQL Server 2005/2008/2008R2) option(HASH JOIN) フォースシークヒント (SQL Server 2008/2008R2) option (TABLE HINT (tab1,FORCESEEK)) テーブル名 (FORCESEEK)

参考情報 実際の実行プランを表示する方法 付加列インデックス クエリ ヒント (Transact-SQL) http://technet.microsoft.com/ja-jp/library/ms189562.aspx 付加列インデックス http://msdn.microsoft.com/ja-jp/library/ms190806.aspx クエリ ヒント (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms181714.aspx テーブル ヒント(Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms187373.aspx クエリ チューニングの高度な概念 msdn. http://microsoft.com/ja-jp/library/ms191426.aspx FORCESEEK テーブル ヒントの使用 http://msdn.microsoft.com/ja-jp/library/bb510478.aspx

Ihr Potenzial. Unser Antrieb.