SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.

5月20日(米国時間)、SQLiteの最新版となる「SQLite 3.7.17」が公開された。いくつかの機能追加とバグ修正が実施されている。特に注目されるのはメモリマップI/Oと呼ばれる機能が追加された点にある。この機能を有効にするとディスクI/Oが大量に発生するようなケースでメモリアクセスの量が減り、最大で2倍ほどの性能向上が期待できる。いくらかの危険性も伴うため、今回のリリースではデフォルトでは機能は無効化されている。

SQLiteは基本的にread(8)/write(8)システムコールを使ってディスク上のデータベースファイルの内容を読み書きしている。ヒープ領域にまとまったメモリ領域を確保し、read(8)システムコールを使ってディスクからメモリ上にデータをコピーしたあとでクエリを処理している。書き込みも同様に、ヒープ領域に確保したメモリ上のデータを更新クエリが発生した段階でまとめて書き込んでいる。

メモリマップI/Oを有効にすると、read(8)/write(8)システムコールの替りにmmap(8)システムコールが使われるようになる。mmap(8)システムコールを使うと直接ファイルの内容にアクセスできるようになり、カーネル空間とユーザ空間の間でメモリコピーが発生しなくなる。SQLiteの実装では特にread(8)の段階で発生していたカーネル空間からユーザ空間へのメモリコピーが不要になり、この分だけ高速化する。

mmap(8)を使うとメモリ上の操作がダイレクトにディスク上のファイルに反映されるため、プログラムにバグがあったりバッファオーバーフローなどが発生した場合に、データベースファイルの中身が壊れる可能性がある。このためデフォルトでは機能は無効になっている。

SQLiteは組み込んで扱うのに便利なライセンスになっており、さまざまなアプリケーションに組み込まれて活用されている。SQLiteを採用しているアプリケーションは今後のアップデートでSQLite 3.7.17のメモリマップI/Oを活用する可能性があり、性能の向上が期待される。