書籍概要

Oracleの現場を効率化する100の技

著者
発売日
更新日

概要

システム構築の現場で,データベースにまつわる様々な課題を抱えていませんか?Oracle Databaseには,広く知られてない開発効率を向上したり,問題を解決する機能が豊富に備わっています。本書では,Oracleを知り尽くしたデータベースコンサルタントが豊富な現場経験をもとに100の便利技を紹介します。「パフォーマンス管理」「トラブルシューティング」「システムテスト」などシーン別に解説。サンプルスクリプトも豊富に掲載しているので忙しい方でもすぐに実践できます。経験が浅い方からベテランまで,すべてのOracle Databeseユーザー必携の一冊。

こんな方におすすめ

  • Oracleの基本は理解できているが,新しい機能を使いこなせていないユーザー
  • データベースの課題をスマートに解決したい方

著者から一言

システム構築プロジェクトの現場では,データベースのパフォーマンス管理やトラブルシューティング,データの有効活用など,さまざまな問題を抱えていますよね。たとえば,次のような問題で困ったことはありませんか。

  • アプリケーションを何も変えていないのにデータベースの処理時間が急激に長くなってしまった。
  • データベースを統合したら,1つのシステムだけが多くのCPUリソースを使ってしまった。
  • 性能試験中に,本番相当のワークロードをシミュレーションするための準備に,労力を要した。
  • データベースを使って統計解析したいが,SQLだけではやりたいことが実現できなかった。

実は,これらデータベースの問題は,Oracleの機能で解決できたりします。Oracle Databaseは,Oracle 7,8i,9i,10g,11g,そして12cへと,進化し続けています。単なるデータ処理を行うリレーショナルデータベース管理システムとしてだけではなく,エンタープライズ用途の管理や,開発および運用支援などデータベースインフラストラクチャとして機能強化がなされてきました。繰り返しになりますが,Oracleには,作り込まないことで開発効率が向上したり,要件を実現する選択肢が増えたり,システムライフサイクルを強力に支援してくれるデータベース機能が豊富に備わっています。

しかし,こうしたデータベースの便利な機能を紹介した本は,世の中には見当たりません。Oracleの魅力あふれる機能を知っていれば,データベースを申し分なく活用することができます。これら機能を,システムライフサイクルを通して多くのシステムの開発や運用の現場で徹底的に活用しているデータベースコンサルタントであれば,分かりやすく解説することができます。こう考えたことが本書を手掛けるきっかけとなりました。 そこで,本書では,皆さんに使ってもらいたい選りすぐりの機能を以下のカテゴリで100のTipsにまとめました。

  • パフォーマンス管理のTips
  • トラブルシューティングのTips
  • アーキテクチャのTips
  • 開発・運用に役立つTips
  • システムテストのTips
  • データマイニングのTips

多忙な方でもすぐに試してもらえるように,たくさんの設定手順やサンプルスクリプトを載せました。過去からOracle Databaseを使っている人や,Oracle Databaseの基本はわかっている人が,便利な機能を使う際に手間取らないようにするべきだと考えたからです。1つのTipsは,どのようなシーンに使えて,どのような効果があるか(便利になったか)を分かりやすく,2~3ページ程度にコンパクトにまとめています。対応するバージョンは,11gリリース2および12cリリース1(執筆時点の最新)です。追加のライセンスが必要な機能については,明記しました。ぜひ本書を読んでいただき,ご自身が関わるデータベースをより良いものにして頂ければ幸いです。

目次

第1章 パフォーマンス管理のTips

  • 1 実行計画を理解する
  • 2 適切な表の結合方法の選択と定石
  • 3 カバーリングインデックスでアクセスブロック数を減らす
  • 4 NOT IN句でパフォーマンスが出ない場合の対応法
  • 5 パーティションを活用してアクセスブロック数を減らす
  • 6 SQLをパラレルクエリで高速化する方法
  • COLUMN アプリケーションによるパラレル化の注意点
  • 7 大量レコードのINSERTを高速化する方法
  • 8 SPMを使って実行計画を管理する
  • COLUMN SQL計画管理とは
  • 9 SPMアーキテクチャを理解する
  • COLUMN SPMの登録方法
  • 10 SPMを利用したハード解析の仕組みを理解する
  • COLUMN SIGNATUREとPLAN_ID
  • 11 SPMへ実行計画を登録する
  • 12 SPMが利用できていることを確認する
  • 13 SQLを書き変えずに実行計画を変更する
  • 14 過去の実行計画でSQLを実行する
  • COLUMN SQLチューニングセット(STS)
  • 15 SPMを別データベースへ移行する
  • 16 システム開発でのSPM導入の勘所

