本記事ではInfiniDBの特徴である「自動マルチスレッド機能」、及び「CPUコアのフル活用」について説明します。

InfiniDBのマルチスレッド処理

InfiniDBのクエリ処理(ディスクから必要なデータを取り出す部分)は主にPrimProcプロセスが行います。

大量のデータをSELECTするような処理を行った場合も、図1のように処理部でPrimProcのスレッドが複数立ちがって処理を分散して行います。

InfiniDB_MultiThread_01
【図1】InfiniDBのマルチスレッド機能


このようにInfiniDBはマルチスレッドでクエリを処理することが可能です。

このマルチスレッド処理機能は事前の設定などは不要です。自動で実行される機能であるため、ユーザ側では特に何も意識をする必要はありません。(基本的には使用可能なCPUコア数に比例して複数のスレッドが生成されます。)


CPUコアの有効利用

マルチスレッドで処理をする際は、基本的には1つのスレッドにつき1つのCPUコアを使用しますが、InfiniDBで各CPUコアのリソースを可能な限り使用します。

図2は、あるSELECT文を処理している最中のInfiniDBのCPU使用率をtopコマンドで取得したものです。この環境はCPUコアが12個(Cpu0〜11)ありますが、どのコアも100%近くリソースを使用して処理していることがわかります。

InfiniDB_MultiThread_02
【図2】SELECT実行時のCPUリソースの使われ方


このように、InfiniDBはマルチスレッドで(複数のCPUコアを使用して)クエリの処理を行い、かつ可能な限りCPUのリソースを使用して処理を行います。