本記事ではInfiniDBの特徴である「自動マルチスレッド機能」、及び「CPUコアのフル活用」について説明します。
InfiniDBのマルチスレッド処理
InfiniDBのクエリ処理(ディスクから必要なデータを取り出す部分)は主にPrimProcプロセスが行います。大量のデータをSELECTするような処理を行った場合も、図1のように処理部でPrimProcのスレッドが複数立ちがって処理を分散して行います。
このようにInfiniDBはマルチスレッドでクエリを処理することが可能です。
このマルチスレッド処理機能は事前の設定などは不要です。自動で実行される機能であるため、ユーザ側では特に何も意識をする必要はありません。(基本的には使用可能なCPUコア数に比例して複数のスレッドが生成されます。)
CPUコアの有効利用
マルチスレッドで処理をする際は、基本的には1つのスレッドにつき1つのCPUコアを使用しますが、InfiniDBで各CPUコアのリソースを可能な限り使用します。図2は、あるSELECT文を処理している最中のInfiniDBのCPU使用率をtopコマンドで取得したものです。この環境はCPUコアが12個(Cpu0〜11)ありますが、どのコアも100%近くリソースを使用して処理していることがわかります。
このように、InfiniDBはマルチスレッドで(複数のCPUコアを使用して)クエリの処理を行い、かつ可能な限りCPUのリソースを使用して処理を行います。