システム開発ブログ/ システムソリューション部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

【Oracle】統計情報を手動で更新する

小佐野
小佐野 (2010年1月27日 10:38)
システムソリューション部 / データベース
Oracleの統計情報の収集はデフォルトでは自動で行われますが、
以下のプロシージャを実行することによって手動で統計情報を更新することができます。

BEGIN
	--テーブル単位の収集
	DBMS_STATS.GATHER_TABLE_STATS (
		OWNNAME       => 'ユーザ名'
		,TABNAME      => 'テーブル名'
		,METHOD_OPT   => 'FOR ALL INDEXED'
		,CASCADE      => TRUE
	);
END;

BEGIN
	--スキーマ単位の収集
	DBMS_STATS.GATHER_SCHEMA_STATS (
		 OWNNAME => 'ユーザ名'
		,OPTIONS => 'GATHER'
	);
END;

デフォルトでは1日1回しか更新されないので、大量データを投入後などにすぐにSQL文を実行しても、 インデックスがうまく使われなかったり、逆に全表走査の方が早い場合でもインデックスが使われてしまったりします。
そういった場合には手動で統計情報を更新する必要があります。

統計情報がいつ収集されたかは、以下のSQL文で確認することができます。

SELECT TABLE_NAME NAME
     , LAST_ANALYZED
  FROM USER_TABLES
 WHERE TABLE_NAME = 'テーブル名'
 UNION ALL
SELECT INDEX_NAME
     , LAST_ANALYZED
  FROM USER_INDEXES
 WHERE INDEX_NAME = 'インデックス名'

LAST_ANALYZEDが統計情報が収集された日付です。
ちなみに、前回の収集時点からテーブルのデータが10%以上更新されないと、統計情報は再収集されないようです。

デフォルトでは統計情報は自動で収集されると書きましたが、
初期化パラメータ「STATISTICS_LEVEL」が「TYPICAL」または「ALL」の場合に、自動で統計情報が収集されます。
以下のコマンドでパラメータの確認が出来ます。

SHOW PARAMETERS STATISTICS_LEVEL

以下のSQLでもパラメータの確認ができます。

SELECT NAME
     , VALUE
  FROM V$PARAMETER
 WHERE NAME = 'statistics_level'

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。