EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

「本当に効くデータベースチューニング ~索引よりもCPUとHDDのバランスを~」

edited by DB Online   2011/08/31 00:00

大量データの処理にはパーティションも有効

 パーティションは、表や索引を内部的に分割する機能だ。分割しても1つの表として扱われるが、SQLなどが扱うデータ量を削減することができる。

 「パーティション大規模データベースを扱う際にはマストとなる機能だ。データウェアハウスでの多くの場合、索引は役に立たないと言い切ってよいだろう」(柴田氏)。

 例えばデータベース全体の1%未満がヒットする場合は索引が有効だが、データウェアハウスにあるような、過去1年間の売上データから1カ月分の売上合計を見るといったケースでは、索引ではデータベースの性能向上は望めない。このような場合では、売上年や月ごとにデータベースをパーティション化すれば、特定年月のデータを参照するだけでよくなるため、集計作業などの処理における性能向上が期待できるのだ。

 さらに、「索引スキャンは、1ブロックずつ読むので、どうしてもストレージの性能を出しづらいが、表スキャンは複数ブロックをまとめて読めるのでストレージの性能を最大限引き出せる。"同じブロック数を読むのであれば"、索引スキャンするよりも一部のパーティションだけを表スキャンするほうが速い」(柴田氏)。

 表スキャンは常に悪者というイメージがあるが、実はそうでないのだ。パーティションは、取り出す行数が非常に多い場合に大きな効果を発揮し、索引とは違った方法で読み取りブロック数を大幅に削減する機能だ。

 パーティションのメリットについて、さらにいくつか触れていこう。通常、表の一部をDelete文で削除すると時間がかかる。しかし、例えば売上データを月単位でパーティション表にしておけば、月単位でパーティションをドロップすることで、すぐにデータを削除できる。さらに、パーティション表はパーティション単位で圧縮することができるため、例えば過去の売上データは圧縮するとよい。古いデータに対してInsertやUpdateを行うことは少ないだろう。圧縮しておけばディスクの節約にもなるし、Selectが速くなるというメリットもある。

 Oracle Databaseのパーティションには、レンジ、リスト、ハッシュの3通りの分割方法があるが、それらを組み合わせることもできる。「例えば月単位、支店単位の2つのパーティションを組み合わせることで、月別支店別の売上データに瞬時にアクセスできる。ほかにもレンジ+レンジ、レンジ+ハッシュというように自在に使えるので、ぜひ使いこなしてほしい」と柴田氏は説明する。

 オラクルエンジニア通信:「Oracle Partitioning 技術資料


著者プロフィール

  • oracletech.jp編集部(オラクルテックジェイピーヘンシュウブ)

    oracletech.jpは、オラクル・データベースと関連製品をお使いいただいている皆様、開発に携わっているエンジニアの皆様、オラクル製品を販売いただいている皆様すべてにとって有益な情報源となることを目指しています。 エンタープライズ系ITを中心に、製品情報や技術情報からテクノロジー・トレンド、キャンペーンやイベント/セミナー情報まで多岐にわたります。日本オラクルの社員だけでなく、外部の有識者やフリーランス・ライターを含む幅広い執筆陣により"ベンダー発"の枠を脱したコンテンツ発信を目指します。 好奇心が、エンジニア人生を豊かにする。 oracletech.jp

バックナンバー

連載:oracletechアーカイブス!
All contents copyright © 2007-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5