(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-04-04
(45)【発行日】2024-04-12
(54)【発明の名称】データベース管理システム、パーティション分割装置、パーティション分割方法およびパーティション分割プログラム
(51)【国際特許分類】
G06F 16/11 20190101AFI20240405BHJP
G06F 16/13 20190101ALI20240405BHJP
【FI】
G06F16/11
G06F16/13
(21)【出願番号】P 2022206141
(22)【出願日】2022-12-23
【審査請求日】2022-12-23
(73)【特許権者】
【識別番号】501158538
【氏名又は名称】三菱電機インフォメーションネットワーク株式会社
(74)【代理人】
【識別番号】110002491
【氏名又は名称】弁理士法人クロスボーダー特許事務所
(72)【発明者】
【氏名】山岸 義徳
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】特開2013-127750(JP,A)
【文献】特開2010-061604(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
対象表を管理するデータベースと、
前記対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割装置と、
を備え、
前記パーティション分割装置は、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定部と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行部と、
を備える
データベース管理システム。
【請求項2】
前記複数の対象データのそれぞれが、パーティションキーのキー値を含み、
前記方式決定部は、前記キー値の昇順または前記キー値の降順で連続して前記複数の対象データが並んでいる度合いが所定の閾値より大きい場合に前記ロード方式を前記一括ロードに決定し、前記キー値の昇順と前記キー値の降順のいずれでも前記度合いが前記閾値より小さい場合に前記ロード方式を前記分割ロードに決定する
請求項1に記載のデータベース管理システム。
【請求項3】
前記複数の対象データのそれぞれが、パーティションキーのキー値を含み、
前記方式決定部は、前記複数の対象データの前記並び順において前記複数の対象データが前記キー値の昇順または前記キー値の降順で連続して並んでいる度合いを前記並び順の前記種類を特定する連続度として算出し、算出された連続度に基づいて前記ロード方式を決定する
請求項1に記載のデータベース管理システム。
【請求項4】
前記方式決定部は、前記対象データの件数が閾値未満である場合に前記ロード方式を前記一括ロードに決定し、前記対象データの前記件数が前記閾値以上である場合に前記並び順の前記種類に基づいて前記ロード方式を決定する
請求項1に記載のデータベース管理システム。
【請求項5】
前記分割実行部は、前記ロード方式が前記分割ロードに決定された場合に、メモリ不足を起こさずに一度にオープンすることが可能な分割パーティションの数である最大オープン数に基づいて、前記最大オープン数以下の分割パーティションを前記処理パーティション群として選択する
請求項1に記載のデータベース管理システム。
【請求項6】
前記分割実行部は、前記ロード方式が前記分割ロードに決定された場合に、メモリ不足を起こさずに一度にオープンすることが可能な分割パーティションの数である最大オープン数と、前記分割パーティションの数を前記最大オープン数で割って得られるロード回数と、に基づいて、前記複数の分割パーティションを前記ロード回数と同じ数の処理パーティション群である前記2つ以上の処理パーティション群に分ける
請求項1に記載のデータベース管理システム。
【請求項7】
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割装置であり、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定部と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行部と、
を備える
パーティション分割装置。
【請求項8】
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割方法であり、
パーティション分割装置が、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定し、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする
パーティション分割方法。
【請求項9】
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割プログラムであり、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定処理と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行処理と、
をコンピュータに実行させるためのパーティション分割プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データベースの中の表を構成するパーティションを分割する方法に関するものである。
【背景技術】
【0002】
パーティションの概念が適用されるデータベースでは、表が1つ以上のパーティションで構成される。各パーティションは、必要に応じて複数のパーティションに分割される。
【0003】
特許文献1は、アクセス頻度が高い表のデータを分割して他のプロセッサに割り当てることを開示している。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
パーティション分割において、ロード処理が実行される。ロード処理は、分割前のパーティションから分割後のパーティションへデータをロードする処理である。
パーティション分割では、全体の処理時間に対してロード処理時間が支配的である。そのため、ロード処理の高速化が必要である。
【0006】
特許文献1は、パーティション分割を短時間で実行する方法を開示していない。
【0007】
本開示は、パーティション分割にかかる時間を短縮できるようにすることを目的とする。
【課題を解決するための手段】
【0008】
本開示のデータベース管理システムは、
対象表を管理するデータベースと、
前記対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割装置と、
を備える。
前記パーティション分割装置は、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定部と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行部と、
を備える。
【発明の効果】
【0009】
本開示によれば、適切なロード方式でロード処理が実行されるため、ロード処理時間が短縮される。その結果、パーティション分割にかかる時間が短縮される。
【図面の簡単な説明】
【0010】
【
図1】実施の形態1におけるデータベース管理システム100の構成図。
【
図2】実施の形態1におけるデータベース110の例を示す図。
【
図3】実施の形態1におけるパーティション分割装置200の構成図。
【
図4】実施の形態1におけるパーティション分割の例を示す図。
【
図5】実施の形態1における対象表の作成文の例を示す図。
【
図6】実施の形態1におけるパーティション分割方法のフローチャート。
【
図7】実施の形態1における分割条件情報の例を示す図。
【
図8】実施の形態1におけるステップS200の概要図。
【
図9】実施の形態1におけるステップS200のフローチャート。
【
図10】実施の形態1におけるステップS230のフローチャート。
【
図11】実施の形態1におけるステップS230のフローチャート。
【
図12】実施の形態1における連続度Sの例を示す図。
【
図13】実施の形態1におけるステップS300のフローチャート。
【
図14】実施の形態1における一時表の作成文の例を示す図。
【
図15】実施の形態1における分割ロード(S320)の概要図。
【
図16】実施の形態1における分割ロード(S320)のフローチャート。
【
図17】実施の形態1における対象パーティションの削除文の例を示す図。
【
図18】実施の形態1における一時表の削除文の例を示す図。
【
図20】パーティション分割におけるメモリ不足を示すグラフ。
【
図21】パーティション分割におけるパーティションのオープン状況の例を示す。
【
図22】実施の形態1における一括ロードの例を示す図。
【
図23】実施の形態1における分割ロードの例を示す図。
【発明を実施するための形態】
【0011】
実施の形態および図面において、同じ要素または対応する要素には同じ符号を付している。説明した要素と同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
【0012】
実施の形態1.
パーティション分割の形態について、
図1から
図23に基づいて説明する。
【0013】
***構成の説明***
図1に基づいて、データベース管理システム100の構成を説明する。
データベース管理システム100は、パーティション分割装置200とデータベース110を備える。
データベース110は、外部装置に設けられてもよいし、パーティション分割装置200に設けられてもよい。
【0014】
データベース110は、パーティションの概念を利用するデータベースである。パーティションは、各種データベースで提供される機能である。例えば、データベース110は、リレーショナルデータベース(RDB)またはデータウェアハウス(DWH)などである。
データベース110は、表を管理する。
表は、複数のデータを有し、1つ以上のパーティションで構成される。
パーティションは、表の一部が記憶される領域(データ領域)である。
データは、パーティションキー(例えば日付)を含み、パーティションキーに基づいて特定のパーティションに振り分けられる。データの振り分けには、パーティションキーに対応するレンジ、リストなどを使用することができる。
パーティションを利用することで、パーティション単位のデータ管理(追加、削除など)が可能になる。また、パーティションキーを検索条件に加えれば、検索条件を満たすパーティションに絞った検索が可能になるので、検索時間を短縮できる。
【0015】
図2に基づいて、データベース110の中の表の例を示す。
データベース110は、売上データ用の表を管理している。表のパーティションは、日付を用いたレンジパーティションである。
表は月別のパーティションで構成され、データは日付(パーティションキー)に対応する月のパーティションに振り分けられる。
例えば、22年1月用パーティションのパーティションキーの範囲は22年1月1日から22年1月31日である。22年1月1日から22年1月31日までの売上データが22年1月用パーティションに格納される。
このような表は、例えば次のように運用される。月次処理として、最も古いパーティション(22年1月用)が削除され、新しいパーティション(23年1月用)が追加される。これにより、直近1年分の売上データが常に保持される。
【0016】
図3に基づいて、パーティション分割装置200の構成を説明する。
パーティション分割装置200は、プロセッサ201とメモリ202と補助記憶装置203と通信装置204と入出力インタフェース205といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0017】
プロセッサ201は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ201はCPUである。
ICは、Integrated Circuitの略称である。
CPUは、Central Processing Unitの略称である。
【0018】
メモリ202は揮発性または不揮発性の記憶装置である。メモリ202は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ202はRAMである。メモリ202に記憶されたデータは必要に応じて補助記憶装置203に保存される。
RAMは、Random Access Memoryの略称である。
【0019】
補助記憶装置203は不揮発性の記憶装置である。例えば、補助記憶装置203は、ROM、HDD、フラッシュメモリまたはこれらの組み合わせである。補助記憶装置203に記憶されたデータは必要に応じてメモリ202にロードされる。
ROMは、Read Only Memoryの略称である。
HDDは、Hard Disk Driveの略称である。
【0020】
通信装置204はレシーバ及びトランスミッタである。例えば、通信装置204は通信チップまたはNICである。パーティション分割装置200の通信は通信装置204を用いて行われる。
NICは、Network Interface Cardの略称である。
【0021】
入出力インタフェース205は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース205はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。パーティション分割装置200の入出力は入出力インタフェース205を介して行われる。
USBは、Universal Serial Busの略称である。
【0022】
パーティション分割装置200は、条件受付部211と方式決定部212と分割実行部213と結果出力部214といった要素を備える。これらの要素はソフトウェアで実現される。
【0023】
補助記憶装置203には、条件受付部211と方式決定部212と分割実行部213と結果出力部214としてコンピュータを機能させるためのパーティション分割プログラムが記憶されている。パーティション分割プログラムは、メモリ202にロードされて、プロセッサ201によって実行される。
補助記憶装置203には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ202にロードされて、プロセッサ201によって実行される。
プロセッサ201は、OSを実行しながら、パーティション分割プログラムを実行する。
OSは、Operating Systemの略称である。
【0024】
パーティション分割プログラムの入出力データは記憶部220に記憶される。
メモリ202は記憶部220として機能する。但し、補助記憶装置203、プロセッサ201内のレジスタおよびプロセッサ201内のキャッシュメモリなどの記憶装置が、メモリ202の代わりに、又は、メモリ202と共に、記憶部220として機能してもよい。
【0025】
パーティション分割プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0026】
***動作の説明***
パーティション分割装置200の動作の手順はパーティション分割方法に相当する。また、パーティション分割装置200の動作の手順はパーティション分割プログラムによる処理の手順に相当する。
【0027】
分割の対象となる表を「対象表」と称する。
分割されるパーティションを「対象パーティション」と称する。対象パーティションは分割前のパーティションである。
対象パーティションの中のデータを「対象データ」と称する。
対象データの集合を「対象データ群」と称する。対象データ群は複数の対象データから成る。
分割後のパーティションを「分割パーティション」と称する。
分割パーティションの集合を「分割パーティション群」と称する。分割パーティション群は複数の分割パーティションから成る。
分割パーティション群に含まれる分割パーティションの数を「分割パーティション数」と称する。
パーティションキーの値を「キー値」と称する。パーティションキーのデータ型には、数値型、日付型、時刻型、文字列型などがある。キー値の大小はデータ型に基づいて判定される。
【0028】
図4に基づいて、パーティション分割方法によるパーティション分割の例を説明する。
対象表は、22年用パーティションと23年用パーティションで構成されている。
【0029】
図5に、対象表の作成文の例を示す。作成文はSQLで記述されている。
パーティションキーは“日付”である。
22年用パーティションのキー値の範囲は、22年1月1日から22年12月31日までである。
23年用パーティションのキー値の範囲は、23年1月1日から23年12月31日までである。
SQLはStructured Query Languageの略称である。
【0030】
図4に戻り、説明を続ける。
パーティション分割により、22年用パーティションが22年用の月別のパーティション群に分割される。
対象パーティションは、22年用パーティションである。
分割パーティションは、22年用の月別のパーティション(22年1月用パーティションなど)である。
分割パーティション群は、22年1月用パーティションから22年12月用パーティションの12個の分割パーティションである。
パーティション分割の後、月単位のパーティション管理と月指定による検索の高速化が実現される。
【0031】
図6に基づいて、パーティション分割方法を説明する。
ステップS100において、条件受付部211は分割条件情報を受け付ける。
分割条件情報は、パーティション分割の条件に関する情報である。
【0032】
分割条件情報は、例えば以下のように受け付けられる。
利用者が分割条件情報をパーティション分割装置200に入力する。
条件受付部211は、入力された分割条件を受け付ける。
【0033】
図7に、分割条件情報の例を示す。
対象表の名称“売上データ”、対象パーティションの名称は“2022年データ”、分割パーティション数、各分割パーティションの名称および各分割パーティションのキー範囲などの情報が、分割条件情報から得られる。
分割条件情報はSQLの構文に似た形式で記述されている。しかし、分割条件情報は、どのような形式で記述されてもよい。
【0034】
図6に戻り、ステップS200から説明を続ける。
ステップS200において、方式決定部212は、対象パーティションの中の複数の対象データの並び順の種類に基づいて、ロード方式を決定する。
ロード方式は、対象パーティションの中の複数の対象データを対象パーティションから分割パーティション群へロードするための方式である。
ロード方式には、一括ロードと分割ロードの二種類がある、
一括ロードは、分割パーティション群を一度にオープンして対象データ群を分割パーティション群へロードする方式である。
分割ロードは、分割パーティション群を2つ以上の処理パーティション群に分けて処理パーティション群ごとに処理パーティション群をオープンして対象データ群のうちの処理パーティション群に対応する処理データ群を処理パーティション群へロードする方式である。
【0035】
図8に基づいて、ステップS200の概要を説明する。
「昇順」は、対象パーティションの中の複数の対象データの並び順の種類がキー値の昇順であることを意味する。具体的には、「昇順」は、複数の対象データがキー値の昇順で連続して並んでいる度合いが所定の閾値より大きいことを意味する。
「降順」は、対象パーティションの中の複数の対象データの並び順の種類がキー値の降順であることを意味する。具体的には、「降順」は、複数の対象データがキー値の降順で連続して並んでいる度合いが所定の閾値より大きいことを意味する。
「乱順」は、対象パーティションの中の複数の対象データの並び順の種類がキー値の乱順であることを意味する。具体的には、「乱順」は、複数の対象データがキー値の昇順で連続して並んでいる度合いと複数の対象データがキー値の降順で連続して並んでいる度合いのいずれも所定の閾値より小さいことを意味する。
【0036】
対象データの件数が閾値以上であり、且つ、複数の対象データの並び順の種類が乱順である場合、ロード方式は分割ロードに決定される。
対象データの件数が閾値未満である場合および複数の対象データの並び順の種類が昇順または降順である場合、ロード方式は一括ロードに決定される。
【0037】
図9に基づいて、ステップS200の手順を説明する。
データ件数Nは、対象データの件数である。
閾値Xは、データ件数Nに対する閾値である。閾値Xは、分割条件情報に含まれてもよいし、パーティション分割装置200に予め設定されてもよい。
閾値Yは、連続度Sに対する閾値である。閾値Yは、分割条件情報に含まれてもよいし、パーティション分割装置200に予め設定されてもよい。
連続度Sは、対象パーティションの中の複数の対象データの並び順において複数の対象データがキー値の昇順またはキー値の降順で連続して並んでいる度合いであり、複数の対象データの並び順の種類を特定する。連続度Sが大きい場合、複数の対象データの並び順は昇順または降順である。連続度Sが小さい場合、複数の対象データの並び順は乱順である。
【0038】
ステップS210において、方式決定部212は、対象パーティションのデータ件数Nを取得する。
【0039】
データ件数Nは、例えば以下のように取得される。
方式決定部212は、対象パーティションのキー値の範囲を条件にしてデータ検索を実行し、見つかったデータの件数を取得する。取得される件数がデータ件数Nである。
方式決定部212は、データベース110の管理情報を参照し、管理情報から対象パーティションのデータ件数Nを取得する。管理情報は、予め記憶された管理データである。
【0040】
ステップS220において、方式決定部212は、データ件数Nを閾値Xと比較する。例えば、閾値Xは10万件である。
データ件数Nが閾値Xよりも大きい場合、処理はステップS230に進む。
データ件数Nが閾値X以下である場合、処理はステップS260に進む。
【0041】
ステップS230において、方式決定部212は、対象パーティションの中の複数の対象データの連続度Sを算出する。
【0042】
図10および
図11に基づいて、ステップS230の手順を説明する。
ステップS231において、方式決定部212は、処理件数DNと集計値SUMを初期化する。
処理件数DNは、ステップS230で処理された対象データの件数を示す変数である。
集計値SUMは、昇順件数と降順件数の差である。
昇順件数は、1つ前の対象データよりもキー値が大きい対象データの件数である。
降順件数は、1つ前の対象データよりもキー値が小さい対象データの件数である。
【0043】
処理件数DNと集計値SUMは、以下のように初期化される。
方式決定部212は、処理件数DNにゼロを設定する。
方式決定部212は、集計値SUMにゼロを設定する。
【0044】
ステップS232において、方式決定部212は、対象パーティションから先頭データを読み出し、先頭データのキー値をキー値V0に設定する。
キー値V0は、1つ前の対象データのキー値を示す変数である。
【0045】
そして、方式決定部212は、処理件数DNを1に更新する。
【0046】
ステップS233において、方式決定部212は、次データが対象パーティションにあるか判定する。
次データは、キー値V0に対応する対象データの次の対象データである。
【0047】
次データがある場合、処理はステップS234に進む。
【0048】
ステップS234(
図11を参照)において、方式決定部212は、対象パーティションから次データを読み出し、次データのキー値をキー値Vに設定する。
キー値Vは、次データのキー値を示す変数である。
【0049】
ステップS235において、方式決定部212は、キー値Vをキー値V0と比較する。
キー値Vがキー値V0以上である場合、処理はステップS236に進む。
キー値Vがキー値V0未満である場合、処理はステップS237に進む。
【0050】
ステップS236において、方式決定部212は、集計値SUMに1を足す。
ステップS236の後、処理はステップS238に進む。
【0051】
ステップS237において、方式決定部212は、集計値SUMから1を引く。
【0052】
ステップS238において、方式決定部212は、処理件数DNを更新する。
具体的には、方式決定部212は、処理件数DNに1を足す。
【0053】
また、方式決定部212は、キー値V0を更新する。
具体的には、方式決定部212は、キー値V0にキー値Vを設定する。
ステップS238の後、処理はステップS233に進む。
【0054】
ステップS233(
図10を参照)において、次データがない場合、処理はステップS239に進む。
【0055】
ステップS239において、方式決定部212は、集計値SUMと処理件数DNを使って、連続度Sを算出する。
【0056】
連続度Sは、以下の式で表される。
S=(ABS(SUM))/(DN-1))*100
【0057】
ABS(x)は、値xの絶対値を意味する。
【0058】
対象パーティションの中の全ての対象データがキー値の昇順(または降順)に並んでいる場合、連続度Sは100になる。
対象パーティションの中の複数の対象データがキー値の乱順に並んでいる場合、連続度Sはゼロに近い値になる。
【0059】
図12に基づいて、連続度Sの例を説明する。
対象パーティションは、データ(1)からデータ(9)までの9つの対象データを含んでいる。パーティションキーは「日付」である。
「大小判定」は、キー値Vとキー値V0の大小関係に応じて集計値SUMに加算される値を示している。「大小判定」の値の合計が集計値SUMになる。
データ(1)からデータ(9)までの9つのデータを順番に参照すると、集計値SUMは6になる。
この場合、連続度Sは75パーセントである。
【0060】
図9に戻り、ステップS240から説明を続ける。
ステップS240において、方式決定部212は、連続度Sを閾値Yと比較する。例えば、閾値Yは90パーセントである。
連続度Sが閾値Yより小さい場合、処理はステップS250に進む。
連続度Sが閾値Y以上である場合、処理はステップS260に進む。
【0061】
ステップS250において、方式決定部212は、ロード方式を分割ロードに決定する。
【0062】
ステップS260において、方式決定部212は、ロード方式を一括ロードに決定する。
【0063】
図6に戻り、ステップS300から説明を続ける。
ステップS300において、分割実行部213は、パーティション分割を実行する。
つまり、分割実行部213は、対象パーティションを複数の分割パーティションに分割する。
【0064】
図13に基づいて、ステップS300の手順を説明する。
ステップS310において、分割実行部213は、一時表を作成する。
一時表は、作業用の表であり、分割パーティション群に分けられる。
【0065】
一時表は以下のように作成される。
まず、分割実行部213は、一時表の作成文を作成する。
作成文は、一時表の定義文と分割パーティション群の追加文を含む。
そして、分割実行部213は、データベース110に対して作成文を実行する。
これにより、一時表がデータベース110に作成される。
【0066】
図14に、一時表の作成文の例を示す。作成文はSQLで記述されている。
一時表の定義は、表の名称を除き、対象表の定義と同じである。
一時表の名称は“売上データtemp”である。
パーティションキーは“日付”である。
一時表には、分割パーティション群が追加される。
分割パーティション群は、22年用の月別の分割パーティションから成る。
分割パーティションには、キー値の範囲が設定される。
【0067】
図13に戻り、ステップS320から説明を続ける。
ステップS320において、分割実行部213は、決定されたロード方式で、対象パーティションの中の対象データ群を一時表の分割パーティション群へロードする。
【0068】
一括ロードは以下のように実行される。
まず、分割実行部213は、全ての分割パーティションをオープンする。
次に、分割実行部213は、対象パーティションの中の対象データごとに対象データのキー値に対応する分割パーティションへ対象データを転送する。これにより、各対象データが一時表に登録される。
そして、分割実行部213は、全ての分割パーティションをクローズする。
【0069】
分割ロードは以下のように実行される。
分割実行部213は、一部の分割パーティションに対して以下のようにロード処理を実行する。
まず、分割実行部213は、一部の分割パーティションをオープンする。
次に、分割実行部213は、オープンされている分割パーティションに対応するキー値を有する対象データを、オープンされている分割パーティションへ転送する。これにより、各対象データが一時表に登録される。
そして、分割実行部213は、オープンされている分割パーティションをクローズする。
分割実行部213は、全ての分割パーティションに対してロード処理が実行されるようにロード処理を繰り返す。
【0070】
図15に基づいて、ステップS320における分割ロードの概要を説明する。
メモリ不足を起こさずに一度にオープンすることが可能な分割パーティションの数を「最大オープン数」と称する。
分割パーティション数が12であり、最大オープン数が3であると仮定する。この場合、2022年分の対象データは4回に分けて対象表から一時表へロードされる。
1回目のロード処理では、2022年の対象データのうち、1月分の対象データ、2月分の対象データおよび3月分の対象データがロードされる。
2回目のロード処理では、2022年の対象データのうち、4月分の対象データ、5月分の対象データおよび6月分の対象データがロードされる。
3回目のロード処理では、2022年の対象データのうち、7月分の対象データ、8月分の対象データおよび9月分の対象データがロードされる。
4回目のロード処理では、2022年の対象データのうち、10月分の対象データ、11月分の対象データおよび12月分の対象データがロードされる。
【0071】
図16に基づいて、ステップS320における分割ロードの手順を説明する。
ステップS321において、分割実行部213は、カウンタNと未処理パーティション数Qを初期化する。
カウンタNは、実行済みのロード処理の回数を示す変数である。
未処理パーティション数Qは、ロード処理が済んだ分割パーティションの数を示す変数である。
【0072】
カウンタNと未処理パーティション数Qは以下のように初期化される。
分割実行部213は、カウンタNにゼロを設定する。
分割実行部213は、未処理パーティション数Qに分割パーティション数nを設定する。
【0073】
ステップS322において、分割実行部213は、分割パーティション数nと最大オープン数Mに基づいて、ロード回数Lを算出する。
ロード回数Lは、分割パーティション群に対して必要なロード処理の回数である。
【0074】
最大オープン数Mは、実行環境のリソース(メモリ)およびデータベース110の処理系に依存して決まる。例えば、実装メモリの容量が8ギガバイトであり、利用可能なメモリ容量が6ギガバイトであり、1つのパーティションのオープンに消費されるメモリ容量が1ギガバイトであると仮定する。この場合、最大オープン数Mは6になる。
最大オープン数Mは、分割条件情報に示されてもよいし、パーティション分割装置200に予め設定されてもよい。
【0075】
ロード回数Lは、以下の式で表される。ROUNDUP()は、小数点以下の端数を切り上げたときの整数値を返す関数である。
L = ROUNDUP(n÷M)
【0076】
ステップS322の説明を続ける。
分割実行部213は、カウンタNをロード回数Lと比較する。
カウンタNがロード回数Lよりも小さい場合、処理はステップS323に進む。
【0077】
ステップS323において、分割実行部213は、処理パーティション数Rを決定する。
処理パーティション数Rは、処理パーティションの数である。
処理パーティションは、今回のロード処理の対象となる分割パーティションである。
処理パーティションの集合を「処理パーティション群」と称する。処理パーティション群は最大オープン数以下の分割パーティションから成る。
処理パーティションに対応する対象データを「処理データ」と称する。処理データは、処理パーティションのキー値範囲に含まれるキー値を有する。
処理データの集合を「処理データ群」と称する。
【0078】
処理パーティション数Rは以下のように決定される。
分割実行部213は、未処理パーティション数Qと最大オープン数Mのうちの小さい方を処理パーティション数Rに決定する。
【0079】
処理パーティション数Rは、以下の式で表される。MIN(x,y)は値xと値yのうちの小さい方の値を意味する。
R=MIN(Q,M)
【0080】
ステップS324において、分割実行部213は、未処理の分割パーティションからR個の分割パーティションを選択する。
選択されたR個の分割パーティションが処理パーティション群となる。
【0081】
そして、分割実行部213は、各処理パーティションのキー値の範囲に基づいて、キー値範囲Wを算出する。
キー値範囲Wは、処理パーティション群のキー値の範囲である。
【0082】
ステップS325において、分割実行部213は、対象パーティションの中の処理データ群を処理パーティション群へロードする。
【0083】
処理データ群のロードは以下のように実行される。
まず、分割実行部213は、処理パーティション群をオープンする。
また、分割実行部213は、キー値範囲Wを検索条件にして対象表を検索し、見つかった処理データ群を対象表から抽出する。
次に、分割実行部213は、処理データごとに処理データのキー値に対応する処理パーティションへロードする。
そして、分割実行部213は、処理パーティション群をクローズする。
【0084】
ステップS326において、分割実行部213は、カウンタNと未処理パーティション数Qを更新する。
【0085】
カウンタNと未処理パーティション数Qは以下のように更新される。
分割実行部213は、カウンタNに1を足す。
分割実行部213は、未処理パーティション数Qから処理パーティション数Rを引く。
【0086】
ステップS326の後、処理はステップS322に進む。
【0087】
ステップS322において、カウンタNがロード回数Lと同じ場合、処理は終了する。
【0088】
図13に戻り、ステップS330から説明を続ける。
ステップS330において、分割実行部213は、一時表のアーカイブを作成する。
アーカイブは、表を保存するためのファイルである。アーカイブを使って表を復元することが可能である。
【0089】
ステップS340において、分割実行部213は、対象表から対象パーティションを削除する。
具体的には、分割実行部213は、対象パーティションの削除文を作成し、データベース110に対して削除文を実行する。
【0090】
図17に、対象パーティションの削除文の例を示す。削除文はSQLで記述されている。
対象表の名称は“売上データ”である。
対象パーティションの名称は“2022年データ”である。
【0091】
図13に戻り、ステップS350から説明を続ける。
ステップS350において、分割実行部213は、一時表のアーカイブを使って一時表を対象表に復元する。
【0092】
ステップS360において、分割実行部213は一時表のアーカイブを削除する。
【0093】
また、分割実行部213は一時表を削除する。
具体的には、分割実行部213は、一時表の削除文を作成し、データベース110に対して削除文を実行する。
【0094】
図18に、一時表の削除文の例を示す。
一時表の名称は“売上データtemp”である。
【0095】
図6に戻り、ステップS400を説明する。
ステップS400において、結果出力部214は、パーティション分割の結果を出力する。
例えば、結果出力部214は、パーティション分割が成功したことを示す情報をディスプレイに表示する。
【0096】
***実施の形態1の効果***
まず、パーティション分割の課題について説明する。
パーティション分割では、ロード処理時間が支配的である。
ロード処理時間は、分割後のパーティション数が多い場合およびパーティションキーの列データが乱順である場合、そうでない場合に比べて10倍以上の時間がかかることがある。
データはパーティションキー値に応じて振り分けられる。そのため、
図19に示すように、複数のパーティションに跨ってデータが転送される。
データの転送のためには、パーティションをオープンする必要がある。パーティションのオープンにおいて、メモリが消費される。
図20に示すようにメモリ使用量が使用可能なメモリ容量を超えてメモリ不足が発生した場合、システムにおいてスラッシングによる性能低下が引き起こされる。
同時にオープンされるパーティションの数を制限することにより、スラッシングを防ぐことが可能である。同時にオープンされるパーティションの数は、1オープンあたりのメモリ消費量を考慮して決定される。
図21の(1)において、分割後のパーティション数(N)は同時にオープンすることが可能なパーティションの数(M)以下である。この場合、分割後の全てのパーティションをオープンした状態でのロード処理が可能である。
図21の(2)において、分割後のパーティション数(N)は同時にオープンすることが可能なパーティションの数(M)より多い。この場合、同時にオープンされるパーティションをM個に制限してロード処理が可能である。しかし、オープンされていないパーティションにデータを追加する場合、オープンされているパーティションのいずれかをクローズし、データが追加されるパーティションをオープンしなければならない。その結果、パーティションのオープン/クローズが繰り返されることとなる。
但し、パーティションキー値の並び順が昇順(または降順)である場合、パーティションを順番にオープンすればパーティションのオープン/クローズは繰り返されない。この場合、パーティションのオープン/クローズの回数は分割後のパーティションの数(N)に等しい。
一方、パーティションキー値の並び順が乱順である場合、パーティションのオープン/クローズが繰り返される。この場合、パーティションのオープン/クローズの回数はパーティションキー値の件数に依存する。
パーティションのオープン時の実行準備(メモリ確保など)には、多少の時間がかかる。そのため、パーティションのオープン/クローズが頻繁に繰り返されると、パーティションのオープン/クローズがオーバヘッドとなって性能が低下してしまう。
【0097】
以下に、実施の形態1の効果について説明する。
実施の形態1では、ロード処理中にパーティションのオープン/クローズが繰り返されることがないように、ロード方式が決定される。ロード方式は、分割対象のパーティションのデータ件数、パーティションキーの列データの並び(バラツキ度合)および分割後のパーティション数を条件にして決定される。
ロード方式が分割ロードに決定された場合、同時にオープンされるパーティションの数はメモリ不足が発生しないように決定される。そして、ロード処理が複数回に分けて実行される。これにより、ロード処理時間が短縮される。その結果、パーティション分割にかかる時間が短縮される。また、パーティション分割中は表へのアクセスが制限されるが、パーティション分割にかかる時間が短縮されるため、運用効率(利用時間)が向上される。
【0098】
実施の形態1の効果をロード方式の実測の一例に基づいて補足する。
分割対象のパーティションのデータ件数が1200万件であり、分割後のパーティション数が36個であり、同時にオープンすることが可能なパーティション数が6個であると仮定する。
パーティションキー値の昇順で並んだデータを「昇順データ」と称し、パーティションキー値の乱順で並んだデータを「乱順データ」と称する。
図22は、一括ロードを示している。一括ロードの場合、ロード回数は1回である。昇順データの場合、ロード処理時間は123秒である。乱順データの場合、ロード処理時間は1356秒である。乱順データに対するロード処理の性能は、昇順データに対するロード処理の性能に対して11倍低下している。この傾向は、分割後のパーティション数が増えるほど顕著になる。
図23は、分割ロードを示している。分割ロードの場合、ロード回数は6回である。昇順データの場合、ロード処理時間は127秒である。乱順データの場合、ロード処理時間は128秒である。乱順データに対するロード処理時間は昇順データに対するロード処理時間と同等である。つまり、ロード処理時間はデータの並び順に依存しない。
【0099】
***実施の形態1のまとめ***
実施の形態1では、決定ルールにしたがってロード処理の方式が適切に選択される。選択された方式でロード処理が実行されることにより、パーティション分割に係る時間が短縮される。
この特徴により、パーティションキーの列データが乱順で並び、且つ、分割後のパーティション数が多い場合でも、一時表へのロードを短時間で完了でき、パーティション分割に係る時間を短縮できる。
【0100】
***実施の形態1の実施例***
ロード方式は、対象データの件数を考慮せずに、対象データの並び順の種類に基づいて決定されてもよい。なお、対象データの件数を考慮することにより、対象データの件数が少ない場合に対象データの並び順の種類を特定する処理をスキップすることができる。
連続度Sは、全部の対象データを使うのではなく一部の対象データを使って算出されてもよい。例えば、対象データの件数が閾値(例えば1万件)よりも多い場合、連続度Sは先頭から閾値と同じ件数の対象データを使って算出されてもよい。
連続度Sは、統計的手法(差分値の分散など)を利用して算出されてもよい。連続度Sが短時間で算出されることが望ましい。
連続度Sは、分割パーティションのキー値範囲の境界(パーティション境界)を考慮して算出されてもよい。この場合、集計値SUMは、キー値Vに対応する分割パーティションのキー値範囲VWとキー値V0に対応する分割パーティションのキー値範囲V0Wの大小関係に基づいて集計される。キー値範囲VWがキー値範囲V0W以上である場合に集計値SUMに1が足され、キー値範囲VWがキー値範囲V0W未満である場合に集計値SUMから1が引かれる。なお、前後の対象データが異なる分割パーティションに対応する場合に分割パーティションのオープン/クローズが頻発する。例えば、パーティションキーが誕生日である場合、前後の対象データが異なる分割パーティションに対応し易い。しかし、統計的な観点から、パーティション境界を考慮せずに算出される連続度Sはパーティション境界を考慮して算出される連続度Sに近似するものと考えられる。
パーティションキーは、大小判定できるデータ型であれば日付でなくてもよい。例えば、文字列型のデータの場合、バイト順または文字コード順などデータベースの処理系定義に従って大小判定ができればよい。
【0101】
***実施の形態1の補足***
実施の形態1は、好ましい形態の例示であり、本開示の技術的範囲を制限することを意図するものではない。実施の形態1は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【0102】
パーティション分割装置200の機能は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせのいずれで実現されてもよい。
パーティション分割装置200の各要素の「部」は、「処理」、「工程」、「回路」または「サーキットリー」と読み替えてもよい。
【0103】
以下に、本開示の諸態様を付記として記載する。
(付記1)
対象表を管理するデータベースと、
前記対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割装置と、
を備え、
前記パーティション分割装置は、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定部と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行部と、
を備える
データベース管理システム。
【0104】
(付記2)
前記複数の対象データのそれぞれが、パーティションキーのキー値を含み、
前記方式決定部は、前記キー値の昇順または前記キー値の降順で連続して前記複数の対象データが並んでいる度合いが所定の閾値より大きい場合に前記ロード方式を前記一括ロードに決定し、前記キー値の昇順と前記キー値の降順のいずれでも前記度合いが前記閾値より小さい場合に前記ロード方式を前記分割ロードに決定する
付記1に記載のデータベース管理システム。
【0105】
(付記3)
前記複数の対象データのそれぞれが、パーティションキーのキー値を含み、
前記方式決定部は、前記複数の対象データの前記並び順において前記複数の対象データが前記キー値の昇順または前記キー値の降順で連続して並んでいる度合いを前記並び順の前記種類を特定する連続度として算出し、算出された連続度に基づいて前記ロード方式を決定する
付記1または付記2に記載のデータベース管理システム。
【0106】
(付記4)
前記方式決定部は、前記対象データの件数が閾値未満である場合に前記ロード方式を前記一括ロードに決定し、前記対象データの前記件数が前記閾値以上である場合に前記並び順の前記種類に基づいて前記ロード方式を決定する
付記1から付記3のいずれか1つに記載のデータベース管理システム。
【0107】
(付記5)
前記分割実行部は、前記ロード方式が前記分割ロードに決定された場合に、メモリ不足を起こさずに一度にオープンすることが可能な分割パーティションの数である最大オープン数に基づいて、前記最大オープン数以下の分割パーティションを前記処理パーティション群として選択する
付記1から付記4のいずれか1つに記載のデータベース管理システム。
【0108】
(付記6)
前記分割実行部は、前記ロード方式が前記分割ロードに決定された場合に、メモリ不足を起こさずに一度にオープンすることが可能な分割パーティションの数である最大オープン数と、前記分割パーティションの数を前記最大オープン数で割って得られるロード回数と、に基づいて、前記複数の分割パーティションを前記ロード回数と同じ数の処理パーティション群である前記2つ以上の処理パーティション群に分ける
付記1から付記5のいずれか1つに記載のデータベース管理システム。
【0109】
(付記7)
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割装置であり、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定部と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行部と、
を備える
パーティション分割装置。
【0110】
(付記8)
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割方法であり、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定し、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする
パーティション分割方法。
【0111】
(付記9)
データベースの中の対象表を構成する1つ以上のパーティションのうちの対象パーティションを複数の分割パーティションに分割するパーティション分割プログラムであり、
前記対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を一括ロードまたは分割ロードに決定する方式決定処理と、
前記ロード方式が前記一括ロードに決定された場合に前記複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードし、前記ロード方式が前記分割ロードに決定された場合に前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして前記複数の対象データのうちの前記処理パーティション群に対応する処理データ群を前記処理パーティション群へロードする分割実行処理と、
をコンピュータに実行させるためのパーティション分割プログラム。
【符号の説明】
【0112】
100 データベース管理システム、110 データベース、200 パーティション分割装置、201 プロセッサ、202 メモリ、203 補助記憶装置、204 通信装置、205 入出力インタフェース、211 条件受付部、212 方式決定部、213 分割実行部、214 結果出力部、220 記憶部。
【要約】
【課題】パーティション分割にかかる時間を短縮する。
【解決手段】方式決定部212は、対象パーティションの中の複数の対象データの並び順の種類に基づいてロード方式を決定する。前記ロード方式が一括ロードに決定された場合、分割実行部213は、複数の分割パーティションを一度にオープンして前記複数の対象データを前記複数の分割パーティションへロードする。前記ロード方式が分割ロードに決定された場合、分割実行部213は、前記複数の分割パーティションを2つ以上の処理パーティション群に分けて前記処理パーティション群ごとに前記処理パーティション群をオープンして処理データ群を前記処理パーティション群へロードする。
【選択図】
図1