チューニング

SET STATISTICS PROFILE

実行計画をグリッド(テキスト)で出力する際のオプション。 SSMSでグラフィカルに見るとは別に値を保存しておきたい場合に使用する。 使用例 SET STATISTICS PROFILE ON select *From tbl_hoge2 where columns_k1 = 'aaaa' 同様にXML形式とするSET STATISTICS…

統計情報の取得履歴

統計情報がいつ更新されたかはSTATS_DATE関数で取得できる 使用例 SELECT so.name, ss.name as 統計情報名, ss.auto_created as 統計情報の自動生成, ss.user_created as 統計情報のユーザー生成, ss.no_recompute as NO_RECOMPUTEオプションの使用, STATS_D…

パーティションテーブル

SQL Serverでパーティションテーブルを作成するには事前にパーティション関数、パーティション構成を作成する必要がある。 作成例のSQL /* パーティション関数を作成 */CREATE PARTITION FUNCTION PT_HOGE(char(8)) AS RANGE LEFT FOR VALUES('20200101','20…

PARTITION TABLE

COL_LEYの値によってパーティションを分けるLISTパーティションの例 CREATE TABLE TBL_HOGE ( COL_LEY CHAR(6) NOT NULL, COL_VALUE VARCHAR2(12))PARTITION BY LIST (COL_LEY)( PARTITION PARNAME_1 VALUES ('福岡'), PARTITION PARNAME_2 VALUES ('熊本'),…

クライアント統計

MS Management Stadioにクライアント統計という機能がある。 この統計をオンにしてSQLを実行するとそのSQLで要したコストを確認することができる。なお、出力結果の秒数の単位は10ミリ秒 使い方は以下の通り 1.「メニュー」→「クエリ」→「クライアント統計を…

パラレルクエリ

処理の遅いSQLを拘束に処理したい場合は以下のようにパラレルで実行するように ヒント句を使用する方法がある。 SELECT /* + PARALLEL (tblhoge, 4) */ * FROM tblhoge; tblhoge⇒パラレルでアクセスするテーブル名 4→多重度 ただし、常に高速とは限らない。 …

Lock Page in Memory

Lock Page in Memory(メモリ内のページのロック)を有効にするとSQL Server が獲得したメモリがスワップアウトされなくなる。 メモリが十分に搭載している場合はこの設定を有効にしておくとレスポンスが向上する。 メモリが十分でない場合は知らん。有効にし…

インデックスの断片化

インデックスの断片化の情報を調べるのは以下の通り。 SELECT name as インデックス名, object_name(dm.object_id) as テーブル名, avg_fragmentation_in_percent as フラグメンテーション率 FROM sys.dm_db_index_physical_stats (DB_ID(), NULL,NULL, NULL…

データベースバッファキャッシュ

SQLServerはデフォルトで物理メモリのある限り、データベースバッファキャッシュとしてメモリを使用する。 なので、タスクマネージャでメモリを目一杯使用していてもメモリリークしているとは限らない。 サーバ上で動作しているのがSQLServerのみであれば上…

インデックスの不足を調べる

sys.dm_db_missing動的ビューを用いると不足していると思われるインデックスがわかる。 そのデータベース上で特にインデックスが不足していると推測されるものを探すSQLは以下の通り。 SELECT TOP 10 [Total Cost] = ROUND(avg_total_user_cost * avg_user_i…

実行計画を調べる

SQLの先頭にEXPLAIN PLAN FOR を付けると実行計画を調べることができる。 なお、実行計画を取得するだけでSQLは実際には実行されない。 EXPLAIN PLAN FOR SELECT * FROM HOGE WHERE HOGE_ID = '001'; 上記で取得した実行計画を表示するのは以下の通り SELECT…

LEADINGヒント

結合順序を指定するヒント。 ORDEREDヒントはFROM句に記述された順だが、このヒントでは結合順を指定することができる。 SELECT /*+ LEADING (tblB, tblA) */ tblA * FROM tbl_AA tblA tbl_BB tblB WHERE tblA.HOGECD = tblB.HOGECD(テーブル名に別名を使用…

エクステントの発生状況を調べる

1.Management Stadioを起動する 2.左のツリーより、対象のDBを選択し、レポート→標準レポート→ディスク使用量でレポートを表示する 3.データ/ログファイルの自動拡張/自動圧縮イベントを開く 動作確認環境:SQL Server 2008 Enterprise Edition

インデックスの断片化

インデックスの断片化を調査するSQLは以下の通り SELECT DB_NAME(database_id) as db_name ,OBJECT_NAME(object_id) as table_name ,(select min(name) from sys.indexes where sys.indexes.object_id = sys.dm_db_index_physical_stats.object_id and sys.i…

プロシージャキャッシュ

プロシージャキャッシュとは実行プランの格納に使用されるメモリ プールの部分のこと。 メモリに負荷が存在する場合、コストの低いのものから順にキャッシュから削除される。 現在のプロシージャキャッシュの状況を参照するには 動的管理ビューのdm_exec_cac…

dm_exec_query_stats

dm_exec_query_statsはキャッシュされたSQLの集計パフォーマンス統計を取得できる動的管理ビューです。 以下はdm_exec_query_statsを利用してキャッシュされたSQLの中で実行時間が遅いものを取得するSQL例です。 SELECT TOP 100 SUBSTRING(text, (statement_…

データベースバッファキャッシュ

データベースバッファキャッシュ率は統計情報を格納しているV$SYSSTATより 取得することができる。キャッシュ率は90%以上が好ましい。 キャッシュ率を取得するSQL SELECT db_block_gets --キャッシュIOブロック数その1 ,consistent_gets --キャッシュIOブロ…

動的パフォーマンスビュー

V$SQL,V$SQL_TEXT,V$SQL_PLAN。 現在共有SQL領域にキャッシュされているSQLの情報が格納されている。 これらを用いて、チューニングが可能。 1.V$SQLで調査したいSQLのSQLIDを調べる SELECT * FROM V$SQL WHERE SQL_TEXT LIKE '%HOGE_TBL%' 2.EnterPrise Man…

DBMS_PROFILER

ストアドの行ごとのコストを調べることができる。 実行するには以下の手順で。 ■DBMS_PROFILERをインストールする。 sqlplusを起動し、sysユーザで接続する conn sys/ora_pass@orcl as sysdba profload.sqlを実行し、パッケージをコンパイルする @?/rdbms/ad…

indexのチューニング

indexの情報を調べるのは以下のとおり --INDEXの分析 ANALYZE INDEX index_name VALIDATE STRUCTURE --INDEX情報の出力 (先に ANALYZE INDEX を実行すること) SELECT NAME, --INDEX名 LF_ROWS, --現在のINDEX LF_ROWS_LEN, --現在のINDEXサイズ DEL_LF_ROWS,…