<!-- 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; 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; 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 & Optimization</strong> category provides comprehensive guidance for maximizing Geode’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’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’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">'</span><span class="nc">cosine</span><span class="err">'</span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><strong>Index Selection</strong>: Geode’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">"Index Seek"</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">"Node Scan"</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">-></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">-></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">></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">></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">-></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">-></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">></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">-></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">-></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">-></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"><-</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">></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">-></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">-></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">'</span><span class="nc">NYC</span><span class="err">'</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">-></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">'</span><span class="nc">NYC</span><span class="err">'</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">></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">"8GB"</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">"2GB"</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">"4GB"</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">"30s"</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">"64MB"</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">"5min"</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">"lz4"</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">"30s"</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">"60s"</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; >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 > threshold</li>
<li>Cache hit rate < 95%</li>
<li>Disk queue depth > threshold</li>
<li>Error rate > 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">-></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">></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">'</span><span class="py">SF</span><span class="err">'</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 “Index Seek” not “Node Scan”</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">-></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">></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">'</span><span class="py">SF</span><span class="err">'</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">"1s"</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 < 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">-></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">></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
Guides
17 min
Constraints and Indexes Guide
Create and manage constraints and indexes for data integrity and query performance in Geode
Docs
14 min
Query Performance Tuning Guide
Complete guide to analyzing and optimizing Geode query performance using EXPLAIN, PROFILE, indexes, and the cost-based optimizer with BM25 …
Docs
9 min
Query Optimization
Optimize GQL queries for maximum performance with indexing strategies, query planning, and execution tuning
Guides
9 min
Query Performance Guide
Optimize your GQL queries for maximum performance in Geode
Guides
10 min
Index Strategy Guide
Design effective indexing strategies for optimal Geode query performance
Guides
12 min
Query Profiling Guide
Analyze and optimize GQL queries using EXPLAIN and PROFILE in Geode
Docs
9 min
Benchmarking
Comprehensive benchmarking guide for Geode including methodology, tools, workload types, and performance analysis
Docs
7 min
Query Optimization
Query performance tuning, indexing strategies, EXPLAIN/PROFILE analysis, and materialized views for Geode