一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • パーティションの効かせ方には注意が必要:パーティションが効かないNGパターン1選

以前、記事にもしたOracleパーティションについて、最近ハマった罠があったため備忘録のためにまとめます。

<以前の記事>

Oracleのパーティションで「EXCHANGE」を使用する際には注意せよ

Oracleデータベースで大量データを取り扱う際にはパーティションが便利

 

1.パーティションキーを効かせるためには位置に注意する

今回、業務で以下のようなテーブルを改修しました。

<テーブル情報>

◾️テーブルA:区分、キーコードA、会社コード、商品コード、登録日(YYYYMMDD)

◾️テーブルB:キーコードB、商品コード、売上日(YYYYMMDD)

・テーブルBはひと月に5千万〜1億件近く発生して、それが10年分溜まっている。

・売上日をパーティションキーにしている

 

<修正前SQL>

SELECT

・・・

FROM (

SELECT

・・・

FROM

テーブルA

WHERE ・・・

)AS TBL _A

INNER JOIN (

SELECT

・・・

FROM

テーブルB

WHERE  売上日≧ 固定日

 AND 売上日 ≦ 変動日(パラメータ)

)AS TBL_B

ON TBL_A.商品コード = TBL_B.商品コード

 

<修正内容>

・変動日(パラメータ)で与えている箇所を、テーブルAの登録日に変更する。

・テーブルA.登録日を使用するため、「売上日 ≦ 変動日(パラメータ)」を外出しする

 

<修正後SQL>

SELECT

・・・

FROM (

SELECT

・・・

FROM

テーブルA

WHERE ・・・

)AS TBL _A

INNER JOIN (

SELECT

・・・

FROM

テーブルB

WHERE  売上日≧ 固定日

)AS TBL_B

ON TBL_A.商品コード = TBL_B.商品コード

AND 売上日 ≦ A.登録日

 

外出しになっても、結局パーティションキーに対してFROM-TOを定義しているから、Oracleがいい感じに判断してパーティションが効くかと思い込んでいたのですが・・残念ながらパーティションキーが効きませんでした!

 

そのため、修正前は2分程度で完了する処理が1時間超えてしまうという大幅な性能劣化となりました。

 

2.まとめ

今回の件で、パーティションへの理解がまたひとつ深くなりました。感謝。

車の運転と同じく、大丈夫「だろう」は危険ですね。

特にパーティションは処理速度への影響がでかいので、注意して事前検証する必要があるなーと思いました。

 

以上

 

 

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア