<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <h2 id="performance--optimization" class="position-relative d-flex align-items-center group"> <span>Performance &amp;amp; Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance--optimization" aria-haspopup="dialog" aria-label="Share link: Performance &amp;amp; Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>The <strong>Performance &amp; Optimization</strong> category provides comprehensive guidance for maximizing Geode&rsquo;s performance across all workloads. From query optimization and index design through system tuning and capacity planning, these resources help achieve optimal throughput and latency whether you&rsquo;re running analytical queries, real-time transactions, or mixed workloads at scale.</p> <h3 id="overview" class="position-relative d-flex align-items-center group"> <span>Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="overview" aria-haspopup="dialog" aria-label="Share link: Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Database performance optimization requires understanding query patterns, data characteristics, system architecture, and operational requirements. Geode provides extensive tooling for performance analysis and optimization: EXPLAIN visualizes query execution plans before execution; PROFILE measures actual execution time and resource usage; metrics expose system-level bottlenecks; and tracing reveals complete query lifecycles. Combined with proper indexing, query optimization, and system tuning, these tools enable achieving exceptional performance.</p> <p>This category covers performance optimization at all levels: <strong>query-level</strong> optimization through better GQL patterns and index usage; <strong>system-level</strong> tuning through configuration and resource allocation; <strong>operational</strong> optimization through monitoring and capacity planning. Whether optimizing a single slow query or scaling to higher throughput, these resources provide actionable guidance grounded in production experience.</p> <h3 id="performance-fundamentals" class="position-relative d-flex align-items-center group"> <span>Performance Fundamentals</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-fundamentals" aria-haspopup="dialog" aria-label="Share link: Performance Fundamentals"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="performance-dimensions" class="position-relative d-flex align-items-center group"> <span>Performance Dimensions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-dimensions" aria-haspopup="dialog" aria-label="Share link: Performance Dimensions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Throughput</strong>: Queries processed per second (QPS). Critical for high-volume applications. Geode throughput varies by workload and configuration.</p> <p><strong>Latency</strong>: Time to execute individual queries. Measured at p50 (median), p95, and p99 percentiles. Critical for user-facing applications requiring consistent response times.</p> <p><strong>Concurrency</strong>: Number of simultaneous queries. Geode&rsquo;s MVCC architecture enables high read concurrency without locks.</p> <p><strong>Resource Efficiency</strong>: CPU, memory, I/O, and network utilization per query. Optimized queries minimize resource usage.</p> <p><strong>Scalability</strong>: Performance characteristics as data grows. Proper indexing ensures logarithmic rather than linear query time growth.</p> <h4 id="performance-trade-offs" class="position-relative d-flex align-items-center group"> <span>Performance Trade-offs</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-trade-offs" aria-haspopup="dialog" aria-label="Share link: Performance Trade-offs"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Indexing vs Write Performance</strong>: Indexes accelerate reads but add write overhead. Balance index count with write requirements.</p> <p><strong>Caching vs Memory</strong>: Larger caches improve performance but consume memory. Size caches based on working set and available RAM.</p> <p><strong>Consistency vs Performance</strong>: Stronger consistency guarantees reduce concurrency. Choose appropriate isolation levels.</p> <p><strong>Normalization vs Denormalization</strong>: Normalized schemas reduce redundancy; denormalized schemas improve read performance. Denormalize strategically.</p> <p><strong>Batch Size vs Latency</strong>: Larger batches improve throughput but increase individual request latency. Tune batch sizes for workload.</p> <h3 id="performance-documentation" class="position-relative d-flex align-items-center group"> <span>Performance Documentation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-documentation" aria-haspopup="dialog" aria-label="Share link: Performance Documentation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="core-performance-guides" class="position-relative d-flex align-items-center group"> <span>Core Performance Guides</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="core-performance-guides" aria-haspopup="dialog" aria-label="Share link: Core Performance Guides"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong><a href="/docs/performance/" >Performance Documentation Index</a> </strong> Entry point for all performance-related documentation including tuning, benchmarking, and capacity planning.</p> <p><strong><a href="/docs/query/performance-tuning/" >Performance Tuning Guide</a> </strong> Comprehensive query-level performance optimization covering pattern design, index usage, filtering strategies, and execution plan analysis.</p> <p><strong><a href="/docs/query/indexing-and-optimization/" >Indexing and Optimization</a> </strong> Complete guide to index design, index types (B+tree, HNSW, BM25), index selection strategies, and index maintenance for optimal query performance.</p> <p><strong><a href="/docs/query/explain-profile/" >EXPLAIN and PROFILE</a> </strong> Essential tools for query optimization. Learn to interpret execution plans, identify bottlenecks, and validate optimization strategies.</p> <p><strong><a href="/docs/guides/performance-benchmarking/" >Performance Benchmarking Guide</a> </strong> Methodologies for benchmarking Geode performance including workload design, metric collection, result analysis, and comparison techniques.</p> <p><strong><a href="/docs/architecture/performance-and-scaling/" >Architecture: Performance and Scaling</a> </strong> System-level performance architecture including query engine optimization, storage layer tuning, and distributed scaling patterns.</p> <h4 id="advanced-performance-topics" class="position-relative d-flex align-items-center group"> <span>Advanced Performance Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="advanced-performance-topics" aria-haspopup="dialog" aria-label="Share link: Advanced Performance Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong><a href="/docs/query/full-text-search/" >Full-Text Search Performance</a> </strong> Optimizing BM25 full-text search queries including index tuning, query optimization, and hybrid graph+text search patterns.</p> <p><strong><a href="/docs/query/materialized-views/" >Materialized Views</a> </strong> Pre-computing expensive aggregations and complex queries for dramatic read performance improvements. Refresh strategies and maintenance.</p> <p><strong><a href="/docs/architecture/query-execution/" >Query Execution Architecture</a> </strong> Deep dive into query execution including operator pipeline, join strategies, memory management, and parallelization.</p> <p><strong><a href="/docs/architecture/distributed-architecture/" >Distributed Architecture Performance</a> </strong> Performance characteristics of distributed deployments including sharding, replication, and cross-shard query optimization.</p> <h3 id="query-optimization" class="position-relative d-flex align-items-center group"> <span>Query Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-optimization" aria-haspopup="dialog" aria-label="Share link: Query Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="index-driven-optimization" class="position-relative d-flex align-items-center group"> <span>Index-Driven Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-driven-optimization" aria-haspopup="dialog" aria-label="Share link: Index-Driven Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Create Strategic Indexes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">person_email</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Relationship</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span><span class="nc">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">knows_relationship</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">:</span><span class="nc">KNOWS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Composite</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">person_city_age</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">city</span><span class="p">,</span><span class="w"> </span><span class="py">age</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Full</span><span class="err">-</span><span class="py">text</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">FULLTEXT</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">person_bio</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">bio</span><span class="p">)</span><span class="w"> </span><span class="py">USING</span><span class="w"> </span><span class="py">BM25</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Vector</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">VECTOR</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">product_embedding</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Product</span><span class="p">(</span><span class="py">embedding</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">USING</span><span class="w"> </span><span class="py">HNSW</span><span class="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="p">{</span><span class="py">dimensions</span><span class="p">:</span><span class="w"> </span><span class="nc">768</span><span class="p">,</span><span class="w"> </span><span class="py">metric</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">cosine</span><span class="err">&#39;</span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div><p><strong>Index Selection</strong>: Geode&rsquo;s optimizer chooses indexes based on:</p> <ul> <li>Selectivity (fraction of data matched)</li> <li>Cardinality estimates (rows expected)</li> <li>Index type (hash, B+tree, HNSW, BM25)</li> <li>Query pattern (equality, range, text, vector)</li> </ul> <p><strong>Verify Index Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">EXPLAIN</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nv">$email</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">p</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Look</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="s">&#34;Index Seek&#34;</span><span class="w"> </span><span class="py">operator</span><span class="p">,</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="s">&#34;Node Scan&#34;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="query-pattern-optimization" class="position-relative d-flex align-items-center group"> <span>Query Pattern Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-pattern-optimization" aria-haspopup="dialog" aria-label="Share link: Query Pattern Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Anchor Patterns</strong>: Start with most selective predicates:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Anchor</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">unique</span><span class="w"> </span><span class="py">index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$userId</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="nc">friend</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">Unanchored</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="w"> </span></span></span></code></pre></div><p><strong>Filter Pushdown</strong>: Apply filters early:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Filter</span><span class="w"> </span><span class="py">before</span><span class="w"> </span><span class="py">traversal</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">Filter</span><span class="w"> </span><span class="py">after</span><span class="w"> </span><span class="py">traversal</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="w"> </span></span></span></code></pre></div><p><strong>Limit Results</strong>: Bound open-ended queries:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Always</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">LIMIT</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">exploratory</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.5</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span></code></pre></div><p><strong>Avoid Cartesian Products</strong>: Connect all patterns:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Connected</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">Person</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">f</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">WORKS_AT</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Company</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">Cartesian</span><span class="w"> </span><span class="py">product</span><span class="w"> </span><span class="p">(</span><span class="py">missing</span><span class="w"> </span><span class="py">connection</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Company</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="w"> </span></span></span></code></pre></div> <h4 id="aggregation-optimization" class="position-relative d-flex align-items-center group"> <span>Aggregation Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="aggregation-optimization" aria-haspopup="dialog" aria-label="Share link: Aggregation Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Pre-aggregate with Materialized Views</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">materialized</span><span class="w"> </span><span class="py">view</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">expensive</span><span class="w"> </span><span class="py">aggregation</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">MATERIALIZED</span><span class="w"> </span><span class="py">VIEW</span><span class="w"> </span><span class="py">company_stats</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Company</span><span class="p">)</span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">WORKS_AT</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">employees</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REFRESH</span><span class="w"> </span><span class="py">EVERY</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">HOUR</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">materialized</span><span class="w"> </span><span class="py">view</span><span class="w"> </span><span class="p">(</span><span class="py">fast</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">c</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">company_stats</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">employees</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">employees</span><span class="w"> </span></span></span></code></pre></div><p><strong>Optimize GROUP BY</strong>: Let optimizer choose aggregation strategy:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Optimizer</span><span class="w"> </span><span class="py">chooses</span><span class="w"> </span><span class="py">hash</span><span class="w"> </span><span class="py">or</span><span class="w"> </span><span class="py">sort</span><span class="w"> </span><span class="py">aggregation</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">WORKS_AT</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Company</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">employees</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">employees</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span></code></pre></div> <h4 id="subquery-optimization" class="position-relative d-flex align-items-center group"> <span>Subquery Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="subquery-optimization" aria-haspopup="dialog" aria-label="Share link: Subquery Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Use EXISTS for filtering</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">EXISTS</span><span class="w"> </span><span class="py">subquery</span><span class="w"> </span><span class="p">(</span><span class="py">short</span><span class="err">-</span><span class="py">circuits</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">city</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">NYC</span><span class="err">&#39;</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">Count</span><span class="w"> </span><span class="py">subquery</span><span class="w"> </span><span class="p">(</span><span class="py">evaluates</span><span class="w"> </span><span class="py">all</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="p">(</span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">city</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">NYC</span><span class="err">&#39;</span><span class="p">})</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">))</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="w"> </span></span></span></code></pre></div><p><strong>Correlated subqueries</strong>: Optimizer pushes down correlated predicates when possible.</p> <h3 id="system-level-optimization" class="position-relative d-flex align-items-center group"> <span>System-Level Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="system-level-optimization" aria-haspopup="dialog" aria-label="Share link: System-Level Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="configuration-tuning" class="position-relative d-flex align-items-center group"> <span>Configuration Tuning</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="configuration-tuning" aria-haspopup="dialog" aria-label="Share link: Configuration Tuning"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Memory Settings</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">memory</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">buffer_pool_size</span> <span class="p">=</span> <span class="s2">&#34;8GB&#34;</span> <span class="c"># Buffer pool for data pages</span> </span></span><span class="line"><span class="cl"><span class="nx">query_cache_size</span> <span class="p">=</span> <span class="s2">&#34;2GB&#34;</span> <span class="c"># Query result cache</span> </span></span><span class="line"><span class="cl"><span class="nx">index_cache_size</span> <span class="p">=</span> <span class="s2">&#34;4GB&#34;</span> <span class="c"># Index page cache</span> </span></span></code></pre></div><p><strong>Query Engine</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">query</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">max_query_time</span> <span class="p">=</span> <span class="s2">&#34;30s&#34;</span> <span class="c"># Query timeout</span> </span></span><span class="line"><span class="cl"><span class="nx">parallel_workers</span> <span class="p">=</span> <span class="mi">8</span> <span class="c"># Parallel query workers</span> </span></span><span class="line"><span class="cl"><span class="nx">batch_size</span> <span class="p">=</span> <span class="mi">10000</span> <span class="c"># Batch operation size</span> </span></span><span class="line"><span class="cl"><span class="nx">enable_query_cache</span> <span class="p">=</span> <span class="kc">true</span> <span class="c"># Cache query results</span> </span></span></code></pre></div><p><strong>Storage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">storage</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">wal_buffer_size</span> <span class="p">=</span> <span class="s2">&#34;64MB&#34;</span> <span class="c"># WAL buffer</span> </span></span><span class="line"><span class="cl"><span class="nx">checkpoint_interval</span> <span class="p">=</span> <span class="s2">&#34;5min&#34;</span> <span class="c"># Checkpoint frequency</span> </span></span><span class="line"><span class="cl"><span class="nx">compression</span> <span class="p">=</span> <span class="s2">&#34;lz4&#34;</span> <span class="c"># Data compression</span> </span></span></code></pre></div><p><strong>Network</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">network</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">max_connections</span> <span class="p">=</span> <span class="mi">1000</span> <span class="c"># Connection pool size</span> </span></span><span class="line"><span class="cl"><span class="nx">connection_timeout</span> <span class="p">=</span> <span class="s2">&#34;30s&#34;</span> <span class="c"># Connection timeout</span> </span></span><span class="line"><span class="cl"><span class="nx">keepalive_interval</span> <span class="p">=</span> <span class="s2">&#34;60s&#34;</span> <span class="c"># Keepalive interval</span> </span></span></code></pre></div> <h4 id="resource-allocation" class="position-relative d-flex align-items-center group"> <span>Resource Allocation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="resource-allocation" aria-haspopup="dialog" aria-label="Share link: Resource Allocation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>CPU</strong>: Geode scales linearly with cores for parallel queries. Allocate sufficient CPU for query workers and background tasks.</p> <p><strong>Memory</strong>: Size buffer pool to working set. Monitor cache hit rates; &gt;95% indicates sufficient memory.</p> <p><strong>Storage</strong>: Use SSDs for optimal I/O. NVME provides best latency. RAID 10 for redundancy and performance.</p> <p><strong>Network</strong>: QUIC protocol requires UDP; ensure firewall allows port 3141. Low-latency networks critical for distributed deployments.</p> <h4 id="monitoring-and-metrics" class="position-relative d-flex align-items-center group"> <span>Monitoring and Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitoring-and-metrics" aria-haspopup="dialog" aria-label="Share link: Monitoring and Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Query Metrics</strong>:</p> <ul> <li>Execution time (p50, p95, p99)</li> <li>Throughput (queries per second)</li> <li>Queue depth (waiting queries)</li> <li>Error rate</li> </ul> <p><strong>System Metrics</strong>:</p> <ul> <li>CPU utilization</li> <li>Memory usage and cache hit rates</li> <li>Disk I/O (read/write IOPS, throughput)</li> <li>Network bandwidth</li> </ul> <p><strong>Database Metrics</strong>:</p> <ul> <li>Transaction rate</li> <li>Lock contention</li> <li>WAL write rate</li> <li>Checkpoint duration</li> </ul> <p><strong>Alerting</strong>: Set alerts for:</p> <ul> <li>Query latency p99 &gt; threshold</li> <li>Cache hit rate &lt; 95%</li> <li>Disk queue depth &gt; threshold</li> <li>Error rate &gt; baseline</li> </ul> <h3 id="performance-analysis-tools" class="position-relative d-flex align-items-center group"> <span>Performance Analysis Tools</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-analysis-tools" aria-haspopup="dialog" aria-label="Share link: Performance Analysis Tools"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="explain" class="position-relative d-flex align-items-center group"> <span>EXPLAIN</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="explain" aria-haspopup="dialog" aria-label="Share link: EXPLAIN"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Visualize execution plan before running query:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">EXPLAIN</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">SF</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">email</span><span class="w"> </span></span></span></code></pre></div><p><strong>Key information</strong>:</p> <ul> <li><strong>Operators</strong>: Scan, Seek, Join, Filter, Aggregate</li> <li><strong>Index usage</strong>: Which indexes are used</li> <li><strong>Cardinality estimates</strong>: Expected rows at each stage</li> <li><strong>Join strategy</strong>: Hash join, nested loop, merge join</li> <li><strong>Filter placement</strong>: Where predicates are evaluated</li> </ul> <p><strong>Reading plans</strong>:</p> <ul> <li>Top-down execution flow</li> <li>Indentation shows operator nesting</li> <li>Row estimates guide optimization</li> <li>Look for &ldquo;Index Seek&rdquo; not &ldquo;Node Scan&rdquo;</li> </ul> <h4 id="profile" class="position-relative d-flex align-items-center group"> <span>PROFILE</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="profile" aria-haspopup="dialog" aria-label="Share link: PROFILE"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Measure actual execution performance:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">PROFILE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">30</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">SF</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">email</span><span class="w"> </span></span></span></code></pre></div><p><strong>Metrics provided</strong>:</p> <ul> <li>Execution time per operator</li> <li>Actual rows processed (vs estimated)</li> <li>Cache hit rates</li> <li>Memory usage</li> <li>I/O operations</li> </ul> <p><strong>Optimization workflow</strong>:</p> <ol> <li>PROFILE query to find bottleneck</li> <li>Check index usage in slow operators</li> <li>Create or modify indexes</li> <li>PROFILE again to verify improvement</li> <li>Iterate until acceptable performance</li> </ol> <h4 id="query-log-analysis" class="position-relative d-flex align-items-center group"> <span>Query Log Analysis</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-log-analysis" aria-haspopup="dialog" aria-label="Share link: Query Log Analysis"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Enable slow query logging:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">logging</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">log_slow_queries</span> <span class="p">=</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="nx">slow_query_threshold</span> <span class="p">=</span> <span class="s2">&#34;1s&#34;</span> </span></span></code></pre></div><p>Analyze logs for patterns:</p> <ul> <li>Common slow queries</li> <li>Missing indexes</li> <li>Cartesian products</li> <li>Large result sets</li> </ul> <h3 id="performance-best-practices" class="position-relative d-flex align-items-center group"> <span>Performance Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-best-practices" aria-haspopup="dialog" aria-label="Share link: Performance Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="indexing-strategy" class="position-relative d-flex align-items-center group"> <span>Indexing Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="indexing-strategy" aria-haspopup="dialog" aria-label="Share link: Indexing Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Index high-selectivity predicates</strong>: Properties that filter to small result sets</li> <li><strong>Index foreign keys</strong>: Properties used in joins (relationship endpoints)</li> <li><strong>Composite indexes</strong>: For multi-column predicates in WHERE</li> <li><strong>Cover queries</strong>: Include RETURN columns in index for index-only scans</li> <li><strong>Monitor index usage</strong>: Drop unused indexes to reduce write overhead</li> </ol> <h4 id="query-design" class="position-relative d-flex align-items-center group"> <span>Query Design</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-design" aria-haspopup="dialog" aria-label="Share link: Query Design"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Start selective</strong>: Begin patterns with most selective predicates</li> <li><strong>Filter early</strong>: Apply WHERE immediately after MATCH</li> <li><strong>Limit results</strong>: Use LIMIT to bound open-ended queries</li> <li><strong>Parameterize</strong>: Use parameters for plan caching and security</li> <li><strong>Batch operations</strong>: Group inserts/updates for better throughput</li> </ol> <h4 id="schema-design" class="position-relative d-flex align-items-center group"> <span>Schema Design</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="schema-design" aria-haspopup="dialog" aria-label="Share link: Schema Design"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Denormalize strategically</strong>: Duplicate data when read patterns justify it</li> <li><strong>Use appropriate types</strong>: Smaller types reduce storage and I/O</li> <li><strong>Partition large properties</strong>: Store large blobs separately</li> <li><strong>Model relationships explicitly</strong>: Use relationship types, not property arrays</li> <li><strong>Consider cardinality</strong>: High-cardinality relationships may need optimization</li> </ol> <h4 id="operational-practices" class="position-relative d-flex align-items-center group"> <span>Operational Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="operational-practices" aria-haspopup="dialog" aria-label="Share link: Operational Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Monitor continuously</strong>: Track metrics, set alerts</li> <li><strong>Benchmark regularly</strong>: Validate performance after changes</li> <li><strong>Update statistics</strong>: Keep cardinality estimates accurate</li> <li><strong>Vacuum regularly</strong>: Reclaim space from deleted data</li> <li><strong>Plan capacity</strong>: Provision for peak load with headroom</li> </ol> <h3 id="performance-patterns-by-workload" class="position-relative d-flex align-items-center group"> <span>Performance Patterns by Workload</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-patterns-by-workload" aria-haspopup="dialog" aria-label="Share link: Performance Patterns by Workload"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="oltp-transactional" class="position-relative d-flex align-items-center group"> <span>OLTP (Transactional)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="oltp-transactional" aria-haspopup="dialog" aria-label="Share link: OLTP (Transactional)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Characteristics</strong>: High concurrency, low latency, point queries</p> <p><strong>Optimization</strong>:</p> <ul> <li>Index all lookup keys</li> <li>Use prepared statements</li> <li>Enable connection pooling</li> <li>Tune for low latency (p99 &lt; 10ms)</li> <li>Monitor lock contention</li> </ul> <p><strong>Example query</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">profile</span><span class="w"> </span><span class="py">lookup</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$userId</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">settings</span><span class="w"> </span></span></span></code></pre></div> <h4 id="olap-analytical" class="position-relative d-flex align-items-center group"> <span>OLAP (Analytical)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="olap-analytical" aria-haspopup="dialog" aria-label="Share link: OLAP (Analytical)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Characteristics</strong>: Complex queries, large scans, aggregations</p> <p><strong>Optimization</strong>:</p> <ul> <li>Create materialized views</li> <li>Use columnar storage for analytics</li> <li>Batch large operations</li> <li>Tune for throughput (QPS)</li> <li>Enable query parallelization</li> </ul> <p><strong>Example query</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Daily</span><span class="w"> </span><span class="py">active</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">region</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LOGGED_IN</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">event</span><span class="p">:</span><span class="nc">LoginEvent</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">event</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">({</span><span class="py">days</span><span class="p">:</span><span class="w"> </span><span class="nc">1</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">u</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">region</span><span class="p">,</span><span class="w"> </span><span class="py">users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span></code></pre></div> <h4 id="mixed-workload" class="position-relative d-flex align-items-center group"> <span>Mixed Workload</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="mixed-workload" aria-haspopup="dialog" aria-label="Share link: Mixed Workload"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Characteristics</strong>: Combination of OLTP and OLAP</p> <p><strong>Optimization</strong>:</p> <ul> <li>Separate read replicas for analytics</li> <li>Use materialized views to offload aggregations</li> <li>Prioritize OLTP queries</li> <li>Schedule heavy analytics off-peak</li> <li>Monitor resource contention</li> </ul> <h3 id="scaling-strategies" class="position-relative d-flex align-items-center group"> <span>Scaling Strategies</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="scaling-strategies" aria-haspopup="dialog" aria-label="Share link: Scaling Strategies"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="vertical-scaling" class="position-relative d-flex align-items-center group"> <span>Vertical Scaling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vertical-scaling" aria-haspopup="dialog" aria-label="Share link: Vertical Scaling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Increase resources on single node</strong>:</p> <ul> <li>More CPU cores (parallel query execution)</li> <li>More RAM (larger caches, less I/O)</li> <li>Faster storage (NVME, more IOPS)</li> <li>Faster network (10GbE+)</li> </ul> <p><strong>Limits</strong>: Single-machine limits (cores, RAM, I/O bandwidth)</p> <h4 id="horizontal-scaling" class="position-relative d-flex align-items-center group"> <span>Horizontal Scaling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="horizontal-scaling" aria-haspopup="dialog" aria-label="Share link: Horizontal Scaling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Distribute across nodes</strong>:</p> <ul> <li><strong>Sharding</strong>: Partition graph by node/edge ownership</li> <li><strong>Replication</strong>: Read replicas for read scaling</li> <li><strong>Caching</strong>: Application-level caching layer</li> </ul> <p><strong>Trade-offs</strong>: Distributed query complexity, cross-shard joins, consistency</p> <h4 id="hybrid-scaling" class="position-relative d-flex align-items-center group"> <span>Hybrid Scaling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="hybrid-scaling" aria-haspopup="dialog" aria-label="Share link: Hybrid Scaling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Combine vertical and horizontal</strong>:</p> <ul> <li>Shard data across powerful nodes</li> <li>Replicate hot shards</li> <li>Cache at application layer</li> <li>Use materialized views on replicas</li> </ul> <h3 id="benchmarking" class="position-relative d-flex align-items-center group"> <span>Benchmarking</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="benchmarking" aria-haspopup="dialog" aria-label="Share link: Benchmarking"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="workload-design" class="position-relative d-flex align-items-center group"> <span>Workload Design</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="workload-design" aria-haspopup="dialog" aria-label="Share link: Workload Design"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Representative queries</strong>: Match production patterns</li> <li><strong>Realistic data</strong>: Similar size and distribution</li> <li><strong>Concurrent load</strong>: Simulate actual concurrency</li> <li><strong>Sustained duration</strong>: Run long enough for steady state</li> <li><strong>Varied operations</strong>: Mix of reads, writes, updates</li> </ol> <h4 id="metrics-collection" class="position-relative d-flex align-items-center group"> <span>Metrics Collection</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="metrics-collection" aria-haspopup="dialog" aria-label="Share link: Metrics Collection"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Throughput</strong>: Queries per second (QPS) <strong>Latency</strong>: p50, p95, p99, p999 <strong>Resource usage</strong>: CPU, memory, I/O, network <strong>Error rate</strong>: Failed queries per second <strong>Scalability</strong>: Performance vs data size/concurrency</p> <h4 id="analysis" class="position-relative d-flex align-items-center group"> <span>Analysis</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="analysis" aria-haspopup="dialog" aria-label="Share link: Analysis"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li>Compare before/after optimization</li> <li>Identify regressions</li> <li>Validate scalability claims</li> <li>Find bottlenecks</li> <li>Establish baselines</li> </ul> <h3 id="performance-troubleshooting" class="position-relative d-flex align-items-center group"> <span>Performance Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-troubleshooting" aria-haspopup="dialog" aria-label="Share link: Performance Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="slow-query-diagnosis" class="position-relative d-flex align-items-center group"> <span>Slow Query Diagnosis</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="slow-query-diagnosis" aria-haspopup="dialog" aria-label="Share link: Slow Query Diagnosis"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>PROFILE query</strong>: Identify slow operators</li> <li><strong>Check indexes</strong>: Verify index usage in plan</li> <li><strong>Examine estimates</strong>: Large estimate errors indicate stale statistics</li> <li><strong>Review pattern</strong>: Look for Cartesian products, missing filters</li> <li><strong>Test alternatives</strong>: Try different query formulations</li> </ol> <h4 id="high-latency" class="position-relative d-flex align-items-center group"> <span>High Latency</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="high-latency" aria-haspopup="dialog" aria-label="Share link: High Latency"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Symptoms</strong>: Consistently high p95/p99 latency</p> <p><strong>Causes</strong>:</p> <ul> <li>Missing indexes (full scans)</li> <li>Lock contention (high concurrency)</li> <li>Large result sets (missing LIMIT)</li> <li>Cold caches (insufficient RAM)</li> <li>Slow storage (I/O bottleneck)</li> </ul> <p><strong>Solutions</strong>:</p> <ul> <li>Create indexes</li> <li>Reduce transaction scope</li> <li>Add LIMIT clauses</li> <li>Increase memory</li> <li>Upgrade storage</li> </ul> <h4 id="low-throughput" class="position-relative d-flex align-items-center group"> <span>Low Throughput</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="low-throughput" aria-haspopup="dialog" aria-label="Share link: Low Throughput"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Symptoms</strong>: Low queries per second despite low latency</p> <p><strong>Causes</strong>:</p> <ul> <li>Insufficient concurrency</li> <li>Connection pool too small</li> <li>CPU bottleneck</li> <li>Lock contention</li> <li>Network saturation</li> </ul> <p><strong>Solutions</strong>:</p> <ul> <li>Increase connection pool</li> <li>Add CPU cores</li> <li>Reduce lock scope</li> <li>Optimize network</li> <li>Use read replicas</li> </ul> <h3 id="related-documentation" class="position-relative d-flex align-items-center group"> <span>Related Documentation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-documentation" aria-haspopup="dialog" aria-label="Share link: Related Documentation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="query-optimization-1" class="position-relative d-flex align-items-center group"> <span>Query Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-optimization-1" aria-haspopup="dialog" aria-label="Share link: Query Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong><a href="/categories/query/" >Query Language</a> </strong> - Query writing and patterns</li> <li><strong><a href="/docs/gql/guide/" >GQL Guide</a> </strong> - GQL language guide</li> <li><strong><a href="/docs/query/indexing-and-optimization/" >Indexing and Optimization</a> </strong> - Index strategies</li> <li><strong><a href="/docs/query/explain-profile/" >EXPLAIN/PROFILE</a> </strong> - Query analysis</li> </ul> <h4 id="system-architecture" class="position-relative d-flex align-items-center group"> <span>System Architecture</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="system-architecture" aria-haspopup="dialog" aria-label="Share link: System Architecture"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong><a href="/categories/architecture/" >Architecture</a> </strong> - System architecture</li> <li><strong><a href="/docs/architecture/query-execution/" >Query Execution</a> </strong> - Execution internals</li> <li><strong><a href="/docs/architecture/performance-and-scaling/" >Performance and Scaling</a> </strong> - Scaling architecture</li> <li><strong><a href="/docs/architecture/distributed-architecture/" >Distributed Architecture</a> </strong> - Distributed patterns</li> </ul> <h4 id="operations" class="position-relative d-flex align-items-center group"> <span>Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="operations" aria-haspopup="dialog" aria-label="Share link: Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong><a href="/categories/operations/" >Operations</a> </strong> - Production operations</li> <li><strong><a href="/categories/configuration/" >Configuration</a> </strong> - System configuration</li> <li><strong><a href="/categories/deployment-and-devops/" >Deployment</a> </strong> - Deployment patterns</li> <li><strong><a href="/categories/best-practices/" >Best Practices</a> </strong> - Production patterns</li> </ul> <h3 id="related-tags" class="position-relative d-flex align-items-center group"> <span>Related Tags</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-tags" aria-haspopup="dialog" aria-label="Share link: Related Tags"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong><a href="/tags/query-optimization/" >Query Optimization</a> </strong> - Query tuning</li> <li><strong><a href="/tags/indexing/" >Indexing</a> </strong> - Index strategies</li> <li><strong><a href="/tags/profiling/" >Profiling</a> </strong> - Performance profiling</li> <li><strong><a href="/tags/explain/" >EXPLAIN</a> </strong> - Query plans</li> <li><strong><a href="/tags/benchmarking/" >Benchmarking</a> </strong> - Performance testing</li> <li><strong><a href="/tags/optimization/" >Optimization</a> </strong> - General optimization</li> <li><strong><a href="/tags/scalability/" >Scalability</a> </strong> - Scaling patterns</li> </ul> <h3 id="performance-resources" class="position-relative d-flex align-items-center group"> <span>Performance Resources</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-resources" aria-haspopup="dialog" aria-label="Share link: Performance Resources"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="tools" class="position-relative d-flex align-items-center group"> <span>Tools</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="tools" aria-haspopup="dialog" aria-label="Share link: Tools"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>EXPLAIN</strong>: Query plan visualization</li> <li><strong>PROFILE</strong>: Performance measurement</li> <li><strong>Metrics API</strong>: System metrics</li> <li><strong>Query Log</strong>: Slow query analysis</li> <li><strong>Benchmark Suite</strong>: Standard workloads</li> </ul> <h4 id="guides" class="position-relative d-flex align-items-center group"> <span>Guides</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="guides" aria-haspopup="dialog" aria-label="Share link: Guides"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong><a href="/docs/query/performance-tuning/" >Performance Tuning</a> </strong> - Comprehensive tuning</li> <li><strong><a href="/docs/guides/performance-benchmarking/" >Benchmarking</a> </strong> - Benchmark methodology</li> <li><strong><a href="/docs/query/indexing-and-optimization/" >Indexing</a> </strong> - Index design</li> </ul> <h3 id="next-steps" class="position-relative d-flex align-items-center group"> <span>Next Steps</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="next-steps" aria-haspopup="dialog" aria-label="Share link: Next Steps"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p><strong>Slow queries?</strong> Use <a href="/docs/query/explain-profile/" >EXPLAIN/PROFILE</a> to diagnose bottlenecks.</p> <p><strong>Missing indexes?</strong> Review <a href="/docs/query/indexing-and-optimization/" >Indexing and Optimization</a> for index strategies.</p> <p><strong>System tuning?</strong> Check <a href="/docs/architecture/performance-and-scaling/" >Performance and Scaling</a> for configuration guidance.</p> <p><strong>Benchmarking?</strong> Follow <a href="/docs/guides/performance-benchmarking/" >Performance Benchmarking Guide</a> methodology.</p> <p><strong>Production optimization?</strong> See <a href="/categories/best-practices/" >Best Practices</a> for proven patterns.</p> <hr> <p><strong>Scalability</strong>: Distributed deployment with up to 32 shards <strong>Last Updated</strong>: January 2026 <strong>Geode Version</strong>: <strong>v0.2.18</strong>+</p>

Related Articles