Monitor replication health, resolve apply failures, and recover from WAL buildup
Monitor both the publisher and ParadeDB to catch replication failures before they affect query freshness or fill the publisher’s disk.
Monitoring the Publisher
Permanent logical replication is operationally safe only if you watch the
publisher, not just the subscriber. The most important signal is how much WAL a
logical slot is retaining.
retained_wal growing steadily because the subscriber is not acknowledging
WAL quickly enough
inactive_since becoming non-NULL for longer than expected
wal_status showing that the slot is under pressure
Filesystem usage on the volume that contains pg_wal
To reduce blast radius, configure max_slot_wal_keep_size on the publisher.
This caps how much WAL a slot may retain, but it can also invalidate a lagging
subscriber, so it should be paired with alerting and a reseed plan.
Monitoring the Subscriber
Use the subscriber to confirm that apply workers are healthy and that errors are
not accumulating:
logical replication apply worker for subscription "paradedb_subscription" has startedbackground worker "logical replication apply worker" (PID 2570238) exited with exit code 1
The first message is the root cause. The second means the apply worker crashed
after hitting that error and Postgres will try to restart it.When you see these messages:
Inspect the subscriber logs for the first schema-mismatch error, not just the
worker restart message
Compare the affected table definition on the publisher and ParadeDB
Apply the missing DDL on ParadeDB
Re-enable or refresh the subscription if needed
Rebuild any ParadeDB indexes affected by the schema change
Another common cause of apply-worker failures is a logical replication conflict.
For example, a duplicate key, a permissions failure on the target table, or
row-level security on the subscriber can stop replication even when the schemas
match.
ERROR: duplicate key value violates unique constraint ...CONTEXT: processing remote data during INSERT for replication target relation ...
When you suspect a replication conflict:
Inspect the subscriber logs for the first conflict error and note the finish
LSN and replication origin if Postgres logged them
Resolve the underlying issue on the subscriber, such as conflicting local
data, missing privileges, or row-level security policy interference
Resume replication normally once the conflict is removed
Only if you intentionally want to discard that remote transaction, use
ALTER SUBSCRIPTION ... SKIP with care
Skipping a conflicting transaction can leave the subscriber inconsistent, so it
should be treated as a last resort rather than the default fix. For conflict
types and the Postgres recovery workflow, see the Postgres logical
replication conflicts
documentation.
Emergency: WAL Keeps Accumulating on the Publisher
If the logical slot on the publisher is filling disk and ParadeDB cannot catch
up quickly enough, the priority is protecting the publisher.
First, fix the subscriber if the issue is simple and recent, such as a
schema mismatch or networking issue
If the publisher is running out of disk and the subscriber can be rebuilt,
remove the subscription or drop the logical slot so the publisher can recycle
WAL again
Recreate the subscription and reseed ParadeDB once the publisher is safe
Disabling the subscription is not an emergency fix for WAL buildup. A disabled
subscription still leaves the logical slot behind on the publisher, and that
slot can continue retaining WAL.
If the subscriber is reachable and healthy enough to cleanly tear down, dropping
the subscription is the cleanest path:
DROP SUBSCRIPTION paradedb_subscription;
To protect the publisher from continued pg_wal growth when you are
intentionally giving up the current replica state, drop the slot on the
publisher:
After either step, ParadeDB must be reinitialized from a fresh schema and data
copy before it can resume as a logical subscriber.
Common Pitfalls
Starting with pre-populated subscriber tables while using copy_data = true
Applying DDL on only one side of the replication link
Forgetting that new tables must be added to the publication and refreshed on
the subscription
Writing directly to subscribed tables on ParadeDB, which can create conflicts
with incoming replicated changes
Leaving a broken logical slot unattended on the publisher until pg_wal
fills disk
Assuming ALTER SUBSCRIPTION ... DISABLE relieves publisher-side WAL pressure
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"ParadeDB","colors":{"primary":"#4f46e5","light":"#4f46e5","dark":"#818cf8"},"logo":{"light":"https://mintcdn.com/paradedb/X75hU2Xqk72Fhmya/logo/light.svg?fit=max\u0026auto=format\u0026n=X75hU2Xqk72Fhmya\u0026q=85\u0026s=ac5ce043daf4c85d48b56bcd7f69c14f","dark":"https://mintcdn.com/paradedb/X75hU2Xqk72Fhmya/logo/dark.svg?fit=max\u0026auto=format\u0026n=X75hU2Xqk72Fhmya\u0026q=85\u0026s=2750fde357923cc6615d68f74451aa1e","href":"https://www.paradedb.com"},"favicon":"https://mintcdn.com/paradedb/EnFi_28R6H66KMiU/favicon.png?fit=max\u0026auto=format\u0026n=EnFi_28R6H66KMiU\u0026q=85\u0026s=f066fc45b5ff39c3b46b210cbcbb5a06","appearance":{"strict":false},"navbar":{"links":[{"href":"https://github.com/paradedb/paradedb","type":"github"},{"href":"https://app.paradedb.com","label":"Log In"}],"primary":{"type":"button","label":"Sign Up","href":"https://auth.paradedb.com/sign-up"}},"footer":{"socials":{"github":"https://github.com/paradedb/paradedb","twitter":"https://x.com/paradedb","linkedin":"https://www.linkedin.com/company/paradedb","slack":"https://paradedb.com/slack"}},"seo":{"metatags":{"charset":"UTF-8","viewport":"width=device-width, initial-scale=1.0","keywords":"paradedb, postgres, search, analytics, bm25, full-text search, vector search, semantic search, hybrid search, faceted search, columnar, olap","author":"ParadeDB","google":"notranslate","generator":"Mintlify","theme-color":"#000000","color-scheme":"light dark","referrer":"origin","rating":"general","revisit-after":"7 days","language":"en","copyright":"ParadeDB, Inc. 2026","reply-to":"support@paradedb.com","distribution":"global","coverage":"Worldwide","category":"Technology","target":"all","HandheldFriendly":"True","MobileOptimized":"320","apple-mobile-web-app-capable":"yes","apple-mobile-web-app-status-bar-style":"black","apple-mobile-web-app-title":"ParadeDB Docs","og:type":"website","og:locale":"en_US","og:description":"You should just use Postgres.","og:image":"https://www.paradedb.com/opengraph-image.png","og:image:alt":"ParadeDB: Just use Postgres","twitter:card":"summary_large_image","twitter:site":"@paradedb","twitter:creator":"@paradedb","twitter:description":"You should just use Postgres.","twitter:image":"https://www.paradedb.com/twitter-image.png","twitter:image:alt":"ParadeDB: Just use Postgres"},"indexing":"navigable"},"banner":{"content":"[ParadeDB Cloud is now available in private preview](https://auth.paradedb.com/sign-up)","dismissible":false},"contextual":{"options":["copy","mcp","cursor","vscode","perplexity","chatgpt","claude",{"title":"Share on X","description":"Share this page on X","icon":"x","href":{"base":"https://x.com/intent/tweet","query":[{"key":"text","value":"Check out this ParadeDB doc!"},{"key":"url","value":"https://www.paradedb.com/docs$path"}]}}],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"paradedb","hasAudioNarration":false,"actualSubdomain":"paradedb","customDomains":["www.paradedb.com"],"gitSource":{"type":"github","owner":"paradedb","repo":"paradedb","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af7ca78d0d65120655df3d5","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"Reference","count":84},{"language":"default","tag":"Full-Text / Lexical Search","count":46},{"language":"default","tag":"Operate","count":27},{"language":"default","tag":"Text Analysis","count":25},{"language":"default","tag":"Aggregations","count":16},{"language":"default","tag":"Query Types","count":13},{"language":"default","tag":"Tokenizers","count":13},{"language":"default","tag":"Indexing","count":11},{"language":"default","tag":"Deployment","count":10},{"language":"default","tag":"Metrics","count":8}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#search-bar-entry{visibility:visible}#banner{background-color:#4f46e5!important;background-image:none!important;border-bottom:0!important;display:flex;height:2.75rem!important;max-height:none!important;min-height:2.75rem;padding:0!important}@media (min-width: 640px){#banner{height:3rem!important;min-height:3rem}}#banner>div{align-items:center;backdrop-filter:blur(12px);background-color:rgb(255 255 255 / 10%);border-bottom:1px solid rgb(255 255 255 / 20%)!important;box-shadow:inset 0 -1px rgb(255 255 255 / 20%);display:flex;justify-content:center;box-sizing:border-box;height:100%;margin:0!important;padding:0.75rem 1rem;width:100%}#banner p{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;height:100%;margin:0!important;max-width:100%;min-width:0;font-size:0.75rem;line-height:1rem}#banner a{color:#ffffff!important;display:inline-flex;align-items:center;font-size:inherit;font-weight:500;gap:0.5rem;line-height:inherit;text-decoration:none}#banner a:hover{color:#ffffff!important}#banner a::after{content:\"->\";display:inline-block;flex:none;transition:transform 160ms ease}#banner a:hover::after{transform:translateX(2px)}#banner .banner-badge{display:none;flex:none;background-color:rgb(255 255 255 / 10%);padding:0.25rem 0.625rem;font-size:0.625rem;font-weight:600;line-height:1;text-transform:uppercase}@media (min-width: 640px){#banner p{font-size:0.875rem;line-height:1.25rem}#banner .banner-badge{display:inline-flex;font-size:0.75rem}}.topbar-right-container nav ul{gap:1.25rem!important}.navbar-link>a{background:transparent!important;border-radius:0!important;color:rgb(30 41 59 / 85%)!important;font-size:0.875rem!important;line-height:1.25rem!important;padding:0.25rem 0.125rem!important;transition:color 160ms ease}.navbar-link>a:hover{background:transparent!important;color:#4f46e5!important}.dark .navbar-link>a{color:rgb(255 255 255 / 86%)!important}.dark .navbar-link>a:hover{color:#ffffff!important}img.nav-logo{height:2rem!important}a.nav-tabs-item{font-size:1.0625rem!important}a.nav-tabs-item span[class*=\"h-4\"]{height:1.25rem!important;width:1.25rem!important}.card{border-radius:0!important}#pagination>a{border:0;border-radius:0}.architecture-diagram{--architecture-node-inset: 18px;--architecture-surface: #ffffff;--architecture-background: #f9fafc;--architecture-border: #dfe3eb;--architecture-text: #1e293b;--architecture-muted: #606d82;--architecture-line: #99a3b5;--architecture-accent: #4f46e5;--architecture-accent-soft: #eeedff;--architecture-index: #f6f5ff;--architecture-index-border: #ccc9f3;--architecture-divider: #e0def4;--architecture-shadow:\n 0 1px 2px rgb(30 27 75 / 4%), 0 4px 12px rgb(30 27 75 / 3%);container-type:inline-size;margin:2.5rem 0;color:var(--architecture-text);font-size:14px;line-height:1.5}.dark .architecture-diagram{--architecture-surface: #17171e;--architecture-background: #101015;--architecture-border: #30303c;--architecture-text: #ececf3;--architecture-muted: #a6a6b9;--architecture-line: #73738c;--architecture-accent-soft: #202028;--architecture-index: var(--architecture-surface);--architecture-index-border: #3e3e4b;--architecture-divider: var(--architecture-border);--architecture-shadow: 0 1px 2px rgb(0 0 0 / 12%), 0 4px 12px rgb(0 0 0 / 8%)}.architecture-diagram svg{display:block;flex:none;stroke-linecap:round;stroke-linejoin:miter}.architecture-app{display:flex;align-items:center;justify-content:center;gap:10px;width:fit-content;margin:0 auto;padding:11px 20px;border:1px solid var(--architecture-border);border-radius:0;background:var(--architecture-surface);box-shadow:var(--architecture-shadow);font-weight:500}.architecture-app svg,.architecture-heading svg{width:22px;height:22px}.architecture-connection{position:relative;display:flex;justify-content:center;height:48px;color:var(--architecture-line)}.architecture-connection svg{width:16px;height:48px}.architecture-connection span{position:absolute;top:50%;transform:translateY(-50%);color:var(--architecture-muted);font-size:12px}.architecture-sql span{left:calc(50% + 14px);font-family:ui-monospace, SFMono-Regular, Menlo, monospace;font-size:12px;letter-spacing:0.04em}.architecture-postgres{padding:22px;border:1px solid var(--architecture-border);border-radius:0;background:var(--architecture-background)}.architecture-database-heading,.architecture-index-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.architecture-database-heading{margin-bottom:22px}.architecture-heading{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:600;letter-spacing:-0.02em}.architecture-database-heading svg{width:1em;height:1em}.architecture-table{display:flex;align-items:center;gap:12px;padding:17px var(--architecture-node-inset);border:1px solid var(--architecture-border);border-radius:0;background:var(--architecture-surface);box-shadow:var(--architecture-shadow)}.architecture-table-icon{width:28px;height:28px;color:var(--architecture-muted)}.architecture-title{font-size:14px;font-weight:600}.architecture-detail{margin-top:4px;color:var(--architecture-muted);font-size:12px;text-wrap:balance}.architecture-writes{justify-content:flex-start;padding-left:calc(var(--architecture-node-inset) + 7px)}.architecture-writes span{left:calc(var(--architecture-node-inset) + 41px)}.architecture-index{overflow:hidden;border:1px solid var(--architecture-index-border);border-radius:0;background:var(--architecture-index);box-shadow:var(--architecture-shadow)}.architecture-index-heading{padding:17px var(--architecture-node-inset);border-bottom:1px solid var(--architecture-divider)}.architecture-index-heading .architecture-heading{gap:12px}.architecture-heading .architecture-brand{width:22px;height:22px;margin:3px;color:var(--architecture-accent)}.architecture-extension{flex:none;padding:3px 7px;border:1px solid var(--architecture-divider);border-radius:0;background:var(--architecture-accent-soft);color:var(--architecture-text);font-family:ui-monospace, SFMono-Regular, Menlo, monospace;font-size:11px}.architecture-structures{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));padding:24px 0 22px}.architecture-structure{padding:0 6px;text-align:center}.architecture-structure+.architecture-structure{border-left:1px solid var(--architecture-divider)}.architecture-structure svg{width:56px;height:40px;margin:0 auto 14px;color:var(--architecture-accent)}@container (max-width: 380px){.architecture-postgres{--architecture-node-inset: 14px;padding:16px}.architecture-table{padding-block:15px}.architecture-index-heading{flex-wrap:wrap;gap:6px 12px;padding-block:15px}.architecture-structures{grid-template-columns:1fr;padding:0 14px}.architecture-structure{display:grid;grid-template-columns:48px 1fr;column-gap:16px;padding:14px 0;text-align:left}.architecture-structure+.architecture-structure{border-top:1px solid var(--architecture-divider);border-left:0}.architecture-structure svg{grid-row:span 2;align-self:center;width:48px;height:32px;margin:0}}@container (max-width: 320px){.architecture-index-heading{flex-direction:column;align-items:flex-start}.architecture-extension{margin-left:40px}}.architecture-detail-diagram .architecture-svg{width:100%;height:auto;font-family:inherit;font-size:17px;fill:var(--architecture-text)}.architecture-svg-boundary{fill:var(--architecture-background);stroke:var(--architecture-border)}.architecture-svg-surface{fill:var(--architecture-surface);stroke:var(--architecture-border)}.architecture-svg-index{fill:var(--architecture-index);stroke:var(--architecture-index-border)}.architecture-svg-line{fill:none;stroke:var(--architecture-line);stroke-width:1.5}.architecture-svg-rule{fill:none;stroke:var(--architecture-border)}.architecture-svg-title{font-size:18px;font-weight:600;letter-spacing:-0.02em}.architecture-svg-label{fill:var(--architecture-muted);font-size:14px}.architecture-svg-stage-title{font-size:17px;font-weight:600}.architecture-svg-small{font-size:13px}.architecture-detail-diagram .architecture-svg-compact{display:none}@container (max-width: 420px){.architecture-detail-diagram .architecture-svg-wide{display:none}.architecture-detail-diagram .architecture-svg-compact{display:block;max-width:380px;margin:0 auto}}"},{"filePath":"cookie-consent.css","content":"#paradedb-cookie-banner,#paradedb-cookie-preferences{position:fixed;bottom:0;z-index:9999;color:#475569;background:#ffffff;border:1px solid #e2e8f0;font-size:0.8125rem;line-height:1.5}#paradedb-cookie-banner{inset-inline:0;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem}#paradedb-cookie-banner p{margin:0}#paradedb-cookie-banner a{text-decoration:underline}#paradedb-cookie-banner>div{display:flex;gap:0.5rem}#paradedb-cookie-banner button,#paradedb-cookie-preferences{cursor:pointer;padding:0.5rem 1rem;border:1px solid #cbd5e1;min-height:2.5rem;white-space:nowrap}#paradedb-cookie-preferences{left:1rem}#paradedb-cookie-banner button:focus-visible,#paradedb-cookie-banner a:focus-visible,#paradedb-cookie-preferences:focus-visible{outline:2px solid #6366f1;outline-offset:2px}#paradedb-cookie-banner [data-consent=\"true\"]{background:#eef2ff;color:#4338ca;border-color:#c7d2fe}.dark #paradedb-cookie-banner,.dark #paradedb-cookie-preferences{color:#cbd5e1;background:#020617;border-color:#334155}#paradedb-cookie-banner[hidden],#paradedb-cookie-preferences[hidden]{display:none}@media (max-width: 640px){#paradedb-cookie-banner{flex-direction:column;align-items:stretch}#paradedb-cookie-banner button{flex:1}}"}],"page":{"pagePath":"operate/deploy/logical-replication/monitoring-and-troubleshooting","slug":"/operate/deploy/logical-replication/monitoring-and-troubleshooting","pageMetadata":{"title":"Monitoring and Troubleshooting","description":"Monitor replication health, resolve apply failures, and recover from WAL buildup","canonical":"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting","href":"/operate/deploy/logical-replication/monitoring-and-troubleshooting"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Monitor replication health, resolve apply failures, and recover from WAL buildup\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Monitor both the publisher and ParadeDB to catch replication failures before they affect query freshness or fill the publisher’s disk.`}),`\n`,_jsx(Heading,{level:`2`,id:`monitoring-the-publisher`,children:`Monitoring the Publisher`}),`\n`,_jsx(_components.p,{children:`Permanent logical replication is operationally safe only if you watch the\npublisher, not just the subscriber. The most important signal is how much WAL a\nlogical slot is retaining.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` slot_name,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` active,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` restart_lsn,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` confirmed_flush_lsn,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`AS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` retained_wal,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` wal_status,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` safe_wal_size,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` inactive_since`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`FROM`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pg_replication_slots`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`WHERE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` slot_type `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'logical'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Watch for:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`retained_wal`}),` growing steadily because the subscriber is not acknowledging\nWAL quickly enough`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`inactive_since`}),` becoming non-`,_jsx(_components.code,{children:`NULL`}),` for longer than expected`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`wal_status`}),` showing that the slot is under pressure`]}),`\n`,_jsxs(_components.li,{children:[`Filesystem usage on the volume that contains `,_jsx(_components.code,{children:`pg_wal`})]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To reduce blast radius, configure `,_jsx(_components.code,{children:`max_slot_wal_keep_size`}),` on the publisher.\nThis caps how much WAL a slot may retain, but it can also invalidate a lagging\nsubscriber, so it should be paired with alerting and a reseed plan.`]}),`\n`,_jsx(Heading,{level:`2`,id:`monitoring-the-subscriber`,children:`Monitoring the Subscriber`}),`\n`,_jsx(_components.p,{children:`Use the subscriber to confirm that apply workers are healthy and that errors are\nnot accumulating:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` subname, worker_type, received_lsn, latest_end_lsn, latest_end_time`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`FROM`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pg_stat_subscription;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` subname, apply_error_count, sync_error_count`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`FROM`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pg_stat_subscription_stats;`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`latest_end_time`}),` stops advancing or `,_jsx(_components.code,{children:`apply_error_count`}),` increases, inspect\nthe subscriber logs immediately.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting-apply-failures`,children:`Troubleshooting Apply Failures`}),`\n`,_jsx(_components.p,{children:`One common cause of apply-worker failures is schema drift between the publisher\nand subscriber.`}),`\n`,_jsx(_components.p,{children:`Two common log patterns for schema drift are:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`logical replication target relation \"public.doctor\" is missing replicated columns: \"personnel_id\", \"role_function_id\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`logical replication apply worker for subscription \"paradedb_subscription\" has started`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`background worker \"logical replication apply worker\" (PID 2570238) exited with exit code 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`The first message is the root cause. The second means the apply worker crashed\nafter hitting that error and Postgres will try to restart it.`}),`\n`,_jsx(_components.p,{children:`When you see these messages:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Inspect the subscriber logs for the first schema-mismatch error, not just the\nworker restart message`}),`\n`,_jsx(_components.li,{children:`Compare the affected table definition on the publisher and ParadeDB`}),`\n`,_jsx(_components.li,{children:`Apply the missing DDL on ParadeDB`}),`\n`,_jsx(_components.li,{children:`Re-enable or refresh the subscription if needed`}),`\n`,_jsx(_components.li,{children:`Rebuild any ParadeDB indexes affected by the schema change`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Another common cause of apply-worker failures is a logical replication conflict.\nFor example, a duplicate key, a permissions failure on the target table, or\nrow-level security on the subscriber can stop replication even when the schemas\nmatch.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ERROR: duplicate key value violates unique constraint ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CONTEXT: processing remote data during INSERT for replication target relation ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`When you suspect a replication conflict:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Inspect the subscriber logs for the first conflict error and note the finish\nLSN and replication origin if Postgres logged them`}),`\n`,_jsx(_components.li,{children:`Resolve the underlying issue on the subscriber, such as conflicting local\ndata, missing privileges, or row-level security policy interference`}),`\n`,_jsx(_components.li,{children:`Resume replication normally once the conflict is removed`}),`\n`,_jsxs(_components.li,{children:[`Only if you intentionally want to discard that remote transaction, use\n`,_jsx(_components.code,{children:`ALTER SUBSCRIPTION ... SKIP`}),` with care`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Skipping a conflicting transaction can leave the subscriber inconsistent, so it\nshould be treated as a last resort rather than the default fix. For conflict\ntypes and the Postgres recovery workflow, see the `,_jsx(_components.a,{href:`https://www.postgresql.org/docs/current/logical-replication-conflicts.html`,children:`Postgres logical\nreplication conflicts\ndocumentation`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`emergency-wal-keeps-accumulating-on-the-publisher`,children:`Emergency: WAL Keeps Accumulating on the Publisher`}),`\n`,_jsx(_components.p,{children:`If the logical slot on the publisher is filling disk and ParadeDB cannot catch\nup quickly enough, the priority is protecting the publisher.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`First, fix the subscriber if the issue is simple and recent, such as a\nschema mismatch or networking issue`}),`\n`,_jsx(_components.li,{children:`If the publisher is running out of disk and the subscriber can be rebuilt,\nremove the subscription or drop the logical slot so the publisher can recycle\nWAL again`}),`\n`,_jsx(_components.li,{children:`Recreate the subscription and reseed ParadeDB once the publisher is safe`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Disabling the subscription is not an emergency fix for WAL buildup. A disabled\nsubscription still leaves the logical slot behind on the publisher, and that\nslot can continue retaining WAL.`})}),`\n`,_jsx(_components.p,{children:`If the subscriber is reachable and healthy enough to cleanly tear down, dropping\nthe subscription is the cleanest path:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`DROP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SUBSCRIPTION paradedb_subscription;`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`To protect the publisher from continued `,_jsx(_components.code,{children:`pg_wal`}),` growth when you are\nintentionally giving up the current replica state, drop the slot on the\npublisher:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pg_drop_replication_slot(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'paradedb_subscription'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`After either step, ParadeDB must be reinitialized from a fresh schema and data\ncopy before it can resume as a logical subscriber.`}),`\n`,_jsx(Heading,{level:`2`,id:`common-pitfalls`,children:`Common Pitfalls`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Starting with pre-populated subscriber tables while using `,_jsx(_components.code,{children:`copy_data = true`})]}),`\n`,_jsx(_components.li,{children:`Applying DDL on only one side of the replication link`}),`\n`,_jsx(_components.li,{children:`Forgetting that new tables must be added to the publication and refreshed on\nthe subscription`}),`\n`,_jsx(_components.li,{children:`Writing directly to subscribed tables on ParadeDB, which can create conflicts\nwith incoming replicated changes`}),`\n`,_jsxs(_components.li,{children:[`Leaving a broken logical slot unattended on the publisher until `,_jsx(_components.code,{children:`pg_wal`}),`\nfills disk`]}),`\n`,_jsxs(_components.li,{children:[`Assuming `,_jsx(_components.code,{children:`ALTER SUBSCRIPTION ... DISABLE`}),` relieves publisher-side WAL pressure`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Monitoring and Troubleshooting","description":"Monitor replication health, resolve apply failures, and recover from WAL buildup","canonical":"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting","href":"/operate/deploy/logical-replication/monitoring-and-troubleshooting"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Monitoring the Publisher","slug":"monitoring-the-publisher","depth":2,"children":[]},{"title":"Monitoring the Subscriber","slug":"monitoring-the-subscriber","depth":2,"children":[]},{"title":"Troubleshooting Apply Failures","slug":"troubleshooting-apply-failures","depth":2,"children":[]},{"title":"Emergency: WAL Keeps Accumulating on the Publisher","slug":"emergency-wal-keeps-accumulating-on-the-publisher","depth":2,"children":[]},{"title":"Common Pitfalls","slug":"common-pitfalls","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/paradedb/1aef07ebece82dbc/override.js","/docs/_mintlify/custom/paradedb/5097c6f27c90a26e/analytics.js"],"subdomain":"paradedb","siteName":"ParadeDB","title":"Monitoring and Troubleshooting - ParadeDB","navMaps":{"firstHrefInVersion":{"v0.26.6":{"href":"/operate/deploy/logical-replication/monitoring-and-troubleshooting","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T00:08:41.966Z","originalFileLocation":"operate/deploy/logical-replication/monitoring-and-troubleshooting.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Monitor replication health, resolve apply failures, and recover from WAL buildup\">\u003cmeta data-mint-head name=\"keywords\" content=\"paradedb, postgres, search, analytics, bm25, full-text search, vector search, semantic search, hybrid search, faceted search, columnar, olap\">\u003cmeta data-mint-head name=\"application-name\" content=\"ParadeDB\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Monitoring and Troubleshooting - ParadeDB\">\u003cmeta data-mint-head property=\"og:description\" content=\"You should just use Postgres.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ParadeDB\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://www.paradedb.com/opengraph-image.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Monitoring and Troubleshooting - ParadeDB\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"You should just use Postgres.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://www.paradedb.com/opengraph-image.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/paradedb/xZnm2E-sMpJPUBVi/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ParadeDB Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"charset\" content=\"UTF-8\">\u003cmeta data-mint-head name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\u003cmeta data-mint-head name=\"author\" content=\"ParadeDB\">\u003cmeta data-mint-head name=\"google\" content=\"notranslate\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#000000\">\u003cmeta data-mint-head name=\"color-scheme\" content=\"light dark\">\u003cmeta data-mint-head name=\"referrer\" content=\"origin\">\u003cmeta data-mint-head name=\"rating\" content=\"general\">\u003cmeta data-mint-head name=\"revisit-after\" content=\"7 days\">\u003cmeta data-mint-head name=\"language\" content=\"en\">\u003cmeta data-mint-head name=\"copyright\" content=\"ParadeDB, Inc. 2026\">\u003cmeta data-mint-head name=\"reply-to\" content=\"support@paradedb.com\">\u003cmeta data-mint-head name=\"distribution\" content=\"global\">\u003cmeta data-mint-head name=\"coverage\" content=\"Worldwide\">\u003cmeta data-mint-head name=\"category\" content=\"Technology\">\u003cmeta data-mint-head name=\"target\" content=\"all\">\u003cmeta data-mint-head name=\"HandheldFriendly\" content=\"True\">\u003cmeta data-mint-head name=\"MobileOptimized\" content=\"320\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-capable\" content=\"yes\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"ParadeDB: Just use Postgres\">\u003cmeta data-mint-head name=\"twitter:creator\" content=\"@paradedb\">\u003cmeta data-mint-head name=\"twitter:image:alt\" content=\"ParadeDB: Just use Postgres\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.paradedb.com/#organization\",\"name\":\"ParadeDB\",\"url\":\"https://www.paradedb.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/paradedb/X75hU2Xqk72Fhmya/logo/light.svg?fit=max\u0026auto=format\u0026n=X75hU2Xqk72Fhmya\u0026q=85\u0026s=ac5ce043daf4c85d48b56bcd7f69c14f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.paradedb.com/docs#website\",\"name\":\"ParadeDB\",\"url\":\"https://www.paradedb.com/docs\",\"publisher\":{\"@id\":\"https://www.paradedb.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting#webpage\",\"url\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting\",\"name\":\"Monitoring and Troubleshooting\",\"description\":\"Monitor replication health, resolve apply failures, and recover from WAL buildup\",\"dateModified\":\"2026-09-30T00:08:41.966Z\",\"isPartOf\":{\"@id\":\"https://www.paradedb.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Replication\",\"item\":\"https://www.paradedb.com/docs/operate/deploy/self-hosted/high-availability\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Logical Replication\",\"item\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/getting-started\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Monitoring and Troubleshooting\",\"item\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting#article\",\"headline\":\"Monitoring and Troubleshooting\",\"name\":\"Monitoring and Troubleshooting\",\"description\":\"Monitor replication health, resolve apply failures, and recover from WAL buildup\",\"url\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting\",\"mainEntityOfPage\":{\"@id\":\"https://www.paradedb.com/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting#webpage\"},\"image\":\"https://www.paradedb.com/opengraph-image.png\",\"dateModified\":\"2026-09-30T00:08:41.966Z\",\"publisher\":{\"@id\":\"https://www.paradedb.com/#organization\"},\"isPartOf\":{\"@id\":\"https://www.paradedb.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ParadeDB\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"ParadeDB\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/operate/deploy/logical-replication/monitoring-and-troubleshooting.md","siteName":"ParadeDB","nav":{"global":null,"versions":[{"version":"v0.26.6","tabs":[{"tab":"Start","icon":"rocket","pages":[{"title":"Start","href":"/start/introduction"}]},{"tab":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/reference/overview"}]},{"tab":"Concepts","icon":"lightbulb","pages":[{"title":"Concepts","href":"/concepts/architecture"}]},{"tab":"Operate","icon":"server","pages":[{"title":"ParadeDB Enterprise","href":"/operate/deploy/enterprise"},{"group":"Deployment","pages":[{"title":"Deployment Options","href":"/operate/deploy/overview"},{"title":"ParadeDB Cloud","href":"/operate/deploy/cloud"},{"title":"ParadeDB BYOC","href":"/operate/deploy/byoc"},{"title":"Kubernetes","href":"/operate/deploy/self-hosted/kubernetes"},{"title":"Self-Hosted PostgreSQL","sidebarTitle":"Self-Hosted PostgreSQL","href":"/operate/deploy/self-hosted/extension"},{"group":"PaaS Providers","pages":[{"title":"Railway","href":"/operate/deploy/cloud-platforms/railway"},{"title":"Render","href":"/operate/deploy/cloud-platforms/render"},{"title":"Fly.io","href":"/operate/deploy/cloud-platforms/fly"},{"title":"Dokku","href":"/operate/deploy/cloud-platforms/dokku"},{"title":"DigitalOcean","href":"/operate/deploy/cloud-platforms/digitalocean"}]}]},{"group":"Replication","pages":[{"title":"High Availability","href":"/operate/deploy/self-hosted/high-availability"},{"group":"Logical Replication","pages":[{"title":"Getting Started","sidebarTitle":"Getting Started","href":"/operate/deploy/logical-replication/getting-started"},{"title":"Initial Sync and Indexing","href":"/operate/deploy/logical-replication/bootstrapping"},{"title":"Replication Configuration","href":"/operate/deploy/logical-replication/configuration"},{"title":"Schema Changes","description":"Add replicated tables and safely apply schema changes","href":"/operate/deploy/logical-replication/schema-changes"},{"title":"Monitoring and Troubleshooting","href":"/operate/deploy/logical-replication/monitoring-and-troubleshooting"},{"title":"Multi-Database Replication","description":"Consolidate multiple microservice databases into a single ParadeDB instance for app-wide search and cross-database joins","href":"/operate/deploy/logical-replication/multi-database"}]}]},{"group":"Index Maintenance","pages":[{"title":"Reindexing","href":"/operate/index-maintenance/reindexing"},{"title":"Verify Index Integrity","href":"/operate/index-maintenance/verify-index"}]},{"group":"Performance","pages":[{"title":"How to Tune ParadeDB","href":"/operate/performance-tuning/overview"},{"title":"Index Creation","href":"/operate/performance-tuning/create-index"},{"title":"Read Throughput","href":"/operate/performance-tuning/reads"},{"title":"Write Throughput","href":"/operate/performance-tuning/writes"}]},{"group":"Administration","pages":[{"title":"Upgrading ParadeDB","href":"/operate/deploy/upgrading"}]},{"group":"Continuous Integration","pages":[{"title":"GitHub Actions","href":"/operate/deploy/ci/github-actions"},{"title":"GitLab Pipelines","href":"/operate/deploy/ci/gitlab-pipelines"}]}]},{"tab":"Project","icon":"flag","pages":[{"title":"Project","href":"/project/roadmap"}]}]}]},"basePath":"","title":"Monitoring and Troubleshooting - ParadeDB","buildId":"dpl_eBQnj73Q1gDRVNqNsS3Yt9yPkTEW","deploymentId":"dpl_eBQnj73Q1gDRVNqNsS3Yt9yPkTEW","dynamics":["10e4515597"],"chunks":["BannerMarkdown-BEBcJWfW.js","dist-CNS0fiKw.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-BhkiUDTS.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}