Oracleパフォーマンスチューニングの基礎講座

Oracle Master Gold

~初心者が最初にやるべき5ステップとAWR・Statspackの使い分け~

Oracleデータベースで「処理が遅い」「応答が返ってこない」といったトラブルに直面したとき、頼りになるのがパフォーマンスチューニングです。

ただし「何を、どこから見ればいいのか分からない…」と感じる初心者の方も多いはず。

そこで本記事では、Oracleパフォーマンスチューニングの基礎知識から、実践で使える5つの手順、AWRとStatspackの選び方までを、テキスト図解付きでわかりやすく解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


■ パフォーマンスチューニングとは?

Oracleにおけるパフォーマンスチューニングとは、
システムやSQLの処理速度を改善するための「現状分析」「原因特定」「改善」の一連のプロセスです。


■ 3層構造で考えるチューニング

【Oracleパフォーマンスチューニングの3層構造】

+----------------------------+
| アプリケーション層 | SQL, PL/SQL, Javaなど
+----------------------------+
| データベース層 | 統計情報, 実行計画, インデックス
+----------------------------+
| OS・インフラ・I/O層 | メモリ, CPU, ディスクI/O
+----------------------------+

初心者の方はまず「アプリケーション層(SQL)」と「データベース層」のチューニングから始めると効果が出やすく、リスクも低く抑えられます。


■ 【図解】パフォーマンスチューニングの流れ(5ステップ)

① 症状を把握する

② ボトルネックを特定する

③ 原因を分析する

④ 対策を実施する

⑤ 効果を検証する

■ Step①:症状の把握 ~どの処理が遅いのか~

まず重要なのは、「どの処理がどれくらい遅いのか」を定量的に把握することです。


● 主な調査手段(初心者向け)

ツール名説明対応エディション
AWR(Automatic Workload Repository)データベース全体の統計情報を時系列で分析できる有償ツールEnterprise Edition(+Diagnostic Pack)
StatspackAWRの無償簡易版で、Standard Edition でも使用可Standard Edition 〇 / Enterprise Edition 〇
V$ビュー群現在のSQL・セッション情報をリアルタイムに取得全エディション可

🔍 AWRとStatspackの違い(比較表)

比較項目AWRStatspack
エディションEnterprise Edition(+ライセンス)Standard Edition対応
データ保存自動・継続的手動でスナップショット取得
分析対象より詳細・包括的基本的な指標中心
出力形式HTML, Text, EM画面等Textのみ(スクリプト出力)

Standard Edition環境ではStatspack一択、Enterprise EditionではAWR推奨というのが基本スタンスです。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


■ Step②:ボトルネックの特定

Oracleのパフォーマンス問題のボトルネックは、大きく次の4つに分類されます。

【ボトルネックの種類】
- SQLの実行が遅い(実行計画・インデックス)
- ディスクI/Oが遅い(物理読み込みが多い)
- CPU負荷が高い(ソート・関数処理など)
- ロック競合が多い(TM/TX待機イベント)

● よく使うV$ビュー例(SQL単位の調査)

-- 実行時間が長いSQLのトップ10を取得
SELECT sql_id, elapsed_time, executions, sql_text
FROM v$sql
ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;

■ Step③:原因の分析 〜SQL実行計画の読み方〜

SQLの実行時間が長い原因の多くは、「実行計画の非効率さ」にあります。


● 実行計画の取得方法(基本)

EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

● 実行計画で注目すべきポイント

項目説明チェックすべき点
FULL TABLE SCAN全件走査インデックスが効いていない?
INDEX RANGE SCAN範囲検索使えるインデックスがあるか?
NESTED LOOPSループ結合小規模データ向け、INDEX必要
HASH JOIN大規模結合向け統計情報が必要

■ Step④:改善の実施

原因が判明したら、改善施策を行います。


✅ インデックスの作成(WHERE条件に合わせる)

CREATE INDEX idx_emp_dept ON employees (department_id);

✅ 統計情報の収集(古いと誤った実行計画に)

EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'EMPLOYEES');

✅ SQLの見直し(典型的な改善パターン)

  • SELECT * → 必要な列だけに絞る
  • サブクエリの冗長なネストを削減
  • ヒント句で実行計画を誘導する(必要に応じて)

■ Step⑤:効果検証 ~チューニングは「やって終わり」ではない~

改善後は、定量的に効果を検証することが必須です。


● SQLトレースの活用例

ALTER SESSION SET SQL_TRACE = TRUE;
-- 対象SQLを実行
ALTER SESSION SET SQL_TRACE = FALSE;

取得した.trcファイルをtkprofで解析:

tkprof ora_12345.trc output.txt sort=elapsed

■ テスト用テーブル(サンプル)

CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
department_id NUMBER,
salary NUMBER
);

INSERT INTO employees VALUES (1, 'Taro', 'Yamada', 10, 500000);
INSERT INTO employees VALUES (2, 'Hanako', 'Suzuki', 20, 550000);
INSERT INTO employees VALUES (3, 'Jiro', 'Tanaka', 10, 480000);
INSERT INTO employees VALUES (4, 'Akira', 'Sato', 30, 620000);

■ まとめ:初心者が守るべき5つの原則

1. いきなり修正せず、まず「現状把握」から
2. SQLチューニングは最も効果的
3. 実行計画と統計情報は常にチェック
4. AWR/Statspackを正しく使い分ける
5. 改善後は数値で“見える化”する


[参考]
パフォーマンス・チューニングの概要

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました