Neo4j Performance Tuning Tips by Graphable

★★ intermediate

October 15, 2021

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

Recommended Posts

  1. ★★★ advanced
    neo4j-causal-clustering-introduced-routing
    本記事では、Neo4j における Causal Clustering (因果クラスタリング) について説明します。 クラスタリングの目的 データベースを運用する場合、単一のインスタンスを稼働させるか、Causal Clustering を用いてクラスター構成を組むか(クラスタリング)のいずれかを選択することになるでしょう。 Single Instance…
  2. ★★★ advanced
    neo4j-bolt-handshake-protocol-introduced
    Bolt Protocol において、サーバーとクライアントが接続を開始するためのプロトコルとして、Bolt Handshake Protocol Specification の仕様が策定されています。 本記事では、Bolt Handshake Protocol の概要について説明します。 Handshake Workflow…