サイジングに頭を悩ませている技術者の皆さん、 インデックスのリーフ分割はどうして発生するのか、知りたくありませんか? 今回はリーフ分割の増え方を徹底的に検証します(編集部)
第1回「パフォーマンス劣化はインデックスのせいなのか!?」では、インデックスのリーフ分割について実際のデータを使用しながら解説しました。今回からはOracle Database 11gを使用して、インデックスのパフォーマンス劣化について再検証していきたいと思います。まずはパフォーマンスを検証するための検証環境を作成しましょう。
では、早速環境を作成します。本記事では、以下のような手順でインデックス検索によるパフォーマンス劣化の環境を作成しています。
手順1と2はリーフ分割を発生させるための手順で、手順3は空き領域を大量に発生させるための手順です。
それでは、実際に手順に沿って環境を作成しましょう。データ作成の前に表領域とオブジェクトを作成します。表領域はI/Oの負荷を計測するため、テーブルとインデックスをそれぞれ別に作成しています。
SQL> create tablespace ts_table datafile '/opt/app/oracle/oradata/ora11g/ts_table.dbf' size 200M; Tablespace created. SQL> create tablespace ts_index datafile '/opt/app/oracle/oradata/ora11g/ts_index.dbf' size 200M; Tablespace created.
SQL> CREATE TABLE INDEX_TEST 2 (EMPNO1 NUMBER(8), 3 EMPNO2 NUMBER(8), 4 ENAME VARCHAR2(10), 5 JOB VARCHAR2(9), 6 MGR NUMBER(4), 7 HIREDATE DATE, 8 SAL NUMBER(7,2), 9 COMM NUMBER(7,2)) 10 TABLESPACE TS_TABLE;
SQL> CREATE INDEX IDX_INDEX_TEST ON INDEX_TEST(EMPNO1) 2 TABLESPACE TS_INDEX; Index created.
Copyright © ITmedia, Inc. All Rights Reserved.