JP6479186B2 - 計算機システム及びデータベース管理方法 - Google Patents

計算機システム及びデータベース管理方法 Download PDF

Info

Publication number
JP6479186B2
JP6479186B2 JP2017529176A JP2017529176A JP6479186B2 JP 6479186 B2 JP6479186 B2 JP 6479186B2 JP 2017529176 A JP2017529176 A JP 2017529176A JP 2017529176 A JP2017529176 A JP 2017529176A JP 6479186 B2 JP6479186 B2 JP 6479186B2
Authority
JP
Japan
Prior art keywords
log
index
buffer
thread
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017529176A
Other languages
English (en)
Other versions
JPWO2017013701A1 (ja
Inventor
知広 花井
知広 花井
西川 記史
記史 西川
清水 晃
清水  晃
茂木 和彦
和彦 茂木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2017013701A1 publication Critical patent/JPWO2017013701A1/ja
Application granted granted Critical
Publication of JP6479186B2 publication Critical patent/JP6479186B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery

Description

本発明は、概して、データベース管理技術に関する。
一般に、データベース(DB)のデータ操作時(例えば更新時)には、データ操作のログを出力する必要がある。
高速にログを出力できることが望ましい。例えば、高レートで発生するデータ(例えば、制御システム系のセンサデータ)を高速に分析するためには、DBのテーブルに高いスループットでデータを格納する必要がある。データをDBに格納する際には、検索に用いられるインデクスの更新も行われる。この場合、データログ(DBテーブルに対するデータ操作のログ)とインデクスログ(インデクスに対するデータ操作のログ)がそれぞれ出力される。データログ及びインデクスログのいずれも高速に出力できることが望ましい。
特許文献1には、複数の小さなファイルをまとめて1つのファイルとしオフセット管理をする技術が開示されている。
US 8,825,652
一般に、DBサーバのような計算機システムは、複数のプロセッサコア(以下、コア)を有し、各コアがスレッドを実行する。複数のコアが並列に複数のスレッドを実行できる。
処理の競合(例えばログ並列出力時の競合)を避けるために、並列処理を実行する計算機システムの少なくとも一部を論理的に分割することが考えられる。
そこで、ログ並列出力のために、図1に示すように、複数のログバッファが存在する環境を検討する。これにより、複数のスレッドが複数のログを並列に複数のログバッファに格納できる(スレッドに対して、ログバッファが割り当てられていてもよいし、ログバッファが割り当てられていなくてもよい)。なお、この環境では、下記の前提が採用されてよい。
(−)ログバッファ毎に1以上のログファイルが存在してよい。ログファイルは、DBサーバの外部記憶デバイスに存在してもよいし、DBサーバ内のメモリに存在してもよい。(−)複数のDB領域及び複数のログ領域がある。複数のDB領域は、複数のデータ領域及び複数のインデクス領域を含む。いずれの領域も論理領域である。データ領域内のデータは、DBテーブルに書き込まれるデータであり、インデクス領域内のデータは、インデクスに書き込まれるデータであり、ログ領域内のログは、ログファイルに書き込まれるデータである。少なくともデータ領域及びインデクス領域の各々が、1以上のページの集合である。以下、データ領域及びインデクス領域は、いずれも1つのページであるとする。故に、以下、データ領域を「データページ」と言い、インデクス領域を「インデクスページ」と言う。また、以下、データページ及びインデクスページを「DBページ」と総称することがある。DBページは、DB領域の一例である。また、ログ領域はログファイルであるとする。
(−)DBページの更新としては、論理的な更新と物理的な更新があってよい。論理的な更新とは、DBページへのデータがバッファに書き込まれることでよい。物理的な更新とは、ページ書込みのことでよい。ページ書込みとは、バッファ内のデータ(特に、DBページに実際に書き込まれていないデータであるダーティデータ)が実際にDBページに書き込まれることである。ページ書込みは、ページ単位で行われてよい。
図1に示すように、このような環境では、ログバッファからログファイルへのインデクスログの書込みの回数が多いと予測される。理由は、下記の通りである。
(−)1以上のデータページが更新されると、複数のスレッドにより1以上のインデクスページが更新される。DBテーブルが更新されればインデクスの更新も必要になるからである。
(−)1つのインデクスページにつき複数のインデクスログが複数のログバッファに書き込まれることがある。なぜなら、複数のデータページの更新により更新されるインデクスページが共通していることがあるからである。
(−)インデクスページのページ書込みの前に、そのインデクスページに関わるインデクスログがログファイルに書き込まれる(WAL(Write Ahead Logging))。なぜなら、コミット処理完了前に障害が発生した場合には、再起動後にログを用いたロールバックによりデータをページ書込み前の状態に復元できるようにするためである。
結果として、インデクスログ出力の並列度が低下し得る。なぜなら、図1に示すように、1つのインデクスページのページ書込みが行われる場合、そのインデクスページに関わる複数のインデクスログが複数のログファイルにスレッドにより書き込まれるが、インデクスログがログファイルに書き込まれている間は、そのログファイルが格納されているログバッファの排他(ロック)待ち(すなわち、そのログバッファへの新たな書込みが待たされること)が生じるからである。
また、ログバッファからログファイルへの書込みの頻度が高い場合、複数のログバッファの各々について、ログ(エントリ)が十分溜まる前にログがログバッファへ書き込まれることになる。このため、ログファイルへの書込みの回数が多い。
このような課題は、インデクスログに限らず、データログについてもあり得る。
バッファからのログの書込みの回数が多いという課題の解決に、複数の小さなファイルをまとめて1つのファイルとする特許文献1の技術を単純に利用することはできない。特許文献1の技術を利用できたとしても、その課題を解決することはできない。特許文献1には、バッファへのログの書き込みとバッファからのログの書き込みとのそれぞれについての開示が無い。
複数のスレッドを並列に実行する複数のプロセッサコアを有する計算機システムにおいて、ログバッファとして、1以上の専有ログバッファと1以上の共有ログバッファが用意される。計算機システムは、データベース(DB)に対応した複数のDB領域のうち2以上のスレッドにより更新され得ないDB領域を更新するスレッドについて、そのDB領域の更新に関するログの書込み先のログバッファとして、いずれかの専有ログバッファを選択する。計算機システムは、複数のDB領域のうち2以上のスレッドにより更新され得るDB領域を更新するスレッドについて、そのDB領域の更新に関するログの書込み先のログバッファとして、いずれかの共有ログバッファを選択する。各専有ログバッファは、1つのスレッドの1以上のログが存在し得るが2以上のスレッドの2以上のログが混在し得ないログバッファである。各共有ログバッファは、2以上のスレッドの2以上のログが混在し得るログバッファである。
ログバッファからログ領域(例えばログファイル)への書込みの回数を削減することができる。
比較例の説明図である。 実施形態の概要の説明図である。 インデクススプリット時の処理の概要の説明図である。 実施形態に係るシステム全体の構成例を示す。 データ更新の流れの説明図である。 バッファページ管理テーブルの構成例を示す。 インデクスの構成例を示す。 インデクススプリットの一例の説明図である。 ログ出力処理の流れの一例を示す。
以下、図面を参照しながら、一実施形態を説明する。
以下の説明では、データベース管理システム(以下、DBMS)へのクエリの発行元としては、DBMSの内部のコンピュータプログラムであってもよいし、DBMSの外部のコンピュータプログラム(例えば、クライアント計算機で実行されるコンピュータプログラム)であってよい。
また、以下の説明では、「×××管理テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××管理テーブル」を「×××管理情報」と呼ぶことができる。また、以下の説明において、1つの管理テーブルは、2以上の管理テーブルに分割されてもよいし、2以上の管理テーブルの全部又は一部が1つの管理テーブルであってもよい。
また、以下の説明では、管理情報としてのテーブルが「管理テーブル」と呼ばれ、DBテーブルが単に「テーブル」と呼ばれる。
また、以下の説明では、要素のID(識別情報)として、番号が使用されるが、それに代えて又は加えて他種のIDが使用されてもよい。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号(又は参照符号における共通符号)を使用し、同種の要素を区別して説明する場合は、要素の番号(要素に割り振られた番号)(又は参照符号)を使用することがある。なお、以下の説明では、要素の番号の先頭は「0」である。
また、以下の説明では、I/O(Input/Output)要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
また、以下の説明では、「bbb部」を主語として説明を行う場合があるが、これら機能部は、プロセッサによって実行されることで定められた処理をメモリ及び通信ポート(ネットワークI/F)を用いながら行うため、プロセッサを主語とした説明としてもよい。プロセッサは、典型的には、マイクロプロセッサ(例えばCPU(Central Processing
Unit))を含んでおり、更に、専用ハードウェア(例えばASIC(Application Specific Integrated Circuit)又はFPGA(Field-Programmable GateArray))を含んでもよい。また、これら機能部を主語として開示された処理は、計算機が行う処理としてもよい。また、これら機能部の一部または全ては、専用ハードウェアによって実現されてもよい。また、各種機能部は、プログラム配布サーバや、計算機が読み取り可能な記憶媒体によって各計算機にインストールされてもよい。また,各種機能部及びサーバは1つの計算機にインストールされ実行されても良いし,複数の計算機にインストールされ実行されても良い。プロセッサは、制御部の一例であり、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
また、以下の説明において、「スレッド」は、OSスレッドであってもよいし疑似スレッドであってもよい。OSスレッドは、OS(Operating System)によって管理されるスレッド(例えばカーネルとライブラリによって管理されるスレッド)であり、リアルスレッドと言うこともできる。一方、「擬似スレッド」は、DBMSによって管理されるスレッドである。OSスレッドが、DBMSによって疑似的に細分化されることで、複数の疑似スレッドを含むことができる。
また、以下の説明において、「記憶部」は、メモリを含んだ1以上の記憶デバイスでよい。例えば、記憶部は、主記憶デバイス(典型的には揮発性のメモリ)及び補助記憶デバイス(典型的には不揮発性の記憶デバイス)のうちの少なくとも主記憶デバイスでよい。
また、以下の説明において、データベースは、テーブルとインデクスとを含む。「DBページ」は、DB領域の一例である。「データページ」は、データ領域の一例である。「インデクスページ」は、インデクス領域の一例である。「ログファイル」は、ログ領域の一例である。いずれのページも論理領域の一例である。
図2は、実施形態の概要の説明図である。
DBサーバのメモリに、複数(又は1つ)の専有ログバッファ(図では「PLB」)と複数(又は1つ)の共有ログバッファ(図では「SLB」)とが用意される。本実施形態では、スレッド毎に、専用ログバッファ及び共有ログバッファの両方が用意される。1つのスレッドに割り当てられる専用ログバッファ及び共有ログバッファのそれぞれの数は、1以上でよい。全てのスレッドについて、割り当てられる専有ログバッファの数が同じでなくてもよい。同様に、全てのスレッドについて、割り当てられる共有ログバッファの数も同じでなくてもよい。本実施形態では、1つのスレッド(例えばスレッド01)に、1つの専有ログバッファ(例えばPLB01)と1つの共有ログバッファ(例えばSLB01)が割り当てられる。
各専有ログバッファは、その専有ログバッファが割り当てられている1つのスレッドの1以上のログが存在し得るが2以上のスレッドの2以上のログが混在し得ないログバッファである。一方、各共有ログバッファは、2以上のスレッドの2以上のログが混在し得るログバッファである。
DBサーバは、複数のDBページのうち2以上のスレッドにより更新され得ないDBページを更新するスレッドについて、そのDBページの更新に関するログの書込み先のログバッファとして、いずれかの専有ログバッファを選択する。本実施形態では、DBサーバは、そのスレッドに割り当てられている専有ログバッファを選択する。
一方、DBサーバは、複数のDBページのうち2以上のスレッドにより更新され得るDBページを更新するスレッドについて、そのDBページの更新に関するログの書込み先のログバッファとして、いずれかの共有ログバッファを選択する。このため、ログバッファからログファイルへの書込みの回数を削減することができる。なお、2以上のスレッドの2以上のログが1つの共有ログバッファに集約されることになるため、共有ログバッファの競合(排他取得できないこと)が懸念される。しかし、仮に競合が生じても、ログバッファへの書込みのための競合であるため、書込みが待たされる時間は、ログバッファからログファイルへの書込み中にそのログバッファへの書込みが待たされる時間に比べて短い。つまり、影響は比較的小さい。
本実施形態では、DBサーバは、2以上のスレッドにより更新され得るDBページを更新するスレッドについて、更新対象のDBページ(例えばインデクスページ)を基に一意に共有ログバッファを選択する。従って、2以上のスレッドの更新対象が同一のDBページであれば、その2以上のスレッドの2以上のログの集約先共有ログバッファも同一である。その共有ログバッファへ2以上のスレッドがログを書き込むことになる。
また、本実施形態では、複数のスレッドにそれぞれ複数のログファイルが割り当てられる。これにより、2以上のスレッドによる1つのログファイルに対する衝突を回避できる。なお、全てのスレッドについて、割り当てられるログファイルの数が同じでなくてもよい。本実施形態では、1つのスレッド(例えばスレッド01)に、1つのログファイル(例えばログファイル01)が割り当てられる。スレッドに割り当てられているログファイルに、そのスレッドに割り当てられている専有ログバッファ及び共有ログバッファ内のログが書き込まれる。
また、本実施形態では、複数のデータページの各々には、いずれかのスレッドが割り当てられている。つまり、1つのスレッドに、1以上のデータページが割り当てられている。各データページには、1つのスレッドが割り当てられている。スレッドは、そのスレッドに割り当てられているデータページを更新し得るが、そのスレッドに割り当てられていないデータページを更新しないようになっている。2以上のデータページが更新されると同一のインデクスページが更新されることがある。少なくとも1つのインデクスページが、2以上のデータページに共通であるからである。従って、本実施形態では、「2以上のスレッドにより更新され得ないDBページ」は、データページであり、「2以上のスレッドにより更新され得るDBページ」は、インデクスページである。従って、データページの更新ログは、専有ログバッファに書き込まれることになり、データページの更新ログのログバッファへの書込みにおいて、競合は生じない。なお、データページに代えて又は加えてインデクスページがスレッドに割り当てられることの意義は、データページがスレッドに割り当てられることに比べて低いと考えられる。なぜなら、少なくとも1つのインデクスページは、複数のデータページに共通であるからである。
また、本実施形態では、複数のスレッドの各々が、データページ及びインデクスページのいずれも更新し得るスレッドである。DBサーバが、更新対象のDBページがデータページであるかインデクスページであるかを判断する。更新対象がデータページであれば、スレッドは、そのデータページの更新ログの書込み先として、そのスレッドに割り当てられている専有ログバッファを選択する。更新対象がインデクスページであれば、スレッドは、そのインデクスページの更新ログの書込み先として、そのインデスクページから一意に特定された共有ログバッファを選択する。このように、スレッドが、データページ及びインデクスページのいずれも更新し得るスレッドであっても、2以上のスレッドの2以上のログを共有ログバッファに集約できる。
また、本実施形態では、インデクスは、木構造のインデクス領域で構成されたB木構造のインデクスである。図3に示すように、インデクスページがスプリットされた場合(例えば、リーフインデクスページ(以下、リーフページ)に空きがなくなったため新たなリーフページが追加された場合)、スレッドは、全ての更新対象のリーフページに接続されたいずれかの上位インデクスページから一意に特定される共有ログバッファを選択する。その選択された共有ログバッファに、その上位インデクスページの下位における全ての更新対象リーフページにそれぞれ対応した複数のログが集約され、最終的に、その複数のログが全て同一のログファイルに書き込まれる。このため、リカバリの際に(例えばスプリットされたページを元のページに戻す際に)、ログファイル間でログの突合せを行う必要が無い。
以下、本実施形態を詳細に説明する。
図4は、実施形態に係るシステム全体の構成例を示す。
DBサーバ401は、計算機システムの一例であって、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよく、もしくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってもよい。DBサーバ401は、ネットワークアダプタ413、メモリ412、ホストバスアダプタ414、及びそれらに接続されたプロセッサ411を有する。ネットワークアダプタ413及びホストバスアダプタ414は、インターフェースデバイスの一例である。ネットワークアダプタ413を介して、クライアント計算機(以下、クライアント)402との通信(典型的には通信ネットワークを介した通信)が行われる。ホストバスアダプタ414を介して、外部ストレージ装置403との通信が行われる。
プロセッサ411は、例えば、マイクロプロセッサであり、コンピュータプログラムを実行する。プロセッサ411により実行されるコンピュータプログラムは、例えば、OS(Operating System)及びDBMS481である。メモリ412は、記憶部の一例であり、プロセッサ411によって実行されるプログラムと、プログラムが使用するデータを一時的に記憶する。プロセッサ411は、複数のコア431を有する。なお、複数のコア431は、シングルコアプロセッサが複数存在することで実現されてもよい。
DBサーバ401では、DBMS481が、クライアント402のようなクエリ発行元から発行されたクエリを実行し、そのクエリの実行において、DB471からデータを読み出すために、若しくは、DB471にデータを書き込むために、DB471を格納する外部ストレージ装置402に対する入出力要求をOSに発行する。OSは、その入出力要求を受け付け、外部ストレージ装置402へ入出力要求を発行する。クエリは、例えば、構造化問合せ言語(SQL、Structured Query Language)によって記述される。
外部ストレージ装置402は、複数の記憶デバイスを含んだストレージ装置でもよいし、単一の記憶デバイスでもよい。外部ストレージ装置402は、DBMS481が管理するDB471を記憶するが、DB471のデータに加えて、プログラムやログファイル472を記憶してもよい。外部ストレージ装置402は、DBサーバ401から入出力要求を受け付け、その入出力要求に従いデータの読み書きを行い、その結果をDBサーバ401に返す。
DBMS481は、DB471を管理する。DB471は、1以上のテーブルと1以上のインデクスを含む。テーブルは、1以上のレコードの集合であり、レコードは1以上のカラムから構成される。インデクスは、テーブルの1以上のカラム等を対象として作成されるデータ構造であり、インデクスが対象とするカラム等を含む選択条件によるテーブルへのアクセスを高速化するためのものである。例えば、インデクスは、対象とするカラムの値の毎に、テーブルの中でその値を含むレコードを特定するための情報を保持するデータ構造である。データ構造としては、例えばB木が用いられる。レコードを特定するための情報としては、物理アドレスや論理的な行ID等が用いられることがある。
DBMS481は、クエリ実行部441、データ管理部443、インデクス管理部442、DBバッファ管理部445、及びログ管理部444を含む。
クエリ実行部441は、クエリを受け付け、そのクエリを実行し、その実行結果をクエリ発行元に返す。クエリ実行部441は、複数のスレッド421を含み、複数のスレッド421の各々が、いずれかのコア431で実行される。例えば、スレッド01〜04がそれぞれコア01〜04によりそれぞれ実行される。各スレッド421が、データページに対するデータ操作もインデクスページに対するデータ操作もログファイルに対するデータ操作も行うことができる。しかし、データページに対するデータ操作を行うスレッドであるデータスレッドと、インデクスページに対するデータ操作を行うスレッドであるインデクススレッドと、ログファイルに対するデータ操作を行うスレッドであるログスレッドとが独立していてもよい。更に、データスレッド、インデクススレッド及びログスレッドの少なくとも1つについて、データ操作として更新を行うスレッドである更新スレッドと、データ操作として参照を行うスレッドである参照スレッドとが独立していてもよい。各スレッド421は、テーブルの更新に関し、バッファ管理部445が管理するDBバッファ462内のバッファページ481にデータ管理部443を介してアクセスしたり、ログ管理部444が管理するログバッファ453にデータ管理部443を介してアクセスしたりできる。また、各スレッド421は、インデクスの更新に関し、バッファ管理部445が管理するDBバッファ462内のバッファページ481にインデクス管理部442を介してアクセスしたり、ログ管理部444が管理するログバッファ453にインデクス管理部442を介してアクセスしたりできる。
DBバッファ管理部445は、バッファページ管理テーブル461と、DB471のデータを一時的に格納するためのDBバッファ462とを管理する。DBバッファ462は、メモリ412上に構成され、1以上のバッファページ481を含む。バッファページ481は、DBバッファ462に存在するDBページである。DBバッファ462が含むバッファページ481の数は、所定の数に制限されていることがある。DBバッファ管理部445は、DB471のデータを、例えばDBページ単位でDBバッファ462に読み出し、DBバッファ462に格納されているデータを、例えばDBページ単位でDB471に書き込む。DBバッファ管理部445は、クエリ実行部441からデータの読出し要求を受け付けた際、読出し要求対象のデータが既にDBバッファ462に格納されていれば、そのデータをクエリ実行部441に返す。一方、読出し要求対象のデータがDBバッファ462に格納されていなければ、DBバッファ管理部445は、そのデータをDB471から読み出し、読み出されたデータを、DBバッファ462に格納して、そのデータをクエリ実行部441に返す。バッファページ管理テーブル461は、各バッファページ481に関する情報を保持する。
ログ管理部444は、ログバッファ選択部451を有し、複数のログバッファ453を管理する。本実施形態では、上述したように、スレッド421毎に、専有ログバッファ(PLB)と、共有ログバッファ(SLB)とが割り当てられている。ログバッファ選択部451は、書込み先のログバッファを選択する。
図1に示すDBMS481の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が1つの構成要素に統合されていてもよい。
図5は、データ更新の流れの説明図である。
例えば、スレッド01が、クライアント402からのクエリの実行において、いずれかのデータページ511(バッファページ481)にレコード521を追加する(S501)。これは、テーブル更新の一例である。スレッド01が、そのテーブル更新のログを、専有ログバッファ01に書き込む(S502)。なお、専有ログバッファ01内のログは、スレッド01に割り当てられているログファイル01に書き込まれる。
スレッド01が、S501のテーブル更新に伴い、インデクス501の該当リーフページ513を更新する(S503)。これは、インデクス更新の一例である。スレッド01が、更新対象のリーフページ513から一意に特定された共有ログバッファ02に、そのインデクス更新のログを書き込む(S504)。なお、共有ログバッファ02内のログは、スレッド02に割り当てられているログファイル02に書き込まれる。
図6は、バッファページ管理テーブル461の構成例を示す。
バッファページ管理テーブル461は、バッファページ481毎に、バッファページ番号601、状態602、DBページ番号603、データ種別604及び格納状態605という情報を保持する。
バッファページ番号601は、バッファページ481の番号である。
状態602は、バッファページ481の状態を示す。状態602として、“Clean”と“Dirty”がある。“Clean”は、バッファページが、外部ストレージ装置403内のDBページと一致していることを意味する。“Dirty”は、バッファページが、外部ストレージ装置403内のDBページと不一致であること(つまり、更新されたバッファページがDBページとして外部ストレージ装置403に書き込まれていないこと)を意味する。
DBページ番号603は、バッファページ481に対応したDBページの番号である。データ種別604は、バッファページ481のページ種別を示す。例えば、“データページ”は、バッファページ481がデータページであることを意味する。
格納状態605は、ログバッファ453の格納状態を示す。“Y”は、ログファイル472に未だ書き込まれていないログが存在することを意味する。DBMS481は、“Dirty”のバッファページ481をDBページとして書き込む際には、格納状態605が“Y”である全てのログバッファ453内のログをログファイル472に書き込んでから、その“Dirty”のバッファページ481をDBページとして書き込む。そのバッファページ481がDBページとして書き込まれた後、そのバッファページ481の状態602は“Dirty”から“Clean”に変更され、そのバッファページ481に対応した全ての格納状態605“Y”がそれぞれ“N”に変更される。
図7は、インデクス501の構成例を示す。
インデクス501は、B木インデクスであり、複数のインデクスページ513が木構造になっている。複数のインデクスページ513は、複数のリーフページと、1以上の上位ページとで構成される。1以上の上位ページは、少なくともルートページを含む。「リーフページ」は、子ページがいないページ、つまり最下位のページである。「ルートページ」は、親ノードがいないページ、つまり最上位のページである。ルートページ以外の上位ページは、中間ページ(内部ページと呼ばれてもよい)である。中間ページには、親ページと少なくとも1つの子ページとが存在する。
リーフページ間のリンクがある。つまり、各リーフページは、左側リーフページへのポインタ701と、右側リーフページへのポインタ702と、キー値703と、キー値703に対応したポインタ(データページ内のレコードへのポインタ)704とを含む。リーフページには、複数のキー値703が含まれており、キー値703毎に、ポインタ704が存在する。
図7によれば、リーフページ513Lは、空きが無いため(満杯であるため)、エントリ(キー値703及びポインタ704の組)を追加できない。このような状態で、リーフページ513Lに更にエントリとを追加したい場合には、インデクススプリットが行われる。
図8は、インデクススプリットの一例の説明図である。
インデクススプリットとは、リーフページを増やすことを意味し、例えば、少なくとも1つのリーフページを分割することを意味する。インデクススプリットは、例えば、空きの無いリーフページにエントリを追加しなければならない場合、クライアント402等からインデクススプリットの指示をDBMS481が受けた場合等に実行されてよい。図8によれば、キー値“L”を含んだエントリの追加のためにインデクススプリットが行われる。具体的には、そのエントリの追加先は、キー値の並びによるとリーフページ513Lになるが、リーフページ513Lには空きがないために、インデクススプリットが行われる。インデクススプリットは、DBMS481(例えばインデクス管理部442)により行われる。
インデクス管理部442は、新規リーフページ513Nを生成する(S901)。
次に、インデクス管理部442は、新規リーフページ513Nに関連付けられるべき既存リーフページのポインタを、新規リーフページ513Nを指すように更新する(S902)。図8の例では、新規リーフページ513Nの左隣りのリーフページ513Lのポインタ(右側リーフページへのポインタ)と、新規リーフページ513Nの右隣りのリーフページ513Rのポインタ(左側リーフページへのポインタ)とが、それぞれ、新規リーフページ513Nを指すように更新される。
次に、インデクス管理部442は、リーフページ513Lの一部のエントリ(例えば、キー値“K”及び“M”をそれぞれ含んだ2つの右側エントリ)を、新規リーフページ513Nへ移動する(S803)。そして、インデクス管理部442は、新規リーフページ513Nに移動された2つのエントリ間に、キー値“L”を含んだエントリを挿入する(S804)。
最後に、インデクス管理部442は、リーフページ513L、513N及び513Lの共通の親ページ513Pに、新規リーフページ513Nへのエントリを追加する(S805)。
図8に例示したインデクススプリットによれば、更新対象インデクスページは、リーフページ513L、513N及び513Lと、親ページ513Pである。また、更新対象リーフページ513L、513N及び513Lの共通の上位ページ(先祖ページと呼ばれてもよい)として、親ページ513Pの他に、ルートページも該当する。本実施形態では、更新対象リーフページ513L、513N及び513Lの共通の上位ページのうち、最下位のページ(つまり親ページ513P)が、図3を参照して説明した上位ページ(すなわち、集約先共有ログバッファを選択するために使用されるインデクスページ)である。
図9は、ログ出力処理の流れの一例を示す。
ログバッファ選択部451は、スレッド(図9の説明において「対象スレッド」と言う)による更新対象のDBページがインデクスページか否かを判断する(S901)。
S901の判断結果が否定の場合(S901:No)、すなわち、更新対象DBページがデータページの場合、ログバッファ選択部451は、対象スレッドに割り当てられている専有ログバッファを選択する(S911)。対象スレッドが、S911で選択された専有ログバッファの排他(ロック)を取得する(S912)。その後、対象スレッドは、更新ログを、S911で選択された専有ログバッファに書き込み(S927)、その専有ログバッファの排他を解放する(S928)なお、専有ログバッファについては、排他の取得及び解放は省略されてよい。
S901の判断結果が肯定の場合(S901:Yes)、すなわち、更新対象DBページがインデクスページの場合、ログバッファ選択部451は、インデクススプリット中か否かを判断する(S921)。インデクススプリット中か否かは、例えば、インデクス管理部442に問い合わせることにより特定可能である。
S921の判断結果が否定の場合(S921:No)、ログバッファ選択部451は、集約先共有ログバッファの選択に使用するインデクスページとして、更新対象インデクスページであるリーフページを選択する(S922)。
一方、S921の判断結果が肯定の場合(S921:Yes)、ログバッファ選択部451は、集約先共有ログバッファの選択に使用するインデクスページとして、更新対象インデクスページのうちの最上位ページを選択する(S923)。S923では、全ての更新対象リーフページに共通のいずれの上位ページが選択されてもよいが、上述したように、更新対象インデクスページのうちの最上位ページが選択される。言い換えれば、全ての更新対象リーフページに共通の上位ページのうちの最下位の上位ページが選択される。これにより、集約先共有ログバッファとして選択される共有ログバッファが集中する確率を低減できる。
S922又はS923の後、ログバッファ選択部451は、1つの共有ログバッファを選択する(S924)。共有ログバッファは、ランダムに選択される等、種々の方法により選択されてよいが、ここでは、S922又はS923で選択されたインデクスページを基に選択される。具体的には、例えば、ログバッファ選択部451は、共有ログバッファ番号=Hash(p) mod Nにより、共有ログバッファを一意に特定する。“p”は、S922又はS923で選択されたインデクスページ(対象のインデクスページ)の番号である。“N”は、共有ログバッファの数である。“Hash(x)”ハッシュ関数である。S922又はS923で選択されたインデクスページ(対象のインデクスページ)の番号から一意に共有ログバッファを選択できる方法は、“共有ログバッファ番号=Hash(p) mod N”に限られない。
対象スレッドが、S924で選択された共有ログバッファの排他(ロック)を取得する(S925)。
排他取得に成功した場合(S926:Yes)、対象スレッドは、更新ログを、S924で選択された共有ログバッファに書き込み(S927)、その共有ログバッファの排他を解放する(S928)。
一方、排他取得に失敗した場合(S926:No)、ログバッファ選択部451は、対象スレッドに割り当てられている専有ログバッファを選択する(S911)。つまり、S924で選択された共有ログバッファが他スレッドとの間で競合した場合、更新ログは、共有ログバッファに集約されず、対象スレッドの専有ログバッファに格納される。これにより、ログバッファへの書き込みを待つことを回避できる。なお、排他取得に失敗した場合、S911の実行に代えて、排他取得できるまで待つことが行われてもよい。
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、DB471の少なくとも一部が、DBサーバ401内のメモリ412に存在してよい(例えばインメモリが採用されてもよい)。また、例えば、少なくとも1つのログファイル472が、DBサーバ401内のメモリ412に存在してよい。
401…DBサーバ

Claims (13)

  1. データベースを管理する計算機システムであって、
    複数のスレッドを並列に実行する複数のプロセッサコアを有するプロセッサと、
    以上の専有ログバッファと以上の共有ログバッファとを有する記憶部と
    を有し、
    前記プロセッサが、
    (A)前記データベースに対応した複数のデータベース領域のうち2以上のスレッドにより更新され得ないデータベース領域を更新するスレッドについて、そのデータベース領域の更新に関するログの書込み先のログバッファとして、いずれかの専有ログバッファを選択し、
    (B)前記複数のデータベース領域のうち2以上のスレッドにより更新され得るデータベース領域を更新するスレッドについて、そのデータベース領域の更新に関するログの書込み先のログバッファとして、いずれかの共有ログバッファを選択し、
    各専有ログバッファは、1つのスレッドの1以上のログが存在し得るが2以上のスレッドの2以上のログが混在し得ないログバッファであり、
    各共有ログバッファは、2以上のスレッドの2以上のログが混在し得るログバッファである、
    計算機システム。
  2. 複数の専有ログバッファの各々が、前記複数のスレッドのいずれかに割り当てられており、
    前記プロセッサが、(A)において、そのスレッドに割り当てられている専有ログバッファを選択する、
    請求項1記載の計算機システム。
  3. 複数の共有ログバッファの各々が、前記複数のスレッドのいずれかに割り当てられており、
    前記プロセッサが、(B)において、複数の共有ログバッファのうちのいずれかの共有ログバッファを選択する、
    請求項2記載の計算機システム。
  4. 前記データベースは、テーブルとインデクスとを含み、
    前記複数のデータベース領域は、複数のデータ領域と、複数のインデクス領域とを含み、
    前記複数のデータ領域の各々は、テーブルのデータを含んだデータベース領域であり、
    前記複数のインデクス領域の各々は、インデクスのデータを含んだデータベース領域であり、
    2以上のスレッドにより更新され得るデータベース領域は、インデクス領域である、
    請求項3記載の計算機システム。
  5. (B)で選択された共有ログバッファは、更新対象のインデクス領域を基に選択された共有ログバッファである、
    請求項4記載の計算機システム。
  6. 前記インデクスは、木構造のインデクス領域で構成されたB木構造のインデクスであり、
    前記インデクスについてスプリットが行われた場合、(B)で選択された共有ログバッファは、全ての更新対象のリーフインデクス領域に接続されたいずれかの上位インデクス領域を基に選択された共有ログバッファである、
    請求項5記載の計算機システム。
  7. 前記いずれかの上位インデクス領域は、前記全ての更新対象インデクス領域のうちの最上位のインデクス領域である、
    請求項6記載の計算機システム。
  8. (B)で選択された共有ログバッファは、対象のインデクス領域の番号と共有ログバッファの数とを用いて一意に特定された共有ログバッファである、
    請求項5記載の計算機システム。
  9. 前記複数のスレッドにそれぞれ複数のログ領域も割り当てられており、
    前記複数のスレッドの各々が、そのスレッドに割り当てられている専有ログバッファ及び共有ログバッファ内のログを、そのスレッドに割り当てられているログ領域に書き込む、
    請求項4記載の計算機システム。
  10. 前記複数のデータ領域の各々には、いずれかのスレッドが割り当てられており、
    少なくとも1つのデータ領域が割り当てられているスレッドは、そのスレッドに割り当てられている前記少なくとも1つのデータ領域を更新し得るが、そのスレッドに割り当てられていないデータ領域を更新しないようになっており、
    前記複数のインデクス領域の各々は、2以上のスレッドにより更新され得る、
    請求項4記載の計算機システム。
  11. 前記複数のスレッドの各々が、データ領域及びインデクス領域のいずれも更新し得るスレッドであり、
    前記プロセッサが、
    更新対象のデータベース領域がインデクス領域であるか否かを判断し、
    前記判断の結果が否定の場合、(A)の処理を実行し、
    前記判断の結果が肯定の場合、(B)の処理を実行する、
    請求項10記載の計算機システム。
  12. 前記プロセッサが、(B)において、前記選択された共有ログバッファのロックを取得してから、前記選択された共有ログバッファにログを書き込むようになっており、
    前記プロセッサが、(B)において、前記選択された共有ログバッファのロックを取得できない場合、そのスレッドに対応した専有ログバッファにログを書き込む、
    請求項1記載の計算機システム。
  13. データベースを管理するデータベース管理方法であって、
    (A)前記データベースに対応した複数のデータベース領域のうち2以上のスレッドにより更新され得ないデータベース領域を更新するスレッドについて、そのデータベース領域の更新に関するログの書込み先のログバッファとして、以上の専有ログバッファのうちのいずれかの専有ログバッファを選択し、
    (B)前記複数のデータベース領域のうち2以上のスレッドにより更新され得るデータベース領域を更新するスレッドについて、そのデータベース領域の更新に関するログの書込み先のログバッファとして、以上の共有ログバッファのうちのいずれかの共有ログバッファを選択し、
    各専有ログバッファは、1つのスレッドの1以上のログが存在し得るが2以上のスレッドの2以上のログが混在し得ないログバッファであり、
    各共有ログバッファは、2以上のスレッドの2以上のログが混在し得るログバッファである、
    データベース管理方法。
JP2017529176A 2015-07-17 2015-07-17 計算機システム及びデータベース管理方法 Active JP6479186B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/070503 WO2017013701A1 (ja) 2015-07-17 2015-07-17 計算機システム及びデータベース管理方法

Publications (2)

Publication Number Publication Date
JPWO2017013701A1 JPWO2017013701A1 (ja) 2018-03-22
JP6479186B2 true JP6479186B2 (ja) 2019-03-06

Family

ID=57835307

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017529176A Active JP6479186B2 (ja) 2015-07-17 2015-07-17 計算機システム及びデータベース管理方法

Country Status (3)

Country Link
US (1) US11321302B2 (ja)
JP (1) JP6479186B2 (ja)
WO (1) WO2017013701A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108422B2 (en) * 2015-04-28 2018-10-23 Liqid Inc. Multi-thread network stack buffering of data frames
US20180300083A1 (en) * 2017-04-12 2018-10-18 Hewlett Packard Enterprise Development Lp Write-ahead logging through a plurality of logging buffers using nvm
US11196567B2 (en) 2018-11-26 2021-12-07 Amazon Technologies, Inc. Cryptographic verification of database transactions
US10942910B1 (en) 2018-11-26 2021-03-09 Amazon Technologies, Inc. Journal queries of a ledger-based database
US11119998B1 (en) 2018-11-26 2021-09-14 Amazon Technologies, Inc. Index and view updates in a ledger-based database
US11036708B2 (en) 2018-11-26 2021-06-15 Amazon Technologies, Inc. Indexes on non-materialized views
CN109977334B (zh) * 2019-03-26 2023-10-20 浙江度衍信息技术有限公司 检索速度优化方法
CN111061690B (zh) * 2019-11-22 2023-08-22 武汉达梦数据库股份有限公司 一种基于rac的数据库日志文件读取方法和装置
US20230010516A1 (en) * 2021-07-06 2023-01-12 Vmware, Inc. Input/output (i/o) quiescing for sequential ordering of operations in a write-ahead-log (wal)-based storage system

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05181721A (ja) 1991-11-25 1993-07-23 Oki Electric Ind Co Ltd 共有バッファの再利用検索方法
US6026406A (en) * 1997-06-04 2000-02-15 Oracle Corporation Batch processing of updates to indexes
US7305421B2 (en) * 2001-07-16 2007-12-04 Sap Ag Parallelized redo-only logging and recovery for highly available main memory database systems
US6721765B2 (en) * 2002-07-02 2004-04-13 Sybase, Inc. Database system with improved methods for asynchronous logging of transactions
US7412460B2 (en) * 2003-06-19 2008-08-12 International Business Machines Corporation DBMS backup without suspending updates and corresponding recovery using separately stored log and data files
WO2009114645A1 (en) * 2008-03-11 2009-09-17 University Of Washington Efficient deterministic multiprocessing
US8229945B2 (en) * 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
JP5040773B2 (ja) 2008-03-31 2012-10-03 富士通株式会社 メモリバッファ割当装置およびプログラム
US8489565B2 (en) * 2009-03-24 2013-07-16 Microsoft Corporation Dynamic integrated database index management
US9864772B2 (en) * 2010-09-30 2018-01-09 International Business Machines Corporation Log-shipping data replication with early log record fetching
US8631416B2 (en) * 2011-03-31 2014-01-14 Verisign, Inc. Parallelizing scheduler for database commands
EP2843559A4 (en) 2012-04-27 2016-01-13 Hitachi Ltd DATABASE MANAGEMENT SYSTEM, COMPUTERS AND DATABASE MANAGEMENT PROCEDURES
US8825652B1 (en) 2012-06-28 2014-09-02 Emc Corporation Small file aggregation in a parallel computing system
US9183200B1 (en) * 2012-08-02 2015-11-10 Symantec Corporation Scale up deduplication engine via efficient partitioning
CN103729442B (zh) * 2013-12-30 2017-11-24 华为技术有限公司 记录事务日志的方法和数据库引擎
US9594644B2 (en) * 2014-09-19 2017-03-14 Sybase, Inc. Converting a serial transaction schedule to a parallel transaction schedule
US9613120B1 (en) * 2014-11-11 2017-04-04 Amazon Technologies, Inc. Replicated database startup for common database storage
US9529568B1 (en) * 2014-12-19 2016-12-27 Amazon Technologies, Inc. Systems and methods for low interference logging and diagnostics

Also Published As

Publication number Publication date
US11321302B2 (en) 2022-05-03
JPWO2017013701A1 (ja) 2018-03-22
WO2017013701A1 (ja) 2017-01-26
US20180075080A1 (en) 2018-03-15

Similar Documents

Publication Publication Date Title
JP6479186B2 (ja) 計算機システム及びデータベース管理方法
US9672235B2 (en) Method and system for dynamically partitioning very large database indices on write-once tables
US10452491B2 (en) Scalable log partitioning system
US8510316B2 (en) Database processing system and method
US9529881B2 (en) Difference determination in a database environment
US11449507B2 (en) Database engine
US11030196B2 (en) Method and apparatus for processing join query
US8832022B2 (en) Transaction processing device, transaction processing method and transaction processing program
US10366075B2 (en) Database management system and method
US20150331898A1 (en) Method and apparatus for concurrent access of mixed services
US10007548B2 (en) Transaction system
JP6445049B2 (ja) ログの管理方法及び計算機システム
US20150286671A1 (en) Transaction system
WO2015118865A1 (ja) 情報処理装置、情報処理システム及びデータアクセス方法
US20180349422A1 (en) Database management system, database server, and database management method
EP3242227B1 (en) Page querying method and data processing node in oltp cluster database
US20220342888A1 (en) Object tagging
JP2017167654A (ja) データ管理装置及びデータベースの管理方法
WO2016117007A1 (ja) データベースシステム及びデータベース管理方法
US10860577B2 (en) Search processing system and method for processing search requests involving data transfer amount unknown to host
CN110413617B (zh) 一种根据数据量的大小动态调节哈希表组的方法
US20230273728A1 (en) Storage control apparatus and method
JP6263673B2 (ja) 計算機システム及びデータベース管理方法
US20170262512A1 (en) Search processing method, search processing apparatus, and non-transitory computer-readable recording medium storing search processing program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180828

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181011

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190115

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190205

R150 Certificate of patent or registration of utility model

Ref document number: 6479186

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150