<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Performance tuning involves systematically adjusting database configuration, resource allocation, and query patterns to achieve optimal throughput, latency, and resource utilization. For Geode, tuning encompasses server configuration, memory management, connection pooling, and query optimization specific to graph database workloads.</p>
<h3 id="understanding-performance-tuning" class="position-relative d-flex align-items-center group">
<span>Understanding Performance 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="understanding-performance-tuning"
aria-haspopup="dialog"
aria-label="Share link: Understanding Performance 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>
</h3><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>Performance tuning transforms baseline database performance into optimized production efficiency. Unlike profiling, which measures current performance, tuning actively modifies system parameters to improve metrics. Effective tuning requires understanding workload characteristics, system resources, and the interplay between configuration settings.</p>
<h4 id="tuning-philosophy" class="position-relative d-flex align-items-center group">
<span>Tuning Philosophy</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="tuning-philosophy"
aria-haspopup="dialog"
aria-label="Share link: Tuning Philosophy">
<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>Geode’s tuning approach follows evidence-based methodology. Rather than applying generic “best practices,” tuning decisions derive from actual workload measurements and profiling data. This ensures optimizations target real bottlenecks rather than theoretical concerns.</p>
<p>The tuning process is iterative: measure baseline performance, adjust one parameter, measure again, and compare results. This systematic approach isolates the impact of individual changes and builds understanding of system behavior.</p>
<h4 id="tuning-dimensions" class="position-relative d-flex align-items-center group">
<span>Tuning 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="tuning-dimensions"
aria-haspopup="dialog"
aria-label="Share link: Tuning 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>Performance tuning operates across several dimensions. Server configuration controls resource limits and operational behavior. Memory allocation affects query execution and caching efficiency. Connection management influences concurrency and overhead. Query optimization restructures data access patterns. Each dimension offers distinct tuning opportunities.</p>
<h3 id="server-configuration-tuning" class="position-relative d-flex align-items-center group">
<span>Server 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="server-configuration-tuning"
aria-haspopup="dialog"
aria-label="Share link: Server 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>
</h3><p>Server-level configuration establishes the foundation for performance.</p>
<h4 id="connection-limits" class="position-relative d-flex align-items-center group">
<span>Connection Limits</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="connection-limits"
aria-haspopup="dialog"
aria-label="Share link: Connection Limits">
<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>The maximum concurrent connection limit affects both resource consumption and request handling capacity:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode serve <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --max-connections <span class="m">1000</span>
</span></span></code></pre></div><p>Setting appropriate connection limits requires understanding workload patterns. Web applications with connection pooling need fewer connections per application instance than direct client connections. Too low limits reject legitimate requests; too high limits exhaust system resources.</p>
<p>Monitoring connection utilization helps right-size this parameter:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Monitor active connections</span>
</span></span><span class="line"><span class="cl">netstat -an <span class="p">|</span> grep <span class="m">3141</span> <span class="p">|</span> wc -l
</span></span></code></pre></div><p>If active connections regularly approach the limit, increase it. If they remain well below, consider reducing the limit to free resources.</p>
<h4 id="listen-address-configuration" class="position-relative d-flex align-items-center group">
<span>Listen Address Configuration</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="listen-address-configuration"
aria-haspopup="dialog"
aria-label="Share link: Listen Address Configuration">
<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>Binding to specific interfaces controls accessibility and security:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Development: listen on localhost only</span>
</span></span><span class="line"><span class="cl">geode serve --listen 127.0.0.1:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Production: listen on all interfaces</span>
</span></span><span class="line"><span class="cl">geode serve --listen 0.0.0.0:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Specific interface</span>
</span></span><span class="line"><span class="cl">geode serve --listen 10.0.1.50:3141
</span></span></code></pre></div><p>For production deployments behind load balancers, listening on all interfaces (0.0.0.0) ensures accessibility while firewall rules control external access.</p>
<h4 id="log-level-tuning" class="position-relative d-flex align-items-center group">
<span>Log Level 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="log-level-tuning"
aria-haspopup="dialog"
aria-label="Share link: Log Level 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>Log verbosity affects performance through I/O overhead:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Production: minimal logging</span>
</span></span><span class="line"><span class="cl">geode serve --log-level warn
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Development: detailed logging</span>
</span></span><span class="line"><span class="cl">geode serve --log-level debug
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Normal operations</span>
</span></span><span class="line"><span class="cl">geode serve --log-level info
</span></span></code></pre></div><p>Verbose logging (debug level) provides rich diagnostic information but consumes CPU cycles and disk I/O. Production systems typically use info or warn levels, enabling debug logging only during troubleshooting.</p>
<h3 id="memory-management-tuning" class="position-relative d-flex align-items-center group">
<span>Memory Management 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="memory-management-tuning"
aria-haspopup="dialog"
aria-label="Share link: Memory Management 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>
</h3><p>Memory allocation significantly impacts graph database performance, particularly for traversal operations and result sets.</p>
<h4 id="system-memory-configuration" class="position-relative d-flex align-items-center group">
<span>System Memory Configuration</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-memory-configuration"
aria-haspopup="dialog"
aria-label="Share link: System Memory Configuration">
<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>Operating system limits control maximum memory allocation:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Set memory limits (Linux)</span>
</span></span><span class="line"><span class="cl"><span class="nb">ulimit</span> -v <span class="m">8388608</span> <span class="c1"># 8GB virtual memory</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Verify current limits</span>
</span></span><span class="line"><span class="cl"><span class="nb">ulimit</span> -a
</span></span></code></pre></div><p>For containerized deployments, configure memory limits in container runtime:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Docker Compose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">8G</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">4G</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="query-memory-allocation" class="position-relative d-flex align-items-center group">
<span>Query Memory 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="query-memory-allocation"
aria-haspopup="dialog"
aria-label="Share link: Query Memory 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>Large queries may require substantial memory for intermediate results. Monitoring memory usage during profiling identifies memory-intensive operations:</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">Profile</span><span class="w"> </span><span class="py">memory</span><span class="w"> </span><span class="py">usage</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">PROFILE</span><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">.4</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">connected</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">count</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">connected</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>If queries consistently exhaust available memory, consider:</p>
<ol>
<li>Restructuring queries to reduce intermediate results</li>
<li>Adding filters earlier in query execution</li>
<li>Increasing system memory allocation</li>
<li>Implementing pagination for large result sets</li>
</ol>
<h4 id="connection-memory-overhead" class="position-relative d-flex align-items-center group">
<span>Connection Memory Overhead</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="connection-memory-overhead"
aria-haspopup="dialog"
aria-label="Share link: Connection Memory Overhead">
<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>Each connection consumes memory for buffers and state. The total memory overhead equals per-connection memory times maximum connections:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Total Memory = Base Memory + (Connection Memory × Max Connections)
</span></span></code></pre></div><p>For systems with limited memory, reducing max connections decreases memory pressure, though it may limit concurrency.</p>
<h3 id="connection-pool-tuning" class="position-relative d-flex align-items-center group">
<span>Connection Pool 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="connection-pool-tuning"
aria-haspopup="dialog"
aria-label="Share link: Connection Pool 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>
</h3><p>Client-side connection pooling dramatically affects performance and resource utilization.</p>
<h4 id="pool-size-configuration" class="position-relative d-flex align-items-center group">
<span>Pool Size Configuration</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="pool-size-configuration"
aria-haspopup="dialog"
aria-label="Share link: Pool Size Configuration">
<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>Optimal pool size balances connection overhead against concurrency:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client pool tuning
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">config</span> <span class="o">:=</span> <span class="o">&</span><span class="nx">geode</span><span class="p">.</span><span class="nx">Config</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Address</span><span class="p">:</span> <span class="s">"localhost:3141"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">MaxConnections</span><span class="p">:</span> <span class="mi">50</span><span class="p">,</span> <span class="c1">// Maximum pool size
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">MinConnections</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="c1">// Minimum pool size
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">MaxIdleTime</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span> <span class="c1">// Seconds before idle connection closes
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">ConnectionTimeout</span><span class="p">:</span> <span class="mi">30</span><span class="p">,</span> <span class="c1">// Connection establishment timeout
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><p>Too few connections create queuing delays when all connections are busy. Too many connections waste resources on idle connections and increase server load.</p>
<h4 id="pool-sizing-heuristics" class="position-relative d-flex align-items-center group">
<span>Pool Sizing Heuristics</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="pool-sizing-heuristics"
aria-haspopup="dialog"
aria-label="Share link: Pool Sizing Heuristics">
<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>Start with pool size equal to twice the number of CPU cores on the application server:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Initial Pool Size = 2 × CPU Cores
</span></span></code></pre></div><p>Monitor pool utilization and adjust:</p>
<ul>
<li>If all connections frequently busy: increase pool size</li>
<li>If many connections idle: decrease pool size</li>
<li>If connection wait time high: increase pool size</li>
</ul>
<h4 id="idle-connection-management" class="position-relative d-flex align-items-center group">
<span>Idle Connection Management</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="idle-connection-management"
aria-haspopup="dialog"
aria-label="Share link: Idle Connection Management">
<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>Idle connections consume resources without providing value. Configure idle timeouts to reclaim these resources:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python client pool configuration</span>
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">address</span><span class="o">=</span><span class="s2">"localhost:3141"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">max_pool_size</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">min_pool_size</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">max_idle_time</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="c1"># Close idle connections after 5 minutes</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>Setting appropriate idle timeouts balances connection reuse efficiency against resource waste.</p>
<h3 id="query-tuning" class="position-relative d-flex align-items-center group">
<span>Query 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="query-tuning"
aria-haspopup="dialog"
aria-label="Share link: Query 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>
</h3><p>Query optimization represents the most impactful tuning opportunity for most applications.</p>
<h4 id="index-based-tuning" class="position-relative d-flex align-items-center group">
<span>Index-Based 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="index-based-tuning"
aria-haspopup="dialog"
aria-label="Share link: Index-Based 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>Creating indexes on frequently filtered properties dramatically improves query 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="err">--</span><span class="w"> </span><span class="py">Before</span><span class="w"> </span><span class="py">indexing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">PROFILE</span><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="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</span><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">Result</span><span class="p">:</span><span class="w"> </span><span class="nc">145</span><span class="mf">.7</span><span class="py">ms</span><span class="w"> </span><span class="p">(</span><span class="py">full</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">15</span><span class="p">,</span><span class="py">420</span><span class="w"> </span><span class="py">rows</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">Create</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">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="err">;</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">After</span><span class="w"> </span><span class="py">indexing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">PROFILE</span><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="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</span><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">Result</span><span class="p">:</span><span class="w"> </span><span class="nc">2</span><span class="mf">.3</span><span class="py">ms</span><span class="w"> </span><span class="p">(</span><span class="py">index</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">row</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div><p>The 60x performance improvement demonstrates index value. Identify high-value indexing opportunities through profiling:</p>
<ol>
<li>Find queries with high execution time</li>
<li>Profile to identify full table scans</li>
<li>Create indexes on filtered properties</li>
<li>Re-profile to verify improvement</li>
</ol>
<h4 id="composite-index-tuning" class="position-relative d-flex align-items-center group">
<span>Composite Index 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="composite-index-tuning"
aria-haspopup="dialog"
aria-label="Share link: Composite Index 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>Queries filtering on multiple properties benefit from composite indexes:</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">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">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="err">;</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">Optimally</span><span class="w"> </span><span class="py">uses</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">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">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">San</span><span class="w"> </span><span class="py">Francisco</span><span class="err">'</span><span class="w"> </span><span class="py">AND</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">p</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Composite index column order matters. Place equality-filtered columns first, followed by range-filtered columns:</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">Optimal</span><span class="w"> </span><span class="py">order</span><span class="p">:</span><span class="w"> </span><span class="nc">equality</span><span class="w"> </span><span class="p">(</span><span class="py">city</span><span class="p">)</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">range</span><span class="w"> </span><span class="p">(</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 class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</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="err">;</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">Suboptimal</span><span class="w"> </span><span class="py">order</span><span class="p">:</span><span class="w"> </span><span class="nc">range</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">equality</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">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">age</span><span class="p">,</span><span class="w"> </span><span class="py">city</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Less</span><span class="w"> </span><span class="py">efficient</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">city</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">X</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">Y</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="query-restructuring" class="position-relative d-flex align-items-center group">
<span>Query Restructuring</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-restructuring"
aria-haspopup="dialog"
aria-label="Share link: Query Restructuring">
<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>Alternative query formulations can have dramatically different 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="err">--</span><span class="w"> </span><span class="py">Inefficient</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">friend</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">Boston</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">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">collect</span><span class="p">(</span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="err">;</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">Efficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Filter</span><span class="w"> </span><span class="py">during</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span><span class="py">match</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="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">Boston</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="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">collect</span><span class="p">(</span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>The second version filters during traversal, reducing intermediate results and memory consumption.</p>
<h4 id="limiting-result-sets" class="position-relative d-flex align-items-center group">
<span>Limiting Result Sets</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="limiting-result-sets"
aria-haspopup="dialog"
aria-label="Share link: Limiting Result Sets">
<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>Unbounded queries consume resources proportional to result set size. Apply limits when full results aren’t needed:</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">Without</span><span class="w"> </span><span class="py">limit</span><span class="p">:</span><span class="w"> </span><span class="nc">processes</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">matches</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">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="err">;</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">With</span><span class="w"> </span><span class="py">limit</span><span class="p">:</span><span class="w"> </span><span class="nc">stops</span><span class="w"> </span><span class="py">after</span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="py">results</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">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</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="err">;</span><span class="w">
</span></span></span></code></pre></div><p>For paginated UIs, combine LIMIT with SKIP:</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">Page</span><span class="w"> </span><span class="py">3</span><span class="w"> </span><span class="p">(</span><span class="py">20</span><span class="w"> </span><span class="py">results</span><span class="w"> </span><span class="py">per</span><span class="w"> </span><span class="py">page</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">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</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">p</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SKIP</span><span class="w"> </span><span class="py">40</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">20</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="traversal-tuning" class="position-relative d-flex align-items-center group">
<span>Traversal 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="traversal-tuning"
aria-haspopup="dialog"
aria-label="Share link: Traversal 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>
</h3><p>Graph traversals present unique tuning challenges due to their recursive nature.</p>
<h4 id="depth-limiting" class="position-relative d-flex align-items-center group">
<span>Depth Limiting</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="depth-limiting"
aria-haspopup="dialog"
aria-label="Share link: Depth Limiting">
<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>Variable-length paths can explore exponentially many paths. Limit traversal depth to control execution time:</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">Unbounded</span><span class="p">:</span><span class="w"> </span><span class="nc">potentially</span><span class="w"> </span><span class="py">explores</span><span class="w"> </span><span class="py">millions</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">paths</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">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="err">'</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">connected</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">connected</span><span class="err">.</span><span class="py">name</span><span class="err">;</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">Bounded</span><span class="p">:</span><span class="w"> </span><span class="nc">limits</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">3</span><span class="w"> </span><span class="py">hops</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">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="err">'</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">.3</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">connected</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">connected</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Profile variable-length paths to find appropriate depth limits that capture needed connections without excessive exploration.</p>
<h4 id="traversal-direction-optimization" class="position-relative d-flex align-items-center group">
<span>Traversal Direction 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="traversal-direction-optimization"
aria-haspopup="dialog"
aria-label="Share link: Traversal Direction 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>Traversing in the direction of lower cardinality improves 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="err">--</span><span class="w"> </span><span class="py">High</span><span class="err">-</span><span class="py">to</span><span class="err">-</span><span class="py">low</span><span class="w"> </span><span class="py">cardinality</span><span class="p">:</span><span class="w"> </span><span class="nc">many</span><span class="w"> </span><span class="py">people</span><span class="w"> </span><span class="py">work</span><span class="w"> </span><span class="py">at</span><span class="w"> </span><span class="py">few</span><span class="w"> </span><span class="py">companies</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">WHERE</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">industry</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Technology</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">p</span><span class="err">.</span><span class="py">name</span><span class="err">;</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">Low</span><span class="err">-</span><span class="py">to</span><span class="err">-</span><span class="py">high</span><span class="w"> </span><span class="py">cardinality</span><span class="p">:</span><span class="w"> </span><span class="nc">fewer</span><span class="w"> </span><span class="py">companies</span><span class="w"> </span><span class="py">have</span><span class="w"> </span><span class="py">many</span><span class="w"> </span><span class="py">people</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="w"> </span><span class="p">{</span><span class="py">industry</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Technology</span><span class="err">'</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">p</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>The second version starts with filtered companies (low cardinality) and traverses to people, avoiding examination of people who don’t work at technology companies.</p>
<h4 id="hub-node-handling" class="position-relative d-flex align-items-center group">
<span>Hub Node Handling</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="hub-node-handling"
aria-haspopup="dialog"
aria-label="Share link: Hub Node Handling">
<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>High-degree nodes (hubs) can degrade traversal performance. Identify hubs through degree analysis:</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">Find</span><span class="w"> </span><span class="py">hub</span><span class="w"> </span><span class="py">nodes</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">n</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">:</span><span class="nc">KNOWS</span><span class="p">]</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="py">RETURN</span><span class="w"> </span><span class="py">n</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">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">degree</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">degree</span><span class="w"> </span><span class="py">DESC</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">10</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>For queries involving hubs, consider:</p>
<ol>
<li>Sampling relationships rather than traversing all</li>
<li>Pre-computing aggregate values</li>
<li>Filtering to exclude hub nodes when appropriate</li>
</ol>
<h3 id="transaction-tuning" class="position-relative d-flex align-items-center group">
<span>Transaction 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="transaction-tuning"
aria-haspopup="dialog"
aria-label="Share link: Transaction 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>
</h3><p>Transaction behavior affects both correctness and performance.</p>
<h4 id="transaction-scope" class="position-relative d-flex align-items-center group">
<span>Transaction Scope</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="transaction-scope"
aria-haspopup="dialog"
aria-label="Share link: Transaction Scope">
<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>Minimize transaction duration to reduce lock contention:</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">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">Long</span><span class="err">-</span><span class="py">running</span><span class="w"> </span><span class="py">transaction</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</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="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">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">adult</span><span class="err">';</span><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="kd">...</span><span class="w"> </span><span class="py">many</span><span class="w"> </span><span class="py">more</span><span class="w"> </span><span class="py">operations</span><span class="w"> </span><span class="kd">...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</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">Better</span><span class="p">:</span><span class="w"> </span><span class="nc">Smaller</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">scope</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</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">$id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">adult</span><span class="err">';</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Break large batch operations into smaller transactions to improve concurrency.</p>
<h4 id="batch-operation-tuning" class="position-relative d-flex align-items-center group">
<span>Batch Operation 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="batch-operation-tuning"
aria-haspopup="dialog"
aria-label="Share link: Batch Operation 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>When performing many similar operations, batching reduces transaction overhead:</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">Inefficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Many</span><span class="w"> </span><span class="py">separate</span><span class="w"> </span><span class="py">transactions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FOR</span><span class="w"> </span><span class="py">each</span><span class="w"> </span><span class="py">person</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">people</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</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="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">name</span><span class="p">:</span><span class="w"> </span><span class="nc">person</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">age</span><span class="p">:</span><span class="w"> </span><span class="nc">person</span><span class="err">.</span><span class="py">age</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COMMIT</span><span class="err">;</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">Efficient</span><span class="p">:</span><span class="w"> </span><span class="nc">Single</span><span class="w"> </span><span class="py">batched</span><span class="w"> </span><span class="py">transaction</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">UNWIND</span><span class="w"> </span><span class="nv">$people</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">person</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="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">name</span><span class="p">:</span><span class="w"> </span><span class="nc">person</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">age</span><span class="p">:</span><span class="w"> </span><span class="nc">person</span><span class="err">.</span><span class="py">age</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Balance batch size against transaction duration and memory consumption.</p>
<h3 id="system-level-tuning" class="position-relative d-flex align-items-center group">
<span>System-Level 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="system-level-tuning"
aria-haspopup="dialog"
aria-label="Share link: System-Level 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>
</h3><p>Operating system and hardware configuration affect database performance.</p>
<h4 id="file-descriptor-limits" class="position-relative d-flex align-items-center group">
<span>File Descriptor Limits</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="file-descriptor-limits"
aria-haspopup="dialog"
aria-label="Share link: File Descriptor Limits">
<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>Database servers require many file descriptors for connections and data files:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check current limits</span>
</span></span><span class="line"><span class="cl"><span class="nb">ulimit</span> -n
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Increase limit (temporary)</span>
</span></span><span class="line"><span class="cl"><span class="nb">ulimit</span> -n <span class="m">65536</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Permanent limit (add to /etc/security/limits.conf)</span>
</span></span><span class="line"><span class="cl">geode soft nofile <span class="m">65536</span>
</span></span><span class="line"><span class="cl">geode hard nofile <span class="m">65536</span>
</span></span></code></pre></div>
<h4 id="tcpip-tuning-for-quic" class="position-relative d-flex align-items-center group">
<span>TCP/IP Tuning for QUIC</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="tcpip-tuning-for-quic"
aria-haspopup="dialog"
aria-label="Share link: TCP/IP Tuning for QUIC">
<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>While Geode uses QUIC over UDP, system networking parameters still affect performance:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Increase network buffer sizes</span>
</span></span><span class="line"><span class="cl">sysctl -w net.core.rmem_max<span class="o">=</span><span class="m">26214400</span>
</span></span><span class="line"><span class="cl">sysctl -w net.core.wmem_max<span class="o">=</span><span class="m">26214400</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Adjust UDP buffer sizes</span>
</span></span><span class="line"><span class="cl">sysctl -w net.core.rmem_default<span class="o">=</span><span class="m">26214400</span>
</span></span><span class="line"><span class="cl">sysctl -w net.core.wmem_default<span class="o">=</span><span class="m">26214400</span>
</span></span></code></pre></div><p>Make these changes permanent by adding to <code>/etc/sysctl.conf</code>.</p>
<h4 id="storage-performance" class="position-relative d-flex align-items-center group">
<span>Storage Performance</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="storage-performance"
aria-haspopup="dialog"
aria-label="Share link: Storage Performance">
<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>Database performance depends on underlying storage I/O:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Test disk I/O performance</span>
</span></span><span class="line"><span class="cl">dd <span class="k">if</span><span class="o">=</span>/dev/zero <span class="nv">of</span><span class="o">=</span>/var/lib/geode/test <span class="nv">bs</span><span class="o">=</span>1M <span class="nv">count</span><span class="o">=</span><span class="m">1024</span>
</span></span></code></pre></div><p>For production systems, use SSD storage for data directories to minimize I/O latency. RAID configurations can provide both performance and redundancy.</p>
<h3 id="monitoring-and-continuous-tuning" class="position-relative d-flex align-items-center group">
<span>Monitoring and Continuous 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="monitoring-and-continuous-tuning"
aria-haspopup="dialog"
aria-label="Share link: Monitoring and Continuous 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>
</h3><p>Performance tuning is an ongoing process, not a one-time activity.</p>
<h4 id="establishing-metrics" class="position-relative d-flex align-items-center group">
<span>Establishing 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="establishing-metrics"
aria-haspopup="dialog"
aria-label="Share link: Establishing 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>Define key performance indicators to track:</p>
<ul>
<li>Query response time (p50, p95, p99)</li>
<li>Throughput (queries per second)</li>
<li>Connection pool utilization</li>
<li>Memory usage</li>
<li>Error rates</li>
</ul>
<h4 id="automated-monitoring" class="position-relative d-flex align-items-center group">
<span>Automated Monitoring</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="automated-monitoring"
aria-haspopup="dialog"
aria-label="Share link: Automated Monitoring">
<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>Implement continuous monitoring to detect performance degradation:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Monitor query performance</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> true<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl"> <span class="nb">echo</span> <span class="s2">"PROFILE MATCH (n:Person) RETURN count(n);"</span> <span class="p">|</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> ./geode shell <span class="p">|</span> grep <span class="s2">"Execution Time"</span> >> perf.log
</span></span><span class="line"><span class="cl"> sleep <span class="m">60</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span></code></pre></div>
<h4 id="regression-detection" class="position-relative d-flex align-items-center group">
<span>Regression Detection</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="regression-detection"
aria-haspopup="dialog"
aria-label="Share link: Regression Detection">
<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>Track performance metrics over time to identify regressions:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Compare current performance to baseline</span>
</span></span><span class="line"><span class="cl"><span class="n">current_p95</span> <span class="o">=</span> <span class="n">measure_query_latency</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">current_p95</span> <span class="o">></span> <span class="n">baseline_p95</span> <span class="o">*</span> <span class="mf">1.2</span><span class="p">:</span> <span class="c1"># 20% regression</span>
</span></span><span class="line"><span class="cl"> <span class="n">alert</span><span class="p">(</span><span class="s2">"Performance regression detected"</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="tuning-workflow" class="position-relative d-flex align-items-center group">
<span>Tuning Workflow</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="tuning-workflow"
aria-haspopup="dialog"
aria-label="Share link: Tuning Workflow">
<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>Systematic tuning follows a structured process.</p>
<h4 id="phase-1-baseline-measurement" class="position-relative d-flex align-items-center group">
<span>Phase 1: Baseline Measurement</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="phase-1-baseline-measurement"
aria-haspopup="dialog"
aria-label="Share link: Phase 1: Baseline Measurement">
<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 current performance across all key metrics:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Run performance test suite</span>
</span></span><span class="line"><span class="cl">./run_benchmarks.sh > baseline.txt
</span></span></code></pre></div><p>Document baseline results comprehensively.</p>
<h4 id="phase-2-identify-bottlenecks" class="position-relative d-flex align-items-center group">
<span>Phase 2: Identify Bottlenecks</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="phase-2-identify-bottlenecks"
aria-haspopup="dialog"
aria-label="Share link: Phase 2: Identify Bottlenecks">
<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>Use profiling to find performance bottlenecks:</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">Profile</span><span class="w"> </span><span class="py">slow</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">PROFILE</span><span class="w"> </span><span class="p">[</span><span class="py">slow</span><span class="w"> </span><span class="kd">query</span><span class="p">]</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Prioritize bottlenecks by impact: optimize the slowest operations first.</p>
<h4 id="phase-3-hypothesize-improvements" class="position-relative d-flex align-items-center group">
<span>Phase 3: Hypothesize Improvements</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="phase-3-hypothesize-improvements"
aria-haspopup="dialog"
aria-label="Share link: Phase 3: Hypothesize Improvements">
<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>Based on profiling, form specific tuning hypotheses:</p>
<ul>
<li>“Increasing connection pool size will reduce wait time”</li>
<li>“Adding index on Person.email will improve lookup performance”</li>
<li>“Limiting traversal depth will reduce execution time”</li>
</ul>
<h4 id="phase-4-implement-changes" class="position-relative d-flex align-items-center group">
<span>Phase 4: Implement Changes</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="phase-4-implement-changes"
aria-haspopup="dialog"
aria-label="Share link: Phase 4: Implement Changes">
<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>Apply one tuning change at a time:</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">CREATE</span><span class="w"> </span><span class="py">INDEX</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="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="phase-5-measure-impact" class="position-relative d-flex align-items-center group">
<span>Phase 5: Measure Impact</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="phase-5-measure-impact"
aria-haspopup="dialog"
aria-label="Share link: Phase 5: Measure Impact">
<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>Re-run benchmarks and compare to baseline:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./run_benchmarks.sh > after_index.txt
</span></span><span class="line"><span class="cl">diff baseline.txt after_index.txt
</span></span></code></pre></div>
<h4 id="phase-6-document-results" class="position-relative d-flex align-items-center group">
<span>Phase 6: Document Results</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="phase-6-document-results"
aria-haspopup="dialog"
aria-label="Share link: Phase 6: Document Results">
<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>Record tuning changes and their measured impact:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Tuning: Added index on Person.email
</span></span><span class="line"><span class="cl">Metric: Email lookup query time
</span></span><span class="line"><span class="cl">Before: 145.7ms
</span></span><span class="line"><span class="cl">After: 2.3ms
</span></span><span class="line"><span class="cl">Improvement: 98.4%
</span></span></code></pre></div>
<h4 id="phase-7-iterate" class="position-relative d-flex align-items-center group">
<span>Phase 7: Iterate</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="phase-7-iterate"
aria-haspopup="dialog"
aria-label="Share link: Phase 7: Iterate">
<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>Continue identifying bottlenecks and testing improvements until performance meets requirements.</p>
<h3 id="common-tuning-patterns" class="position-relative d-flex align-items-center group">
<span>Common Tuning Patterns</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="common-tuning-patterns"
aria-haspopup="dialog"
aria-label="Share link: Common Tuning Patterns">
<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>Certain patterns recur across tuning efforts.</p>
<h4 id="the-8020-rule" class="position-relative d-flex align-items-center group">
<span>The 80/20 Rule</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="the-8020-rule"
aria-haspopup="dialog"
aria-label="Share link: The 80/20 Rule">
<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>Typically, 20% of queries consume 80% of resources. Profile to identify these high-impact queries and optimize them first.</p>
<h4 id="index-everything-no" class="position-relative d-flex align-items-center group">
<span>Index Everything? No.</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-everything-no"
aria-haspopup="dialog"
aria-label="Share link: Index Everything? No.">
<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>While indexes speed reads, they slow writes and consume storage. Index only properties used in WHERE clauses, JOIN conditions, and ORDER BY clauses.</p>
<h4 id="memory-vs-speed-tradeoff" class="position-relative d-flex align-items-center group">
<span>Memory vs. Speed Tradeoff</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="memory-vs-speed-tradeoff"
aria-haspopup="dialog"
aria-label="Share link: Memory vs. Speed Tradeoff">
<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>Adding memory often improves performance by reducing disk I/O, but has diminishing returns. Profile to determine whether additional memory would help.</p>
<h4 id="connection-pool-sweet-spot" class="position-relative d-flex align-items-center group">
<span>Connection Pool Sweet Spot</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="connection-pool-sweet-spot"
aria-haspopup="dialog"
aria-label="Share link: Connection Pool Sweet Spot">
<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>Connection pools have an optimal size range. Too small causes queuing; too large causes overhead. Monitor pool utilization to find the sweet spot.</p>
<h3 id="advanced-tuning-techniques" class="position-relative d-flex align-items-center group">
<span>Advanced Tuning Techniques</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-tuning-techniques"
aria-haspopup="dialog"
aria-label="Share link: Advanced Tuning Techniques">
<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>Expert-level tuning addresses complex scenarios.</p>
<h4 id="query-plan-caching" class="position-relative d-flex align-items-center group">
<span>Query Plan Caching</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-plan-caching"
aria-haspopup="dialog"
aria-label="Share link: Query Plan Caching">
<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>Geode caches query execution plans to avoid repeated parsing and optimization. Parameterized queries benefit most from plan caching:</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">Cacheable</span><span class="p">:</span><span class="w"> </span><span class="nc">uses</span><span class="w"> </span><span class="py">parameter</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">$person_id</span><span class="p">})</span><span class="w"> </span><span class="nc">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</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">Not</span><span class="w"> </span><span class="py">cacheable</span><span class="p">:</span><span class="w"> </span><span class="nc">literal</span><span class="w"> </span><span class="py">value</span><span class="w"> </span><span class="py">changes</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="nc">12345</span><span class="p">})</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="read-replica-tuning" class="position-relative d-flex align-items-center group">
<span>Read Replica 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="read-replica-tuning"
aria-haspopup="dialog"
aria-label="Share link: Read Replica 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>For read-heavy workloads, read replicas distribute load:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Configure read replica</span>
</span></span><span class="line"><span class="cl">geode serve <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --replica-of primary:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3142
</span></span></code></pre></div><p>Direct read queries to replicas to reduce primary server load.</p>
<h4 id="denormalization-for-performance" class="position-relative d-flex align-items-center group">
<span>Denormalization for Performance</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="denormalization-for-performance"
aria-haspopup="dialog"
aria-label="Share link: Denormalization for Performance">
<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>Strategic denormalization trades storage for query 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="err">--</span><span class="w"> </span><span class="py">Normalized</span><span class="p">:</span><span class="w"> </span><span class="nc">requires</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">LIVES_IN</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">City</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">IN_STATE</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">s</span><span class="p">:</span><span class="nc">State</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">s</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">California</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">p</span><span class="err">.</span><span class="py">name</span><span class="err">;</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">Denormalized</span><span class="p">:</span><span class="w"> </span><span class="nc">state</span><span class="w"> </span><span class="py">stored</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">person</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">state</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">California</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">p</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p>Denormalization eliminates traversals but requires maintaining redundant data.</p>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related 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="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related 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>
</h3><p>Performance tuning connects to several related areas:</p>
<ul>
<li><strong>Performance Profiling</strong> - Measurement foundation for tuning decisions</li>
<li><strong>Query Optimization</strong> - Restructuring queries for better performance</li>
<li><strong>Index Management</strong> - Creating and maintaining indexes effectively</li>
<li><strong>Monitoring</strong> - Continuous performance tracking</li>
<li><strong>Capacity Planning</strong> - Predicting future resource needs</li>
</ul>
<h3 id="resources" class="position-relative d-flex align-items-center group">
<span>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="resources"
aria-haspopup="dialog"
aria-label="Share link: 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><p>Additional tuning resources:</p>
<ul>
<li>Geode configuration reference documentation</li>
<li>Performance benchmarking guides</li>
<li>Query optimization best practices</li>
<li>System administration and resource management guides</li>
</ul>
<p>Performance tuning transforms acceptable database performance into exceptional user experience. Through systematic measurement, hypothesis-driven experimentation, and continuous monitoring, tuning delivers quantifiable improvements that directly impact application success.</p>
Related Articles
Query Performance Tuning Guide
Complete guide to analyzing and optimizing Geode query performance using EXPLAIN, PROFILE, indexes, and the cost-based optimizer with BM25 …
Query Optimization
Optimize GQL queries for maximum performance with indexing strategies, query planning, and execution tuning
Query Optimization
Query performance tuning, indexing strategies, EXPLAIN/PROFILE analysis, and materialized views for Geode