Troubleshooting
Symptom-led diagnosis and safe recovery for the single-node engine.
Before changing state, record:
- UTC time and incident start;
- artifact digest/build revision and startup arguments;
- recent startup/runtime logs;
- protocol-ping result;
system.queries,query_log,events,metrics,parts,subscriptions,transforms, andmemory_profile;- disk/cgroup/process state; and
- the newest committed backup manifest.
Cannot connect
- Confirm the process is running and recovery has completed.
- Read the actual bind address and port from the startup log.
- Remember native defaults are
127.0.0.1:7510, while the container profile commonly uses0.0.0.0:7777internally. - Check host-side port publication and closed-network routing.
- Run protocol ping; a successful TCP handshake alone does not prove protocol health.
- Check connection and worker caps plus handshake/frame/write timeouts.
Do not delete the data directory to make startup faster.
Data disappeared after restart
The most common cause is a process started without --data-dir or a table
created with ephemeral_memory.
- Compare the current and previous startup arguments.
- Confirm the expected volume is mounted at the same path and is not empty.
- Inspect the startup log for
data_dir=<memory>, recovery errors, or a different path. - Check
SHOW TABLESandSHOW CREATE TABLEfor surviving catalog state and policies. - If the durable path is lost/corrupt, stop and restore a verified manifest into a new empty target.
Never point the process at a guessed directory or merge two data directories.
Server busy or query timeout
- Inspect live
elapsed_us,queue_us, memory, rows, disk, and operator timings. - Inspect recent
ok='0'query-log errors. - Cancel a confirmed runaway query after preserving evidence.
- Reduce intake or expensive concurrency.
- Fix missing pruning, unbounded joins/aggregates/sorts, or oversized output.
- Change admission limits only after a representative load test.
A larger wait queue converts rejection into latency and memory; it does not add execution capacity.
Writes slow or reject under memory pressure
- Check memory and committed-tail gauges.
- Check
memory_governor_ramp_engagementsandmemory_governor_blocksdeltas. - Capture
system.memory_profileand matching heap file if present. - Check flush progress, disk latency/capacity, sealed bytes, and spill state.
- Check high-memory queries and lagging stream subscribers.
- Reduce ingest until the tier returns to Normal.
Do not disable the governor during an incident.
No parts appear or tail does not drain
ephemeral_memoryintentionally has no durable part contract.memory_dataserves from memory; inspect its durable policy/WAL path rather than assuming the table is ephemeral.- Confirm
--data-dirand the target policy/resource are valid. - Check flush thresholds and polling;
0can disable individual triggers. - Check disk space, ownership, I/O errors, and policy drift.
- Compare committed-tail rows/bytes with
system.partsprogress. - Inspect compaction/flush logs before restarting.
Part count or disk use keeps growing
- Confirm compaction is enabled (
--compact-poll-msis not zero). - Inspect active jobs, queued shards, completed merges, and I/O throttle.
- Check free space for compaction output and movement.
- Confirm TTL/policy definitions from the catalog, not a stale YAML file.
- Identify active scan epochs delaying physical part retirement.
- Tune only after foreground-latency and convergence measurements.
Stream is lagging, overflowing, or disconnected
SELECT subscription_id, query_id, client, psi_source_relation,
psi_pending_events, psi_pending_bytes, psi_overflow_count,
psi_delivery_lag_p95_us, psi_delivery_lag_p99_us
FROM system.subscriptions
ORDER BY psi_pending_bytes DESC;Fix downstream consumption, transport, and query cost. A disconnect is terminal for that subscription. Reopen only under an application retry/reconciliation policy; the current engine does not promise resume-token continuity.
If the source was dropped, the terminal event is intentional. A recreated table with the same name is a new generation.
Storage topology drift
At boot, YAML objects absent from the catalog are imported. Existing catalog objects win and differences warn.
- Compare
SHOW STORAGE RESOURCES/POOLS/POLICIESwith the file. - Decide which catalog change is intended.
- Use storage DDL to converge the running catalog.
- Drain before resource removal.
- Do not repeatedly edit YAML expecting it to overwrite existing objects.
Backup creation fails
Read the exact error. Missing checkpoint parts, WAL gaps/corruption, multi-root/mirror placement, inaccessible files, and exhausted capture retries are deliberate fail-closed conditions.
Repair source/storage health before retrying. Never remove a referenced object or edit a manifest to make the command pass.
Restore will not start
- Target must be empty or a matching tool-created restore target.
- Manifest, checksum, catalog identity, objects, checkpoints, and WAL chain must validate.
- An interrupted target remains
RESTORE_IN_PROGRESSand can resume only with the same manifest/sequence. - A successful target has
RESTORE_READY.
Do not start NYXDB, rename markers, or copy missing objects manually. Restore to a new empty directory if identity differs.
Upgrade startup fails
- Stop retry loops and preserve logs plus the untouched backup repository.
- Confirm the artifact and on-disk transition were supported by release notes.
- Do not run an older binary against a directory the new revision may have modified unless backward-open compatibility is explicit.
- Restore the verified pre-upgrade manifest into a new empty target.
- Require
RESTORE_READY, then start the old pinned artifact and validate.
Escalation bundle
Provide:
- exact reproduction or incident timeline;
- build/artifact identity and full startup configuration;
- minimal affected schema and query;
- relevant system-table snapshots;
- logs spanning the first symptom;
- storage/cgroup/kernel facts;
- backup/restore manifest identifiers; and
- a focused profile or thread dump when SQL telemetry cannot attribute the issue.
Remove unrelated application data while preserving identifiers, sequence frontiers, timings, and error text needed for diagnosis.