以前の記事でSI Object Browser for Oracle 19(以下、OB)の新機能「開発者用リアルタイムSQLモニタリング」をご紹介しました。今回は別の新機能「スケーラブルシーケンス」について使い方を確認していきたいと思います。
スケーラブルシーケンスとは
シーケンスとは昔からOracle Databaseにある、一意な数値を生成することができるオブジェクトです(使用したことのある方も多いと思います)。
スケーラブルシーケンスはOracle Database 18cより追加されたシーケンスのオプションです。
従来のシーケンスと違い、値にインスタンス番号とセッション番号(から生成された値)を含めることにより一括ロード時の索引ブロック競合を防ぎ、パフォーマンス向上が見込まれます。
- 従来のシーケンスとスケーラブルシーケンスの値 -
スケーラブルシーケンスの利用
スケーラブルシーケンスの作成は、従来のシーケンスと同様に[シーケンス]画面で作成できます。
Oracle Database 18c以降のデータベースに接続し[シーケンス]画面を開くと[スケーラブル]オプションが表示されます。
- シーケンス – 新規作成 -
この[スケーラブル]をONにするとCRAEATE SEQUENCE文にSCALE句が追加され、スケーラブルシーケンスとして定義することができます。
- シーケンス – 新規作成(DDL) -
スケーラブルシーケンスのEXTENDオプション
また、スケーラブルシーケンスのオプションとして[スケーラブル]の横に[EXTEND]オプションがあります。
[EXTEND]がOFFの時、シーケンス値の桁数はMAXVALUE句=範囲(最大)で指定した値の桁数を超えることはできません。
しかし[EXTEND]がONであればシーケンス値はインスタンス番号とセッション番号から生成された値 + MAXVALUE句で指定した値の桁数からなる連番 を取ることができます。
具体例を挙げると、
・インスタンス番号とセッション番号から生成された値 = 101051
・シーケンスの連番値 = 1
の時のEXTENDオプションによるシーケンス生成値の違いは以下の通りとなります。
※わかりやすいようにするため、結果の「インスタンス番号とセッション番号から生成された値」部分を赤くしていますが、実際の製品でこの表示を行うことはできません。
- [EXTEND]オプション OFFとONの違い -
したがって、既存のシステムで使用されているシーケンスをスケーラブルにする際は、シーケンスが生成する値の桁数がデータ格納されるテーブルカラムの桁数を超えないよう考慮する必要があります。
まとめ
シーケンス自体は先述の通り昔からあるオブジェクトですので、馴染みのある方も多いと思います。
しかしながら昨今のデータ量増加に伴い、シーケンスで自動採番するテーブルへのデータ投入時にパフォーマンスの問題が発生するケースがあるようです。
今回ご紹介したスケーラブルシーケンスを使用することにより、この問題を解消できる可能性があります。
一度、検証してみてはいかがでしょうか。
- カテゴリ:
- キーワード: