Neo4j Performance Tuning Tips by Graphable

Neo4j のパフォーマンスに関する内部実装の理解と、それを踏まえた上でパフォーマンスを向上させるための工夫について書かれた記事が Graphable より公開されました。

ハイレベルな内容に留まりながら非常に明快な説明をしている良い記事ですので、本ブログでも紹介することにしました。

"Neo4j Performance Architecture Explained & 6 Tuning Tips"

本記事を読むと、Graph Native なグラフデータベースとはどういう意味なのか、Neo4j の 3 種類のインデックスタイプがどう機能しているのか、どのようにディスクとメモリが活用されているのかについて概要を理解することができます。

同じく Index-Free Adjacency につても紹介されています。こちらは、本ブログのこちらの記事 でも別の切り口から説明しています。

6 Tuning Tips

また、本記事で紹介されている以下 6 つの工夫については、基本的なものも含みますが、ぜひ頭に入れておくと良いでしょう。

  1. EXPLAIN/PROFILE を利用したクエリの実行計画の分析
    • RDBMS でも当たり前に行われるパフォーマンスチューニングの一つ
  2. Neo4j 4.3 で導入された Token Lookup Indexes の利用
    • デフォルトで作成されているため、消さずにそのままの利用を推奨
  3. NFS/NAS ではなく EXT4/XFS のファイルシステムの利用
    • 大量の Disk I/O の発生が前提であるため、ネットワーク上をやり取りするファイルシステムは避けるべき
  4. Disk Contention を防ぐため、データ自体とトランザクションログの保存先を分ける
    • データ自体は dbms.directories.data、トランザクションログは dbms.directories.transaction.logs.root で設定変更可能。詳細はドキュメントを参考のこと
  5. Neo4j は Java アプリケーションなので、JVM のチューニングも行う
    • neo4j.confdbms.memory.heap.{initiali_size,max_size} で変更可能
  6. ディスク上のデータをキャッシュするためにメモリも多用するため、正しい想定メモリ利用量を計算する
    • Total Physical Memory = Heap + Page Cache + OS Memory
2021-10-15