[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-cockroachdb-performing-cluster-maintenance":3,"mdc-ktcizi-key":36,"related-repo-cockroachdb-performing-cluster-maintenance":2808,"related-org-cockroachdb-performing-cluster-maintenance":2903},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":31,"sourceUrl":34,"mdContent":35},"performing-cluster-maintenance","perform CockroachDB cluster maintenance","Manages planned cluster maintenance across all tiers. Self-Hosted covers node drain procedures for OS patching, hardware changes, and configuration updates. Advanced\u002FBYOC covers maintenance window configuration, patch scheduling, deferral policies, and monitoring during CRL-managed maintenance. Standard and Basic maintenance is fully managed with no customer action. Use when planning maintenance, configuring maintenance windows, or preparing applications for maintenance events.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"cockroachdb","CockroachDB","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcockroachdb.png",[12,16,19],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Database","database",{"name":20,"slug":21,"type":15},"Deployment","deployment",3,"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fclaude-plugin","2026-07-12T07:57:05.399447",null,2,[28,29,8,30],"claude","cockroach-cloud","developer-tools",{"repoUrl":23,"stars":22,"forks":26,"topics":32,"description":33},[28,29,8,30],"CockroachDB development plugin for Claude","https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fclaude-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fcockroachdb-operations-and-lifecycle\u002Fperforming-cluster-maintenance","---\nname: performing-cluster-maintenance\ndescription: Manages planned cluster maintenance across all tiers. Self-Hosted covers node drain procedures for OS patching, hardware changes, and configuration updates. Advanced\u002FBYOC covers maintenance window configuration, patch scheduling, deferral policies, and monitoring during CRL-managed maintenance. Standard and Basic maintenance is fully managed with no customer action. Use when planning maintenance, configuring maintenance windows, or preparing applications for maintenance events.\ncompatibility: Self-Hosted requires CLI access and SQL access. Advanced\u002FBYOC requires Cloud Console with Cluster Admin role. Standard and Basic maintenance is fully managed.\nmetadata:\n  author: cockroachdb\n  version: \"2.0\"\n---\n\n# Performing Cluster Maintenance\n\nManages planned cluster maintenance across all deployment tiers. For Self-Hosted, this means draining and restarting individual nodes. For Advanced\u002FBYOC, this means configuring and managing maintenance windows for CRL-applied patches. For Standard and Basic, maintenance is fully managed with no customer action required.\n\n## When to Use This Skill\n\n- Planning OS patching, hardware changes, or configuration updates (Self-Hosted)\n- Configuring or modifying a maintenance window (Advanced, BYOC)\n- Setting patch deferral policies (Advanced, BYOC)\n- Monitoring during a CRL-managed maintenance event (Advanced, BYOC)\n- Running pre-maintenance validation checks (Self-Hosted, Advanced, BYOC)\n- Understanding how maintenance affects your application (all tiers)\n- Preparing applications for maintenance events (all tiers)\n\n**For permanent node removal:** Use [managing-cluster-capacity](..\u002Fmanaging-cluster-capacity\u002FSKILL.md).\n**For pre-maintenance health check:** Use [reviewing-cluster-health](..\u002Freviewing-cluster-health\u002FSKILL.md).\n**For version upgrades:** Use [upgrading-cluster-version](..\u002Fupgrading-cluster-version\u002FSKILL.md).\n\n---\n\n## Step 1: Gather Context\n\n### Required Context\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Deployment tier?** | Self-Hosted, Advanced, BYOC, Standard, Basic | Determines maintenance procedure |\n| **Goal?** | Plan maintenance, Configure maintenance window, Defer a patch, Monitor during maintenance, Prepare application | Routes to the right procedure |\n\n### Additional Context (by tier)\n\n**If Self-Hosted:**\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Maintenance type?** | OS patching, Hardware change, Binary upgrade, Config change, Planned restart | Affects sequencing and post-maintenance steps |\n| **Deployment platform?** | Bare metal, VMs, Kubernetes (Operator\u002FHelm\u002Fmanual) | Changes drain and restart commands |\n| **Process manager?** | systemd, manual, container orchestrator | Changes stop\u002Fstart commands |\n| **Target node ID?** | Node ID | Required for drain command |\n| **Long-running queries expected?** | Yes (increase drain timeout), No (default timeout) | Determines drain-wait parameter |\n\n**If Advanced or BYOC:**\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Maintenance window configured?** | Yes (what schedule), No | Determines if window needs setup |\n| **Patch pending?** | Yes, No, Don't know | Determines urgency |\n| **Cloud provider?** (BYOC only) | AWS, GCP, Azure | For infrastructure-level monitoring |\n\n**If Standard or Basic:** No context needed — maintenance is fully managed.\n\n### Context-Driven Routing\n\n| Tier | Go To |\n|------|-------|\n| Self-Hosted | [Self-Hosted Node Maintenance](#self-hosted-node-maintenance) |\n| Advanced | [Advanced Maintenance Management](#advanced-maintenance-management) |\n| BYOC | [BYOC Maintenance Management](#byoc-maintenance-management) |\n| Standard | [Standard Maintenance](#standard-maintenance) |\n| Basic | [Basic Maintenance](#basic-maintenance) |\n\n---\n\n## Self-Hosted Node Maintenance\n\n**Applies when:** Tier = Self-Hosted\n\nSelf-Hosted operators manage all maintenance directly. The core operation is draining a node to safely move leases and connections before stopping it.\n\n### Pre-Maintenance Checks\n\nRun all checks before any maintenance operation. **Stop if any check fails.**\n\n**Checks 1-3, 5 (node liveness, drain state, replication, version consistency):**\n\n```bash\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nStop conditions in the output:\n- any `is_live = false` (Check 1)\n- any `is_draining = true` (Check 2)\n- any `ranges_underreplicated > 0` (Check 3)\n- multiple distinct values in the `build` column (Check 5)\n\n**Check 4: No disruptive jobs running (WAIT or pause before proceeding):**\n\n```sql\nWITH j AS (SHOW JOBS)\nSELECT job_id, job_type, status, now() - created AS running_for FROM j\nWHERE status IN ('running', 'paused')\n  AND job_type IN ('SCHEMA CHANGE', 'BACKUP', 'RESTORE', 'IMPORT', 'NEW SCHEMA CHANGE');\n```\n\n**Check 6: Storage utilization safe (WARNING if any node > 70%):**\n\nNo production-safe SQL view exposes per-store capacity. Use the DB Console **Overview** → **Storage** page or scrape the per-node Prometheus endpoint:\n\n```bash\ncurl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep -E '^capacity( |_used|_available)'\n```\n\n**Stop conditions:** Do not proceed with maintenance if any node is not live, ranges are under-replicated, another node is draining, or a rolling upgrade is in progress. Wait for running jobs to complete or pause them.\n\nSee [maintenance-prechecks reference](references\u002Fmaintenance-prechecks.md) for a consolidated precheck script.\n\n### Execute Drain\n\n**If platform = bare metal or VMs:**\n```bash\ncockroach node drain --self --certs-dir=\u003Ccerts-dir> --host=\u003Cnode-address>\n```\n\n**If long-running queries expected:**\n```bash\ncockroach node drain --self --certs-dir=\u003Ccerts-dir> --host=\u003Cnode-address> --drain-wait=60s\n```\n\n**If platform = Kubernetes:**\n```bash\n# Operator handles drain automatically during pod eviction\nkubectl delete pod \u003Cpod-name>\n# Or for rolling restart:\nkubectl rollout restart statefulset cockroachdb\n```\n\n### Stop, Maintain, Restart\n\n**If process manager = systemd:**\n```bash\nsudo systemctl stop cockroachdb\n# ... perform maintenance ...\nsudo systemctl start cockroachdb\n```\n\n**If process manager = manual:**\n```bash\nkill -TERM $(pgrep -f 'cockroach start')\n# ... perform maintenance ...\ncockroach start --certs-dir=\u003Ccerts-dir> --store=\u003Cpath> --join=\u003Caddresses> --background\n```\n\nNever use `kill -9` unless the process is unresponsive to SIGTERM.\n\n### Post-Restart Verification\n\n```bash\ncockroach node status --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nThe restarted node should show `is_live = true`. The `replicas_leaseholders` column for that node should increase over the next several minutes as leases rebalance back.\n\nSee [drain-details reference](references\u002Fdrain-details.md) for drain phases, timeout configuration, and advanced monitoring.\n\n### Storage Maintenance\n\nPeriodic storage maintenance for Self-Hosted clusters:\n\n**Ballast file verification:**\n```bash\nls -lh \u003Cstore-path>\u002Fauxiliary\u002FEMERGENCY_BALLAST\n# If missing, create: cockroach debug ballast \u003Cstore-path>\u002Fauxiliary\u002FEMERGENCY_BALLAST --size=1GiB\n```\n\n**Disk utilization check:**\n\nUse the DB Console **Overview** → **Storage** page or the per-node Prometheus endpoint:\n\n```bash\ncurl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep -E '^capacity( |_used|_available)'\n```\n\nNodes above 70% utilization should be addressed before maintenance — draining a node temporarily increases load on remaining nodes.\n\n---\n\n## Advanced Maintenance Management\n\n**Applies when:** Tier = Advanced\n\nAdvanced clusters are managed by Cockroach Labs. CRL applies patches and performs infrastructure maintenance during the configured maintenance window. You do not drain or restart nodes — CRL handles this using rolling restarts.\n\n### Configure a Maintenance Window\n\n1. **Cloud Console → Cluster → Settings → Maintenance**\n2. Set a weekly 6-hour window\n   - Choose day of week (e.g., Sunday)\n   - Choose start time in UTC (e.g., 02:00 UTC)\n   - Window duration is 6 hours\n\nIf no window is configured, CRL applies patches at a time of their choosing.\n\n### View Current Maintenance Window\n\n**Cloud Console → Cluster → Settings → Maintenance** shows the current schedule.\n\n**Cloud API:**\n```bash\ncurl -s -H \"Authorization: Bearer $COCKROACH_API_KEY\" \\\n  \"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>\" | jq '.maintenance_window'\n```\n\n### Defer Patches\n\nIf a pending patch needs to be delayed (e.g., for testing):\n\n1. **Cloud Console → Cluster → Settings → Upgrades**\n2. Select deferral period: **30, 60, or 90 days**\n\nDeferred patches still apply at the end of the deferral period. Deferral only delays — it does not skip.\n\n### What Happens During Maintenance\n\n1. CRL applies the patch using rolling restarts — one node at a time\n2. Each node is drained (connections and leases moved), updated, and restarted\n3. Cluster remains available throughout (multi-node clusters)\n4. Performance may be slightly degraded during the window due to temporarily reduced capacity\n\n**Single-node clusters** experience downtime during maintenance. Consider scaling to 3+ nodes for production workloads.\n\n### Monitor During Maintenance\n\n**Cloud Console:**\n- Cluster Overview shows node status during rolling restarts\n- Metrics page shows temporary dips in QPS and capacity\n- Alerts may fire for transient node unavailability\n\n**During maintenance:**\n```bash\n# Check which nodes are currently live and what version they're on\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\n### Best Practices\n\n- Schedule during your lowest-traffic period\n- Monitor P99 latency during and after the window\n- Test patches in a staging cluster before production\n- Use deferral to align with your testing and release cadence\n- Configure alerting to notify during maintenance windows\n- Ensure applications implement connection retry with exponential backoff\n\n---\n\n## BYOC Maintenance Management\n\n**Applies when:** Tier = BYOC\n\nBYOC maintenance follows the same CRL-managed process as Advanced. Follow all [Advanced Maintenance Management](#advanced-maintenance-management) steps for maintenance window configuration, patch deferral, and monitoring.\n\n### Cloud Provider Visibility\n\nSince BYOC clusters run in your cloud account, you can directly observe maintenance operations:\n\n**If AWS:**\n- EC2 console shows instance restarts during rolling patches\n- CloudWatch metrics show brief dips during node cycling\n- Set up CloudWatch Alarms for instance state changes\n\n**If GCP:**\n- Compute Engine console shows VM restarts\n- Cloud Monitoring shows instance-level events\n- Configure alerting policies for instance uptime\n\n**If Azure:**\n- Azure portal shows VM cycling\n- Azure Monitor captures instance restart events\n- Set up Azure Alerts for VM availability\n\n### BYOC Infrastructure Maintenance\n\nFor infrastructure changes in your cloud account that CRL does not manage (VPC, security groups, IAM, DNS):\n\n- **Coordinate with CRL** before making changes that could affect the cluster\n- **Do not modify** CRL-managed resources (instances, disks, network interfaces)\n- Test infrastructure changes in a staging BYOC cluster first\n- Changes to networking (PrivateLink, PSC, VPC Peering) may require CRL coordination\n\n---\n\n## Standard Maintenance\n\n**Applies when:** Tier = Standard\n\nStandard is a multi-tenant managed service. There are no nodes, no maintenance windows to configure, and no patches to defer. Cockroach Labs manages all maintenance transparently.\n\n### What to Expect\n\n- Patches are applied during low-traffic periods chosen by CRL\n- No downtime during maintenance\n- No customer notification required for routine patches\n- Major version upgrades are also automatic\n\n### Application Preparation\n\n- Implement connection retry logic with exponential backoff\n- Handle brief latency variations gracefully\n- Monitor Cloud Console for any service notifications\n\n---\n\n## Basic Maintenance\n\n**Applies when:** Tier = Basic\n\nBasic is a serverless offering. All maintenance is fully managed by Cockroach Labs. The serverless architecture is designed for zero-downtime maintenance.\n\n### What to Expect\n\n- All patches and upgrades are transparent\n- No customer action required\n- No maintenance notifications needed\n\n### Application Preparation\n\n- Implement connection retry logic (recommended for all production applications)\n- Be aware that idle clusters may scale to zero — first reconnection after inactivity may have higher latency (this is not maintenance-related)\n\n---\n\n## Safety Considerations\n\n**Read-only monitoring queries are safe on all tiers.**\n\n**Self-Hosted node maintenance:**\n- Only drain one node at a time\n- Drain cannot be canceled once started\n- Applications must have connection retry logic\n- Load balancer detects drained node via `\u002Fhealth?ready=1` returning error\n- Never SIGKILL unless process is unresponsive to SIGTERM\n\n**Advanced\u002FBYOC maintenance windows:**\n- Single-node clusters experience downtime during maintenance\n- Deferring patches too long delays security fixes — evaluate CVE impact\n- Do not modify CRL-managed infrastructure during a maintenance window\n\n**Standard\u002FBasic:** No maintenance risk for customers — fully managed by CRL.\n\nSee [safety-guide reference](references\u002Fsafety-guide.md) for detailed risk matrix.\n\n## Troubleshooting\n\n| Issue | Tier | Fix |\n|-------|------|-----|\n| Drain very slow | SH | Check `SHOW CLUSTER STATEMENTS` for stuck queries |\n| Drain hangs | SH | Check logs; SIGTERM if unresponsive |\n| Node won't rejoin after restart | SH | Verify --join flag; check network connectivity |\n| Leases not returning to node | SH | Wait 5-10 min; monitor lease_count |\n| Clients not reconnecting | SH | Verify load balancer health check is passing |\n| Maintenance window missed | ADV\u002FBYOC | Contact support |\n| Unexpected maintenance outside window | ADV\u002FBYOC | Emergency patches may be applied outside windows; check Cloud Console notifications |\n| Latency during maintenance | ADV\u002FBYOC | Expected — temporarily reduced capacity; monitor and verify recovery after window |\n\n## References\n\n**Skill references:**\n- [Drain phases and timeouts](references\u002Fdrain-details.md)\n- [Maintenance prechecks](references\u002Fmaintenance-prechecks.md)\n- [Safety guide](references\u002Fsafety-guide.md)\n\n**Related skills:**\n- [reviewing-cluster-health](..\u002Freviewing-cluster-health\u002FSKILL.md)\n- [managing-cluster-capacity](..\u002Fmanaging-cluster-capacity\u002FSKILL.md)\n- [upgrading-cluster-version](..\u002Fupgrading-cluster-version\u002FSKILL.md)\n\n**Official CockroachDB Documentation:**\n- [Node Shutdown](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fnode-shutdown)\n- [cockroach node drain](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcockroach-node.html)\n- [Manage Advanced Cluster](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fadvanced-cluster-management)\n- [Cloud Upgrade Policy](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fupgrade-policy)\n",{"data":37,"body":41},{"name":4,"description":6,"compatibility":38,"metadata":39},"Self-Hosted requires CLI access and SQL access. Advanced\u002FBYOC requires Cloud Console with Cluster Admin role. Standard and Basic maintenance is fully managed.",{"author":8,"version":40},"2.0",{"type":42,"children":43},"root",[44,52,58,65,105,152,156,162,169,244,250,258,387,395,484,494,500,607,610,615,625,630,636,646,654,734,739,792,800,842,850,869,948,958,971,977,985,1046,1054,1117,1125,1212,1218,1226,1283,1291,1421,1434,1440,1494,1515,1527,1533,1538,1546,1597,1605,1621,1686,1691,1694,1699,1708,1713,1719,1754,1759,1765,1774,1782,1870,1876,1881,1902,1907,1913,1936,1946,1952,1960,1978,1986,2052,2058,2091,2094,2099,2108,2119,2125,2130,2138,2156,2164,2182,2190,2208,2214,2219,2252,2255,2260,2269,2274,2280,2303,2309,2327,2330,2335,2344,2349,2354,2372,2377,2390,2393,2399,2407,2415,2451,2459,2477,2487,2499,2505,2677,2683,2691,2718,2726,2750,2758,2802],{"type":45,"tag":46,"props":47,"children":48},"element","h1",{"id":4},[49],{"type":50,"value":51},"text","Performing Cluster Maintenance",{"type":45,"tag":53,"props":54,"children":55},"p",{},[56],{"type":50,"value":57},"Manages planned cluster maintenance across all deployment tiers. For Self-Hosted, this means draining and restarting individual nodes. For Advanced\u002FBYOC, this means configuring and managing maintenance windows for CRL-applied patches. For Standard and Basic, maintenance is fully managed with no customer action required.",{"type":45,"tag":59,"props":60,"children":62},"h2",{"id":61},"when-to-use-this-skill",[63],{"type":50,"value":64},"When to Use This Skill",{"type":45,"tag":66,"props":67,"children":68},"ul",{},[69,75,80,85,90,95,100],{"type":45,"tag":70,"props":71,"children":72},"li",{},[73],{"type":50,"value":74},"Planning OS patching, hardware changes, or configuration updates (Self-Hosted)",{"type":45,"tag":70,"props":76,"children":77},{},[78],{"type":50,"value":79},"Configuring or modifying a maintenance window (Advanced, BYOC)",{"type":45,"tag":70,"props":81,"children":82},{},[83],{"type":50,"value":84},"Setting patch deferral policies (Advanced, BYOC)",{"type":45,"tag":70,"props":86,"children":87},{},[88],{"type":50,"value":89},"Monitoring during a CRL-managed maintenance event (Advanced, BYOC)",{"type":45,"tag":70,"props":91,"children":92},{},[93],{"type":50,"value":94},"Running pre-maintenance validation checks (Self-Hosted, Advanced, BYOC)",{"type":45,"tag":70,"props":96,"children":97},{},[98],{"type":50,"value":99},"Understanding how maintenance affects your application (all tiers)",{"type":45,"tag":70,"props":101,"children":102},{},[103],{"type":50,"value":104},"Preparing applications for maintenance events (all tiers)",{"type":45,"tag":53,"props":106,"children":107},{},[108,114,116,123,125,130,131,137,138,143,144,150],{"type":45,"tag":109,"props":110,"children":111},"strong",{},[112],{"type":50,"value":113},"For permanent node removal:",{"type":50,"value":115}," Use ",{"type":45,"tag":117,"props":118,"children":120},"a",{"href":119},"..\u002Fmanaging-cluster-capacity\u002FSKILL.md",[121],{"type":50,"value":122},"managing-cluster-capacity",{"type":50,"value":124},".\n",{"type":45,"tag":109,"props":126,"children":127},{},[128],{"type":50,"value":129},"For pre-maintenance health check:",{"type":50,"value":115},{"type":45,"tag":117,"props":132,"children":134},{"href":133},"..\u002Freviewing-cluster-health\u002FSKILL.md",[135],{"type":50,"value":136},"reviewing-cluster-health",{"type":50,"value":124},{"type":45,"tag":109,"props":139,"children":140},{},[141],{"type":50,"value":142},"For version upgrades:",{"type":50,"value":115},{"type":45,"tag":117,"props":145,"children":147},{"href":146},"..\u002Fupgrading-cluster-version\u002FSKILL.md",[148],{"type":50,"value":149},"upgrading-cluster-version",{"type":50,"value":151},".",{"type":45,"tag":153,"props":154,"children":155},"hr",{},[],{"type":45,"tag":59,"props":157,"children":159},{"id":158},"step-1-gather-context",[160],{"type":50,"value":161},"Step 1: Gather Context",{"type":45,"tag":163,"props":164,"children":166},"h3",{"id":165},"required-context",[167],{"type":50,"value":168},"Required Context",{"type":45,"tag":170,"props":171,"children":172},"table",{},[173,197],{"type":45,"tag":174,"props":175,"children":176},"thead",{},[177],{"type":45,"tag":178,"props":179,"children":180},"tr",{},[181,187,192],{"type":45,"tag":182,"props":183,"children":184},"th",{},[185],{"type":50,"value":186},"Question",{"type":45,"tag":182,"props":188,"children":189},{},[190],{"type":50,"value":191},"Options",{"type":45,"tag":182,"props":193,"children":194},{},[195],{"type":50,"value":196},"Why It Matters",{"type":45,"tag":198,"props":199,"children":200},"tbody",{},[201,223],{"type":45,"tag":178,"props":202,"children":203},{},[204,213,218],{"type":45,"tag":205,"props":206,"children":207},"td",{},[208],{"type":45,"tag":109,"props":209,"children":210},{},[211],{"type":50,"value":212},"Deployment tier?",{"type":45,"tag":205,"props":214,"children":215},{},[216],{"type":50,"value":217},"Self-Hosted, Advanced, BYOC, Standard, Basic",{"type":45,"tag":205,"props":219,"children":220},{},[221],{"type":50,"value":222},"Determines maintenance procedure",{"type":45,"tag":178,"props":224,"children":225},{},[226,234,239],{"type":45,"tag":205,"props":227,"children":228},{},[229],{"type":45,"tag":109,"props":230,"children":231},{},[232],{"type":50,"value":233},"Goal?",{"type":45,"tag":205,"props":235,"children":236},{},[237],{"type":50,"value":238},"Plan maintenance, Configure maintenance window, Defer a patch, Monitor during maintenance, Prepare application",{"type":45,"tag":205,"props":240,"children":241},{},[242],{"type":50,"value":243},"Routes to the right procedure",{"type":45,"tag":163,"props":245,"children":247},{"id":246},"additional-context-by-tier",[248],{"type":50,"value":249},"Additional Context (by tier)",{"type":45,"tag":53,"props":251,"children":252},{},[253],{"type":45,"tag":109,"props":254,"children":255},{},[256],{"type":50,"value":257},"If Self-Hosted:",{"type":45,"tag":170,"props":259,"children":260},{},[261,279],{"type":45,"tag":174,"props":262,"children":263},{},[264],{"type":45,"tag":178,"props":265,"children":266},{},[267,271,275],{"type":45,"tag":182,"props":268,"children":269},{},[270],{"type":50,"value":186},{"type":45,"tag":182,"props":272,"children":273},{},[274],{"type":50,"value":191},{"type":45,"tag":182,"props":276,"children":277},{},[278],{"type":50,"value":196},{"type":45,"tag":198,"props":280,"children":281},{},[282,303,324,345,366],{"type":45,"tag":178,"props":283,"children":284},{},[285,293,298],{"type":45,"tag":205,"props":286,"children":287},{},[288],{"type":45,"tag":109,"props":289,"children":290},{},[291],{"type":50,"value":292},"Maintenance type?",{"type":45,"tag":205,"props":294,"children":295},{},[296],{"type":50,"value":297},"OS patching, Hardware change, Binary upgrade, Config change, Planned restart",{"type":45,"tag":205,"props":299,"children":300},{},[301],{"type":50,"value":302},"Affects sequencing and post-maintenance steps",{"type":45,"tag":178,"props":304,"children":305},{},[306,314,319],{"type":45,"tag":205,"props":307,"children":308},{},[309],{"type":45,"tag":109,"props":310,"children":311},{},[312],{"type":50,"value":313},"Deployment platform?",{"type":45,"tag":205,"props":315,"children":316},{},[317],{"type":50,"value":318},"Bare metal, VMs, Kubernetes (Operator\u002FHelm\u002Fmanual)",{"type":45,"tag":205,"props":320,"children":321},{},[322],{"type":50,"value":323},"Changes drain and restart commands",{"type":45,"tag":178,"props":325,"children":326},{},[327,335,340],{"type":45,"tag":205,"props":328,"children":329},{},[330],{"type":45,"tag":109,"props":331,"children":332},{},[333],{"type":50,"value":334},"Process manager?",{"type":45,"tag":205,"props":336,"children":337},{},[338],{"type":50,"value":339},"systemd, manual, container orchestrator",{"type":45,"tag":205,"props":341,"children":342},{},[343],{"type":50,"value":344},"Changes stop\u002Fstart commands",{"type":45,"tag":178,"props":346,"children":347},{},[348,356,361],{"type":45,"tag":205,"props":349,"children":350},{},[351],{"type":45,"tag":109,"props":352,"children":353},{},[354],{"type":50,"value":355},"Target node ID?",{"type":45,"tag":205,"props":357,"children":358},{},[359],{"type":50,"value":360},"Node ID",{"type":45,"tag":205,"props":362,"children":363},{},[364],{"type":50,"value":365},"Required for drain command",{"type":45,"tag":178,"props":367,"children":368},{},[369,377,382],{"type":45,"tag":205,"props":370,"children":371},{},[372],{"type":45,"tag":109,"props":373,"children":374},{},[375],{"type":50,"value":376},"Long-running queries expected?",{"type":45,"tag":205,"props":378,"children":379},{},[380],{"type":50,"value":381},"Yes (increase drain timeout), No (default timeout)",{"type":45,"tag":205,"props":383,"children":384},{},[385],{"type":50,"value":386},"Determines drain-wait parameter",{"type":45,"tag":53,"props":388,"children":389},{},[390],{"type":45,"tag":109,"props":391,"children":392},{},[393],{"type":50,"value":394},"If Advanced or BYOC:",{"type":45,"tag":170,"props":396,"children":397},{},[398,416],{"type":45,"tag":174,"props":399,"children":400},{},[401],{"type":45,"tag":178,"props":402,"children":403},{},[404,408,412],{"type":45,"tag":182,"props":405,"children":406},{},[407],{"type":50,"value":186},{"type":45,"tag":182,"props":409,"children":410},{},[411],{"type":50,"value":191},{"type":45,"tag":182,"props":413,"children":414},{},[415],{"type":50,"value":196},{"type":45,"tag":198,"props":417,"children":418},{},[419,440,461],{"type":45,"tag":178,"props":420,"children":421},{},[422,430,435],{"type":45,"tag":205,"props":423,"children":424},{},[425],{"type":45,"tag":109,"props":426,"children":427},{},[428],{"type":50,"value":429},"Maintenance window configured?",{"type":45,"tag":205,"props":431,"children":432},{},[433],{"type":50,"value":434},"Yes (what schedule), No",{"type":45,"tag":205,"props":436,"children":437},{},[438],{"type":50,"value":439},"Determines if window needs setup",{"type":45,"tag":178,"props":441,"children":442},{},[443,451,456],{"type":45,"tag":205,"props":444,"children":445},{},[446],{"type":45,"tag":109,"props":447,"children":448},{},[449],{"type":50,"value":450},"Patch pending?",{"type":45,"tag":205,"props":452,"children":453},{},[454],{"type":50,"value":455},"Yes, No, Don't know",{"type":45,"tag":205,"props":457,"children":458},{},[459],{"type":50,"value":460},"Determines urgency",{"type":45,"tag":178,"props":462,"children":463},{},[464,474,479],{"type":45,"tag":205,"props":465,"children":466},{},[467,472],{"type":45,"tag":109,"props":468,"children":469},{},[470],{"type":50,"value":471},"Cloud provider?",{"type":50,"value":473}," (BYOC only)",{"type":45,"tag":205,"props":475,"children":476},{},[477],{"type":50,"value":478},"AWS, GCP, Azure",{"type":45,"tag":205,"props":480,"children":481},{},[482],{"type":50,"value":483},"For infrastructure-level monitoring",{"type":45,"tag":53,"props":485,"children":486},{},[487,492],{"type":45,"tag":109,"props":488,"children":489},{},[490],{"type":50,"value":491},"If Standard or Basic:",{"type":50,"value":493}," No context needed — maintenance is fully managed.",{"type":45,"tag":163,"props":495,"children":497},{"id":496},"context-driven-routing",[498],{"type":50,"value":499},"Context-Driven Routing",{"type":45,"tag":170,"props":501,"children":502},{},[503,519],{"type":45,"tag":174,"props":504,"children":505},{},[506],{"type":45,"tag":178,"props":507,"children":508},{},[509,514],{"type":45,"tag":182,"props":510,"children":511},{},[512],{"type":50,"value":513},"Tier",{"type":45,"tag":182,"props":515,"children":516},{},[517],{"type":50,"value":518},"Go To",{"type":45,"tag":198,"props":520,"children":521},{},[522,539,556,573,590],{"type":45,"tag":178,"props":523,"children":524},{},[525,530],{"type":45,"tag":205,"props":526,"children":527},{},[528],{"type":50,"value":529},"Self-Hosted",{"type":45,"tag":205,"props":531,"children":532},{},[533],{"type":45,"tag":117,"props":534,"children":536},{"href":535},"#self-hosted-node-maintenance",[537],{"type":50,"value":538},"Self-Hosted Node Maintenance",{"type":45,"tag":178,"props":540,"children":541},{},[542,547],{"type":45,"tag":205,"props":543,"children":544},{},[545],{"type":50,"value":546},"Advanced",{"type":45,"tag":205,"props":548,"children":549},{},[550],{"type":45,"tag":117,"props":551,"children":553},{"href":552},"#advanced-maintenance-management",[554],{"type":50,"value":555},"Advanced Maintenance Management",{"type":45,"tag":178,"props":557,"children":558},{},[559,564],{"type":45,"tag":205,"props":560,"children":561},{},[562],{"type":50,"value":563},"BYOC",{"type":45,"tag":205,"props":565,"children":566},{},[567],{"type":45,"tag":117,"props":568,"children":570},{"href":569},"#byoc-maintenance-management",[571],{"type":50,"value":572},"BYOC Maintenance Management",{"type":45,"tag":178,"props":574,"children":575},{},[576,581],{"type":45,"tag":205,"props":577,"children":578},{},[579],{"type":50,"value":580},"Standard",{"type":45,"tag":205,"props":582,"children":583},{},[584],{"type":45,"tag":117,"props":585,"children":587},{"href":586},"#standard-maintenance",[588],{"type":50,"value":589},"Standard Maintenance",{"type":45,"tag":178,"props":591,"children":592},{},[593,598],{"type":45,"tag":205,"props":594,"children":595},{},[596],{"type":50,"value":597},"Basic",{"type":45,"tag":205,"props":599,"children":600},{},[601],{"type":45,"tag":117,"props":602,"children":604},{"href":603},"#basic-maintenance",[605],{"type":50,"value":606},"Basic Maintenance",{"type":45,"tag":153,"props":608,"children":609},{},[],{"type":45,"tag":59,"props":611,"children":613},{"id":612},"self-hosted-node-maintenance",[614],{"type":50,"value":538},{"type":45,"tag":53,"props":616,"children":617},{},[618,623],{"type":45,"tag":109,"props":619,"children":620},{},[621],{"type":50,"value":622},"Applies when:",{"type":50,"value":624}," Tier = Self-Hosted",{"type":45,"tag":53,"props":626,"children":627},{},[628],{"type":50,"value":629},"Self-Hosted operators manage all maintenance directly. The core operation is draining a node to safely move leases and connections before stopping it.",{"type":45,"tag":163,"props":631,"children":633},{"id":632},"pre-maintenance-checks",[634],{"type":50,"value":635},"Pre-Maintenance Checks",{"type":45,"tag":53,"props":637,"children":638},{},[639,641],{"type":50,"value":640},"Run all checks before any maintenance operation. ",{"type":45,"tag":109,"props":642,"children":643},{},[644],{"type":50,"value":645},"Stop if any check fails.",{"type":45,"tag":53,"props":647,"children":648},{},[649],{"type":45,"tag":109,"props":650,"children":651},{},[652],{"type":50,"value":653},"Checks 1-3, 5 (node liveness, drain state, replication, version consistency):",{"type":45,"tag":655,"props":656,"children":661},"pre",{"className":657,"code":658,"language":659,"meta":660,"style":660},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n","bash","",[662],{"type":45,"tag":663,"props":664,"children":665},"code",{"__ignoreMap":660},[666],{"type":45,"tag":667,"props":668,"children":671},"span",{"class":669,"line":670},"line",1,[672,678,684,689,694,699,705,710,715,720,724,729],{"type":45,"tag":667,"props":673,"children":675},{"style":674},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[676],{"type":50,"value":677},"cockroach",{"type":45,"tag":667,"props":679,"children":681},{"style":680},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[682],{"type":50,"value":683}," node",{"type":45,"tag":667,"props":685,"children":686},{"style":680},[687],{"type":50,"value":688}," status",{"type":45,"tag":667,"props":690,"children":691},{"style":680},[692],{"type":50,"value":693}," --decommission",{"type":45,"tag":667,"props":695,"children":696},{"style":680},[697],{"type":50,"value":698}," --certs-dir=",{"type":45,"tag":667,"props":700,"children":702},{"style":701},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[703],{"type":50,"value":704},"\u003C",{"type":45,"tag":667,"props":706,"children":707},{"style":680},[708],{"type":50,"value":709},"certs-dir",{"type":45,"tag":667,"props":711,"children":712},{"style":701},[713],{"type":50,"value":714},">",{"type":45,"tag":667,"props":716,"children":717},{"style":680},[718],{"type":50,"value":719}," --host=",{"type":45,"tag":667,"props":721,"children":722},{"style":701},[723],{"type":50,"value":704},{"type":45,"tag":667,"props":725,"children":726},{"style":680},[727],{"type":50,"value":728},"any-live-node",{"type":45,"tag":667,"props":730,"children":731},{"style":701},[732],{"type":50,"value":733},">\n",{"type":45,"tag":53,"props":735,"children":736},{},[737],{"type":50,"value":738},"Stop conditions in the output:",{"type":45,"tag":66,"props":740,"children":741},{},[742,755,767,779],{"type":45,"tag":70,"props":743,"children":744},{},[745,747,753],{"type":50,"value":746},"any ",{"type":45,"tag":663,"props":748,"children":750},{"className":749},[],[751],{"type":50,"value":752},"is_live = false",{"type":50,"value":754}," (Check 1)",{"type":45,"tag":70,"props":756,"children":757},{},[758,759,765],{"type":50,"value":746},{"type":45,"tag":663,"props":760,"children":762},{"className":761},[],[763],{"type":50,"value":764},"is_draining = true",{"type":50,"value":766}," (Check 2)",{"type":45,"tag":70,"props":768,"children":769},{},[770,771,777],{"type":50,"value":746},{"type":45,"tag":663,"props":772,"children":774},{"className":773},[],[775],{"type":50,"value":776},"ranges_underreplicated > 0",{"type":50,"value":778}," (Check 3)",{"type":45,"tag":70,"props":780,"children":781},{},[782,784,790],{"type":50,"value":783},"multiple distinct values in the ",{"type":45,"tag":663,"props":785,"children":787},{"className":786},[],[788],{"type":50,"value":789},"build",{"type":50,"value":791}," column (Check 5)",{"type":45,"tag":53,"props":793,"children":794},{},[795],{"type":45,"tag":109,"props":796,"children":797},{},[798],{"type":50,"value":799},"Check 4: No disruptive jobs running (WAIT or pause before proceeding):",{"type":45,"tag":655,"props":801,"children":805},{"className":802,"code":803,"language":804,"meta":660,"style":660},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","WITH j AS (SHOW JOBS)\nSELECT job_id, job_type, status, now() - created AS running_for FROM j\nWHERE status IN ('running', 'paused')\n  AND job_type IN ('SCHEMA CHANGE', 'BACKUP', 'RESTORE', 'IMPORT', 'NEW SCHEMA CHANGE');\n","sql",[806],{"type":45,"tag":663,"props":807,"children":808},{"__ignoreMap":660},[809,817,825,833],{"type":45,"tag":667,"props":810,"children":811},{"class":669,"line":670},[812],{"type":45,"tag":667,"props":813,"children":814},{},[815],{"type":50,"value":816},"WITH j AS (SHOW JOBS)\n",{"type":45,"tag":667,"props":818,"children":819},{"class":669,"line":26},[820],{"type":45,"tag":667,"props":821,"children":822},{},[823],{"type":50,"value":824},"SELECT job_id, job_type, status, now() - created AS running_for FROM j\n",{"type":45,"tag":667,"props":826,"children":827},{"class":669,"line":22},[828],{"type":45,"tag":667,"props":829,"children":830},{},[831],{"type":50,"value":832},"WHERE status IN ('running', 'paused')\n",{"type":45,"tag":667,"props":834,"children":836},{"class":669,"line":835},4,[837],{"type":45,"tag":667,"props":838,"children":839},{},[840],{"type":50,"value":841},"  AND job_type IN ('SCHEMA CHANGE', 'BACKUP', 'RESTORE', 'IMPORT', 'NEW SCHEMA CHANGE');\n",{"type":45,"tag":53,"props":843,"children":844},{},[845],{"type":45,"tag":109,"props":846,"children":847},{},[848],{"type":50,"value":849},"Check 6: Storage utilization safe (WARNING if any node > 70%):",{"type":45,"tag":53,"props":851,"children":852},{},[853,855,860,862,867],{"type":50,"value":854},"No production-safe SQL view exposes per-store capacity. Use the DB Console ",{"type":45,"tag":109,"props":856,"children":857},{},[858],{"type":50,"value":859},"Overview",{"type":50,"value":861}," → ",{"type":45,"tag":109,"props":863,"children":864},{},[865],{"type":50,"value":866},"Storage",{"type":50,"value":868}," page or scrape the per-node Prometheus endpoint:",{"type":45,"tag":655,"props":870,"children":872},{"className":657,"code":871,"language":659,"meta":660,"style":660},"curl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep -E '^capacity( |_used|_available)'\n",[873],{"type":45,"tag":663,"props":874,"children":875},{"__ignoreMap":660},[876],{"type":45,"tag":667,"props":877,"children":878},{"class":669,"line":670},[879,884,889,894,898,903,909,913,918,923,928,933,938,943],{"type":45,"tag":667,"props":880,"children":881},{"style":674},[882],{"type":50,"value":883},"curl",{"type":45,"tag":667,"props":885,"children":886},{"style":680},[887],{"type":50,"value":888}," -ks",{"type":45,"tag":667,"props":890,"children":891},{"style":680},[892],{"type":50,"value":893}," https:\u002F\u002F",{"type":45,"tag":667,"props":895,"children":896},{"style":701},[897],{"type":50,"value":704},{"type":45,"tag":667,"props":899,"children":900},{"style":680},[901],{"type":50,"value":902},"nod",{"type":45,"tag":667,"props":904,"children":906},{"style":905},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[907],{"type":50,"value":908},"e",{"type":45,"tag":667,"props":910,"children":911},{"style":701},[912],{"type":50,"value":714},{"type":45,"tag":667,"props":914,"children":915},{"style":680},[916],{"type":50,"value":917},":8080\u002F_status\u002Fvars",{"type":45,"tag":667,"props":919,"children":920},{"style":701},[921],{"type":50,"value":922}," |",{"type":45,"tag":667,"props":924,"children":925},{"style":674},[926],{"type":50,"value":927}," grep",{"type":45,"tag":667,"props":929,"children":930},{"style":680},[931],{"type":50,"value":932}," -E",{"type":45,"tag":667,"props":934,"children":935},{"style":701},[936],{"type":50,"value":937}," '",{"type":45,"tag":667,"props":939,"children":940},{"style":680},[941],{"type":50,"value":942},"^capacity( |_used|_available)",{"type":45,"tag":667,"props":944,"children":945},{"style":701},[946],{"type":50,"value":947},"'\n",{"type":45,"tag":53,"props":949,"children":950},{},[951,956],{"type":45,"tag":109,"props":952,"children":953},{},[954],{"type":50,"value":955},"Stop conditions:",{"type":50,"value":957}," Do not proceed with maintenance if any node is not live, ranges are under-replicated, another node is draining, or a rolling upgrade is in progress. Wait for running jobs to complete or pause them.",{"type":45,"tag":53,"props":959,"children":960},{},[961,963,969],{"type":50,"value":962},"See ",{"type":45,"tag":117,"props":964,"children":966},{"href":965},"references\u002Fmaintenance-prechecks.md",[967],{"type":50,"value":968},"maintenance-prechecks reference",{"type":50,"value":970}," for a consolidated precheck script.",{"type":45,"tag":163,"props":972,"children":974},{"id":973},"execute-drain",[975],{"type":50,"value":976},"Execute Drain",{"type":45,"tag":53,"props":978,"children":979},{},[980],{"type":45,"tag":109,"props":981,"children":982},{},[983],{"type":50,"value":984},"If platform = bare metal or VMs:",{"type":45,"tag":655,"props":986,"children":988},{"className":657,"code":987,"language":659,"meta":660,"style":660},"cockroach node drain --self --certs-dir=\u003Ccerts-dir> --host=\u003Cnode-address>\n",[989],{"type":45,"tag":663,"props":990,"children":991},{"__ignoreMap":660},[992],{"type":45,"tag":667,"props":993,"children":994},{"class":669,"line":670},[995,999,1003,1008,1013,1017,1021,1025,1029,1033,1037,1042],{"type":45,"tag":667,"props":996,"children":997},{"style":674},[998],{"type":50,"value":677},{"type":45,"tag":667,"props":1000,"children":1001},{"style":680},[1002],{"type":50,"value":683},{"type":45,"tag":667,"props":1004,"children":1005},{"style":680},[1006],{"type":50,"value":1007}," drain",{"type":45,"tag":667,"props":1009,"children":1010},{"style":680},[1011],{"type":50,"value":1012}," --self",{"type":45,"tag":667,"props":1014,"children":1015},{"style":680},[1016],{"type":50,"value":698},{"type":45,"tag":667,"props":1018,"children":1019},{"style":701},[1020],{"type":50,"value":704},{"type":45,"tag":667,"props":1022,"children":1023},{"style":680},[1024],{"type":50,"value":709},{"type":45,"tag":667,"props":1026,"children":1027},{"style":701},[1028],{"type":50,"value":714},{"type":45,"tag":667,"props":1030,"children":1031},{"style":680},[1032],{"type":50,"value":719},{"type":45,"tag":667,"props":1034,"children":1035},{"style":701},[1036],{"type":50,"value":704},{"type":45,"tag":667,"props":1038,"children":1039},{"style":680},[1040],{"type":50,"value":1041},"node-address",{"type":45,"tag":667,"props":1043,"children":1044},{"style":701},[1045],{"type":50,"value":733},{"type":45,"tag":53,"props":1047,"children":1048},{},[1049],{"type":45,"tag":109,"props":1050,"children":1051},{},[1052],{"type":50,"value":1053},"If long-running queries expected:",{"type":45,"tag":655,"props":1055,"children":1057},{"className":657,"code":1056,"language":659,"meta":660,"style":660},"cockroach node drain --self --certs-dir=\u003Ccerts-dir> --host=\u003Cnode-address> --drain-wait=60s\n",[1058],{"type":45,"tag":663,"props":1059,"children":1060},{"__ignoreMap":660},[1061],{"type":45,"tag":667,"props":1062,"children":1063},{"class":669,"line":670},[1064,1068,1072,1076,1080,1084,1088,1092,1096,1100,1104,1108,1112],{"type":45,"tag":667,"props":1065,"children":1066},{"style":674},[1067],{"type":50,"value":677},{"type":45,"tag":667,"props":1069,"children":1070},{"style":680},[1071],{"type":50,"value":683},{"type":45,"tag":667,"props":1073,"children":1074},{"style":680},[1075],{"type":50,"value":1007},{"type":45,"tag":667,"props":1077,"children":1078},{"style":680},[1079],{"type":50,"value":1012},{"type":45,"tag":667,"props":1081,"children":1082},{"style":680},[1083],{"type":50,"value":698},{"type":45,"tag":667,"props":1085,"children":1086},{"style":701},[1087],{"type":50,"value":704},{"type":45,"tag":667,"props":1089,"children":1090},{"style":680},[1091],{"type":50,"value":709},{"type":45,"tag":667,"props":1093,"children":1094},{"style":701},[1095],{"type":50,"value":714},{"type":45,"tag":667,"props":1097,"children":1098},{"style":680},[1099],{"type":50,"value":719},{"type":45,"tag":667,"props":1101,"children":1102},{"style":701},[1103],{"type":50,"value":704},{"type":45,"tag":667,"props":1105,"children":1106},{"style":680},[1107],{"type":50,"value":1041},{"type":45,"tag":667,"props":1109,"children":1110},{"style":701},[1111],{"type":50,"value":714},{"type":45,"tag":667,"props":1113,"children":1114},{"style":680},[1115],{"type":50,"value":1116}," --drain-wait=60s\n",{"type":45,"tag":53,"props":1118,"children":1119},{},[1120],{"type":45,"tag":109,"props":1121,"children":1122},{},[1123],{"type":50,"value":1124},"If platform = Kubernetes:",{"type":45,"tag":655,"props":1126,"children":1128},{"className":657,"code":1127,"language":659,"meta":660,"style":660},"# Operator handles drain automatically during pod eviction\nkubectl delete pod \u003Cpod-name>\n# Or for rolling restart:\nkubectl rollout restart statefulset cockroachdb\n",[1129],{"type":45,"tag":663,"props":1130,"children":1131},{"__ignoreMap":660},[1132,1141,1177,1185],{"type":45,"tag":667,"props":1133,"children":1134},{"class":669,"line":670},[1135],{"type":45,"tag":667,"props":1136,"children":1138},{"style":1137},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1139],{"type":50,"value":1140},"# Operator handles drain automatically during pod eviction\n",{"type":45,"tag":667,"props":1142,"children":1143},{"class":669,"line":26},[1144,1149,1154,1159,1164,1169,1173],{"type":45,"tag":667,"props":1145,"children":1146},{"style":674},[1147],{"type":50,"value":1148},"kubectl",{"type":45,"tag":667,"props":1150,"children":1151},{"style":680},[1152],{"type":50,"value":1153}," delete",{"type":45,"tag":667,"props":1155,"children":1156},{"style":680},[1157],{"type":50,"value":1158}," pod",{"type":45,"tag":667,"props":1160,"children":1161},{"style":701},[1162],{"type":50,"value":1163}," \u003C",{"type":45,"tag":667,"props":1165,"children":1166},{"style":680},[1167],{"type":50,"value":1168},"pod-nam",{"type":45,"tag":667,"props":1170,"children":1171},{"style":905},[1172],{"type":50,"value":908},{"type":45,"tag":667,"props":1174,"children":1175},{"style":701},[1176],{"type":50,"value":733},{"type":45,"tag":667,"props":1178,"children":1179},{"class":669,"line":22},[1180],{"type":45,"tag":667,"props":1181,"children":1182},{"style":1137},[1183],{"type":50,"value":1184},"# Or for rolling restart:\n",{"type":45,"tag":667,"props":1186,"children":1187},{"class":669,"line":835},[1188,1192,1197,1202,1207],{"type":45,"tag":667,"props":1189,"children":1190},{"style":674},[1191],{"type":50,"value":1148},{"type":45,"tag":667,"props":1193,"children":1194},{"style":680},[1195],{"type":50,"value":1196}," rollout",{"type":45,"tag":667,"props":1198,"children":1199},{"style":680},[1200],{"type":50,"value":1201}," restart",{"type":45,"tag":667,"props":1203,"children":1204},{"style":680},[1205],{"type":50,"value":1206}," statefulset",{"type":45,"tag":667,"props":1208,"children":1209},{"style":680},[1210],{"type":50,"value":1211}," cockroachdb\n",{"type":45,"tag":163,"props":1213,"children":1215},{"id":1214},"stop-maintain-restart",[1216],{"type":50,"value":1217},"Stop, Maintain, Restart",{"type":45,"tag":53,"props":1219,"children":1220},{},[1221],{"type":45,"tag":109,"props":1222,"children":1223},{},[1224],{"type":50,"value":1225},"If process manager = systemd:",{"type":45,"tag":655,"props":1227,"children":1229},{"className":657,"code":1228,"language":659,"meta":660,"style":660},"sudo systemctl stop cockroachdb\n# ... perform maintenance ...\nsudo systemctl start cockroachdb\n",[1230],{"type":45,"tag":663,"props":1231,"children":1232},{"__ignoreMap":660},[1233,1255,1263],{"type":45,"tag":667,"props":1234,"children":1235},{"class":669,"line":670},[1236,1241,1246,1251],{"type":45,"tag":667,"props":1237,"children":1238},{"style":674},[1239],{"type":50,"value":1240},"sudo",{"type":45,"tag":667,"props":1242,"children":1243},{"style":680},[1244],{"type":50,"value":1245}," systemctl",{"type":45,"tag":667,"props":1247,"children":1248},{"style":680},[1249],{"type":50,"value":1250}," stop",{"type":45,"tag":667,"props":1252,"children":1253},{"style":680},[1254],{"type":50,"value":1211},{"type":45,"tag":667,"props":1256,"children":1257},{"class":669,"line":26},[1258],{"type":45,"tag":667,"props":1259,"children":1260},{"style":1137},[1261],{"type":50,"value":1262},"# ... perform maintenance ...\n",{"type":45,"tag":667,"props":1264,"children":1265},{"class":669,"line":22},[1266,1270,1274,1279],{"type":45,"tag":667,"props":1267,"children":1268},{"style":674},[1269],{"type":50,"value":1240},{"type":45,"tag":667,"props":1271,"children":1272},{"style":680},[1273],{"type":50,"value":1245},{"type":45,"tag":667,"props":1275,"children":1276},{"style":680},[1277],{"type":50,"value":1278}," start",{"type":45,"tag":667,"props":1280,"children":1281},{"style":680},[1282],{"type":50,"value":1211},{"type":45,"tag":53,"props":1284,"children":1285},{},[1286],{"type":45,"tag":109,"props":1287,"children":1288},{},[1289],{"type":50,"value":1290},"If process manager = manual:",{"type":45,"tag":655,"props":1292,"children":1294},{"className":657,"code":1293,"language":659,"meta":660,"style":660},"kill -TERM $(pgrep -f 'cockroach start')\n# ... perform maintenance ...\ncockroach start --certs-dir=\u003Ccerts-dir> --store=\u003Cpath> --join=\u003Caddresses> --background\n",[1295],{"type":45,"tag":663,"props":1296,"children":1297},{"__ignoreMap":660},[1298,1346,1353],{"type":45,"tag":667,"props":1299,"children":1300},{"class":669,"line":670},[1301,1307,1312,1317,1322,1327,1331,1336,1341],{"type":45,"tag":667,"props":1302,"children":1304},{"style":1303},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1305],{"type":50,"value":1306},"kill",{"type":45,"tag":667,"props":1308,"children":1309},{"style":680},[1310],{"type":50,"value":1311}," -TERM",{"type":45,"tag":667,"props":1313,"children":1314},{"style":701},[1315],{"type":50,"value":1316}," $(",{"type":45,"tag":667,"props":1318,"children":1319},{"style":674},[1320],{"type":50,"value":1321},"pgrep",{"type":45,"tag":667,"props":1323,"children":1324},{"style":680},[1325],{"type":50,"value":1326}," -f",{"type":45,"tag":667,"props":1328,"children":1329},{"style":701},[1330],{"type":50,"value":937},{"type":45,"tag":667,"props":1332,"children":1333},{"style":680},[1334],{"type":50,"value":1335},"cockroach start",{"type":45,"tag":667,"props":1337,"children":1338},{"style":701},[1339],{"type":50,"value":1340},"'",{"type":45,"tag":667,"props":1342,"children":1343},{"style":701},[1344],{"type":50,"value":1345},")\n",{"type":45,"tag":667,"props":1347,"children":1348},{"class":669,"line":26},[1349],{"type":45,"tag":667,"props":1350,"children":1351},{"style":1137},[1352],{"type":50,"value":1262},{"type":45,"tag":667,"props":1354,"children":1355},{"class":669,"line":22},[1356,1360,1364,1368,1372,1376,1380,1385,1389,1394,1398,1403,1407,1412,1416],{"type":45,"tag":667,"props":1357,"children":1358},{"style":674},[1359],{"type":50,"value":677},{"type":45,"tag":667,"props":1361,"children":1362},{"style":680},[1363],{"type":50,"value":1278},{"type":45,"tag":667,"props":1365,"children":1366},{"style":680},[1367],{"type":50,"value":698},{"type":45,"tag":667,"props":1369,"children":1370},{"style":701},[1371],{"type":50,"value":704},{"type":45,"tag":667,"props":1373,"children":1374},{"style":680},[1375],{"type":50,"value":709},{"type":45,"tag":667,"props":1377,"children":1378},{"style":701},[1379],{"type":50,"value":714},{"type":45,"tag":667,"props":1381,"children":1382},{"style":680},[1383],{"type":50,"value":1384}," --store=",{"type":45,"tag":667,"props":1386,"children":1387},{"style":701},[1388],{"type":50,"value":704},{"type":45,"tag":667,"props":1390,"children":1391},{"style":680},[1392],{"type":50,"value":1393},"path",{"type":45,"tag":667,"props":1395,"children":1396},{"style":701},[1397],{"type":50,"value":714},{"type":45,"tag":667,"props":1399,"children":1400},{"style":680},[1401],{"type":50,"value":1402}," --join=",{"type":45,"tag":667,"props":1404,"children":1405},{"style":701},[1406],{"type":50,"value":704},{"type":45,"tag":667,"props":1408,"children":1409},{"style":680},[1410],{"type":50,"value":1411},"addresses",{"type":45,"tag":667,"props":1413,"children":1414},{"style":701},[1415],{"type":50,"value":714},{"type":45,"tag":667,"props":1417,"children":1418},{"style":680},[1419],{"type":50,"value":1420}," --background\n",{"type":45,"tag":53,"props":1422,"children":1423},{},[1424,1426,1432],{"type":50,"value":1425},"Never use ",{"type":45,"tag":663,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":50,"value":1431},"kill -9",{"type":50,"value":1433}," unless the process is unresponsive to SIGTERM.",{"type":45,"tag":163,"props":1435,"children":1437},{"id":1436},"post-restart-verification",[1438],{"type":50,"value":1439},"Post-Restart Verification",{"type":45,"tag":655,"props":1441,"children":1443},{"className":657,"code":1442,"language":659,"meta":660,"style":660},"cockroach node status --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n",[1444],{"type":45,"tag":663,"props":1445,"children":1446},{"__ignoreMap":660},[1447],{"type":45,"tag":667,"props":1448,"children":1449},{"class":669,"line":670},[1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490],{"type":45,"tag":667,"props":1451,"children":1452},{"style":674},[1453],{"type":50,"value":677},{"type":45,"tag":667,"props":1455,"children":1456},{"style":680},[1457],{"type":50,"value":683},{"type":45,"tag":667,"props":1459,"children":1460},{"style":680},[1461],{"type":50,"value":688},{"type":45,"tag":667,"props":1463,"children":1464},{"style":680},[1465],{"type":50,"value":698},{"type":45,"tag":667,"props":1467,"children":1468},{"style":701},[1469],{"type":50,"value":704},{"type":45,"tag":667,"props":1471,"children":1472},{"style":680},[1473],{"type":50,"value":709},{"type":45,"tag":667,"props":1475,"children":1476},{"style":701},[1477],{"type":50,"value":714},{"type":45,"tag":667,"props":1479,"children":1480},{"style":680},[1481],{"type":50,"value":719},{"type":45,"tag":667,"props":1483,"children":1484},{"style":701},[1485],{"type":50,"value":704},{"type":45,"tag":667,"props":1487,"children":1488},{"style":680},[1489],{"type":50,"value":728},{"type":45,"tag":667,"props":1491,"children":1492},{"style":701},[1493],{"type":50,"value":733},{"type":45,"tag":53,"props":1495,"children":1496},{},[1497,1499,1505,1507,1513],{"type":50,"value":1498},"The restarted node should show ",{"type":45,"tag":663,"props":1500,"children":1502},{"className":1501},[],[1503],{"type":50,"value":1504},"is_live = true",{"type":50,"value":1506},". The ",{"type":45,"tag":663,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":50,"value":1512},"replicas_leaseholders",{"type":50,"value":1514}," column for that node should increase over the next several minutes as leases rebalance back.",{"type":45,"tag":53,"props":1516,"children":1517},{},[1518,1519,1525],{"type":50,"value":962},{"type":45,"tag":117,"props":1520,"children":1522},{"href":1521},"references\u002Fdrain-details.md",[1523],{"type":50,"value":1524},"drain-details reference",{"type":50,"value":1526}," for drain phases, timeout configuration, and advanced monitoring.",{"type":45,"tag":163,"props":1528,"children":1530},{"id":1529},"storage-maintenance",[1531],{"type":50,"value":1532},"Storage Maintenance",{"type":45,"tag":53,"props":1534,"children":1535},{},[1536],{"type":50,"value":1537},"Periodic storage maintenance for Self-Hosted clusters:",{"type":45,"tag":53,"props":1539,"children":1540},{},[1541],{"type":45,"tag":109,"props":1542,"children":1543},{},[1544],{"type":50,"value":1545},"Ballast file verification:",{"type":45,"tag":655,"props":1547,"children":1549},{"className":657,"code":1548,"language":659,"meta":660,"style":660},"ls -lh \u003Cstore-path>\u002Fauxiliary\u002FEMERGENCY_BALLAST\n# If missing, create: cockroach debug ballast \u003Cstore-path>\u002Fauxiliary\u002FEMERGENCY_BALLAST --size=1GiB\n",[1550],{"type":45,"tag":663,"props":1551,"children":1552},{"__ignoreMap":660},[1553,1589],{"type":45,"tag":667,"props":1554,"children":1555},{"class":669,"line":670},[1556,1561,1566,1570,1575,1580,1584],{"type":45,"tag":667,"props":1557,"children":1558},{"style":674},[1559],{"type":50,"value":1560},"ls",{"type":45,"tag":667,"props":1562,"children":1563},{"style":680},[1564],{"type":50,"value":1565}," -lh",{"type":45,"tag":667,"props":1567,"children":1568},{"style":701},[1569],{"type":50,"value":1163},{"type":45,"tag":667,"props":1571,"children":1572},{"style":680},[1573],{"type":50,"value":1574},"store-pat",{"type":45,"tag":667,"props":1576,"children":1577},{"style":905},[1578],{"type":50,"value":1579},"h",{"type":45,"tag":667,"props":1581,"children":1582},{"style":701},[1583],{"type":50,"value":714},{"type":45,"tag":667,"props":1585,"children":1586},{"style":680},[1587],{"type":50,"value":1588},"\u002Fauxiliary\u002FEMERGENCY_BALLAST\n",{"type":45,"tag":667,"props":1590,"children":1591},{"class":669,"line":26},[1592],{"type":45,"tag":667,"props":1593,"children":1594},{"style":1137},[1595],{"type":50,"value":1596},"# If missing, create: cockroach debug ballast \u003Cstore-path>\u002Fauxiliary\u002FEMERGENCY_BALLAST --size=1GiB\n",{"type":45,"tag":53,"props":1598,"children":1599},{},[1600],{"type":45,"tag":109,"props":1601,"children":1602},{},[1603],{"type":50,"value":1604},"Disk utilization check:",{"type":45,"tag":53,"props":1606,"children":1607},{},[1608,1610,1614,1615,1619],{"type":50,"value":1609},"Use the DB Console ",{"type":45,"tag":109,"props":1611,"children":1612},{},[1613],{"type":50,"value":859},{"type":50,"value":861},{"type":45,"tag":109,"props":1616,"children":1617},{},[1618],{"type":50,"value":866},{"type":50,"value":1620}," page or the per-node Prometheus endpoint:",{"type":45,"tag":655,"props":1622,"children":1623},{"className":657,"code":871,"language":659,"meta":660,"style":660},[1624],{"type":45,"tag":663,"props":1625,"children":1626},{"__ignoreMap":660},[1627],{"type":45,"tag":667,"props":1628,"children":1629},{"class":669,"line":670},[1630,1634,1638,1642,1646,1650,1654,1658,1662,1666,1670,1674,1678,1682],{"type":45,"tag":667,"props":1631,"children":1632},{"style":674},[1633],{"type":50,"value":883},{"type":45,"tag":667,"props":1635,"children":1636},{"style":680},[1637],{"type":50,"value":888},{"type":45,"tag":667,"props":1639,"children":1640},{"style":680},[1641],{"type":50,"value":893},{"type":45,"tag":667,"props":1643,"children":1644},{"style":701},[1645],{"type":50,"value":704},{"type":45,"tag":667,"props":1647,"children":1648},{"style":680},[1649],{"type":50,"value":902},{"type":45,"tag":667,"props":1651,"children":1652},{"style":905},[1653],{"type":50,"value":908},{"type":45,"tag":667,"props":1655,"children":1656},{"style":701},[1657],{"type":50,"value":714},{"type":45,"tag":667,"props":1659,"children":1660},{"style":680},[1661],{"type":50,"value":917},{"type":45,"tag":667,"props":1663,"children":1664},{"style":701},[1665],{"type":50,"value":922},{"type":45,"tag":667,"props":1667,"children":1668},{"style":674},[1669],{"type":50,"value":927},{"type":45,"tag":667,"props":1671,"children":1672},{"style":680},[1673],{"type":50,"value":932},{"type":45,"tag":667,"props":1675,"children":1676},{"style":701},[1677],{"type":50,"value":937},{"type":45,"tag":667,"props":1679,"children":1680},{"style":680},[1681],{"type":50,"value":942},{"type":45,"tag":667,"props":1683,"children":1684},{"style":701},[1685],{"type":50,"value":947},{"type":45,"tag":53,"props":1687,"children":1688},{},[1689],{"type":50,"value":1690},"Nodes above 70% utilization should be addressed before maintenance — draining a node temporarily increases load on remaining nodes.",{"type":45,"tag":153,"props":1692,"children":1693},{},[],{"type":45,"tag":59,"props":1695,"children":1697},{"id":1696},"advanced-maintenance-management",[1698],{"type":50,"value":555},{"type":45,"tag":53,"props":1700,"children":1701},{},[1702,1706],{"type":45,"tag":109,"props":1703,"children":1704},{},[1705],{"type":50,"value":622},{"type":50,"value":1707}," Tier = Advanced",{"type":45,"tag":53,"props":1709,"children":1710},{},[1711],{"type":50,"value":1712},"Advanced clusters are managed by Cockroach Labs. CRL applies patches and performs infrastructure maintenance during the configured maintenance window. You do not drain or restart nodes — CRL handles this using rolling restarts.",{"type":45,"tag":163,"props":1714,"children":1716},{"id":1715},"configure-a-maintenance-window",[1717],{"type":50,"value":1718},"Configure a Maintenance Window",{"type":45,"tag":1720,"props":1721,"children":1722},"ol",{},[1723,1731],{"type":45,"tag":70,"props":1724,"children":1725},{},[1726],{"type":45,"tag":109,"props":1727,"children":1728},{},[1729],{"type":50,"value":1730},"Cloud Console → Cluster → Settings → Maintenance",{"type":45,"tag":70,"props":1732,"children":1733},{},[1734,1736],{"type":50,"value":1735},"Set a weekly 6-hour window\n",{"type":45,"tag":66,"props":1737,"children":1738},{},[1739,1744,1749],{"type":45,"tag":70,"props":1740,"children":1741},{},[1742],{"type":50,"value":1743},"Choose day of week (e.g., Sunday)",{"type":45,"tag":70,"props":1745,"children":1746},{},[1747],{"type":50,"value":1748},"Choose start time in UTC (e.g., 02:00 UTC)",{"type":45,"tag":70,"props":1750,"children":1751},{},[1752],{"type":50,"value":1753},"Window duration is 6 hours",{"type":45,"tag":53,"props":1755,"children":1756},{},[1757],{"type":50,"value":1758},"If no window is configured, CRL applies patches at a time of their choosing.",{"type":45,"tag":163,"props":1760,"children":1762},{"id":1761},"view-current-maintenance-window",[1763],{"type":50,"value":1764},"View Current Maintenance Window",{"type":45,"tag":53,"props":1766,"children":1767},{},[1768,1772],{"type":45,"tag":109,"props":1769,"children":1770},{},[1771],{"type":50,"value":1730},{"type":50,"value":1773}," shows the current schedule.",{"type":45,"tag":53,"props":1775,"children":1776},{},[1777],{"type":45,"tag":109,"props":1778,"children":1779},{},[1780],{"type":50,"value":1781},"Cloud API:",{"type":45,"tag":655,"props":1783,"children":1785},{"className":657,"code":1784,"language":659,"meta":660,"style":660},"curl -s -H \"Authorization: Bearer $COCKROACH_API_KEY\" \\\n  \"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>\" | jq '.maintenance_window'\n",[1786],{"type":45,"tag":663,"props":1787,"children":1788},{"__ignoreMap":660},[1789,1831],{"type":45,"tag":667,"props":1790,"children":1791},{"class":669,"line":670},[1792,1796,1801,1806,1811,1816,1821,1826],{"type":45,"tag":667,"props":1793,"children":1794},{"style":674},[1795],{"type":50,"value":883},{"type":45,"tag":667,"props":1797,"children":1798},{"style":680},[1799],{"type":50,"value":1800}," -s",{"type":45,"tag":667,"props":1802,"children":1803},{"style":680},[1804],{"type":50,"value":1805}," -H",{"type":45,"tag":667,"props":1807,"children":1808},{"style":701},[1809],{"type":50,"value":1810}," \"",{"type":45,"tag":667,"props":1812,"children":1813},{"style":680},[1814],{"type":50,"value":1815},"Authorization: Bearer ",{"type":45,"tag":667,"props":1817,"children":1818},{"style":905},[1819],{"type":50,"value":1820},"$COCKROACH_API_KEY",{"type":45,"tag":667,"props":1822,"children":1823},{"style":701},[1824],{"type":50,"value":1825},"\"",{"type":45,"tag":667,"props":1827,"children":1828},{"style":905},[1829],{"type":50,"value":1830}," \\\n",{"type":45,"tag":667,"props":1832,"children":1833},{"class":669,"line":26},[1834,1839,1844,1848,1852,1857,1861,1866],{"type":45,"tag":667,"props":1835,"children":1836},{"style":701},[1837],{"type":50,"value":1838},"  \"",{"type":45,"tag":667,"props":1840,"children":1841},{"style":680},[1842],{"type":50,"value":1843},"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>",{"type":45,"tag":667,"props":1845,"children":1846},{"style":701},[1847],{"type":50,"value":1825},{"type":45,"tag":667,"props":1849,"children":1850},{"style":701},[1851],{"type":50,"value":922},{"type":45,"tag":667,"props":1853,"children":1854},{"style":674},[1855],{"type":50,"value":1856}," jq",{"type":45,"tag":667,"props":1858,"children":1859},{"style":701},[1860],{"type":50,"value":937},{"type":45,"tag":667,"props":1862,"children":1863},{"style":680},[1864],{"type":50,"value":1865},".maintenance_window",{"type":45,"tag":667,"props":1867,"children":1868},{"style":701},[1869],{"type":50,"value":947},{"type":45,"tag":163,"props":1871,"children":1873},{"id":1872},"defer-patches",[1874],{"type":50,"value":1875},"Defer Patches",{"type":45,"tag":53,"props":1877,"children":1878},{},[1879],{"type":50,"value":1880},"If a pending patch needs to be delayed (e.g., for testing):",{"type":45,"tag":1720,"props":1882,"children":1883},{},[1884,1892],{"type":45,"tag":70,"props":1885,"children":1886},{},[1887],{"type":45,"tag":109,"props":1888,"children":1889},{},[1890],{"type":50,"value":1891},"Cloud Console → Cluster → Settings → Upgrades",{"type":45,"tag":70,"props":1893,"children":1894},{},[1895,1897],{"type":50,"value":1896},"Select deferral period: ",{"type":45,"tag":109,"props":1898,"children":1899},{},[1900],{"type":50,"value":1901},"30, 60, or 90 days",{"type":45,"tag":53,"props":1903,"children":1904},{},[1905],{"type":50,"value":1906},"Deferred patches still apply at the end of the deferral period. Deferral only delays — it does not skip.",{"type":45,"tag":163,"props":1908,"children":1910},{"id":1909},"what-happens-during-maintenance",[1911],{"type":50,"value":1912},"What Happens During Maintenance",{"type":45,"tag":1720,"props":1914,"children":1915},{},[1916,1921,1926,1931],{"type":45,"tag":70,"props":1917,"children":1918},{},[1919],{"type":50,"value":1920},"CRL applies the patch using rolling restarts — one node at a time",{"type":45,"tag":70,"props":1922,"children":1923},{},[1924],{"type":50,"value":1925},"Each node is drained (connections and leases moved), updated, and restarted",{"type":45,"tag":70,"props":1927,"children":1928},{},[1929],{"type":50,"value":1930},"Cluster remains available throughout (multi-node clusters)",{"type":45,"tag":70,"props":1932,"children":1933},{},[1934],{"type":50,"value":1935},"Performance may be slightly degraded during the window due to temporarily reduced capacity",{"type":45,"tag":53,"props":1937,"children":1938},{},[1939,1944],{"type":45,"tag":109,"props":1940,"children":1941},{},[1942],{"type":50,"value":1943},"Single-node clusters",{"type":50,"value":1945}," experience downtime during maintenance. Consider scaling to 3+ nodes for production workloads.",{"type":45,"tag":163,"props":1947,"children":1949},{"id":1948},"monitor-during-maintenance",[1950],{"type":50,"value":1951},"Monitor During Maintenance",{"type":45,"tag":53,"props":1953,"children":1954},{},[1955],{"type":45,"tag":109,"props":1956,"children":1957},{},[1958],{"type":50,"value":1959},"Cloud Console:",{"type":45,"tag":66,"props":1961,"children":1962},{},[1963,1968,1973],{"type":45,"tag":70,"props":1964,"children":1965},{},[1966],{"type":50,"value":1967},"Cluster Overview shows node status during rolling restarts",{"type":45,"tag":70,"props":1969,"children":1970},{},[1971],{"type":50,"value":1972},"Metrics page shows temporary dips in QPS and capacity",{"type":45,"tag":70,"props":1974,"children":1975},{},[1976],{"type":50,"value":1977},"Alerts may fire for transient node unavailability",{"type":45,"tag":53,"props":1979,"children":1980},{},[1981],{"type":45,"tag":109,"props":1982,"children":1983},{},[1984],{"type":50,"value":1985},"During maintenance:",{"type":45,"tag":655,"props":1987,"children":1989},{"className":657,"code":1988,"language":659,"meta":660,"style":660},"# Check which nodes are currently live and what version they're on\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n",[1990],{"type":45,"tag":663,"props":1991,"children":1992},{"__ignoreMap":660},[1993,2001],{"type":45,"tag":667,"props":1994,"children":1995},{"class":669,"line":670},[1996],{"type":45,"tag":667,"props":1997,"children":1998},{"style":1137},[1999],{"type":50,"value":2000},"# Check which nodes are currently live and what version they're on\n",{"type":45,"tag":667,"props":2002,"children":2003},{"class":669,"line":26},[2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048],{"type":45,"tag":667,"props":2005,"children":2006},{"style":674},[2007],{"type":50,"value":677},{"type":45,"tag":667,"props":2009,"children":2010},{"style":680},[2011],{"type":50,"value":683},{"type":45,"tag":667,"props":2013,"children":2014},{"style":680},[2015],{"type":50,"value":688},{"type":45,"tag":667,"props":2017,"children":2018},{"style":680},[2019],{"type":50,"value":693},{"type":45,"tag":667,"props":2021,"children":2022},{"style":680},[2023],{"type":50,"value":698},{"type":45,"tag":667,"props":2025,"children":2026},{"style":701},[2027],{"type":50,"value":704},{"type":45,"tag":667,"props":2029,"children":2030},{"style":680},[2031],{"type":50,"value":709},{"type":45,"tag":667,"props":2033,"children":2034},{"style":701},[2035],{"type":50,"value":714},{"type":45,"tag":667,"props":2037,"children":2038},{"style":680},[2039],{"type":50,"value":719},{"type":45,"tag":667,"props":2041,"children":2042},{"style":701},[2043],{"type":50,"value":704},{"type":45,"tag":667,"props":2045,"children":2046},{"style":680},[2047],{"type":50,"value":728},{"type":45,"tag":667,"props":2049,"children":2050},{"style":701},[2051],{"type":50,"value":733},{"type":45,"tag":163,"props":2053,"children":2055},{"id":2054},"best-practices",[2056],{"type":50,"value":2057},"Best Practices",{"type":45,"tag":66,"props":2059,"children":2060},{},[2061,2066,2071,2076,2081,2086],{"type":45,"tag":70,"props":2062,"children":2063},{},[2064],{"type":50,"value":2065},"Schedule during your lowest-traffic period",{"type":45,"tag":70,"props":2067,"children":2068},{},[2069],{"type":50,"value":2070},"Monitor P99 latency during and after the window",{"type":45,"tag":70,"props":2072,"children":2073},{},[2074],{"type":50,"value":2075},"Test patches in a staging cluster before production",{"type":45,"tag":70,"props":2077,"children":2078},{},[2079],{"type":50,"value":2080},"Use deferral to align with your testing and release cadence",{"type":45,"tag":70,"props":2082,"children":2083},{},[2084],{"type":50,"value":2085},"Configure alerting to notify during maintenance windows",{"type":45,"tag":70,"props":2087,"children":2088},{},[2089],{"type":50,"value":2090},"Ensure applications implement connection retry with exponential backoff",{"type":45,"tag":153,"props":2092,"children":2093},{},[],{"type":45,"tag":59,"props":2095,"children":2097},{"id":2096},"byoc-maintenance-management",[2098],{"type":50,"value":572},{"type":45,"tag":53,"props":2100,"children":2101},{},[2102,2106],{"type":45,"tag":109,"props":2103,"children":2104},{},[2105],{"type":50,"value":622},{"type":50,"value":2107}," Tier = BYOC",{"type":45,"tag":53,"props":2109,"children":2110},{},[2111,2113,2117],{"type":50,"value":2112},"BYOC maintenance follows the same CRL-managed process as Advanced. Follow all ",{"type":45,"tag":117,"props":2114,"children":2115},{"href":552},[2116],{"type":50,"value":555},{"type":50,"value":2118}," steps for maintenance window configuration, patch deferral, and monitoring.",{"type":45,"tag":163,"props":2120,"children":2122},{"id":2121},"cloud-provider-visibility",[2123],{"type":50,"value":2124},"Cloud Provider Visibility",{"type":45,"tag":53,"props":2126,"children":2127},{},[2128],{"type":50,"value":2129},"Since BYOC clusters run in your cloud account, you can directly observe maintenance operations:",{"type":45,"tag":53,"props":2131,"children":2132},{},[2133],{"type":45,"tag":109,"props":2134,"children":2135},{},[2136],{"type":50,"value":2137},"If AWS:",{"type":45,"tag":66,"props":2139,"children":2140},{},[2141,2146,2151],{"type":45,"tag":70,"props":2142,"children":2143},{},[2144],{"type":50,"value":2145},"EC2 console shows instance restarts during rolling patches",{"type":45,"tag":70,"props":2147,"children":2148},{},[2149],{"type":50,"value":2150},"CloudWatch metrics show brief dips during node cycling",{"type":45,"tag":70,"props":2152,"children":2153},{},[2154],{"type":50,"value":2155},"Set up CloudWatch Alarms for instance state changes",{"type":45,"tag":53,"props":2157,"children":2158},{},[2159],{"type":45,"tag":109,"props":2160,"children":2161},{},[2162],{"type":50,"value":2163},"If GCP:",{"type":45,"tag":66,"props":2165,"children":2166},{},[2167,2172,2177],{"type":45,"tag":70,"props":2168,"children":2169},{},[2170],{"type":50,"value":2171},"Compute Engine console shows VM restarts",{"type":45,"tag":70,"props":2173,"children":2174},{},[2175],{"type":50,"value":2176},"Cloud Monitoring shows instance-level events",{"type":45,"tag":70,"props":2178,"children":2179},{},[2180],{"type":50,"value":2181},"Configure alerting policies for instance uptime",{"type":45,"tag":53,"props":2183,"children":2184},{},[2185],{"type":45,"tag":109,"props":2186,"children":2187},{},[2188],{"type":50,"value":2189},"If Azure:",{"type":45,"tag":66,"props":2191,"children":2192},{},[2193,2198,2203],{"type":45,"tag":70,"props":2194,"children":2195},{},[2196],{"type":50,"value":2197},"Azure portal shows VM cycling",{"type":45,"tag":70,"props":2199,"children":2200},{},[2201],{"type":50,"value":2202},"Azure Monitor captures instance restart events",{"type":45,"tag":70,"props":2204,"children":2205},{},[2206],{"type":50,"value":2207},"Set up Azure Alerts for VM availability",{"type":45,"tag":163,"props":2209,"children":2211},{"id":2210},"byoc-infrastructure-maintenance",[2212],{"type":50,"value":2213},"BYOC Infrastructure Maintenance",{"type":45,"tag":53,"props":2215,"children":2216},{},[2217],{"type":50,"value":2218},"For infrastructure changes in your cloud account that CRL does not manage (VPC, security groups, IAM, DNS):",{"type":45,"tag":66,"props":2220,"children":2221},{},[2222,2232,2242,2247],{"type":45,"tag":70,"props":2223,"children":2224},{},[2225,2230],{"type":45,"tag":109,"props":2226,"children":2227},{},[2228],{"type":50,"value":2229},"Coordinate with CRL",{"type":50,"value":2231}," before making changes that could affect the cluster",{"type":45,"tag":70,"props":2233,"children":2234},{},[2235,2240],{"type":45,"tag":109,"props":2236,"children":2237},{},[2238],{"type":50,"value":2239},"Do not modify",{"type":50,"value":2241}," CRL-managed resources (instances, disks, network interfaces)",{"type":45,"tag":70,"props":2243,"children":2244},{},[2245],{"type":50,"value":2246},"Test infrastructure changes in a staging BYOC cluster first",{"type":45,"tag":70,"props":2248,"children":2249},{},[2250],{"type":50,"value":2251},"Changes to networking (PrivateLink, PSC, VPC Peering) may require CRL coordination",{"type":45,"tag":153,"props":2253,"children":2254},{},[],{"type":45,"tag":59,"props":2256,"children":2258},{"id":2257},"standard-maintenance",[2259],{"type":50,"value":589},{"type":45,"tag":53,"props":2261,"children":2262},{},[2263,2267],{"type":45,"tag":109,"props":2264,"children":2265},{},[2266],{"type":50,"value":622},{"type":50,"value":2268}," Tier = Standard",{"type":45,"tag":53,"props":2270,"children":2271},{},[2272],{"type":50,"value":2273},"Standard is a multi-tenant managed service. There are no nodes, no maintenance windows to configure, and no patches to defer. Cockroach Labs manages all maintenance transparently.",{"type":45,"tag":163,"props":2275,"children":2277},{"id":2276},"what-to-expect",[2278],{"type":50,"value":2279},"What to Expect",{"type":45,"tag":66,"props":2281,"children":2282},{},[2283,2288,2293,2298],{"type":45,"tag":70,"props":2284,"children":2285},{},[2286],{"type":50,"value":2287},"Patches are applied during low-traffic periods chosen by CRL",{"type":45,"tag":70,"props":2289,"children":2290},{},[2291],{"type":50,"value":2292},"No downtime during maintenance",{"type":45,"tag":70,"props":2294,"children":2295},{},[2296],{"type":50,"value":2297},"No customer notification required for routine patches",{"type":45,"tag":70,"props":2299,"children":2300},{},[2301],{"type":50,"value":2302},"Major version upgrades are also automatic",{"type":45,"tag":163,"props":2304,"children":2306},{"id":2305},"application-preparation",[2307],{"type":50,"value":2308},"Application Preparation",{"type":45,"tag":66,"props":2310,"children":2311},{},[2312,2317,2322],{"type":45,"tag":70,"props":2313,"children":2314},{},[2315],{"type":50,"value":2316},"Implement connection retry logic with exponential backoff",{"type":45,"tag":70,"props":2318,"children":2319},{},[2320],{"type":50,"value":2321},"Handle brief latency variations gracefully",{"type":45,"tag":70,"props":2323,"children":2324},{},[2325],{"type":50,"value":2326},"Monitor Cloud Console for any service notifications",{"type":45,"tag":153,"props":2328,"children":2329},{},[],{"type":45,"tag":59,"props":2331,"children":2333},{"id":2332},"basic-maintenance",[2334],{"type":50,"value":606},{"type":45,"tag":53,"props":2336,"children":2337},{},[2338,2342],{"type":45,"tag":109,"props":2339,"children":2340},{},[2341],{"type":50,"value":622},{"type":50,"value":2343}," Tier = Basic",{"type":45,"tag":53,"props":2345,"children":2346},{},[2347],{"type":50,"value":2348},"Basic is a serverless offering. All maintenance is fully managed by Cockroach Labs. The serverless architecture is designed for zero-downtime maintenance.",{"type":45,"tag":163,"props":2350,"children":2352},{"id":2351},"what-to-expect-1",[2353],{"type":50,"value":2279},{"type":45,"tag":66,"props":2355,"children":2356},{},[2357,2362,2367],{"type":45,"tag":70,"props":2358,"children":2359},{},[2360],{"type":50,"value":2361},"All patches and upgrades are transparent",{"type":45,"tag":70,"props":2363,"children":2364},{},[2365],{"type":50,"value":2366},"No customer action required",{"type":45,"tag":70,"props":2368,"children":2369},{},[2370],{"type":50,"value":2371},"No maintenance notifications needed",{"type":45,"tag":163,"props":2373,"children":2375},{"id":2374},"application-preparation-1",[2376],{"type":50,"value":2308},{"type":45,"tag":66,"props":2378,"children":2379},{},[2380,2385],{"type":45,"tag":70,"props":2381,"children":2382},{},[2383],{"type":50,"value":2384},"Implement connection retry logic (recommended for all production applications)",{"type":45,"tag":70,"props":2386,"children":2387},{},[2388],{"type":50,"value":2389},"Be aware that idle clusters may scale to zero — first reconnection after inactivity may have higher latency (this is not maintenance-related)",{"type":45,"tag":153,"props":2391,"children":2392},{},[],{"type":45,"tag":59,"props":2394,"children":2396},{"id":2395},"safety-considerations",[2397],{"type":50,"value":2398},"Safety Considerations",{"type":45,"tag":53,"props":2400,"children":2401},{},[2402],{"type":45,"tag":109,"props":2403,"children":2404},{},[2405],{"type":50,"value":2406},"Read-only monitoring queries are safe on all tiers.",{"type":45,"tag":53,"props":2408,"children":2409},{},[2410],{"type":45,"tag":109,"props":2411,"children":2412},{},[2413],{"type":50,"value":2414},"Self-Hosted node maintenance:",{"type":45,"tag":66,"props":2416,"children":2417},{},[2418,2423,2428,2433,2446],{"type":45,"tag":70,"props":2419,"children":2420},{},[2421],{"type":50,"value":2422},"Only drain one node at a time",{"type":45,"tag":70,"props":2424,"children":2425},{},[2426],{"type":50,"value":2427},"Drain cannot be canceled once started",{"type":45,"tag":70,"props":2429,"children":2430},{},[2431],{"type":50,"value":2432},"Applications must have connection retry logic",{"type":45,"tag":70,"props":2434,"children":2435},{},[2436,2438,2444],{"type":50,"value":2437},"Load balancer detects drained node via ",{"type":45,"tag":663,"props":2439,"children":2441},{"className":2440},[],[2442],{"type":50,"value":2443},"\u002Fhealth?ready=1",{"type":50,"value":2445}," returning error",{"type":45,"tag":70,"props":2447,"children":2448},{},[2449],{"type":50,"value":2450},"Never SIGKILL unless process is unresponsive to SIGTERM",{"type":45,"tag":53,"props":2452,"children":2453},{},[2454],{"type":45,"tag":109,"props":2455,"children":2456},{},[2457],{"type":50,"value":2458},"Advanced\u002FBYOC maintenance windows:",{"type":45,"tag":66,"props":2460,"children":2461},{},[2462,2467,2472],{"type":45,"tag":70,"props":2463,"children":2464},{},[2465],{"type":50,"value":2466},"Single-node clusters experience downtime during maintenance",{"type":45,"tag":70,"props":2468,"children":2469},{},[2470],{"type":50,"value":2471},"Deferring patches too long delays security fixes — evaluate CVE impact",{"type":45,"tag":70,"props":2473,"children":2474},{},[2475],{"type":50,"value":2476},"Do not modify CRL-managed infrastructure during a maintenance window",{"type":45,"tag":53,"props":2478,"children":2479},{},[2480,2485],{"type":45,"tag":109,"props":2481,"children":2482},{},[2483],{"type":50,"value":2484},"Standard\u002FBasic:",{"type":50,"value":2486}," No maintenance risk for customers — fully managed by CRL.",{"type":45,"tag":53,"props":2488,"children":2489},{},[2490,2491,2497],{"type":50,"value":962},{"type":45,"tag":117,"props":2492,"children":2494},{"href":2493},"references\u002Fsafety-guide.md",[2495],{"type":50,"value":2496},"safety-guide reference",{"type":50,"value":2498}," for detailed risk matrix.",{"type":45,"tag":59,"props":2500,"children":2502},{"id":2501},"troubleshooting",[2503],{"type":50,"value":2504},"Troubleshooting",{"type":45,"tag":170,"props":2506,"children":2507},{},[2508,2528],{"type":45,"tag":174,"props":2509,"children":2510},{},[2511],{"type":45,"tag":178,"props":2512,"children":2513},{},[2514,2519,2523],{"type":45,"tag":182,"props":2515,"children":2516},{},[2517],{"type":50,"value":2518},"Issue",{"type":45,"tag":182,"props":2520,"children":2521},{},[2522],{"type":50,"value":513},{"type":45,"tag":182,"props":2524,"children":2525},{},[2526],{"type":50,"value":2527},"Fix",{"type":45,"tag":198,"props":2529,"children":2530},{},[2531,2557,2574,2591,2608,2625,2643,2660],{"type":45,"tag":178,"props":2532,"children":2533},{},[2534,2539,2544],{"type":45,"tag":205,"props":2535,"children":2536},{},[2537],{"type":50,"value":2538},"Drain very slow",{"type":45,"tag":205,"props":2540,"children":2541},{},[2542],{"type":50,"value":2543},"SH",{"type":45,"tag":205,"props":2545,"children":2546},{},[2547,2549,2555],{"type":50,"value":2548},"Check ",{"type":45,"tag":663,"props":2550,"children":2552},{"className":2551},[],[2553],{"type":50,"value":2554},"SHOW CLUSTER STATEMENTS",{"type":50,"value":2556}," for stuck queries",{"type":45,"tag":178,"props":2558,"children":2559},{},[2560,2565,2569],{"type":45,"tag":205,"props":2561,"children":2562},{},[2563],{"type":50,"value":2564},"Drain hangs",{"type":45,"tag":205,"props":2566,"children":2567},{},[2568],{"type":50,"value":2543},{"type":45,"tag":205,"props":2570,"children":2571},{},[2572],{"type":50,"value":2573},"Check logs; SIGTERM if unresponsive",{"type":45,"tag":178,"props":2575,"children":2576},{},[2577,2582,2586],{"type":45,"tag":205,"props":2578,"children":2579},{},[2580],{"type":50,"value":2581},"Node won't rejoin after restart",{"type":45,"tag":205,"props":2583,"children":2584},{},[2585],{"type":50,"value":2543},{"type":45,"tag":205,"props":2587,"children":2588},{},[2589],{"type":50,"value":2590},"Verify --join flag; check network connectivity",{"type":45,"tag":178,"props":2592,"children":2593},{},[2594,2599,2603],{"type":45,"tag":205,"props":2595,"children":2596},{},[2597],{"type":50,"value":2598},"Leases not returning to node",{"type":45,"tag":205,"props":2600,"children":2601},{},[2602],{"type":50,"value":2543},{"type":45,"tag":205,"props":2604,"children":2605},{},[2606],{"type":50,"value":2607},"Wait 5-10 min; monitor lease_count",{"type":45,"tag":178,"props":2609,"children":2610},{},[2611,2616,2620],{"type":45,"tag":205,"props":2612,"children":2613},{},[2614],{"type":50,"value":2615},"Clients not reconnecting",{"type":45,"tag":205,"props":2617,"children":2618},{},[2619],{"type":50,"value":2543},{"type":45,"tag":205,"props":2621,"children":2622},{},[2623],{"type":50,"value":2624},"Verify load balancer health check is passing",{"type":45,"tag":178,"props":2626,"children":2627},{},[2628,2633,2638],{"type":45,"tag":205,"props":2629,"children":2630},{},[2631],{"type":50,"value":2632},"Maintenance window missed",{"type":45,"tag":205,"props":2634,"children":2635},{},[2636],{"type":50,"value":2637},"ADV\u002FBYOC",{"type":45,"tag":205,"props":2639,"children":2640},{},[2641],{"type":50,"value":2642},"Contact support",{"type":45,"tag":178,"props":2644,"children":2645},{},[2646,2651,2655],{"type":45,"tag":205,"props":2647,"children":2648},{},[2649],{"type":50,"value":2650},"Unexpected maintenance outside window",{"type":45,"tag":205,"props":2652,"children":2653},{},[2654],{"type":50,"value":2637},{"type":45,"tag":205,"props":2656,"children":2657},{},[2658],{"type":50,"value":2659},"Emergency patches may be applied outside windows; check Cloud Console notifications",{"type":45,"tag":178,"props":2661,"children":2662},{},[2663,2668,2672],{"type":45,"tag":205,"props":2664,"children":2665},{},[2666],{"type":50,"value":2667},"Latency during maintenance",{"type":45,"tag":205,"props":2669,"children":2670},{},[2671],{"type":50,"value":2637},{"type":45,"tag":205,"props":2673,"children":2674},{},[2675],{"type":50,"value":2676},"Expected — temporarily reduced capacity; monitor and verify recovery after window",{"type":45,"tag":59,"props":2678,"children":2680},{"id":2679},"references",[2681],{"type":50,"value":2682},"References",{"type":45,"tag":53,"props":2684,"children":2685},{},[2686],{"type":45,"tag":109,"props":2687,"children":2688},{},[2689],{"type":50,"value":2690},"Skill references:",{"type":45,"tag":66,"props":2692,"children":2693},{},[2694,2702,2710],{"type":45,"tag":70,"props":2695,"children":2696},{},[2697],{"type":45,"tag":117,"props":2698,"children":2699},{"href":1521},[2700],{"type":50,"value":2701},"Drain phases and timeouts",{"type":45,"tag":70,"props":2703,"children":2704},{},[2705],{"type":45,"tag":117,"props":2706,"children":2707},{"href":965},[2708],{"type":50,"value":2709},"Maintenance prechecks",{"type":45,"tag":70,"props":2711,"children":2712},{},[2713],{"type":45,"tag":117,"props":2714,"children":2715},{"href":2493},[2716],{"type":50,"value":2717},"Safety guide",{"type":45,"tag":53,"props":2719,"children":2720},{},[2721],{"type":45,"tag":109,"props":2722,"children":2723},{},[2724],{"type":50,"value":2725},"Related skills:",{"type":45,"tag":66,"props":2727,"children":2728},{},[2729,2736,2743],{"type":45,"tag":70,"props":2730,"children":2731},{},[2732],{"type":45,"tag":117,"props":2733,"children":2734},{"href":133},[2735],{"type":50,"value":136},{"type":45,"tag":70,"props":2737,"children":2738},{},[2739],{"type":45,"tag":117,"props":2740,"children":2741},{"href":119},[2742],{"type":50,"value":122},{"type":45,"tag":70,"props":2744,"children":2745},{},[2746],{"type":45,"tag":117,"props":2747,"children":2748},{"href":146},[2749],{"type":50,"value":149},{"type":45,"tag":53,"props":2751,"children":2752},{},[2753],{"type":45,"tag":109,"props":2754,"children":2755},{},[2756],{"type":50,"value":2757},"Official CockroachDB Documentation:",{"type":45,"tag":66,"props":2759,"children":2760},{},[2761,2772,2782,2792],{"type":45,"tag":70,"props":2762,"children":2763},{},[2764],{"type":45,"tag":117,"props":2765,"children":2769},{"href":2766,"rel":2767},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fnode-shutdown",[2768],"nofollow",[2770],{"type":50,"value":2771},"Node Shutdown",{"type":45,"tag":70,"props":2773,"children":2774},{},[2775],{"type":45,"tag":117,"props":2776,"children":2779},{"href":2777,"rel":2778},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcockroach-node.html",[2768],[2780],{"type":50,"value":2781},"cockroach node drain",{"type":45,"tag":70,"props":2783,"children":2784},{},[2785],{"type":45,"tag":117,"props":2786,"children":2789},{"href":2787,"rel":2788},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fadvanced-cluster-management",[2768],[2790],{"type":50,"value":2791},"Manage Advanced Cluster",{"type":45,"tag":70,"props":2793,"children":2794},{},[2795],{"type":45,"tag":117,"props":2796,"children":2799},{"href":2797,"rel":2798},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fupgrade-policy",[2768],[2800],{"type":50,"value":2801},"Cloud Upgrade Policy",{"type":45,"tag":2803,"props":2804,"children":2805},"style",{},[2806],{"type":50,"value":2807},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2809,"total":2902},[2810,2824,2838,2855,2866,2879,2892],{"slug":2811,"name":2811,"fn":2812,"description":2813,"org":2814,"tags":2815,"stars":22,"repoUrl":23,"updatedAt":2823},"analyzing-range-distribution","analyze CockroachDB range distribution and health","Analyzes CockroachDB range distribution across tables and indexes using SHOW RANGES to identify range count, size patterns, leaseholder placement, and replication health. Use when investigating hotspots, uneven data distribution, range fragmentation, or validating zone configuration effects without DB Console access.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2816,2817,2820],{"name":17,"slug":18,"type":15},{"name":2818,"slug":2819,"type":15},"Monitoring","monitoring",{"name":2821,"slug":2822,"type":15},"Performance","performance","2026-07-12T07:57:18.753533",{"slug":2825,"name":2825,"fn":2826,"description":2827,"org":2828,"tags":2829,"stars":22,"repoUrl":23,"updatedAt":2837},"analyzing-schema-change-storage-risk","analyze schema change storage requirements","Estimates storage requirements for CockroachDB online schema change backfills using SHOW RANGES WITH DETAILS, KEYS, INDEXES. Use before CREATE INDEX, ADD COLUMN with INDEX\u002FUNIQUE, ALTER PRIMARY KEY, CREATE MATERIALIZED VIEW, CREATE TABLE AS, REFRESH, or SET LOCALITY on tables with large per-index footprints, to avoid mid-backfill disk exhaustion.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2830,2833,2834,2835],{"name":2831,"slug":2832,"type":15},"Data Modeling","data-modeling",{"name":17,"slug":18,"type":15},{"name":2821,"slug":2822,"type":15},{"name":2836,"slug":804,"type":15},"SQL","2026-07-12T07:57:22.763788",{"slug":2839,"name":2839,"fn":2840,"description":2841,"org":2842,"tags":2843,"stars":22,"repoUrl":23,"updatedAt":2854},"auditing-cis-benchmark","audit CockroachDB clusters against CIS benchmarks","Audits a self-hosted CockroachDB cluster against the CIS CockroachDB Benchmark v1.0.0 Level 1 controls. Supports two audit depths — quick automated scans and full CIS audit procedures. Produces a structured PASS\u002FFAIL\u002FMANUAL report covering installation, system hardening, logging, user access, data protection, and CockroachDB settings. Use when preparing for CIS compliance assessments, hardening self-hosted deployments, or validating security posture against industry benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2844,2847,2850,2851],{"name":2845,"slug":2846,"type":15},"Audit","audit",{"name":2848,"slug":2849,"type":15},"Compliance","compliance",{"name":17,"slug":18,"type":15},{"name":2852,"slug":2853,"type":15},"Security","security","2026-07-18T05:48:00.862384",{"slug":2856,"name":2856,"fn":2857,"description":2858,"org":2859,"tags":2860,"stars":22,"repoUrl":23,"updatedAt":2865},"auditing-cloud-cluster-security","audit CockroachDB cluster security posture","Audits the security posture of a CockroachDB cluster (Cloud or self-hosted) across network, authentication, authorization, encryption, audit logging, and backup dimensions. Use when assessing cluster security readiness, preparing for compliance reviews, or investigating security configuration gaps.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2861,2862,2863,2864],{"name":2845,"slug":2846,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":2852,"slug":2853,"type":15},"2026-07-12T07:57:01.506735",{"slug":2867,"name":2867,"fn":2868,"description":2869,"org":2870,"tags":2871,"stars":22,"repoUrl":23,"updatedAt":2878},"auditing-table-statistics","audit optimizer table statistics","Audits optimizer table statistics for staleness, missing coverage, and data quality issues using SHOW STATISTICS. Use when diagnosing poor query performance, unexpected plan changes, or after bulk data changes to identify stale statistics requiring refresh via CREATE STATISTICS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2872,2873,2876,2877],{"name":2845,"slug":2846,"type":15},{"name":2874,"slug":2875,"type":15},"Data Analysis","data-analysis",{"name":17,"slug":18,"type":15},{"name":2821,"slug":2822,"type":15},"2026-07-12T07:57:16.190081",{"slug":2880,"name":2880,"fn":2881,"description":2882,"org":2883,"tags":2884,"stars":22,"repoUrl":23,"updatedAt":2891},"benchmarking-transaction-patterns","benchmark CockroachDB transaction patterns","Guides benchmarking and comparing explicit multi-statement transactions versus single-statement CTE transactions in CockroachDB, with fair test methodology, contention analysis, and performance interpretation. Use when comparing transaction formulations, benchmarking CockroachDB workloads under contention, investigating retry pressure, or deciding whether to rewrite multi-step application flows into single SQL statements.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2885,2886,2889,2890],{"name":17,"slug":18,"type":15},{"name":2887,"slug":2888,"type":15},"Engineering","engineering",{"name":2821,"slug":2822,"type":15},{"name":2836,"slug":804,"type":15},"2026-07-12T07:57:26.543278",{"slug":2893,"name":2893,"fn":2894,"description":2895,"org":2896,"tags":2897,"stars":22,"repoUrl":23,"updatedAt":2901},"cockroachdb-sql","write and optimize CockroachDB SQL","Use when writing, generating, or optimizing SQL for CockroachDB, designing CockroachDB schemas, or when the user asks about CockroachDB-specific SQL patterns, type mappings, and distributed database best practices. Also use when encountering CockroachDB anti-patterns like missing primary keys, sequential ID hotspots, or incorrect type usage.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2898,2899,2900],{"name":17,"slug":18,"type":15},{"name":2821,"slug":2822,"type":15},{"name":2836,"slug":804,"type":15},"2026-07-25T05:31:22.562808",34,{"items":2904,"total":3022},[2905,2922,2934,2949,2960,2970,2981,2987,2994,3001,3008,3015],{"slug":2906,"name":2906,"fn":2907,"description":2908,"org":2909,"tags":2910,"stars":2919,"repoUrl":2920,"updatedAt":2921},"collecting-cockroachdb-operator-escalation-packet","collect CockroachDB operator escalation packets","Collects a complete CockroachDB Operator escalation packet for TSC\u002FTSE or operator-team handoff, including Helm state, Kubernetes resources, logs, operation-specific evidence, pprof goroutine dumps, metrics, and a customer action timeline. Use when general diagnosis cannot resolve an operator-managed CockroachDB Helm issue or before restarting a stuck operator.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2911,2912,2915,2918],{"name":17,"slug":18,"type":15},{"name":2913,"slug":2914,"type":15},"Incident Response","incident-response",{"name":2916,"slug":2917,"type":15},"Kubernetes","kubernetes",{"name":2818,"slug":2819,"type":15},105,"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fhelm-charts","2026-07-12T07:57:25.288146",{"slug":2923,"name":2923,"fn":2924,"description":2925,"org":2926,"tags":2927,"stars":2919,"repoUrl":2920,"updatedAt":2933},"configuring-cockroachdb-helm-tls","configure TLS for CockroachDB Helm charts","Selects and validates TLS settings for CockroachDB Helm chart deployments, including self-signer, cert-manager, and external certificate modes. Use when a customer needs secure CockroachDB Helm values, certificate secret mapping, cert-manager integration, or TLS install troubleshooting before deploying the chart.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2928,2929,2932],{"name":20,"slug":21,"type":15},{"name":2930,"slug":2931,"type":15},"Encryption","encryption",{"name":2852,"slug":2853,"type":15},"2026-07-12T07:56:37.675396",{"slug":2935,"name":2935,"fn":2936,"description":2937,"org":2938,"tags":2939,"stars":2919,"repoUrl":2920,"updatedAt":2948},"debugging-cockroachdb-operator-migrations","debug CockroachDB Operator migration scenarios","Debugs CockroachDB Operator migration scenarios, including Helm StatefulSet to v1beta1 CrdbNode migration and public operator v1alpha1 to v1beta1 migration. Use when migration labels, migration phases, source StatefulSet ownership, converted CRDs, PVC ownership, or post-migration reconciliation are unclear or stuck.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2940,2941,2944,2945],{"name":17,"slug":18,"type":15},{"name":2942,"slug":2943,"type":15},"Debugging","debugging",{"name":2916,"slug":2917,"type":15},{"name":2946,"slug":2947,"type":15},"Migration","migration","2026-07-12T07:56:48.360871",{"slug":2950,"name":2950,"fn":2951,"description":2952,"org":2953,"tags":2954,"stars":2919,"repoUrl":2920,"updatedAt":2959},"diagnosing-cockroachdb-helm-deployments","diagnose CockroachDB Helm chart deployments","Diagnoses failed or unhealthy CockroachDB Helm chart deployments by checking Helm release state, operator health, CrdbCluster and CrdbNode status, pod readiness, RBAC, webhooks, TLS, upgrades, scaling, PVCs, DNS, and multi-region assumptions. Use when Helm install or upgrade fails, pods are not Ready, or the operator is not reconciling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2955,2956,2957,2958],{"name":17,"slug":18,"type":15},{"name":2942,"slug":2943,"type":15},{"name":20,"slug":21,"type":15},{"name":2916,"slug":2917,"type":15},"2026-07-12T07:57:24.018818",{"slug":2961,"name":2961,"fn":2962,"description":2963,"org":2964,"tags":2965,"stars":2919,"repoUrl":2920,"updatedAt":2969},"installing-cockroachdb-with-helm","install CockroachDB using Helm","Guides customer-facing installation of CockroachDB on Kubernetes using the CockroachDB split Helm charts and operator-managed v1beta1 resources. Use when installing CockroachDB with Helm, choosing between published and local split charts, verifying a new install, or helping an agent complete first-time Kubernetes onboarding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2966,2967,2968],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":2916,"slug":2917,"type":15},"2026-07-12T07:56:45.777567",{"slug":2971,"name":2971,"fn":2972,"description":2973,"org":2974,"tags":2975,"stars":2919,"repoUrl":2920,"updatedAt":2980},"validating-cockroachdb-helm-multiregion","validate CockroachDB multi-region Helm deployments","Validates CockroachDB Helm chart values and Kubernetes prerequisites for operator-managed multi-region deployments. Use before adding a region, deploying CockroachDB across multiple Kubernetes clusters, checking region DNS domains, or confirming that all regions share certificate and networking assumptions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2976,2977,2978,2979],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":2916,"slug":2917,"type":15},{"name":13,"slug":14,"type":15},"2026-07-12T07:56:47.082609",{"slug":2811,"name":2811,"fn":2812,"description":2813,"org":2982,"tags":2983,"stars":22,"repoUrl":23,"updatedAt":2823},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2984,2985,2986],{"name":17,"slug":18,"type":15},{"name":2818,"slug":2819,"type":15},{"name":2821,"slug":2822,"type":15},{"slug":2825,"name":2825,"fn":2826,"description":2827,"org":2988,"tags":2989,"stars":22,"repoUrl":23,"updatedAt":2837},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2990,2991,2992,2993],{"name":2831,"slug":2832,"type":15},{"name":17,"slug":18,"type":15},{"name":2821,"slug":2822,"type":15},{"name":2836,"slug":804,"type":15},{"slug":2839,"name":2839,"fn":2840,"description":2841,"org":2995,"tags":2996,"stars":22,"repoUrl":23,"updatedAt":2854},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2997,2998,2999,3000],{"name":2845,"slug":2846,"type":15},{"name":2848,"slug":2849,"type":15},{"name":17,"slug":18,"type":15},{"name":2852,"slug":2853,"type":15},{"slug":2856,"name":2856,"fn":2857,"description":2858,"org":3002,"tags":3003,"stars":22,"repoUrl":23,"updatedAt":2865},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3004,3005,3006,3007],{"name":2845,"slug":2846,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":2852,"slug":2853,"type":15},{"slug":2867,"name":2867,"fn":2868,"description":2869,"org":3009,"tags":3010,"stars":22,"repoUrl":23,"updatedAt":2878},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3011,3012,3013,3014],{"name":2845,"slug":2846,"type":15},{"name":2874,"slug":2875,"type":15},{"name":17,"slug":18,"type":15},{"name":2821,"slug":2822,"type":15},{"slug":2880,"name":2880,"fn":2881,"description":2882,"org":3016,"tags":3017,"stars":22,"repoUrl":23,"updatedAt":2891},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3018,3019,3020,3021],{"name":17,"slug":18,"type":15},{"name":2887,"slug":2888,"type":15},{"name":2821,"slug":2822,"type":15},{"name":2836,"slug":804,"type":15},40]