From Claude DB
Audits database concurrency correctness: transaction isolation levels, lost-update races, queue-worker contention (SKIP LOCKED), idempotency for KV/document/write-column stores, and advisory locks.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-db:db-concurrencyThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Correctness under concurrent writes is a **Performance & Scale** (axis `performance`) concern: it
Correctness under concurrent writes is a Performance & Scale (axis performance) concern: it
governs both throughput and whether data stays consistent under load. Feeds relational Concurrencia
w12 (and the Idempotencia category in KV/document/wide-column profiles).
READ COMMITTED default vs
REPEATABLE READ/SERIALIZABLE) appropriate for its invariants? Money/inventory updates under
READ COMMITTED without locking are exposed to anomalies.SELECT balance; …app math…; UPDATE balance=$new without
SELECT … FOR UPDATE, atomic UPDATE … SET x = x - $n, or optimistic version check. Classic
double-spend race.SELECT … FOR UPDATE without SKIP LOCKED serialize
all workers onto one row; recommend FOR UPDATE SKIP LOCKED.pg_advisory_xact_lock() (transaction-scoped, auto-released at commit/rollback) for
leader election, single-runner cron jobs, and migration guards. Prefer the _xact_ variant over
session-scoped pg_advisory_lock() so the lock can't leak on a dropped connection. Note (cross-ref
M15): session-scoped advisory locks break transaction-mode pooling (PgBouncer) — the lock can land
on a different backend than the unlock; transaction-scoped advisory locks are pooling-safe.Feeds performance only (relational Concurrencia w12; Idempotencia in KV w18 / document / wide-column profiles).
Grep ORM/transaction source for isolation settings, read-then-write update sequences without locking,
FOR UPDATE lacking SKIP LOCKED, and missing conditional-write / idempotency keys on KV/doc/WC
writes. Static findings are directional — actual contention is runtime (needs_api / Tier-2).
Default isolation (Tier-1): SHOW transaction_isolation; (method connection_introspect).
Live contention (Tier-2):
SELECT wait_event_type, wait_event, count(*)
FROM pg_stat_activity WHERE state='active' GROUP BY 1,2 ORDER BY 3 DESC;
-- and deadlock/serialization rollback counts:
SELECT datname, deadlocks FROM pg_stat_database WHERE datname = current_database();
Method query_stat. Lock-wait / deadlock counts confirm a contention finding as established;
without sustained stats it stays directional.
Emit findings per schema/finding.schema.json. Examples:
M14.accounts.lost_update_balance — read-modify-write without locking/atomic update (severity:4,
fail, axis performance, confidence directional, fixable: proposed — atomic UPDATE or
FOR UPDATE).M14.jobs.no_skip_locked — worker poll without SKIP LOCKED (severity:3, warn, directional,
fixable: proposed).M14.payments.non_idempotent_write — KV/doc write with no idempotency key (severity:3, warn,
directional, fixable: advisory).Each finding: evidence.observed quotes the transaction/update code verbatim (secrets redacted);
verification.reproduce is the isolation/stat query above referencing $DATABASE_URL;
expected_impact is banded + confidence-tagged (no naked %).
directional and never cap.READ COMMITTED is correct for the majority of workloads; flag it only against an invariant that
demands stronger isolation, not as a blanket defect.proposed/
advisory, never auto.npx claudepluginhub hainrixz/claude-db --plugin claude-dbProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.