索引の使い分けでパフォーマンスを向上できるケース:Oracle SQLチューニング講座(9)(4/4 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
ITLの競合を回避する
同時に大量のトランザクションが実行されるようなシステムでは、パフォーマンスの劣化の原因として、表や索引のデータブロックで、ITL(Interested Transaction List)の競合が発生している場合も考えられます。ITLとは、各データブロック内に保持されるトランザクション情報のことで、ブロックを変更するトランザクションは、最初にITLを割り当てる必要があります。ITLが不足した場合、MAXTRANSの値まで自動的に拡張されますが、空き領域がないなどの理由により拡張できない場合、トランザクションはITLが獲得できるまで待機することになります。
ITLの個数はオブジェクト作成時の「INITRANS」パラメータによって決まり、最大値はブロック・サイズに依存します。StatsPackやv$segment_statisticsビューにより、ITLの競合が多発していることが確認できた場合には、PCTFREEやINITRANSの調整を検討します。
ブロック・サイズ | ITLの最大値 |
---|---|
2K | 41 |
4K | 84 |
8K | 169 |
16K | 255 |
32K | 255 |
図12 ITLの競合による待機とブロック・サイズごとのITLの最大値 |
索引作成時のDESCオプションについて
索引を作成時、列名の後にDESCオプションを指定することができます。逆キー索引のREVERSEオプションと似たようなイメージを想像させる単語ですが、実際には索引のデータを降順(デフォルトは昇順)に格納するオプションになります。DESCオプションを指定した索引はファンクション索引扱いになるので、先に説明したファンクション索引の設定と同一の設定が必要になります。
今回までは索引を使用したチューニング・テクニックを説明しました。次回からは、結合に関するチューニング・テクニックを紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.