第2章 トラブルシューティングのTips

  • 17 スピーディにトラブル原因を切り分けるテクニック
  • COLUMN Oracleのエラー内容の確認方法
  • 18 AWRのイベントの一歩進んだ見方
  • 19 インターコネクトのボトルネックを見つけ出すパフォーマンス分析のコツ
  • 20 2つのAWRレポートをスマートに比較する
  • 21 自動パフォーマンス診断機能を使う
  • 22 遅いSQLの原因を自動的に分析する
  • COLUMN SQLチューニングの事前スクリーニング
  • 23 既に実行されたSQLと実行計画を取得する~AWRとV$SQL~
  • 24 SQLが遅いと感じたときのチェックリスト
  • 25 実行時間の長いSQLを調査する
  • 26 ASHを利用して今起きている問題や短期間の問題を分析する
  • 27 待機イベントのパラメータ列からセグメントを特定する
  • 28 物理I/Oを減らす~待機イベント処方箋(1)
  • 29 一時表領域へのアクセスを減らす~待機イベント処方箋(2)
  • 30 SQL情報を漏れなく取得する
  • COLUMN 特定のSQLのトレースのみを取得する方法
  • 31 実行計画が変化した原因を調査する
  • 32 SQL性能分析情報を取得する
  • 33 ADRCIを使ってスムーズにサポート問合せをする

第3章 アーキテクチャのTips

  • 34 自動メモリ管理機能の使いどころを理解する
  • 35 自動共有メモリ管理機能の調整ルールとIMMEDIATEモードを理解する
  • 36 共有プールの仕組みを理解してORA-4031エラーを防ぐ
  • 37 共有プール設計の勘所
  • COLUMN DEFERREDモードと,IMMEDIATEモード
  • 38 共有プールを効果的に監視する
  • 39 PGAのメモリ増加を抑える
  • 40 PGAが想像以上に増加する原因と対策
  • 41 PGA_AGGREGATE_TARGETが実行計画に与える影響
  • 42 ラージページで大規模メモリ環境でのトラブルに対処する
  • 43 オンライン索引再構築と通常の索引再構築を使い分ける
  • 44 索引の作成順番が実行計画に与える影響を理解する
  • 45 意図しないパラレルクエリの実行を防ぐ
  • 46 削除処理の高速化テクニック
  • 47 NOLOGGINGオペレーションを効果的に使う
  • 48 NOLOGGINGオペレーションの副作用に注意する
  • 49 ロールバックの時間を見積もる
  • 50 コネクションプーリングが使えない環境で新規接続を高速化する

第4章 開発・運用に役立つTips

  • 51 SQL*Plusを使いこなす作業効率化技
  • 52 SQL*Plusを使いこなす検証技
  • 53 SQL*Plusを使いこなすトラブルシュート技
  • 54 オブジェクトの定義情報を確認してSQL文を簡単に作成する
  • 55 簡単にテストデータを作成する
  • 56 PL/SQLのボトルネックを調査する
  • 57 Enterprise Managerを使って簡単かつ確実にDBオブジェクトを管理する
  • 58 Enterprise Managerを使って定期的にDB稼働状況の詳細なレポートを作成する
  • 59 Enterprise Managerを使ってリアルタイムにSQL実行状況を監視する
  • COLUMN リアルタイムSQL監視のSQL実行計画行数制限について
  • 60 データベースの状況をリアルタイムで把握する
  • 61 簡単にOSリソース情報を取得する方法
  • 62 長時間のSQL実行をタイムアウトさせる
  • 63 データベースのOSリソース使用を制御する
  • 64 データベースのOSリソース使用の制御内容を確認する
  • 65 データベースに接続できるクライアントを制限する
  • 66 アプリケーションサーバーとデータベースサーバー間で発生した無効接続を検知する
  • COLUMN 無効接続を検知する新機能
  • 67 簡単にインデックスの効果を検証する
  • 68 統計情報を操作して本番機の実行計画を再現する
  • 69 セグメントの断片化解消効果を見積もる
  • COLUMN セグメントの断片化の仕組み
  • 70 AUTOTRACE機能で簡単にSQLの実行計画を確認する
  • 71 ボトルネックを調べるためSQLトレースを取得する
  • COLUMN SQLトレースのファイル名に任意の文字列を埋め込む
  • COLUMN 現在のセッションIDを調べる
  • 72 外部表を使ってcsvファイルをSQLで扱う
  • 73 隠し初期化パラメータを確認する
  • 74 バッチ処理の進捗状況をログ出力する
  • 75 調べたい内容が書かれたマニュアルを効率的に探す方法

第5章 システムテストのTips

  • 76 システムテストを自動化するときの注意点
  • 77 DBサーバを中心としたシステムテストをする
  • COLUMN インストール時にRATオプションを選択し忘れた!
  • 78 SQL単位のパフォーマンステストを自動化する
  • 79 SQLチューニングセットを作成する
  • 80 SQLチューニングセットをテスト環境に移行する
  • 81 SQLパフォーマンスを比較する
  • 82 SQLチューニングアドバイザと連携する
  • COLUMN SQLプロファイル
  • 83 SPAを上手に使うためのテクニック
  • 84 DB Replayで本番環境の負荷を再現する
  • 85 ワークロードをキャプチャする
  • 86 DB Replayに必要な前処理をする
  • 87 ワークロードをリプレイする
  • 88 本番とリプレイのパフォーマンスを比較する
  • 89 DB Replayの負荷を調節する
  • 90 DB Replayを上手に使うためのテクニック

第6章 データマイニングのTips

  • 91 Oracle Rの特徴とデータ分析の目的を把握する
  • COLUMN Rとは?
  • 92 データベースにRからアクセスして統計解析する
  • COLUMN アソシエーション分析とは?
  • 93 データベースからRへアクセスする
  • COLUMN Rパッケージについて
  • 94 Rから表計算ソフトにアクセスする
  • COLUMN クラスター分析とは?
  • 95 Rのデバッグやボトルネックを発見するテクニック
  • COLUMN OSのstraceコマンドも強力なツール
  • 96 バイトコードコンパイルでRの実行を高速化する
  • COLUMN オブジェクトの入出力はバイナリ形式で高速化
  • 97 Rのメモリー使用量を制限する
  • 98 ヒートマップを利用して,発生頻度を直感的に把握する
  • COLUMN パッケージのインストール方法
  • 99 3次元グラフを利用して類似度を直感的に把握する
  • COLUMN 過去の問い合わせ内容をデータベースに格納するサンプルスクリプト
  • 100 ワードクラウドで膨大なデータを視覚化する
  • COLUMN Twitterのアプリケーションを作成するには?

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2016年2月26日更新)

P.66 7行目

2 DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE('SQL_e18f9b7e02f01359);
2 DBMS_XPLAN.DISPLAY_SQLSET('STS_SPM01','9zv8xn2891xf7'));

P.136 ▼SQL文解析結果のフラッシュ実行例 6行目

SQL> exec dbms_shared_pool.purge('00000000DE704538,941596257','C');
SQL> exec dbms_shared_pool.purge('00000000CDB58118,1811185436','C');

P.183ページ 「5. Windows ラージページ使用時のポイント」1行目から4行目

3-1.Linux 環境では、アラートログファイルを見ればHugepages を使用出来ているか
を確認できますが、Windows のラージページ機能はアラートログで確認ができませ
ん。荒業になりますが、初期化パラメータのlock_sga を設定することによりラージ
ページ機能が有効となっているかを確認することができます。
正しく設定出来た場合には、DB起動時にアラートログに
以下の様なメッセージが出力されます。
=================
Large page enabled : 1
Large page size :
Large page request size :
=================

設定方法や詳細については以下の技術ドキュメントも合わせて参照してください。
Using Large Memory Pages on 64-Bit Windows Systems (Doc ID 422844.1)

P.201 下から3行目

NNOLOGGINGモードでも、
NOLOGGINGモードでも、

P.277 18行目

索引のVISIBILITY属性をVIBIBLEに変更することで、
索引のVISIBILITY属性をVISIBLEに変更することで、

P.381 コラム「Rパッケージについて」

コラムの2行目末尾に白い「注12」という表記がありますが,「注12」はありません。

P.406 サンプルスクリプト

SQL> SELECT
ROWNUM||','||BEGIN_INTERVAL_TIME||','||TABLESPACE_NAME||','||datum
FROM (
SELECT ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME, SUM
(seg.LOGICAL_READS_DELTA) datum
FROM   DBA_HIST_SEG_STAT seg,
       DBA_HIST_SNAPSHOT ss,
       DBA_HIST_SEG_STAT_OBJ sego
WHERE  seg.SNAP_ID         = ss.SNAP_ID
AND    seg.DBID            = ss.DBID
AND    seg.INSTANCE_NUMBER = ss.INSTANCE_NUMBER
AND    seg.DBID            = sego.DBID
AND    seg.TS#             = sego.TS#
AND    seg.OBJ#            = sego.OBJ#
GROUP BY ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME
ORDER BY ss.BEGIN_INTERVAL_TIME
)dhseg;
SQL> SELECT 'ROWNUM, BEGIN_INTERVAL_TIME, TABLESPACE_NAME, datum' FROM
DUAL
UNION ALL
SELECT ROWNUM||','||BEGIN_INTERVAL_TIME||','||TABLESPACE_NAME||','||datum
FROM (
SELECT ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME, SUM
(seg.LOGICAL_READS_DELTA) datum
FROM   DBA_HIST_SEG_STAT seg,
       DBA_HIST_SNAPSHOT ss,
       DBA_HIST_SEG_STAT_OBJ sego
WHERE  seg.SNAP_ID         = ss.SNAP_ID
AND    seg.DBID            = ss.DBID
AND    seg.INSTANCE_NUMBER = ss.INSTANCE_NUMBER
AND    seg.DBID            = sego.DBID
AND    seg.TS#             = sego.TS#
AND    seg.OBJ#            = sego.OBJ#
GROUP BY ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME
ORDER BY ss.BEGIN_INTERVAL_TIME
)dhseg;

商品一覧