Oracle スケーラブルシーケンスの使い方を確認しよう

 2020.01.27  株式会社システムインテグレータ

以前の記事でSI Object Browser for Oracle 19(以下、OB)の新機能「開発者用リアルタイムSQLモニタリング」をご紹介しました。今回は別の新機能「スケーラブルシーケンス」について使い方を確認していきたいと思います。

いまさら聞けない Oracleの基本 [初級編]

スケーラブルシーケンスとは

シーケンスとは昔からOracle Databaseにある、一意な数値を生成することができるオブジェクトです(使用したことのある方も多いと思います)。

スケーラブルシーケンスはOracle Database 18cより追加されたシーケンスのオプションです。
従来のシーケンスと違い、値にインスタンス番号とセッション番号(から生成された値)を含めることにより一括ロード時の索引ブロック競合を防ぎ、パフォーマンス向上が見込まれます。

Oracle スケーラブルシーケンスの使い方を確認しよう 1
- 従来のシーケンスとスケーラブルシーケンスの値 -

スケーラブルシーケンスの利用

スケーラブルシーケンスの作成は、従来のシーケンスと同様に[シーケンス]画面で作成できます。
Oracle Database 18c以降のデータベースに接続し[シーケンス]画面を開くと[スケーラブル]オプションが表示されます。

いまさら聞けない Oracleの基本 [中級編]
新規CTA

Oracle スケーラブルシーケンスの使い方を確認しよう 2
- シーケンス – 新規作成 -

この[スケーラブル]をONにするとCRAEATE SEQUENCE文にSCALE句が追加され、スケーラブルシーケンスとして定義することができます。

Oracle スケーラブルシーケンスの使い方を確認しよう 3
- シーケンス – 新規作成(DDL) -

スケーラブルシーケンスのEXTENDオプション

また、スケーラブルシーケンスのオプションとして[スケーラブル]の横に[EXTEND]オプションがあります。
[EXTEND]がOFFの時、シーケンス値の桁数はMAXVALUE句=範囲(最大)で指定した値の桁数を超えることはできません。
しかし[EXTEND]がONであればシーケンス値はインスタンス番号とセッション番号から生成された値 + MAXVALUE句で指定した値の桁数からなる連番 を取ることができます。

具体例を挙げると、
・インスタンス番号とセッション番号から生成された値 = 101051
・シーケンスの連番値 = 1
の時のEXTENDオプションによるシーケンス生成値の違いは以下の通りとなります。
※わかりやすいようにするため、結果の「インスタンス番号とセッション番号から生成された値」部分を赤くしていますが、実際の製品でこの表示を行うことはできません。

Oracle スケーラブルシーケンスの使い方を確認しよう 4
- [EXTEND]オプション OFFとONの違い -

したがって、既存のシステムで使用されているシーケンスをスケーラブルにする際は、シーケンスが生成する値の桁数がデータ格納されるテーブルカラムの桁数を超えないよう考慮する必要があります。

まとめ

シーケンス自体は先述の通り昔からあるオブジェクトですので、馴染みのある方も多いと思います。
しかしながら昨今のデータ量増加に伴い、シーケンスで自動採番するテーブルへのデータ投入時にパフォーマンスの問題が発生するケースがあるようです。

今回ご紹介したスケーラブルシーケンスを使用することにより、この問題を解消できる可能性があります。
一度、検証してみてはいかがでしょうか。

新規CTA

RELATED POST関連記事


RECENT POST「【OBトコ】DBの勉強」の最新記事


【OBトコ】DBの勉強

データベースのスキーマを理解する

【OBトコ】DBの勉強

データベース別インスタンスの関係性

【OBトコ】DBの勉強

ビューとマテリアライズド・ビューの違いを理解する

【OBトコ】DBの勉強

Oracle 表領域を拡張してみよう

Oracle スケーラブルシーケンスの使い方を確認しよう
新規CTA