'
hr_faded: ''
hr_shaded: ''
diff --git a/src/current/_data/child-metrics.yml b/src/current/_data/child-metrics.yml
new file mode 100644
index 00000000000..e6393213331
--- /dev/null
+++ b/src/current/_data/child-metrics.yml
@@ -0,0 +1,236 @@
+# child-metrics.yml is a manually curated file of metrics that are included in the Child Metrics.
+# The metrics are in the order of appearance in the comment:
+# https://github.com/cockroachdb/cockroach/issues/124343#issuecomment-2117886012
+# The tenant.consumption.* metrics are not included because they only apply to serverless.
+#
+# The corresponding metrics-list.csv file was generated using the v24.1.0 binary with the following command:
+# cockroach gen metric-list --format=csv > metrics-list.csv
+# Once generated, the metrics-list.csv was manually modified to change the case of the headers to lowercase to work with liquid comparison code.
+
+- child_metric_id: changefeed.error_retries
+ feature: changefeed
+
+- child_metric_id: changefeed.emitted_messages
+ feature: changefeed
+
+- child_metric_id: changefeed.emitted_batch_sizes
+ feature: changefeed
+
+- child_metric_id: changefeed.filtered_messages
+ feature: changefeed
+
+- child_metric_id: changefeed.message_size_hist
+ feature: changefeed
+
+- child_metric_id: changefeed.emitted_bytes
+ feature: changefeed
+
+- child_metric_id: changefeed.flushed_bytes
+ feature: changefeed
+
+- child_metric_id: changefeed.flushes
+ feature: changefeed
+
+- child_metric_id: changefeed.size_based_flushes
+ feature: changefeed
+
+- child_metric_id: changefeed.parallel_io_queue_nanos
+ feature: changefeed
+
+- child_metric_id: changefeed.parallel_io_pending_rows
+ feature: changefeed
+
+- child_metric_id: changefeed.parallel_io_result_queue_nanos
+ feature: changefeed
+
+- child_metric_id: changefeed.parallel_io_in_flight_keys
+ feature: changefeed
+
+- child_metric_id: changefeed.sink_io_inflight
+ feature: changefeed
+
+- child_metric_id: changefeed.sink_batch_hist_nanos
+ feature: changefeed
+
+- child_metric_id: changefeed.flush_hist_nanos
+ feature: changefeed
+
+- child_metric_id: changefeed.commit_latency
+ feature: changefeed
+
+- child_metric_id: changefeed.admit_latency
+ feature: changefeed
+
+- child_metric_id: changefeed.backfill_count
+ feature: changefeed
+
+- child_metric_id: changefeed.backfill_pending_ranges
+ feature: changefeed
+
+- child_metric_id: changefeed.running
+ feature: changefeed
+
+- child_metric_id: changefeed.batch_reduction_count
+ feature: changefeed
+
+- child_metric_id: changefeed.internal_retry_message_count
+ feature: changefeed
+
+- child_metric_id: changefeed.schema_registry.retry_count
+ feature: changefeed
+
+- child_metric_id: changefeed.schema_registry.registrations
+ feature: changefeed
+
+- child_metric_id: changefeed.aggregator_progress
+ feature: changefeed
+
+- child_metric_id: changefeed.checkpoint_progress
+ feature: changefeed
+
+- child_metric_id: changefeed.lagging_ranges
+ feature: changefeed
+
+- child_metric_id: changefeed.cloudstorage_buffered_bytes
+ feature: changefeed
+
+- child_metric_id: changefeed.kafka_throttling_hist_nanos
+ feature: changefeed
+
+- child_metric_id: livebytes
+ feature: virtual
+
+- child_metric_id: keybytes
+ feature: virtual
+
+- child_metric_id: valbytes
+ feature: virtual
+
+- child_metric_id: rangekeybytes
+ feature: virtual
+
+- child_metric_id: rangevalbytes
+ feature: virtual
+
+- child_metric_id: totalbytes
+ feature: virtual
+
+- child_metric_id: intentbytes
+ feature: virtual
+
+- child_metric_id: lockbytes
+ feature: virtual
+
+- child_metric_id: livecount
+ feature: virtual
+
+- child_metric_id: keycount
+ feature: virtual
+
+- child_metric_id: valcount
+ feature: virtual
+
+- child_metric_id: rangekeycount
+ feature: virtual
+
+- child_metric_id: rangevalcount
+ feature: virtual
+
+- child_metric_id: intentcount
+ feature: virtual
+
+- child_metric_id: lockcount
+ feature: virtual
+
+- child_metric_id: intentage
+ feature: virtual
+
+- child_metric_id: gcbytesage
+ feature: virtual
+
+- child_metric_id: sysbytes
+ feature: virtual
+
+- child_metric_id: syscount
+ feature: virtual
+
+- child_metric_id: abortspanbytes
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.num_tenants
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.current_blocked
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.read_batches_admitted
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.write_batches_admitted
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.read_requests_admitted
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.write_requests_admitted
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.read_bytes_admitted
+ feature: virtual
+
+- child_metric_id: kv.tenant_rate_limit.write_bytes_admitted
+ feature: virtual
+
+- child_metric_id: security.certificate.expiration.client
+ feature: secure
+ description: "Minimum expiration for client certificates, labeled by SQL user. 0 means no certificate or error."
+ type: GAUGE
+ unit: SECONDS
+
+- child_metric_id: jobs.row_level_ttl.span_total_duration
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.select_duration
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.delete_duration
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.rows_selected
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.rows_deleted
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.num_active_spans
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.total_rows
+ feature: row-level-ttl
+
+- child_metric_id: jobs.row_level_ttl.total_expired_rows
+ feature: row-level-ttl
+
+- child_metric_id: rpc.connection.healthy
+ feature: all
+
+- child_metric_id: rpc.connection.unhealthy
+ feature: all
+
+- child_metric_id: rpc.connection.inactive
+ feature: all
+
+- child_metric_id: rpc.connection.healthy_nanos
+ feature: all
+
+- child_metric_id: rpc.connection.unhealthy_nanos
+ feature: all
+
+- child_metric_id: rpc.connection.heartbeats
+ feature: all
+
+- child_metric_id: rpc.connection.failures
+ feature: all
+
+- child_metric_id: rpc.connection.avg_round_trip_latency
+ feature: all
\ No newline at end of file
diff --git a/src/current/_data/metrics-list.csv b/src/current/_data/metrics-list.csv
new file mode 100644
index 00000000000..32a5cb72e41
--- /dev/null
+++ b/src/current/_data/metrics-list.csv
@@ -0,0 +1,2546 @@
+layer,metric,description,y-axis label,type,unit,aggregation,derivative
+STORAGE,abortspanbytes,Number of bytes in the abort span,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,addsstable.applications,Number of SSTable ingestions applied (i.e. applied by Replicas),Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.aswrites,"Number of SSTables ingested as normal writes.
+
+These AddSSTable requests do not count towards the addsstable metrics
+'proposals', 'applications', or 'copies', as they are not ingested as AddSSTable
+Raft commands, but rather normal write commands. However, if these requests get
+throttled they do count towards 'delay.total' and 'delay.enginebackpressure'.
+",Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.copies,number of SSTable ingestions that required copying files during application,Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.delay.enginebackpressure,Amount by which evaluation of AddSSTable requests was delayed by storage-engine backpressure,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.delay.total,Amount by which evaluation of AddSSTable requests was delayed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,addsstable.proposals,Number of SSTable ingestions proposed (i.e. sent to Raft by lease holders),Ingestions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu.bulk-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-cpu.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-stores,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-stores.bulk-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.elastic-stores.ttl-low-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.high-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv-stores.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.high-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.kv.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-kv-response.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-leaf-start.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-root-start.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response.locking-normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.admitted.sql-sql-response.normal-pri,Number of requests admitted,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.acquired_nanos,Total CPU nanoseconds acquired by elastic work,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.available_nanos,Instantaneous available CPU nanoseconds per second ignoring utilization limit,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,admission.elastic_cpu.max_available_nanos,Maximum available CPU nanoseconds per second ignoring utilization limit,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.nanos_exhausted_duration,"Total duration when elastic CPU nanoseconds were exhausted, in micros",Microseconds,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.elastic_cpu.over_limit_durations,Measurement of how much over the prescribed limit elastic requests ran (not recorded if requests don't run over),Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.elastic_cpu.pre_work_nanos,"Total CPU nanoseconds spent doing pre-work, before doing elastic work",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.returned_nanos,Total CPU nanoseconds returned by elastic work,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.elastic_cpu.utilization,CPU utilization by elastic work,CPU Time,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.elastic_cpu.utilization_limit,Utilization limit set for the elastic CPU work,CPU Time,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.errored.elastic-cpu,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-cpu.bulk-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-cpu.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-stores,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-stores.bulk-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.elastic-stores.ttl-low-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.high-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv-stores.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.high-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.kv.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-kv-response.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-leaf-start.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-root-start.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response.locking-normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.errored.sql-sql-response.normal-pri,Number of requests not admitted due to error,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.cpu_load_long_period_duration.kv,"Total duration when CPULoad was being called with a long period, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.cpu_load_short_period_duration.kv,"Total duration when CPULoad was being called with a short period, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.elastic_io_tokens_available.kv,Number of tokens available,Tokens,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.elastic_io_tokens_exhausted_duration.kv,"Total duration when Elastic IO tokens were exhausted, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_available.kv,Number of tokens available,Tokens,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.io_tokens_bypassed.kv,"Total number of tokens taken by work bypassing admission control (for example, follower writes without flow control)",Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_exhausted_duration.kv,"Total duration when IO tokens were exhausted, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_returned.kv,Total number of tokens returned,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.io_tokens_taken.kv,Total number of tokens taken,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slot_adjuster_decrements.kv,Number of decrements of the total KV slots,Slots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slot_adjuster_increments.kv,Number of increments of the total KV slots,Slots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.slots_exhausted_duration.kv,"Total duration when KV slots were exhausted, in micros",Microseconds,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.granter.total_slots.kv,Total slots for kv work,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.kv,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.sql-leaf-start,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.granter.used_slots.sql-root-start,Used slots,Slots,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.io.overload,1-normalized float indicating whether IO admission control considers the store as overloaded with respect to compaction out of L0 (considers sub-level and file counts).,Threshold,GAUGE,PERCENT,AVG,NONE
+STORAGE,admission.l0_compacted_bytes.kv,Total bytes compacted out of L0 (used to generate IO tokens),Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.l0_tokens_produced.kv,Total bytes produced for L0 writes,Tokens,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.raft.paused_replicas,"Number of followers (i.e. Replicas) to which replication is currently paused to help them recover from I/O overload.
+
+Such Replicas will be ignored for the purposes of proposal quota, and will not
+receive replication traffic. They are essentially treated as offline for the
+purpose of replication. This serves as a crude form of admission control.
+
+The count is emitted by the leaseholder of each range.",Followers,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.raft.paused_replicas_dropped_msgs,"Number of messages dropped instead of being sent to paused replicas.
+
+The messages are dropped to help these replicas to recover from I/O overload.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu.bulk-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-cpu.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-stores,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-stores.bulk-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.elastic-stores.ttl-low-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.high-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv-stores.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.high-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.kv.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-kv-response.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-leaf-start.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-root-start.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response.locking-normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.requested.sql-sql-response.normal-pri,Number of requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,admission.scheduler_latency_listener.p99_nanos,The scheduling latency at p99 as observed by the scheduler latency listener,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu.bulk-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-cpu.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-stores,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-stores.bulk-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.elastic-stores.ttl-low-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.high-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv-stores.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.high-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.kv.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-kv-response.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-leaf-start.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-root-start.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response.locking-normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_durations.sql-sql-response.normal-pri,Wait time durations for requests that waited,Wait time Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu.bulk-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-cpu.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-stores,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-stores.bulk-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.elastic-stores.ttl-low-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.high-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv-stores.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.high-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.kv.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-kv-response.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-leaf-start.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-root-start.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response.locking-normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,admission.wait_queue_length.sql-sql-response.normal-pri,Length of wait queue,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,batch_requests.bytes,Total byte count of batch requests processed,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_requests.cross_region.bytes,"Total byte count of batch requests processed cross region when region
+ tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_requests.cross_zone.bytes,"Total byte count of batch requests processed cross zone within
+ the same region when region and zone tiers are configured. However, if the
+ region tiers are not configured, this count may also include batch data sent
+ between different regions. Ensuring consistent configuration of region and
+ zone tiers across nodes helps to accurately monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.bytes,Total byte count of batch responses received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.cross_region.bytes,"Total byte count of batch responses received cross region when region
+ tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,batch_responses.cross_zone.bytes,"Total byte count of batch responses received cross zone within the
+ same region when region and zone tiers are configured. However, if the
+ region tiers are not configured, this count may also include batch data
+ received between different regions. Ensuring consistent configuration of
+ region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,capacity,Total storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.available,Available storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.reserved,Capacity reserved for snapshots,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,capacity.used,Used storage capacity,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,exec.error,"Number of batch KV requests that failed to execute on this node.
+
+This count excludes transaction restart/abort errors. However, it will include
+other errors expected during normal operation, such as ConditionFailedError.
+This metric is thus not an indicator of KV health.",Batch KV Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,exec.latency,"Latency of batch KV requests (including errors) executed on this node.
+
+This measures requests already addressed to a single replica, from the moment
+at which they arrive at the internal gRPC endpoint to the moment at which the
+response (or an error) is returned.
+
+This latency includes in particular commit waits, conflict resolution and replication,
+and end-users can easily produce high measurements via long-running transactions that
+conflict with foreground traffic. This metric thus does not provide a good signal for
+understanding the health of the KV layer.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,exec.success,"Number of batch KV requests executed successfully on this node.
+
+A request is considered to have executed 'successfully' if it either returns a result
+or a transaction restart/abort error.
+",Batch KV Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,exportrequest.delay.total,Amount by which evaluation of Export requests was delayed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,follower_reads.success_count,Number of reads successfully processed by any replica,Read Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gcbytesage,Cumulative age of non-live data,Age,GAUGE,SECONDS,AVG,NONE
+STORAGE,gossip.bytes.received,Number of received gossip bytes,Gossip Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.bytes.sent,Number of sent gossip bytes,Gossip Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.callbacks.pending,Number of gossip callbacks waiting to be processed,Callbacks,GAUGE,COUNT,AVG,NONE
+STORAGE,gossip.callbacks.pending_duration,Duration of gossip callback queueing to be processed,Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,gossip.callbacks.processed,Number of gossip callbacks processed,Callbacks,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.callbacks.processing_duration,Duration of gossip callback processing,Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,gossip.connections.incoming,Number of active incoming gossip connections,Connections,GAUGE,COUNT,AVG,NONE
+STORAGE,gossip.connections.outgoing,Number of active outgoing gossip connections,Connections,GAUGE,COUNT,AVG,NONE
+STORAGE,gossip.connections.refused,Number of refused incoming gossip connections,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.infos.received,Number of received gossip Info objects,Infos,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,gossip.infos.sent,Number of sent gossip Info objects,Infos,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentage,Cumulative age of locks,Age,GAUGE,SECONDS,AVG,NONE
+STORAGE,intentbytes,Number of bytes in intent KV pairs,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,intentcount,Count of intent keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,intentresolver.async.throttled,Number of intent resolution attempts not run asynchronously due to throttling,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentresolver.finalized_txns.failed,Number of finalized transaction cleanup failures. Transaction cleanup refers to the process of resolving all of a transactions intents and then garbage collecting its transaction record.,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intentresolver.intents.failed,"Number of intent resolution failures. The unit of measurement is a single intent, so if a batch of intent resolution requests fails, the metric will be incremented for each request in the batch.",Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.abort-attempts,Count of (point or range) non-poisoning intent abort evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.poison-attempts,Count of (point or range) poisoning intent abort evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,intents.resolve-attempts,Count of (point or range) intent commit evaluation attempts,Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,keybytes,Number of bytes taken up by keys,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,keycount,Count of all keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.allocator.load_based_lease_transfers.cannot_find_better_candidate,The number times the allocator determined that the lease was on the best possible replica,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.delta_not_significant,The number times the allocator determined that the delta between the existing store and the best candidate was not significant,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.existing_not_overfull,The number times the allocator determined that the lease was not on an overfull store,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.follow_the_workload,The number times the allocator determined that the lease should be transferred to another replica for locality.,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.missing_stats_for_existing_stores,The number times the allocator was missing qps stats for the leaseholder,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_lease_transfers.should_transfer,The number times the allocator determined that the lease should be transferred to another replica for better load distribution,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.cannot_find_better_candidate,The number times the allocator determined that the range was on the best possible stores,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.delta_not_significant,The number times the allocator determined that the delta between an existing store and the best replacement candidate was not high enough,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.existing_not_overfull,The number times the allocator determined that none of the range's replicas were on overfull stores,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.missing_stats_for_existing_store,The number times the allocator was missing the qps stats for the existing store,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.allocator.load_based_replica_rebalancing.should_transfer,The number times the allocator determined that the replica should be rebalanced to another store for better load distribution,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.closed_timestamp.max_behind_nanos,Largest latency between realtime and replica max closed timestamp,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.avg_lock_hold_duration_nanos,Average lock hold duration across locks currently held in lock tables. Does not include replicated locks (intents) that are not held in memory,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.avg_lock_wait_duration_nanos,Average lock wait duration across requests currently waiting in lock wait-queues,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.latch_conflict_wait_durations,Durations in nanoseconds spent on latch acquisition waiting for conflicts with other latches,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.lock_wait_queue_waiters,Number of requests actively waiting in a lock wait-queue,Lock-Queue Waiters,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.locks,Number of active locks held in lock tables. Does not include replicated locks (intents) that are not held in memory,Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.locks_with_wait_queues,Number of active locks held in lock tables with active wait-queues,Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.concurrency.max_lock_hold_duration_nanos,Maximum length of time any lock in a lock table is held. Does not include replicated locks (intents) that are not held in memory,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.max_lock_wait_duration_nanos,Maximum lock wait duration across requests currently waiting in lock wait-queues,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,kv.concurrency.max_lock_wait_queue_waiters_for_lock,Maximum number of requests actively waiting in any single lock wait-queue,Lock-Queue Waiters,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.loadsplitter.nosplitkey,Load-based splitter could not find a split key.,Occurrences,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.loadsplitter.popularkey,Load-based splitter could not find a split key and the most popular sampled split key occurs in >= 25% of the samples.,Occurrences,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.planning_attempts,Number of attempts at planning out probes made; in order to probe KV we need to plan out which ranges to probe;,Runs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.planning_failures,"Number of attempts at planning out probes that failed; in order to probe KV we need to plan out which ranges to probe; if planning fails, then kvprober is not able to send probes to all ranges; consider alerting on this metric as a result",Runs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.attempts,"Number of attempts made to read probe KV, regardless of outcome",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.failures,"Number of attempts made to read probe KV that failed, whether due to error or timeout",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.read.latency,Latency of successful KV read probes,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.prober.write.attempts,"Number of attempts made to write probe KV, regardless of outcome",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.write.failures,"Number of attempts made to write probe KV that failed, whether due to error or timeout",Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.prober.write.latency,Latency of successful KV write probes,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.prober.write.quarantine.oldest_duration,The duration that the oldest range in the write quarantine pool has remained,Seconds,GAUGE,SECONDS,AVG,NONE
+STORAGE,kv.rangefeed.budget_allocation_blocked,Number of times RangeFeed waited for budget availability,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.budget_allocation_failed,Number of times RangeFeed failed because memory budget was exceeded,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.catchup_scan_nanos,Time spent in RangeFeed catchup scan,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.rangefeed.mem_shared,Memory usage by rangefeeds,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,kv.rangefeed.mem_system,Memory usage by rangefeeds on system ranges,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,kv.rangefeed.processors_goroutine,Number of active RangeFeed processors using goroutines,Processors,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.processors_scheduler,Number of active RangeFeed processors using scheduler,Processors,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.registrations,Number of active RangeFeed registrations,Registrations,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.normal.latency,KV RangeFeed normal scheduler latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.normal.queue_size,Number of entries in the KV RangeFeed normal scheduler queue,Pending Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.system.latency,KV RangeFeed system scheduler latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.rangefeed.scheduler.system.queue_size,Number of entries in the KV RangeFeed system scheduler queue,Pending Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.replica_circuit_breaker.num_tripped_events,Number of times the per-Replica circuit breakers tripped since process start.,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_circuit_breaker.num_tripped_replicas,"Number of Replicas for which the per-Replica circuit breaker is currently tripped.
+
+A nonzero value indicates range or replica unavailability, and should be investigated.
+Replicas in this state will fail-fast all inbound requests.
+",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.replica_read_batch_evaluate.dropped_latches_before_eval,Number of times read-only batches dropped latches before evaluation.,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_read_batch_evaluate.latency,"Execution duration for evaluating a BatchRequest on the read-only path after latches have been acquired.
+
+A measurement is recorded regardless of outcome (i.e. also in case of an error). If internal retries occur, each instance is recorded separately.",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.replica_read_batch_evaluate.without_interleaving_iter,Number of read-only batches evaluated without an intent interleaving iter.,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.replica_write_batch_evaluate.latency,"Execution duration for evaluating a BatchRequest on the read-write path after latches have been acquired.
+
+A measurement is recorded regardless of outcome (i.e. also in case of an error). If internal retries occur, each instance is recorded separately.
+Note that the measurement does not include the duration for replicating the evaluated command.",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kv.split.estimated_stats,Number of splits that computed estimated MVCC stats.,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.split.total_bytes_estimates,Number of total bytes difference between the pre-split and post-split MVCC stats.,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.current_blocked,Number of requests currently blocked by the rate limiter,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.tenant_rate_limit.num_tenants,Number of tenants currently being tracked,Tenants,GAUGE,COUNT,AVG,NONE
+STORAGE,kv.tenant_rate_limit.read_batches_admitted,Number of read batches admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.read_bytes_admitted,Number of read bytes admitted by the rate limiter,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.read_requests_admitted,Number of read requests admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_batches_admitted,Number of write batches admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_bytes_admitted,Number of write bytes admitted by the rate limiter,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kv.tenant_rate_limit.write_requests_admitted,Number of write requests admitted by the rate limiter,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_blocked_stream_count,Number of replication streams with no flow tokens available for elastic requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_requests_admitted,Number of elastic requests admitted by the flow controller,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_bypassed,Number of elastic waiting requests that bypassed the flow controller due to disconnecting streams,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_errored,Number of elastic requests that errored out while waiting for flow tokens,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_requests_waiting,Number of elastic requests waiting for flow tokens,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_stream_count,Total number of replication streams for elastic requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_tokens_available,"Flow tokens available for elastic requests, across all replication streams",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,kvadmission.flow_controller.elastic_tokens_deducted,"Flow tokens deducted by elastic requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_tokens_returned,"Flow tokens returned by elastic requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_tokens_unaccounted,"Flow tokens returned by elastic requests that were unaccounted for, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.elastic_wait_duration,Latency histogram for time elastic requests spent waiting for flow tokens,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_blocked_stream_count,Number of replication streams with no flow tokens available for regular requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_requests_admitted,Number of regular requests admitted by the flow controller,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_bypassed,Number of regular waiting requests that bypassed the flow controller due to disconnecting streams,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_errored,Number of regular requests that errored out while waiting for flow tokens,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_requests_waiting,Number of regular requests waiting for flow tokens,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_stream_count,Total number of replication streams for regular requests,Count,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_tokens_available,"Flow tokens available for regular requests, across all replication streams",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,kvadmission.flow_controller.regular_tokens_deducted,"Flow tokens deducted by regular requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_tokens_returned,"Flow tokens returned by regular requests, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_tokens_unaccounted,"Flow tokens returned by regular requests that were unaccounted for, across all replication streams",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_controller.regular_wait_duration,Latency histogram for time regular requests spent waiting for flow tokens,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.elastic_requests_admitted,Number of elastic requests admitted by the flow handle,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.elastic_requests_errored,"Number of elastic requests that errored out while waiting for flow tokens, at the handle level",Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.elastic_requests_waiting,"Number of elastic requests waiting for flow tokens, at the handle level",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_handle.elastic_wait_duration,"Latency histogram for time elastic requests spent waiting for flow tokens, at the handle level",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.regular_requests_admitted,Number of regular requests admitted by the flow handle,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.regular_requests_errored,"Number of regular requests that errored out while waiting for flow tokens, at the handle level",Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.regular_requests_waiting,"Number of regular requests waiting for flow tokens, at the handle level",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_handle.regular_wait_duration,"Latency histogram for time regular requests spent waiting for flow tokens, at the handle level",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,kvadmission.flow_handle.streams_connected,"Number of times we've connected to a stream, at the handle level",Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_handle.streams_disconnected,"Number of times we've disconnected from a stream, at the handle level",Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.coalesced_elastic,Number of coalesced elastic flow token dispatches (where we're informing the sender of a higher log entry being admitted),Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.coalesced_regular,Number of coalesced regular flow token dispatches (where we're informing the sender of a higher log entry being admitted),Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.local_elastic,Number of local elastic flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.local_regular,Number of local regular flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.pending_elastic,Number of pending elastic flow token dispatches,Dispatches,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.pending_nodes,Number of nodes pending flow token dispatches,Nodes,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.pending_regular,Number of pending regular flow token dispatches,Dispatches,GAUGE,COUNT,AVG,NONE
+STORAGE,kvadmission.flow_token_dispatch.remote_elastic,Number of remote elastic flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,kvadmission.flow_token_dispatch.remote_regular,Number of remote regular flow token dispatches,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.epoch,Number of replica leaseholders using epoch-based leases,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.error,Number of failed lease requests,Lease Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.expiration,Number of replica leaseholders using expiration-based leases,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.liveness,Number of replica leaseholders for the liveness range(s),Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.preferences.less-preferred,Number of replica leaseholders which satisfy a lease preference which is not the most preferred,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.preferences.violating,Number of replica leaseholders which violate lease preferences,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,leases.requests.latency,"Lease request latency (all types and outcomes, coalesced)",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,leases.success,Number of successful lease requests,Lease Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.transfers.error,Number of failed lease transfers,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,leases.transfers.success,Number of successful lease transfers,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,livebytes,Number of bytes of live data (keys plus values),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,livecount,Count of live keys,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,liveness.epochincrements,Number of times this node has incremented its liveness epoch,Epochs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.heartbeatfailures,Number of failed node liveness heartbeats from this node,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.heartbeatlatency,Node liveness heartbeat latency,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,liveness.heartbeatsinflight,Number of in-flight liveness heartbeats from this node,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,liveness.heartbeatsuccesses,Number of successful node liveness heartbeats from this node,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,liveness.livenodes,Number of live nodes in the cluster (will be 0 if this node is not itself live),Nodes,GAUGE,COUNT,AVG,NONE
+STORAGE,lockbytes,"Number of bytes taken up by replicated lock key-values (shared and exclusive strength, not intent strength)",Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,lockcount,"Count of replicated locks (shared, exclusive, and intent strength)",Locks,GAUGE,COUNT,AVG,NONE
+STORAGE,node-id,node ID with labels for advertised RPC and HTTP addresses,Node ID,GAUGE,CONST,AVG,NONE
+STORAGE,queue.consistency.pending,Number of pending replicas in the consistency checker queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.consistency.process.failure,Number of replicas which failed processing in the consistency checker queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.consistency.process.success,Number of replicas successfully processed by the consistency checker queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.consistency.processingnanos,Nanoseconds spent processing replicas in the consistency checker queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspanconsidered,Number of AbortSpan entries old enough to be considered for removal,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspangcnum,Number of AbortSpan entries fit for removal,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.abortspanscanned,Number of transactions present in the AbortSpan scanned from the engine,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.clearrangefailed,Number of failed ClearRange operations during GC,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.clearrangesuccess,Number of successful ClearRange operations during GC,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.enqueuehighpriority,Number of replicas enqueued for GC with high priority,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.intentsconsidered,Number of 'old' intents,Intents,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.intenttxns,Number of associated distinct transactions,Txns,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.numkeysaffected,Number of keys with GC'able data,Keys,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.numrangekeysaffected,Number of range keys GC'able,Range Keys,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.pushtxn,Number of attempted pushes,Pushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvefailed,Number of cleanup intent failures during GC,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvesuccess,Number of successful intent resolutions,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.resolvetotal,Number of attempted intent resolutions,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionresolvefailed,Number of intent cleanup failures for local transactions during GC,Intent Resolutions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcaborted,Number of GC'able entries corresponding to aborted txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangccommitted,Number of GC'able entries corresponding to committed txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcpending,Number of GC'able entries corresponding to pending txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspangcstaging,Number of GC'able entries corresponding to staging txns,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.info.transactionspanscanned,Number of entries in transaction spans scanned from the engine,Txn Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.pending,Number of pending replicas in the MVCC GC queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.gc.process.failure,Number of replicas which failed processing in the MVCC GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.process.success,Number of replicas successfully processed by the MVCC GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.gc.processingnanos,Nanoseconds spent processing replicas in the MVCC GC queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.lease.pending,Number of pending replicas in the replica lease queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.lease.process.failure,Number of replicas which failed processing in the replica lease queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.lease.process.success,Number of replicas successfully processed by the replica lease queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.lease.processingnanos,Nanoseconds spent processing replicas in the replica lease queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.lease.purgatory,"Number of replicas in the lease queue's purgatory, awaiting lease transfer operations",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.merge.pending,Number of pending replicas in the merge queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.merge.process.failure,Number of replicas which failed processing in the merge queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.process.success,Number of replicas successfully processed by the merge queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.processingnanos,Nanoseconds spent processing replicas in the merge queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.merge.purgatory,"Number of replicas in the merge queue's purgatory, waiting to become mergeable",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftlog.pending,Number of pending replicas in the Raft log queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftlog.process.failure,Number of replicas which failed processing in the Raft log queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftlog.process.success,Number of replicas successfully processed by the Raft log queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftlog.processingnanos,Nanoseconds spent processing replicas in the Raft log queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.pending,Number of pending replicas in the Raft repair queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.raftsnapshot.process.failure,Number of replicas which failed processing in the Raft repair queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.process.success,Number of replicas successfully processed by the Raft repair queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.raftsnapshot.processingnanos,Nanoseconds spent processing replicas in the Raft repair queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.pending,Number of pending replicas in the replica GC queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicagc.process.failure,Number of replicas which failed processing in the replica GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.process.success,Number of replicas successfully processed by the replica GC queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.processingnanos,Nanoseconds spent processing replicas in the replica GC queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicagc.removereplica,Number of replica removals attempted by the replica GC queue,Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addnonvoterreplica,Number of non-voter replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica,Number of replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica.error,Number of failed replica additions processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addreplica.success,Number of successful replica additions processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.addvoterreplica,Number of voter replica additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.nonvoterpromotions,Number of non-voters promoted to voters by the replicate queue,Promotions of Non Voters to Voters,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.pending,Number of pending replicas in the replicate queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicate.process.failure,Number of replicas which failed processing in the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.process.success,Number of replicas successfully processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.processingnanos,Nanoseconds spent processing replicas in the replicate queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.purgatory,"Number of replicas in the replicate queue's purgatory, awaiting allocation options",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.replicate.rebalancenonvoterreplica,Number of non-voter replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.rebalancereplica,Number of replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.rebalancevoterreplica,Number of voter replica rebalancer-initiated additions attempted by the replicate queue,Replica Additions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadnonvoterreplica,Number of dead non-voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica,Number of dead replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica.error,Number of failed dead replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadreplica.success,Number of successful dead replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedeadvoterreplica,Number of dead voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningnonvoterreplica,Number of decommissioning non-voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica,Number of decommissioning replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica.error,Number of failed decommissioning replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningreplica.success,Number of successful decommissioning replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removedecommissioningvoterreplica,Number of decommissioning voter replica removals attempted by the replicate queue (typically in response to a node outage),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removelearnerreplica,Number of learner replica removals attempted by the replicate queue (typically due to internal race conditions),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removenonvoterreplica,Number of non-voter replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica,Number of replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica.error,Number of failed replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removereplica.success,Number of successful replica removals processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.removevoterreplica,Number of voter replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition),Replica Removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedeadreplica.error,Number of failed dead replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedeadreplica.success,Number of successful dead replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedecommissioningreplica.error,Number of failed decommissioning replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.replacedecommissioningreplica.success,Number of successful decommissioning replica replacements processed by the replicate queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.transferlease,Number of range lease transfers attempted by the replicate queue,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.replicate.voterdemotions,Number of voters demoted to non-voters by the replicate queue,Demotions of Voters to Non Voters,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.load_based,Number of range splits due to a range being greater than the configured max range load,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.pending,Number of pending replicas in the split queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.split.process.failure,Number of replicas which failed processing in the split queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.process.success,Number of replicas successfully processed by the split queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.processingnanos,Nanoseconds spent processing replicas in the split queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.purgatory,"Number of replicas in the split queue's purgatory, waiting to become splittable",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.split.size_based,Number of range splits due to a range being greater than the configured max range size,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.split.span_config_based,Number of range splits due to span configuration,Range Splits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.pending,Number of pending replicas in the time series maintenance queue,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,queue.tsmaintenance.process.failure,Number of replicas which failed processing in the time series maintenance queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.process.success,Number of replicas successfully processed by the time series maintenance queue,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,queue.tsmaintenance.processingnanos,Nanoseconds spent processing replicas in the time series maintenance queue,Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.pending,"Number of Raft commands proposed and pending.
+
+The number of Raft commands that the leaseholders are tracking as in-flight.
+These commands will be periodically reproposed until they are applied or until
+they fail, either unequivocally or ambiguously.",Commands,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.commands.proposed,"Number of Raft commands proposed.
+
+The number of proposals and all kinds of reproposals made by leaseholders. This
+metric approximates the number of commands submitted through Raft.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.reproposed.new-lai,"Number of Raft commands re-proposed with a newer LAI.
+
+The number of Raft commands that leaseholders re-proposed with a modified LAI.
+Such re-proposals happen for commands that are committed to Raft out of intended
+order, and hence can not be applied as is.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commands.reproposed.unchanged,"Number of Raft commands re-proposed without modification.
+
+The number of Raft commands that leaseholders re-proposed without modification.
+Such re-proposals happen for commands that are not committed/applied within a
+timeout, and have a high chance of being dropped.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.commandsapplied,"Number of Raft commands applied.
+
+This measurement is taken on the Raft apply loops of all Replicas (leaders and
+followers alike), meaning that it does not measure the number of Raft commands
+*proposed* (in the hypothetical extreme case, all Replicas may apply all commands
+through snapshots, thus not increasing this metric at all).
+Instead, it is a proxy for how much work is being done advancing the Replica
+state machines on this node.",Commands,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.dropped,"Number of Raft proposals dropped (this counts individial raftpb.Entry, not raftpb.MsgProp)",Proposals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.dropped_leader,"Number of Raft proposals dropped by a Replica that believes itself to be the leader; each update also increments `raft.dropped` (this counts individial raftpb.Entry, not raftpb.MsgProp)",Proposals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.accesses,Number of cache lookups in the Raft entry cache,Accesses,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.bytes,Aggregate size of all Raft entries in the Raft entry cache,Entry Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.entrycache.hits,Number of successful cache lookups in the Raft entry cache,Hits,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.read_bytes,Counter of bytes in entries returned from the Raft entry cache,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.entrycache.size,Number of Raft entries in the Raft entry cache,Entry Count,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.heartbeats.pending,Number of pending heartbeats and responses waiting to be coalesced,Messages,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.loaded_entries.bytes,Bytes allocated by raft Storage.Entries calls that are still kept in memory,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.loaded_entries.reserved.bytes,Bytes allocated by raft Storage.Entries calls that are still kept in memory,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.process.applycommitted.latency,"Latency histogram for applying all committed Raft commands in a Raft ready.
+
+This measures the end-to-end latency of applying all commands in a Raft ready. Note that
+this closes over possibly multiple measurements of the 'raft.process.commandcommit.latency'
+metric, which receives datapoints for each sub-batch processed in the process.",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.commandcommit.latency,"Latency histogram for applying a batch of Raft commands to the state machine.
+
+This metric is misnamed: it measures the latency for *applying* a batch of
+committed Raft commands to a Replica state machine. This requires only
+non-durable I/O (except for replication configuration changes).
+
+Note that a ""batch"" in this context is really a sub-batch of the batch received
+for application during raft ready handling. The
+'raft.process.applycommitted.latency' histogram is likely more suitable in most
+cases, as it measures the total latency across all sub-batches (i.e. the sum of
+commandcommit.latency for a complete batch).
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.handleready.latency,"Latency histogram for handling a Raft ready.
+
+This measures the end-to-end-latency of the Raft state advancement loop, including:
+- snapshot application
+- SST ingestion
+- durably appending to the Raft log (i.e. includes fsync)
+- entry application (incl. replicated side effects, notably log truncation)
+
+These include work measured in 'raft.process.commandcommit.latency' and
+'raft.process.applycommitted.latency'. However, matching percentiles of these
+metrics may be *higher* than handleready, since not every handleready cycle
+leads to an update of the others. For example, under tpcc-100 on a single node,
+the handleready count is approximately twice the logcommit count (and logcommit
+count tracks closely with applycommitted count).
+
+High percentile outliers can be caused by individual large Raft commands or
+storage layer blips. Lower percentile (e.g. 50th) increases are often driven by
+CPU exhaustion or storage layer slowdowns.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.logcommit.latency,"Latency histogram for committing Raft log entries to stable storage
+
+This measures the latency of durably committing a group of newly received Raft
+entries as well as the HardState entry to disk. This excludes any data
+processing, i.e. we measure purely the commit latency of the resulting Engine
+write. Homogeneous bands of p50-p99 latencies (in the presence of regular Raft
+traffic), make it likely that the storage layer is healthy. Spikes in the
+latency bands can either hint at the presence of large sets of Raft entries
+being received, or at performance issues at the storage layer.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.process.tickingnanos,Nanoseconds spent in store.processRaft() processing replica.Tick(),Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.process.workingnanos,"Nanoseconds spent in store.processRaft() working.
+
+This is the sum of the measurements passed to the raft.process.handleready.latency
+histogram.
+",Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.quota_pool.percent_used,Histogram of proposal quota pool utilization (0-100) per leaseholder per metrics interval,Percent,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,raft.rcvd.app,Number of MsgApp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.appresp,Number of MsgAppResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.bytes,"Number of bytes in Raft messages received by this store. Note
+ that this does not include raft snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.cross_region.bytes,"Number of bytes received by this store for cross region Raft messages
+ (when region tiers are configured). Note that this does not include raft
+ snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.cross_zone.bytes,"Number of bytes received by this store for cross zone, same region
+ Raft messages (when region and zone tiers are configured). If region tiers
+ are not configured, this count may include data sent between different
+ regions. To ensure accurate monitoring of transmitted data, it is important
+ to set up a consistent locality configuration across nodes. Note that this
+ does not include raft snapshot received.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.dropped,Number of incoming Raft messages dropped (due to queue length or size),Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.dropped_bytes,Bytes of dropped incoming Raft messages,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.heartbeat,"Number of (coalesced, if enabled) MsgHeartbeat messages received by this store",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.heartbeatresp,"Number of (coalesced, if enabled) MsgHeartbeatResp messages received by this store",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prevote,Number of MsgPreVote messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prevoteresp,Number of MsgPreVoteResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.prop,Number of MsgProp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.queued_bytes,Number of bytes in messages currently waiting for raft processing,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.rcvd.snap,Number of MsgSnap messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.stepped_bytes,"Number of bytes in messages processed by Raft.
+
+Messages reflected here have been handed to Raft (via RawNode.Step). This does not imply that the
+messages are no longer held in memory or that IO has been performed. Raft delegates IO activity to
+Raft ready handling, which occurs asynchronously. Since handing messages to Raft serializes with
+Raft ready handling and size the size of an entry is dominated by the contained pebble WriteBatch,
+on average the rate at which this metric increases is a good proxy for the rate at which Raft ready
+handling consumes writes.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.timeoutnow,Number of MsgTimeoutNow messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.transferleader,Number of MsgTransferLeader messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.vote,Number of MsgVote messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.rcvd.voteresp,Number of MsgVoteResp messages received by this store,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.replication.latency,"The duration elapsed between having evaluated a BatchRequest and it being
+reflected in the proposer's state machine (i.e. having applied fully).
+
+This encompasses time spent in the quota pool, in replication (including
+reproposals), and application, but notably *not* sequencing latency (i.e.
+contention and latch acquisition).
+
+No measurement is recorded for read-only commands as well as read-write commands
+which end up not writing (such as a DeleteRange on an empty span). Commands that
+result in 'above-replication' errors (i.e. txn retries, etc) are similarly
+excluded. Errors that arise while waiting for the in-flight replication result
+or result from application of the command are included.
+
+Note also that usually, clients are signalled at beginning of application, but
+the recorded measurement captures the entirety of log application.
+
+The duration is always measured on the proposer, even if the Raft leader and
+leaseholder are not colocated, or the request is proposed from a follower.
+
+Commands that use async consensus will still cause a measurement that reflects
+the actual replication latency, despite returning early to the client.",Latency,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,raft.scheduler.latency,"Queueing durations for ranges waiting to be processed by the Raft scheduler.
+
+This histogram measures the delay from when a range is registered with the scheduler
+for processing to when it is actually processed. This does not include the duration
+of processing.
+",Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,raft.sent.bytes,"Number of bytes in Raft messages sent by this store. Note that
+ this does not include raft snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.sent.cross_region.bytes,"Number of bytes sent by this store for cross region Raft messages
+ (when region tiers are configured). Note that this does not include raft
+ snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.sent.cross_zone.bytes,"Number of bytes sent by this store for cross zone, same region Raft
+ messages (when region and zone tiers are configured). If region tiers are
+ not configured, this count may include data sent between different regions.
+ To ensure accurate monitoring of transmitted data, it is important to set up
+ a consistent locality configuration across nodes. Note that this does not
+ include raft snapshot sent.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.storage.error,Number of Raft storage errors,Error Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.storage.read_bytes,"Counter of raftpb.Entry.Size() read from pebble for raft log entries.
+
+These are the bytes returned from the (raft.Storage).Entries method that were not
+returned via the raft entry cache. This metric plus the raft.entrycache.read_bytes
+metric represent the total bytes returned from the Entries method.
+
+Since pebble might serve these entries from the block cache, only a fraction of this
+throughput might manifest in disk metrics.
+
+Entries tracked in this metric incur an unmarshalling-related CPU and memory
+overhead that would not be incurred would the entries be served from the raft
+entry cache.
+
+The bytes returned here do not correspond 1:1 to bytes read from pebble. This
+metric measures the in-memory size of the raftpb.Entry, whereas we read its
+encoded representation from pebble. As there is no compression involved, these
+will generally be comparable.
+
+A common reason for elevated measurements on this metric is that a store is
+falling behind on raft log application. The raft entry cache generally tracks
+entries that were recently appended, so if log application falls behind the
+cache will already have moved on to newer entries.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.ticks,Number of Raft ticks queued,Ticks,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.timeoutcampaign,Number of Raft replicas campaigning after missed heartbeats from leader,Elections called after timeout,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.flow-token-dispatches-dropped,Number of flow token dispatches dropped by the Raft Transport,Dispatches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.rcvd,Number of Raft messages received by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.reverse-rcvd,"Messages received from the reverse direction of a stream.
+
+These messages should be rare. They are mostly informational, and are not actual
+responses to Raft messages. Responses are received over another stream.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.reverse-sent,"Messages sent in the reverse direction of a stream.
+
+These messages should be rare. They are mostly informational, and are not actual
+responses to Raft messages. Responses are sent over another stream.",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.send-queue-bytes,"The total byte size of pending outgoing messages in the queue.
+
+The queue is composed of multiple bounded channels associated with different
+peers. A size higher than the average baseline could indicate issues streaming
+messages to at least one peer. Use this metric together with send-queue-size, to
+have a fuller picture.",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,raft.transport.send-queue-size,"Number of pending outgoing messages in the Raft Transport queue.
+
+The queue is composed of multiple bounded channels associated with different
+peers. The overall size of tens of thousands could indicate issues streaming
+messages to at least one peer. Use this metric in conjunction with
+send-queue-bytes.",Messages,GAUGE,COUNT,AVG,NONE
+STORAGE,raft.transport.sends-dropped,Number of Raft message sends dropped by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raft.transport.sent,Number of Raft messages sent by the Raft Transport,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,raftlog.behind,"Number of Raft log entries followers on other stores are behind.
+
+This gauge provides a view of the aggregate number of log entries the Raft leaders
+on this node think the followers are behind. Since a raft leader may not always
+have a good estimate for this information for all of its followers, and since
+followers are expected to be behind (when they are not required as part of a
+quorum) *and* the aggregate thus scales like the count of such followers, it is
+difficult to meaningfully interpret this metric.",Log Entries,GAUGE,COUNT,AVG,NONE
+STORAGE,raftlog.truncated,Number of Raft log entries truncated,Log Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.adds,Number of range additions,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.merges,Number of range merges,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.raftleaderremovals,Number of times the current Raft leader was removed from a range,Raft leader removals,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.raftleadertransfers,Number of raft leader transfers,Leader Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.recoveries,"Count of offline loss of quorum recovery operations performed on ranges.
+
+This count increments for every range recovered in offline loss of quorum
+recovery operation. Metric is updated when node on which survivor replica
+is located starts following the recovery.",Quorum Recoveries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.removes,Number of range removals,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-initial,Number of snapshots applied for initial upreplication,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-non-voter,Number of snapshots applied by non-voter replicas,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.applied-voter,Number of snapshots applied by voter replicas,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-region.rcvd-bytes,Number of snapshot bytes received cross region,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-region.sent-bytes,Number of snapshot bytes sent cross region,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-zone.rcvd-bytes,"Number of snapshot bytes received cross zone within same region or if
+ region tiers are not configured. This count increases for each snapshot
+ received between different zones within the same region. However, if the
+ region tiers are not configured, this count may also include snapshot data
+ received between different regions. Ensuring consistent configuration of
+ region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.cross-zone.sent-bytes,"Number of snapshot bytes sent cross zone within same region or if
+ region tiers are not configured. This count increases for each snapshot sent
+ between different zones within the same region. However, if the region tiers
+ are not configured, this count may also include snapshot data sent between
+ different regions. Ensuring consistent configuration of region and zone
+ tiers across nodes helps to accurately monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.failures,"Number of snapshots that were delegated to a different node and
+resulted in failure on that delegate. There are numerous reasons a failure can
+occur on a delegate such as timeout, the delegate Raft log being too far behind
+or the delegate being too busy to send.
+",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.in-progress,Number of delegated snapshots that are currently in-flight.,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.delegate.sent-bytes,"Bytes sent using a delegate.
+
+The number of bytes sent as a result of a delegate snapshot request
+that was originated from a different node. This metric is useful in
+evaluating the network savings of not sending cross region traffic.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.delegate.successes,"Number of snapshots that were delegated to a different node and
+resulted in success on that delegate. This does not count self delegated snapshots.
+",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.generated,Number of generated snapshots,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rcvd-bytes,Number of snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rebalancing.rcvd-bytes,Number of rebalancing snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.rebalancing.sent-bytes,Number of rebalancing snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recovery.rcvd-bytes,Number of raft recovery snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recovery.sent-bytes,Number of raft recovery snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recv-failed,"Number of range snapshot initialization messages that errored out on the recipient, typically before any data is transferred",Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.recv-in-progress,Number of non-empty snapshots being received,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-queue,Number of snapshots queued to receive,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-queue-bytes,Total size of all snapshots in the snapshot receive queue,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,range.snapshots.recv-total-in-progress,Number of total snapshots being received,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.recv-unusable,Number of range snapshot that were fully transmitted but determined to be unnecessary or unusable,Snapshots,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.send-in-progress,Number of non-empty snapshots being sent,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.send-queue,Number of snapshots queued to send,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.send-queue-bytes,Total size of all snapshots in the snapshot send queue,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,range.snapshots.send-total-in-progress,Number of total snapshots being sent,Snapshots,GAUGE,COUNT,AVG,NONE
+STORAGE,range.snapshots.sent-bytes,Number of snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.unknown.rcvd-bytes,Number of unknown snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.unknown.sent-bytes,Number of unknown snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.upreplication.rcvd-bytes,Number of upreplication snapshot bytes received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.snapshots.upreplication.sent-bytes,Number of upreplication snapshot bytes sent,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,range.splits,Number of range splits,Range Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rangekeybytes,Number of bytes taken up by range keys (e.g. MVCC range tombstones),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rangekeycount,Count of all range keys (e.g. MVCC range tombstones),Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges,Number of ranges,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.overreplicated,Number of ranges with more live replicas than the replication target,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.unavailable,Number of ranges with fewer live replicas than needed for quorum,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,ranges.underreplicated,Number of ranges with fewer live replicas than the replication target,Ranges,GAUGE,COUNT,AVG,NONE
+STORAGE,rangevalbytes,Number of bytes taken up by range key values (e.g. MVCC range tombstones),Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rangevalcount,Count of all range key values (e.g. MVCC range tombstones),MVCC Values,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.cpunanospersecond,Average CPU nanoseconds spent on processing replica operations in the last 30 minutes.,Nanoseconds/Sec,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,rebalancing.lease.transfers,Number of lease transfers motivated by store-level load imbalances,Lease Transfers,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.queriespersecond,"Number of kv-level requests received per second by the store, considering the last 30 minutes, as used in rebalancing decisions.",Queries/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.range.rebalances,Number of range rebalance operations motivated by store-level load imbalances,Range Rebalances,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.readbytespersecond,"Number of bytes read recently per second, considering the last 30 minutes.",Bytes/Sec,GAUGE,BYTES,AVG,NONE
+STORAGE,rebalancing.readspersecond,"Number of keys read recently per second, considering the last 30 minutes.",Keys/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.replicas.cpunanospersecond,Histogram of average CPU nanoseconds spent on processing replica operations in the last 30 minutes.,Nanoseconds/Sec,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,rebalancing.replicas.queriespersecond,Histogram of average kv-level requests received per second by replicas on the store in the last 30 minutes.,Queries/Sec,HISTOGRAM,COUNT,AVG,NONE
+STORAGE,rebalancing.requestspersecond,"Number of requests received recently per second, considering the last 30 minutes.",Requests/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,rebalancing.state.imbalanced_overfull_options_exhausted,Number of occurrences where this store was overfull but failed to shed load after exhausting available rebalance options,Overfull Options Exhausted,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rebalancing.writebytespersecond,"Number of bytes written recently per second, considering the last 30 minutes.",Bytes/Sec,GAUGE,BYTES,AVG,NONE
+STORAGE,rebalancing.writespersecond,"Number of keys written (i.e. applied by raft) per second to the store, considering the last 30 minutes.",Keys/Sec,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas,Number of replicas,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders,Number of raft leaders,Raft Leaders,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders_invalid_lease,Number of replicas that are Raft leaders whose lease is invalid,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaders_not_leaseholders,Number of replicas that are Raft leaders whose range lease is held by another store,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.leaseholders,Number of lease holders,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.quiescent,Number of quiesced replicas,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.reserved,Number of replicas reserved for snapshots,Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,replicas.uninitialized,"Number of uninitialized replicas, this does not include uninitialized replicas that can lie dormant in a persistent state.",Replicas,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.backpressure.split,"Number of backpressured writes waiting on a Range split.
+
+A Range will backpressure (roughly) non-system traffic when the range is above
+the configured size until the range splits. When the rate of this metric is
+nonzero over extended periods of time, it should be investigated why splits are
+not occurring.
+",Writes,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.latch,"Number of requests that have been stuck for a long time acquiring latches.
+
+Latches moderate access to the KV keyspace for the purpose of evaluating and
+replicating commands. A slow latch acquisition attempt is often caused by
+another request holding and not releasing its latches in a timely manner. This
+in turn can either be caused by a long delay in evaluation (for example, under
+severe system overload) or by delays at the replication layer.
+
+This gauge registering a nonzero value usually indicates a serious problem and
+should be investigated.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.lease,"Number of requests that have been stuck for a long time acquiring a lease.
+
+This gauge registering a nonzero value usually indicates range or replica
+unavailability, and should be investigated. In the common case, we also
+expect to see 'requests.slow.raft' to register a nonzero value, indicating
+that the lease requests are not getting a timely response from the replication
+layer.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,requests.slow.raft,"Number of requests that have been stuck for a long time in the replication layer.
+
+An (evaluated) request has to pass through the replication layer, notably the
+quota pool and raft. If it fails to do so within a highly permissive duration,
+the gauge is incremented (and decremented again once the request is either
+applied or returns an error).
+
+A nonzero value indicates range or replica unavailability, and should be investigated.
+",Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.block.cache.hits,Count of block cache hits,Cache Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.block.cache.misses,Count of block cache misses,Cache Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.block.cache.usage,Bytes used by the block cache,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.bloom.filter.prefix.checked,Number of times the bloom filter was checked,Bloom Filter Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.bloom.filter.prefix.useful,Number of times the bloom filter helped avoid iterator creation,Bloom Filter Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.compacted-bytes-read,Bytes read during compaction,Bytes Read,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.compacted-bytes-written,Bytes written during compaction,Bytes Written,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.compactions,Number of table compactions,Compactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.encryption.algorithm,"Algorithm in use for encryption-at-rest, see ccl/storageccl/engineccl/enginepbccl/key_registry.proto",Encryption At Rest,GAUGE,CONST,AVG,NONE
+STORAGE,rocksdb.estimated-pending-compaction,Estimated pending compaction bytes,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.flushed-bytes,Bytes written during flush,Bytes Written,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.flushes,Number of table flushes,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.ingested-bytes,Bytes ingested,Bytes Ingested,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rocksdb.memtable.total-size,Current size of memtable in bytes,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rocksdb.num-sstables,Number of storage engine SSTables,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.read-amplification,Number of disk reads per query,Disk Reads per Query,GAUGE,COUNT,AVG,NONE
+STORAGE,rocksdb.table-readers-mem-estimate,Memory used by index and filter blocks,Memory,GAUGE,BYTES,AVG,NONE
+STORAGE,rpc.batches.recv,Number of batches processed,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.addsstable.recv,Number of AddSSTable requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminchangereplicas.recv,Number of AdminChangeReplicas requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminmerge.recv,Number of AdminMerge requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminrelocaterange.recv,Number of AdminRelocateRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminscatter.recv,Number of AdminScatter requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminsplit.recv,Number of AdminSplit requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.admintransferlease.recv,Number of AdminTransferLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminunsplit.recv,Number of AdminUnsplit requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.adminverifyprotectedtimestamp.recv,Number of AdminVerifyProtectedTimestamp requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.barrier.recv,Number of Barrier requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.checkconsistency.recv,Number of CheckConsistency requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.clearrange.recv,Number of ClearRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.computechecksum.recv,Number of ComputeChecksum requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.conditionalput.recv,Number of ConditionalPut requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.delete.recv,Number of Delete requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.deleterange.recv,Number of DeleteRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.endtxn.recv,Number of EndTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.export.recv,Number of Export requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.gc.recv,Number of GC requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.get.recv,Number of Get requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.heartbeattxn.recv,Number of HeartbeatTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.increment.recv,Number of Increment requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.initput.recv,Number of InitPut requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.isspanempty.recv,Number of IsSpanEmpty requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.leaseinfo.recv,Number of LeaseInfo requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.linkexternalsstable.recv,Number of LinkExternalSSTable requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.merge.recv,Number of Merge requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.migrate.recv,Number of Migrate requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.probe.recv,Number of Probe requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.pushtxn.recv,Number of PushTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.put.recv,Number of Put requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.queryintent.recv,Number of QueryIntent requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.querylocks.recv,Number of QueryLocks requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.queryresolvedtimestamp.recv,Number of QueryResolvedTimestamp requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.querytxn.recv,Number of QueryTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.rangestats.recv,Number of RangeStats requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.recomputestats.recv,Number of RecomputeStats requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.recovertxn.recv,Number of RecoverTxn requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.refresh.recv,Number of Refresh requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.refreshrange.recv,Number of RefreshRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.requestlease.recv,Number of RequestLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.resolveintent.recv,Number of ResolveIntent requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.resolveintentrange.recv,Number of ResolveIntentRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.reversescan.recv,Number of ReverseScan requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.revertrange.recv,Number of RevertRange requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.scan.recv,Number of Scan requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.subsume.recv,Number of Subsume requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.transferlease.recv,Number of TransferLease requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.truncatelog.recv,Number of TruncateLog requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.method.writebatch.recv,Number of WriteBatch requests processed,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,rpc.streams.mux_rangefeed.active,Number of currently running MuxRangeFeed streams,Streams,GAUGE,COUNT,AVG,NONE
+STORAGE,rpc.streams.mux_rangefeed.recv,Total number of MuxRangeFeed streams,Streams,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,spanconfig.kvsubscriber.oldest_protected_record_nanos,Difference between the current time and the oldest protected timestamp (sudden drops indicate a record being released; an ever increasing number indicates that the oldest record is around and preventing GC if > configured GC TTL),Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,spanconfig.kvsubscriber.protected_record_count,"Number of protected timestamp records, as seen by KV",Records,GAUGE,COUNT,AVG,NONE
+STORAGE,spanconfig.kvsubscriber.update_behind_nanos,Difference between the current time and when the KVSubscriber received its last update (an ever increasing number indicates that we're no longer receiving updates),Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.batch-commit.commit-wait.duration,"Cumulative time spent waiting for WAL sync, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.count,Count of batch commits. See storage.AggregatedBatchCommitStats for details.,Commit Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.duration,Cumulative time spent in batch commit. See storage.AggregatedBatchCommitStats for details.,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.l0-stall.duration,"Cumulative time spent in a write stall due to high read amplification in L0, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.mem-stall.duration,"Cumulative time spent in a write stall due to too many memtables, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.sem-wait.duration,"Cumulative time spent in semaphore wait, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.wal-queue-wait.duration,"Cumulative time spent waiting for memory blocks in the WAL queue, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.batch-commit.wal-rotation.duration,"Cumulative time spent waiting for WAL rotation, for batch commit. See storage.AggregatedBatchCommitStats for details.",Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.block-load.active,The number of sstable block loads currently in progress,Block loads,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.block-load.queued,The cumulative number of SSTable block loads that were delayed because too many loads were active (see also: `storage.block_load.node_max_active`),Block loads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.category-pebble-manifest.bytes-written,Bytes written to disk,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.category-pebble-wal.bytes-written,Bytes written to disk,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.category-unspecified.bytes-written,Bytes written to disk,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.checkpoints,"The number of checkpoint directories found in storage.
+
+This is the number of directories found in the auxiliary/checkpoints directory.
+Each represents an immutable point-in-time storage engine checkpoint. They are
+cheap (consisting mostly of hard links), but over time they effectively become a
+full copy of the old state, which increases their relative cost. Checkpoints
+must be deleted once acted upon (e.g. copied elsewhere or investigated).
+
+A likely cause of having a checkpoint is that one of the ranges in this store
+had inconsistent data among its replicas. Such checkpoint directories are
+located in auxiliary/checkpoints/rN_at_M, where N is the range ID, and M is the
+Raft applied index at which this checkpoint was taken.",Directories,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.compactions.duration,"Cumulative sum of all compaction durations.
+
+The rate of this value provides the effective compaction concurrency of a store,
+which can be useful to determine whether the maximum compaction concurrency is
+fully utilized.",Processing Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.compactions.keys.pinned.bytes,"Cumulative size of storage engine KVs written to sstables during flushes and compactions due to open LSM snapshots.
+
+Various subsystems of CockroachDB take LSM snapshots to maintain a consistent view
+of the database over an extended duration. In order to maintain the consistent view,
+flushes and compactions within the storage engine must preserve keys that otherwise
+would have been dropped. This increases write amplification, and introduces keys
+that must be skipped during iteration. This metric records the cumulative number of
+bytes preserved during flushes and compactions over the lifetime of the process.
+",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.compactions.keys.pinned.count,"Cumulative count of storage engine KVs written to sstables during flushes and compactions due to open LSM snapshots.
+
+Various subsystems of CockroachDB take LSM snapshots to maintain a consistent view
+of the database over an extended duration. In order to maintain the consistent view,
+flushes and compactions within the storage engine must preserve keys that otherwise
+would have been dropped. This increases write amplification, and introduces keys
+that must be skipped during iteration. This metric records the cumulative count of
+KVs preserved during flushes and compactions over the lifetime of the process.
+",Keys,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk-slow,Number of instances of disk operations taking longer than 10s,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk-stalled,Number of instances of disk operations taking longer than 20s,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.io.time,Time spent reading from or writing to the store's disk since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.iopsinprogress,IO operations currently in progress on the store's disk (as reported by the OS),Operations,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.disk.read-max.bytespersecond,Maximum rate at which bytes were read from disk (as reported by the OS),Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.disk.read.bytes,Bytes read from the store's disk since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.read.count,Disk read operations on the store's disk since this process started (as reported by the OS),Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.read.time,Time spent reading from the store's disk since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.weightedio.time,Weighted time spent reading from or writing to the store's disk since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.write-max.bytespersecond,Maximum rate at which bytes were written to disk (as reported by the OS),Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.disk.write.bytes,Bytes written to the store's disk since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.write.count,Disk write operations on the store's disk since this process started (as reported by the OS),Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.disk.write.time,Time spent writing to the store's disks since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.flush.ingest.count,Flushes performing an ingest (flushable ingestions),Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.flush.ingest.table.bytes,Bytes ingested via flushes (flushable ingestions),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.flush.ingest.table.count,Tables ingested via flushes (flushable ingestions),Tables,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.flush.utilization,The percentage of time the storage engine is actively flushing memtables to disk.,Flush Utilization,GAUGE,PERCENT,AVG,NONE
+STORAGE,storage.ingest.count,Number of successful ingestions performed,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.iterator.block-load.bytes,Bytes loaded by storage engine iterators (possibly cached). See storage.AggregatedIteratorStats for details.,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.block-load.cached-bytes,Bytes loaded by storage engine iterators from the block cache. See storage.AggregatedIteratorStats for details.,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.block-load.read-duration,Cumulative time storage engine iterators spent loading blocks from durable storage. See storage.AggregatedIteratorStats for details.,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.external.seeks,Cumulative count of seeks performed on storage engine iterators. See storage.AggregatedIteratorStats for details.,Iterator Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.external.steps,Cumulative count of steps performed on storage engine iterators. See storage.AggregatedIteratorStats for details.,Iterator Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.internal.seeks,"Cumulative count of seeks performed internally within storage engine iterators.
+
+A value high relative to 'storage.iterator.external.seeks'
+is a good indication that there's an accumulation of garbage
+internally within the storage engine.
+
+See storage.AggregatedIteratorStats for details.",Iterator Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.iterator.internal.steps,"Cumulative count of steps performed internally within storage engine iterators.
+
+A value high relative to 'storage.iterator.external.steps'
+is a good indication that there's an accumulation of garbage
+internally within the storage engine.
+
+See storage.AggregatedIteratorStats for more details.",Iterator Ops,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.keys.range-key-set.count,Approximate count of RangeKeySet internal keys across the storage engine.,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.keys.tombstone.count,"Approximate count of DEL, SINGLEDEL and RANGEDEL internal keys across the storage engine.",Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-bytes-flushed,Number of bytes flushed (from memtables) into Level 0,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l0-bytes-ingested,Number of bytes ingested directly into Level 0,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l0-level-score,Compaction score of level 0,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-level-size,Size of the SSTables in level 0,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l0-num-files,Number of SSTables in Level 0,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l0-sublevels,Number of Level 0 sublevels,Sublevels,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l1-bytes-ingested,Number of bytes ingested directly into Level 1,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l1-level-score,Compaction score of level 1,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l1-level-size,Size of the SSTables in level 1,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l2-bytes-ingested,Number of bytes ingested directly into Level 2,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l2-level-score,Compaction score of level 2,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l2-level-size,Size of the SSTables in level 2,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l3-bytes-ingested,Number of bytes ingested directly into Level 3,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l3-level-score,Compaction score of level 3,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l3-level-size,Size of the SSTables in level 3,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l4-bytes-ingested,Number of bytes ingested directly into Level 4,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l4-level-score,Compaction score of level 4,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l4-level-size,Size of the SSTables in level 4,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l5-bytes-ingested,Number of bytes ingested directly into Level 5,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l5-level-score,Compaction score of level 5,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l5-level-size,Size of the SSTables in level 5,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.l6-bytes-ingested,Number of bytes ingested directly into Level 6,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.l6-level-score,Compaction score of level 6,Score,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.l6-level-size,Size of the SSTables in level 6,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.marked-for-compaction-files,Count of SSTables marked for compaction,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.queue.store-failures,Number of replicas which failed processing in replica queues due to retryable store errors,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.count,The count of cache blocks in the secondary cache (not sstable blocks),Cache items,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.secondary-cache.evictions,The number of times a cache block was evicted from the secondary cache,Num evictions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-full-hit,The number of reads where all data returned was read from the secondary cache,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-multi-block,The number of secondary cache reads that require reading data from 2+ cache blocks,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-multi-shard,The number of secondary cache reads that require reading data from 2+ shards,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-no-hit,The number of reads where no data returned was read from the secondary cache,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-partial-hit,The number of reads where some data returned was read from the secondary cache,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.reads-total,The number of reads from the secondary cache,Num reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.secondary-cache.size,The number of sstable bytes stored in the secondary cache,Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.secondary-cache.write-back-failures,The number of times writing a cache block to the secondary cache failed,Num failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.shared-storage.read,Bytes read from shared storage,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.shared-storage.write,Bytes written to external storage,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.single-delete.ineffectual,Number of SingleDeletes that were ineffectual,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.single-delete.invariant-violation,Number of SingleDelete invariant violations,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.sstable.compression.none.count,Count of SSTables that are uncompressed.,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.sstable.compression.snappy.count,Count of SSTables that have been compressed with the snappy compression algorithm.,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.sstable.compression.unknown.count,Count of SSTables that have an unknown compression algorithm.,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.sstable.compression.zstd.count,Count of SSTables that have been compressed with the zstd compression algorithm.,SSTables,GAUGE,COUNT,AVG,NONE
+STORAGE,storage.sstable.zombie.bytes,"Bytes in SSTables that have been logically deleted, but can't yet be physically deleted because an open iterator may be reading them.",Bytes,GAUGE,BYTES,AVG,NONE
+STORAGE,storage.wal.bytes_in,The number of logical bytes the storage engine has written to the WAL,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.wal.bytes_written,The number of bytes the storage engine has written to the WAL,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.wal.failover.primary.duration,Cumulative time spent writing to the primary WAL directory. Only populated when WAL failover is configured,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.wal.failover.secondary.duration,Cumulative time spent writing to the secondary WAL directory. Only populated when WAL failover is configured,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.wal.failover.switch.count,Count of the number of times WAL writing has switched from primary to secondary and vice versa.,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,storage.wal.failover.write_and_sync.latency,The observed latency for writing and syncing to the write ahead log. Only populated when WAL failover is configured,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,storage.wal.fsync.latency,The write ahead log fsync latency,Fsync Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,storage.write-stall-nanos,Total write stall duration in nanos,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+STORAGE,storage.write-stalls,Number of instances of intentional write stalls to backpressure incoming writes,Events,GAUGE,COUNT,AVG,NONE
+STORAGE,sysbytes,Number of bytes in system KV pairs,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,syscount,Count of system KV pairs,Keys,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.cross_region_network_ru,Total number of RUs charged for cross-region network traffic,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.external_io_egress_bytes,Total number of bytes written to external services such as cloud storage providers,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.external_io_ingress_bytes,Total number of bytes read from external services such as cloud storage providers,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.kv_request_units,RU consumption attributable to KV,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.pgwire_egress_bytes,Total number of bytes transferred from a SQL pod to the client,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_batches,Total number of KV read batches,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_bytes,Total number of bytes read from KV,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.read_requests,Total number of KV read requests,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.request_units,Total RU consumption,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,tenant.consumption.sql_pods_cpu_seconds,Total amount of CPU used by SQL pods,CPU Seconds,GAUGE,SECONDS,AVG,NONE
+STORAGE,tenant.consumption.write_batches,Total number of KV write batches,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.write_bytes,Total number of bytes written to KV,Bytes,GAUGE,COUNT,AVG,NONE
+STORAGE,tenant.consumption.write_requests,Total number of KV write requests,Requests,GAUGE,COUNT,AVG,NONE
+STORAGE,timeseries.write.bytes,Total size in bytes of metric samples written to disk,Storage,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,timeseries.write.errors,Total errors encountered while attempting to write metrics to disk,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,timeseries.write.samples,Total number of metric samples written to disk,Metric Samples,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,totalbytes,Total number of bytes taken up by keys and values including non-live data,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,tscache.skl.pages,Number of pages in the timestamp cache,Pages,GAUGE,COUNT,AVG,NONE
+STORAGE,tscache.skl.rotations,Number of page rotations in the timestamp cache,Page Rotations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.commit_waits.before_commit_trigger,Number of KV transactions that had to commit-wait on the server before committing because they had a commit trigger,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side.1PC.failure,Number of batches that attempted to commit using 1PC and failed,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side.1PC.success,Number of batches that attempted to commit using 1PC and succeeded,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.read_evaluation.failure,Number of read batches that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.read_evaluation.success,Number of read batches that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.uncertainty_interval_error.failure,Number of batches that ran into uncertainty interval errors that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.uncertainty_interval_error.success,Number of batches that ran into uncertainty interval errors that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.write_evaluation.failure,Number of write batches that were not successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txn.server_side_retry.write_evaluation.success,Number of write batches that were successfully refreshed server side,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.attempts.pending,Number of transaction recovery attempts currently in-flight,Recovery Attempts,GAUGE,COUNT,AVG,NONE
+STORAGE,txnrecovery.attempts.total,Number of transaction recovery attempts executed,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.failures,Number of transaction recovery attempts that failed,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.aborted,Number of transaction recovery attempts that aborted a transaction,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.committed,Number of transaction recovery attempts that committed a transaction,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnrecovery.successes.pending,Number of transaction recovery attempts that left a transaction pending,Recovery Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnwaitqueue.deadlocks_total,Number of deadlocks detected by the txn wait queue,Deadlocks,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+STORAGE,txnwaitqueue.pushee.waiting,Number of pushees on the txn wait queue,Waiting Pushees,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.pusher.slow,The total number of cases where a pusher waited more than the excessive wait threshold,Slow Pushers,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.pusher.wait_time,Histogram of durations spent in queue by pushers,Pusher wait time,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,txnwaitqueue.pusher.waiting,Number of pushers on the txn wait queue,Waiting Pushers,GAUGE,COUNT,AVG,NONE
+STORAGE,txnwaitqueue.query.wait_time,Histogram of durations spent in queue by queries,Query wait time,HISTOGRAM,NANOSECONDS,AVG,NONE
+STORAGE,txnwaitqueue.query.waiting,Number of transaction status queries waiting for an updated transaction record,Waiting Queries,GAUGE,COUNT,AVG,NONE
+STORAGE,valbytes,Number of bytes taken up by values,Storage,GAUGE,BYTES,AVG,NONE
+STORAGE,valcount,Count of all values,MVCC Values,GAUGE,COUNT,AVG,NONE
+APPLICATION,backup.last-failed-time.kms-inaccessible,The unix timestamp of the most recent failure of backup due to errKMSInaccessible by a backup specified as maintaining this metric,Jobs,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,changefeed.admit_latency,"Event admission latency: a difference between event MVCC timestamp and the time it was admitted into changefeed pipeline; Note: this metric includes the time spent waiting until event can be processed due to backpressure or time spent resolving schema descriptors. Also note, this metric excludes latency during backfill",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.aggregator_progress,The earliest timestamp up to which any aggregator is guaranteed to have emitted all values for,Unix Timestamp Nanoseconds,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,changefeed.backfill_count,Number of changefeeds currently executing backfill,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.backfill_pending_ranges,Number of ranges in an ongoing backfill that are yet to be fully emitted,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.batch_reduction_count,Number of times a changefeed aggregator node attempted to reduce the size of message batches it emitted to the sink,Batch Size Reductions,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.buffer_entries.allocated_mem,Current quota pool memory allocation,Bytes,GAUGE,BYTES,AVG,NONE
+APPLICATION,changefeed.buffer_entries.flush,Number of flush elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.in,Total entries entering the buffer between raft and changefeed sinks,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.kv,Number of kv elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.out,Total entries leaving the buffer between raft and changefeed sinks,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.released,"Total entries processed, emitted and acknowledged by the sinks",Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries.resolved,Number of resolved elements added to the buffer,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries_mem.acquired,Total amount of memory acquired for entries as they enter the system,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_entries_mem.released,Total amount of memory released by the entries after they have been emitted,Entries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.buffer_pushback_nanos,Total time spent waiting while the buffer was full,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.bytes.messages_pushback_nanos,Total time spent throttled for bytes quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.checkpoint_hist_nanos,Time spent checkpointing changefeed progress,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.checkpoint_progress,The earliest timestamp of any changefeed's persisted checkpoint (values prior to this timestamp will never need to be re-emitted),Unix Timestamp Nanoseconds,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,changefeed.cloudstorage_buffered_bytes,The number of bytes buffered in cloudstorage sink files which have not been emitted yet,Bytes,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.commit_latency,"Event commit latency: a difference between event MVCC timestamp and the time it was acknowledged by the downstream sink. If the sink batches events, then the difference between the oldest event in the batch and acknowledgement is recorded; Excludes latency during backfill",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.emitted_batch_sizes,Size of batches emitted emitted by all feeds,Number of Messages in Batch,HISTOGRAM,COUNT,AVG,NONE
+APPLICATION,changefeed.emitted_bytes,Bytes emitted by all feeds,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.emitted_messages,Messages emitted by all feeds,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.error_retries,Total retryable errors encountered by all changefeeds,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.failures,Total number of changefeed jobs which have failed,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.filtered_messages,Messages filtered out by all feeds. This count does not include the number of messages that may be filtered due to the range constraints.,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flush.messages_pushback_nanos,Total time spent throttled for flush quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flush_hist_nanos,Time spent flushing messages across all changefeeds,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.flushed_bytes,Bytes emitted by all feeds; maybe different from changefeed.emitted_bytes when compression is enabled,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.flushes,Total flushes across all feeds,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.forwarded_resolved_messages,Resolved timestamps forwarded from the change aggregator to the change frontier,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.frontier_updates,Number of change frontier updates across all feeds,Updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.internal_retry_message_count,Number of messages for which an attempt to retry them within an aggregator node was made,Messages,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.kafka_throttling_hist_nanos,Time spent in throttling due to exceeding kafka quota,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.lagging_ranges,The number of ranges considered to be lagging behind,Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.max_behind_nanos,(Deprecated in favor of checkpoint_progress) The most any changefeed's persisted checkpoint is behind the present,Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.message_size_hist,Message size histogram,Bytes,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,changefeed.messages.messages_pushback_nanos,Total time spent throttled for messages quota,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.nprocs_consume_event_nanos,Total time spent waiting to add an event to the parallel consumer,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.nprocs_flush_nanos,Total time spent idle waiting for the parallel consumer to flush,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.nprocs_in_flight_count,Number of buffered events in the parallel consumer,Count of Events,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.parallel_io_in_flight_keys,The number of keys currently in-flight which may contend with batches pending to be emitted,Keys,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.parallel_io_pending_rows,Number of rows which are blocked from being sent due to conflicting in-flight keys,Keys,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.parallel_io_queue_nanos,Time that outgoing requests to the sink spend waiting in a queue due to in-flight requests with conflicting keys,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.parallel_io_result_queue_nanos,Time that incoming results from the sink spend waiting in parallel io emitter before they are acknowledged by the changefeed,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.queue_time_nanos,Time KV event spent waiting to be processed,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.running,"Number of currently running changefeeds, including sinkless",Changefeeds,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.schema_registry.registrations,Number of registration attempts with the schema registry,Registrations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schema_registry.retry_count,Number of retries encountered when sending requests to the schema registry,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schemafeed.table_history_scans,The number of table history scans during polling,Counts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.schemafeed.table_metadata_nanos,Time blocked while verifying table metadata histories,Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.sink_batch_hist_nanos,Time spent batched in the sink buffer before being flushed and acknowledged,Changefeeds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.sink_io_inflight,The number of keys currently inflight as IO requests being sent to the sink,Messages,GAUGE,COUNT,AVG,NONE
+APPLICATION,changefeed.size_based_flushes,Total size based flushes across all feeds,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.usage.error_count,Count of errors encountered while generating usage metrics for changefeeds,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,changefeed.usage.query_duration,Time taken by the queries used to generate usage metrics for changefeeds,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,changefeed.usage.table_bytes,Aggregated number of bytes of data per table watched by changefeeds,Storage,GAUGE,BYTES,AVG,NONE
+APPLICATION,clock-offset.meannanos,Mean clock offset with other nodes,Clock Offset,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,clock-offset.stddevnanos,Stddev clock offset with other nodes,Clock Offset,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,cloud.conns_opened,HTTP connections opened by cloud operations,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.conns_reused,HTTP connections reused by cloud operations,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.listing_results,Listing results by all cloud operations,Results,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.listings,Listing operations by all cloud operations,Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.open_readers,Currently open readers for cloud IO,Readers,GAUGE,COUNT,AVG,NONE
+APPLICATION,cloud.open_writers,Currently open writers for cloud IO,Writers,GAUGE,COUNT,AVG,NONE
+APPLICATION,cloud.read_bytes,Bytes read from all cloud operations,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.readers_opened,Readers opened by all cloud operations,Files,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.tls_handshakes,TLS handshakes done by cloud operations,Handshakes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.write_bytes,Bytes written by all cloud operations,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cloud.writers_opened,Writers opened by all cloud operations,files,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,cluster.preserve-downgrade-option.last-updated,Unix timestamp of last updated time for cluster.preserve_downgrade_option,Timestamp,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,distsender.batch_requests.cross_region.bytes,"Total byte count of replica-addressed batch requests processed cross
+ region when region tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_requests.cross_zone.bytes,"Total byte count of replica-addressed batch requests processed cross
+ zone within the same region when region and zone tiers are configured.
+ However, if the region tiers are not configured, this count may also include
+ batch data sent between different regions. Ensuring consistent configuration
+ of region and zone tiers across nodes helps to accurately monitor the data
+ transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_requests.replica_addressed.bytes,Total byte count of replica-addressed batch requests processed,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.cross_region.bytes,"Total byte count of replica-addressed batch responses received cross
+ region when region tiers are configured",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.cross_zone.bytes,"Total byte count of replica-addressed batch responses received cross
+ zone within the same region when region and zone tiers are configured.
+ However, if the region tiers are not configured, this count may also include
+ batch data received between different regions. Ensuring consistent
+ configuration of region and zone tiers across nodes helps to accurately
+ monitor the data transmitted.",Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batch_responses.replica_addressed.bytes,Total byte count of replica-addressed batch responses received,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches,Number of batches processed,Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.async.sent,Number of partial batches sent asynchronously,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.async.throttled,Number of partial batches not sent asynchronously due to throttling,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.batches.partial,Number of partial batches processed after being divided on range boundaries,Partial Batches,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.circuit_breaker.replicas.count,Number of replicas currently tracked by DistSender circuit breakers,Replicas,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.circuit_breaker.replicas.probes.failure,Cumulative number of failed DistSender replica circuit breaker probes,Probes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.circuit_breaker.replicas.probes.running,Number of currently running DistSender replica circuit breaker probes,Probes,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.circuit_breaker.replicas.probes.success,Cumulative number of successful DistSender replica circuit breaker probes,Probes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.circuit_breaker.replicas.requests.cancelled,Cumulative number of requests cancelled when DistSender replica circuit breakers trip,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.circuit_breaker.replicas.requests.rejected,Cumulative number of requests rejected by tripped DistSender replica circuit breakers,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.circuit_breaker.replicas.tripped,Number of DistSender replica circuit breakers currently tripped,Replicas,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.circuit_breaker.replicas.tripped_events,Cumulative number of DistSender replica circuit breakers tripped over time,Replicas,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.errors.inleasetransferbackoffs,Number of times backed off due to NotLeaseHolderErrors during lease transfer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.errors.notleaseholder,Number of NotLeaseHolderErrors encountered from replica-addressed RPCs,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.catchup_ranges,"Number of ranges in catchup mode
+
+This counts the number of ranges with an active rangefeed that are performing catchup scan.
+",Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.rangefeed.error_catchup_ranges,Number of ranges in catchup mode which experienced an error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.local_ranges,Number of ranges connected to local node.,Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.rangefeed.restart_ranges,Number of ranges that were restarted due to transient errors,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.logical_ops_missing,Number of ranges that encountered retryable LOGICAL_OPS_MISSING error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.manual_range_split,Number of ranges that encountered retryable MANUAL_RANGE_SPLIT error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.no_leaseholder,Number of ranges that encountered retryable NO_LEASEHOLDER error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.node_not_found,Number of ranges that encountered retryable node not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.raft_snapshot,Number of ranges that encountered retryable RAFT_SNAPSHOT error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_key_mismatch,Number of ranges that encountered retryable range key mismatch error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_merged,Number of ranges that encountered retryable RANGE_MERGED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_not_found,Number of ranges that encountered retryable range not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.range_split,Number of ranges that encountered retryable RANGE_SPLIT error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.rangefeed_closed,Number of ranges that encountered retryable RANGEFEED_CLOSED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.replica_removed,Number of ranges that encountered retryable REPLICA_REMOVED error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.send,Number of ranges that encountered retryable send error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.slow_consumer,Number of ranges that encountered retryable SLOW_CONSUMER error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.retry.store_not_found,Number of ranges that encountered retryable store not found error,Ranges,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rangefeed.total_ranges,"Number of ranges executing rangefeed
+
+This counts the number of ranges with an active rangefeed.
+",Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,distsender.rangelookups,Number of range lookups,Range Lookups,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.addsstable.sent,"Number of AddSSTable requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminchangereplicas.sent,"Number of AdminChangeReplicas requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminmerge.sent,"Number of AdminMerge requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminrelocaterange.sent,"Number of AdminRelocateRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminscatter.sent,"Number of AdminScatter requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminsplit.sent,"Number of AdminSplit requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.admintransferlease.sent,"Number of AdminTransferLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminunsplit.sent,"Number of AdminUnsplit requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.adminverifyprotectedtimestamp.sent,"Number of AdminVerifyProtectedTimestamp requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.barrier.sent,"Number of Barrier requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.checkconsistency.sent,"Number of CheckConsistency requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.clearrange.sent,"Number of ClearRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.computechecksum.sent,"Number of ComputeChecksum requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.conditionalput.sent,"Number of ConditionalPut requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.delete.sent,"Number of Delete requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.deleterange.sent,"Number of DeleteRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.endtxn.sent,"Number of EndTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.ambiguousresulterrtype,"Number of AmbiguousResultErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.batchtimestampbeforegcerrtype,"Number of BatchTimestampBeforeGCErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.communicationerrtype,"Number of CommunicationErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.conditionfailederrtype,"Number of ConditionFailedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(0),"Number of ErrorDetailType(0) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(15),"Number of ErrorDetailType(15) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(19),"Number of ErrorDetailType(19) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(20),"Number of ErrorDetailType(20) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(21),"Number of ErrorDetailType(21) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(23),"Number of ErrorDetailType(23) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(24),"Number of ErrorDetailType(24) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(29),"Number of ErrorDetailType(29) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(30),"Number of ErrorDetailType(30) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.errordetailtype(33),"Number of ErrorDetailType(33) errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.indeterminatecommiterrtype,"Number of IndeterminateCommitErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.integeroverflowerrtype,"Number of IntegerOverflowErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.intentmissingerrtype,"Number of IntentMissingErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.internalerrtype,"Number of InternalErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.invalidleaseerrtype,"Number of InvalidLeaseErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.leaserejectederrtype,"Number of LeaseRejectedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.lockconflicterrtype,"Number of LockConflictErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mergeinprogresserrtype,"Number of MergeInProgressErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mintimestampboundunsatisfiableerrtype,"Number of MinTimestampBoundUnsatisfiableErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.mvcchistorymutationerrtype,"Number of MVCCHistoryMutationErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.nodeunavailableerrtype,"Number of NodeUnavailableErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.notleaseholdererrtype,"Number of NotLeaseHolderErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.oprequirestxnerrtype,"Number of OpRequiresTxnErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.optimisticevalconflictserrtype,"Number of OptimisticEvalConflictsErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.proxyfailederrtype,"Number of ProxyFailedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.raftgroupdeletederrtype,"Number of RaftGroupDeletedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangefeedretryerrtype,"Number of RangeFeedRetryErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangekeymismatcherrtype,"Number of RangeKeyMismatchErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.rangenotfounderrtype,"Number of RangeNotFoundErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.readwithinuncertaintyintervalerrtype,"Number of ReadWithinUncertaintyIntervalErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.refreshfailederrtype,"Number of RefreshFailedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.replicacorruptionerrtype,"Number of ReplicaCorruptionErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.replicatooolderrtype,"Number of ReplicaTooOldErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.replicaunavailableerrtype,"Number of ReplicaUnavailableErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.storenotfounderrtype,"Number of StoreNotFoundErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionabortederrtype,"Number of TransactionAbortedErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionpusherrtype,"Number of TransactionPushErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionretryerrtype,"Number of TransactionRetryErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionretrywithprotorefresherrtype,"Number of TransactionRetryWithProtoRefreshErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.transactionstatuserrtype,"Number of TransactionStatusErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.txnalreadyencounterederrtype,"Number of TxnAlreadyEncounteredErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.unsupportedrequesterrtype,"Number of UnsupportedRequestErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.writeintenterrtype,"Number of WriteIntentErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.err.writetooolderrtype,"Number of WriteTooOldErrType errors received replica-bound RPCs
+
+This counts how often error of the specified type was received back from replicas
+as part of executing possibly range-spanning requests. Failures to reach the target
+replica will be accounted for as 'roachpb.CommunicationErrType' and unclassified
+errors as 'roachpb.InternalErrType'.
+",Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.export.sent,"Number of Export requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.gc.sent,"Number of GC requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.get.sent,"Number of Get requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.heartbeattxn.sent,"Number of HeartbeatTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.increment.sent,"Number of Increment requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.initput.sent,"Number of InitPut requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.isspanempty.sent,"Number of IsSpanEmpty requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.leaseinfo.sent,"Number of LeaseInfo requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.linkexternalsstable.sent,"Number of LinkExternalSSTable requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.merge.sent,"Number of Merge requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.migrate.sent,"Number of Migrate requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.probe.sent,"Number of Probe requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.proxy.err,Number of attempts by a gateway to proxy a request which resulted in a failure.,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.proxy.forward.err,Number of attempts on a follower replica to proxy a request which resulted in a failure.,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.proxy.forward.sent,Number of attempts on a follower replica to proxy a request to an unreachable leaseholder.,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.proxy.sent,Number of attempts by a gateway to proxy a request to an unreachable leaseholder via a follower replica.,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.pushtxn.sent,"Number of PushTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.put.sent,"Number of Put requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.queryintent.sent,"Number of QueryIntent requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.querylocks.sent,"Number of QueryLocks requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.queryresolvedtimestamp.sent,"Number of QueryResolvedTimestamp requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.querytxn.sent,"Number of QueryTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.rangestats.sent,"Number of RangeStats requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.recomputestats.sent,"Number of RecomputeStats requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.recovertxn.sent,"Number of RecoverTxn requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.refresh.sent,"Number of Refresh requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.refreshrange.sent,"Number of RefreshRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.requestlease.sent,"Number of RequestLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.resolveintent.sent,"Number of ResolveIntent requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.resolveintentrange.sent,"Number of ResolveIntentRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.reversescan.sent,"Number of ReverseScan requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.revertrange.sent,"Number of RevertRange requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.scan.sent,"Number of Scan requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent,Number of replica-addressed RPCs sent,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent.local,Number of replica-addressed RPCs sent through the local-server optimization,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.sent.nextreplicaerror,Number of replica-addressed RPCs sent due to per-replica errors,RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.subsume.sent,"Number of Subsume requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.transferlease.sent,"Number of TransferLease requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.truncatelog.sent,"Number of TruncateLog requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.rpc.writebatch.sent,"Number of WriteBatch requests processed.
+
+This counts the requests in batches handed to DistSender, not the RPCs
+sent to individual Ranges as a result.",RPCs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,distsender.slow.replicarpcs,"Number of slow replica-bound RPCs.
+
+Note that this is not a good signal for KV health. The remote side of the
+RPCs tracked here may experience contention, so an end user can easily
+cause values for this metric to be emitted by leaving a transaction open
+for a long time and contending with it using a second transaction.",Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.adopt_iterations,number of job-adopt iterations performed by the registry,iterations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.currently_idle,Number of auto_config_env_runner jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.currently_paused,Number of auto_config_env_runner jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.currently_running,Number of auto_config_env_runner jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.expired_pts_records,Number of expired protected timestamp records owned by auto_config_env_runner jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_completed,Number of auto_config_env_runner jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_failed,Number of auto_config_env_runner jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.fail_or_cancel_retry_error,Number of auto_config_env_runner jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.protected_age_sec,The age of the oldest PTS record protected by auto_config_env_runner jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.protected_record_count,Number of protected timestamp records held by auto_config_env_runner jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_env_runner.resume_completed,Number of auto_config_env_runner jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.resume_failed,Number of auto_config_env_runner jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_env_runner.resume_retry_error,Number of auto_config_env_runner jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.currently_idle,Number of auto_config_runner jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.currently_paused,Number of auto_config_runner jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.currently_running,Number of auto_config_runner jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.expired_pts_records,Number of expired protected timestamp records owned by auto_config_runner jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_completed,Number of auto_config_runner jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_failed,Number of auto_config_runner jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.fail_or_cancel_retry_error,Number of auto_config_runner jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.protected_age_sec,The age of the oldest PTS record protected by auto_config_runner jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_runner.protected_record_count,Number of protected timestamp records held by auto_config_runner jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_runner.resume_completed,Number of auto_config_runner jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.resume_failed,Number of auto_config_runner jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_runner.resume_retry_error,Number of auto_config_runner jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.currently_idle,Number of auto_config_task jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.currently_paused,Number of auto_config_task jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.currently_running,Number of auto_config_task jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.expired_pts_records,Number of expired protected timestamp records owned by auto_config_task jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_completed,Number of auto_config_task jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_failed,Number of auto_config_task jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.fail_or_cancel_retry_error,Number of auto_config_task jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.protected_age_sec,The age of the oldest PTS record protected by auto_config_task jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_config_task.protected_record_count,Number of protected timestamp records held by auto_config_task jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_config_task.resume_completed,Number of auto_config_task jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.resume_failed,Number of auto_config_task jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_config_task.resume_retry_error,Number of auto_config_task jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.currently_idle,Number of auto_create_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.currently_paused,Number of auto_create_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.currently_running,Number of auto_create_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.expired_pts_records,Number of expired protected timestamp records owned by auto_create_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_completed,Number of auto_create_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_failed,Number of auto_create_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.fail_or_cancel_retry_error,Number of auto_create_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.protected_age_sec,The age of the oldest PTS record protected by auto_create_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_create_stats.protected_record_count,Number of protected timestamp records held by auto_create_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_create_stats.resume_completed,Number of auto_create_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.resume_failed,Number of auto_create_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_create_stats.resume_retry_error,Number of auto_create_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.currently_idle,Number of auto_schema_telemetry jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.currently_paused,Number of auto_schema_telemetry jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.currently_running,Number of auto_schema_telemetry jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.expired_pts_records,Number of expired protected timestamp records owned by auto_schema_telemetry jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_completed,Number of auto_schema_telemetry jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_failed,Number of auto_schema_telemetry jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.fail_or_cancel_retry_error,Number of auto_schema_telemetry jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.protected_age_sec,The age of the oldest PTS record protected by auto_schema_telemetry jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.protected_record_count,Number of protected timestamp records held by auto_schema_telemetry jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_schema_telemetry.resume_completed,Number of auto_schema_telemetry jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.resume_failed,Number of auto_schema_telemetry jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_schema_telemetry.resume_retry_error,Number of auto_schema_telemetry jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_idle,Number of auto_span_config_reconciliation jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_paused,Number of auto_span_config_reconciliation jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.currently_running,Number of auto_span_config_reconciliation jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.expired_pts_records,Number of expired protected timestamp records owned by auto_span_config_reconciliation jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_completed,Number of auto_span_config_reconciliation jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_failed,Number of auto_span_config_reconciliation jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.fail_or_cancel_retry_error,Number of auto_span_config_reconciliation jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.protected_age_sec,The age of the oldest PTS record protected by auto_span_config_reconciliation jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.protected_record_count,Number of protected timestamp records held by auto_span_config_reconciliation jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_completed,Number of auto_span_config_reconciliation jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_failed,Number of auto_span_config_reconciliation jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_span_config_reconciliation.resume_retry_error,Number of auto_span_config_reconciliation jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_idle,Number of auto_sql_stats_compaction jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_paused,Number of auto_sql_stats_compaction jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.currently_running,Number of auto_sql_stats_compaction jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.expired_pts_records,Number of expired protected timestamp records owned by auto_sql_stats_compaction jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_completed,Number of auto_sql_stats_compaction jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_failed,Number of auto_sql_stats_compaction jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.fail_or_cancel_retry_error,Number of auto_sql_stats_compaction jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.protected_age_sec,The age of the oldest PTS record protected by auto_sql_stats_compaction jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.protected_record_count,Number of protected timestamp records held by auto_sql_stats_compaction jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_completed,Number of auto_sql_stats_compaction jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_failed,Number of auto_sql_stats_compaction jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_sql_stats_compaction.resume_retry_error,Number of auto_sql_stats_compaction jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.currently_idle,Number of auto_update_sql_activity jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.currently_paused,Number of auto_update_sql_activity jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.currently_running,Number of auto_update_sql_activity jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.expired_pts_records,Number of expired protected timestamp records owned by auto_update_sql_activity jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_completed,Number of auto_update_sql_activity jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_failed,Number of auto_update_sql_activity jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.fail_or_cancel_retry_error,Number of auto_update_sql_activity jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.protected_age_sec,The age of the oldest PTS record protected by auto_update_sql_activity jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.protected_record_count,Number of protected timestamp records held by auto_update_sql_activity jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.auto_update_sql_activity.resume_completed,Number of auto_update_sql_activity jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.resume_failed,Number of auto_update_sql_activity jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.auto_update_sql_activity.resume_retry_error,Number of auto_update_sql_activity jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.currently_idle,Number of backup jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.currently_paused,Number of backup jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.currently_running,Number of backup jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.expired_pts_records,Number of expired protected timestamp records owned by backup jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_completed,Number of backup jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_failed,Number of backup jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.fail_or_cancel_retry_error,Number of backup jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.protected_age_sec,The age of the oldest PTS record protected by backup jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.backup.protected_record_count,Number of protected timestamp records held by backup jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.backup.resume_completed,Number of backup jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.resume_failed,Number of backup jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.backup.resume_retry_error,Number of backup jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.currently_idle,Number of changefeed jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.currently_paused,Number of changefeed jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.currently_running,Number of changefeed jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.expired_pts_records,Number of expired protected timestamp records owned by changefeed jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_completed,Number of changefeed jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_failed,Number of changefeed jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.fail_or_cancel_retry_error,Number of changefeed jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.protected_age_sec,The age of the oldest PTS record protected by changefeed jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.changefeed.protected_record_count,Number of protected timestamp records held by changefeed jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.changefeed.resume_completed,Number of changefeed jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.resume_failed,Number of changefeed jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.changefeed.resume_retry_error,Number of changefeed jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.claimed_jobs,number of jobs claimed in job-adopt iterations,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.currently_idle,Number of create_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.currently_paused,Number of create_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.currently_running,Number of create_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.expired_pts_records,Number of expired protected timestamp records owned by create_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_completed,Number of create_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_failed,Number of create_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.fail_or_cancel_retry_error,Number of create_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.protected_age_sec,The age of the oldest PTS record protected by create_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.create_stats.protected_record_count,Number of protected timestamp records held by create_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.create_stats.resume_completed,Number of create_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.resume_failed,Number of create_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.create_stats.resume_retry_error,Number of create_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.currently_idle,Number of history_retention jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.history_retention.currently_paused,Number of history_retention jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.history_retention.currently_running,Number of history_retention jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.history_retention.expired_pts_records,Number of expired protected timestamp records owned by history_retention jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.fail_or_cancel_completed,Number of history_retention jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.fail_or_cancel_failed,Number of history_retention jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.fail_or_cancel_retry_error,Number of history_retention jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.protected_age_sec,The age of the oldest PTS record protected by history_retention jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.history_retention.protected_record_count,Number of protected timestamp records held by history_retention jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.history_retention.resume_completed,Number of history_retention jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.resume_failed,Number of history_retention jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.history_retention.resume_retry_error,Number of history_retention jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.currently_idle,Number of import jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.currently_paused,Number of import jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.currently_running,Number of import jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.expired_pts_records,Number of expired protected timestamp records owned by import jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_completed,Number of import jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_failed,Number of import jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.fail_or_cancel_retry_error,Number of import jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.protected_age_sec,The age of the oldest PTS record protected by import jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.import.protected_record_count,Number of protected timestamp records held by import jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import.resume_completed,Number of import jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.resume_failed,Number of import jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import.resume_retry_error,Number of import jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.currently_idle,Number of import_rollback jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import_rollback.currently_paused,Number of import_rollback jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import_rollback.currently_running,Number of import_rollback jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import_rollback.expired_pts_records,Number of expired protected timestamp records owned by import_rollback jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.fail_or_cancel_completed,Number of import_rollback jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.fail_or_cancel_failed,Number of import_rollback jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.fail_or_cancel_retry_error,Number of import_rollback jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.protected_age_sec,The age of the oldest PTS record protected by import_rollback jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.import_rollback.protected_record_count,Number of protected timestamp records held by import_rollback jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.import_rollback.resume_completed,Number of import_rollback jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.resume_failed,Number of import_rollback jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.import_rollback.resume_retry_error,Number of import_rollback jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.currently_idle,Number of key_visualizer jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.currently_paused,Number of key_visualizer jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.currently_running,Number of key_visualizer jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.expired_pts_records,Number of expired protected timestamp records owned by key_visualizer jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_completed,Number of key_visualizer jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_failed,Number of key_visualizer jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.fail_or_cancel_retry_error,Number of key_visualizer jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.protected_age_sec,The age of the oldest PTS record protected by key_visualizer jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.key_visualizer.protected_record_count,Number of protected timestamp records held by key_visualizer jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.key_visualizer.resume_completed,Number of key_visualizer jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.resume_failed,Number of key_visualizer jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.key_visualizer.resume_retry_error,Number of key_visualizer jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.currently_idle,Number of logical_replication jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.logical_replication.currently_paused,Number of logical_replication jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.logical_replication.currently_running,Number of logical_replication jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.logical_replication.expired_pts_records,Number of expired protected timestamp records owned by logical_replication jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.fail_or_cancel_completed,Number of logical_replication jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.fail_or_cancel_failed,Number of logical_replication jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.fail_or_cancel_retry_error,Number of logical_replication jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.protected_age_sec,The age of the oldest PTS record protected by logical_replication jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.logical_replication.protected_record_count,Number of protected timestamp records held by logical_replication jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.logical_replication.resume_completed,Number of logical_replication jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.resume_failed,Number of logical_replication jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.logical_replication.resume_retry_error,Number of logical_replication jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.metrics.task_failed,Number of metrics poller tasks that failed,errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.currently_idle,Number of migration jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.currently_paused,Number of migration jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.currently_running,Number of migration jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.expired_pts_records,Number of expired protected timestamp records owned by migration jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_completed,Number of migration jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_failed,Number of migration jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.fail_or_cancel_retry_error,Number of migration jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.protected_age_sec,The age of the oldest PTS record protected by migration jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.migration.protected_record_count,Number of protected timestamp records held by migration jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.migration.resume_completed,Number of migration jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.resume_failed,Number of migration jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.migration.resume_retry_error,Number of migration jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.currently_idle,Number of mvcc_statistics_update jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.currently_paused,Number of mvcc_statistics_update jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.currently_running,Number of mvcc_statistics_update jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.expired_pts_records,Number of expired protected timestamp records owned by mvcc_statistics_update jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_completed,Number of mvcc_statistics_update jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_failed,Number of mvcc_statistics_update jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.fail_or_cancel_retry_error,Number of mvcc_statistics_update jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.protected_age_sec,The age of the oldest PTS record protected by mvcc_statistics_update jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.protected_record_count,Number of protected timestamp records held by mvcc_statistics_update jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.mvcc_statistics_update.resume_completed,Number of mvcc_statistics_update jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.resume_failed,Number of mvcc_statistics_update jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.mvcc_statistics_update.resume_retry_error,Number of mvcc_statistics_update jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.currently_idle,Number of new_schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.currently_paused,Number of new_schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.currently_running,Number of new_schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.expired_pts_records,Number of expired protected timestamp records owned by new_schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_completed,Number of new_schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_failed,Number of new_schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.fail_or_cancel_retry_error,Number of new_schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.protected_age_sec,The age of the oldest PTS record protected by new_schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.new_schema_change.protected_record_count,Number of protected timestamp records held by new_schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.new_schema_change.resume_completed,Number of new_schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.resume_failed,Number of new_schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.new_schema_change.resume_retry_error,Number of new_schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.currently_idle,Number of poll_jobs_stats jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.currently_paused,Number of poll_jobs_stats jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.currently_running,Number of poll_jobs_stats jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.expired_pts_records,Number of expired protected timestamp records owned by poll_jobs_stats jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_completed,Number of poll_jobs_stats jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_failed,Number of poll_jobs_stats jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.fail_or_cancel_retry_error,Number of poll_jobs_stats jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.protected_age_sec,The age of the oldest PTS record protected by poll_jobs_stats jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.protected_record_count,Number of protected timestamp records held by poll_jobs_stats jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.poll_jobs_stats.resume_completed,Number of poll_jobs_stats jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.resume_failed,Number of poll_jobs_stats jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.poll_jobs_stats.resume_retry_error,Number of poll_jobs_stats jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.currently_idle,Number of replication_stream_ingestion jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.currently_paused,Number of replication_stream_ingestion jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.currently_running,Number of replication_stream_ingestion jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.expired_pts_records,Number of expired protected timestamp records owned by replication_stream_ingestion jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_completed,Number of replication_stream_ingestion jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_failed,Number of replication_stream_ingestion jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.fail_or_cancel_retry_error,Number of replication_stream_ingestion jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.protected_age_sec,The age of the oldest PTS record protected by replication_stream_ingestion jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.protected_record_count,Number of protected timestamp records held by replication_stream_ingestion jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_ingestion.resume_completed,Number of replication_stream_ingestion jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.resume_failed,Number of replication_stream_ingestion jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_ingestion.resume_retry_error,Number of replication_stream_ingestion jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.currently_idle,Number of replication_stream_producer jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.currently_paused,Number of replication_stream_producer jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.currently_running,Number of replication_stream_producer jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.expired_pts_records,Number of expired protected timestamp records owned by replication_stream_producer jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_completed,Number of replication_stream_producer jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_failed,Number of replication_stream_producer jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.fail_or_cancel_retry_error,Number of replication_stream_producer jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.protected_age_sec,The age of the oldest PTS record protected by replication_stream_producer jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.protected_record_count,Number of protected timestamp records held by replication_stream_producer jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.replication_stream_producer.resume_completed,Number of replication_stream_producer jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.resume_failed,Number of replication_stream_producer jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.replication_stream_producer.resume_retry_error,Number of replication_stream_producer jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.currently_idle,Number of restore jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.currently_paused,Number of restore jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.currently_running,Number of restore jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.expired_pts_records,Number of expired protected timestamp records owned by restore jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_completed,Number of restore jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_failed,Number of restore jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.fail_or_cancel_retry_error,Number of restore jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.protected_age_sec,The age of the oldest PTS record protected by restore jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.restore.protected_record_count,Number of protected timestamp records held by restore jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.restore.resume_completed,Number of restore jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.resume_failed,Number of restore jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.restore.resume_retry_error,Number of restore jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.resumed_claimed_jobs,number of claimed-jobs resumed in job-adopt iterations,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.currently_idle,Number of row_level_ttl jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.currently_paused,Number of row_level_ttl jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.currently_running,Number of row_level_ttl jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.delete_duration,Duration for delete requests during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.expired_pts_records,Number of expired protected timestamp records owned by row_level_ttl jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_completed,Number of row_level_ttl jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_failed,Number of row_level_ttl jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.fail_or_cancel_retry_error,Number of row_level_ttl jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.num_active_spans,Number of active spans the TTL job is deleting from.,num_active_spans,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.protected_age_sec,The age of the oldest PTS record protected by row_level_ttl jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.protected_record_count,Number of protected timestamp records held by row_level_ttl jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.resume_completed,Number of row_level_ttl jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.resume_failed,Number of row_level_ttl jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.resume_retry_error,Number of row_level_ttl jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.rows_deleted,Number of rows deleted by the row level TTL job.,num_rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.rows_selected,Number of rows selected for deletion by the row level TTL job.,num_rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.row_level_ttl.select_duration,Duration for select requests during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.span_total_duration,Duration for processing a span during row level TTL.,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,jobs.row_level_ttl.total_expired_rows,Approximate number of rows that have expired the TTL on the TTL table.,total_expired_rows,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.row_level_ttl.total_rows,Approximate number of rows on the TTL table.,total_rows,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.running_non_idle,number of running jobs that are not idle,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_idle,Number of schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_paused,Number of schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.currently_running,Number of schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.expired_pts_records,Number of expired protected timestamp records owned by schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_completed,Number of schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_failed,Number of schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.fail_or_cancel_retry_error,Number of schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.protected_age_sec,The age of the oldest PTS record protected by schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.schema_change.protected_record_count,Number of protected timestamp records held by schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change.resume_completed,Number of schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.resume_failed,Number of schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change.resume_retry_error,Number of schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.currently_idle,Number of schema_change_gc jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.currently_paused,Number of schema_change_gc jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.currently_running,Number of schema_change_gc jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.expired_pts_records,Number of expired protected timestamp records owned by schema_change_gc jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_completed,Number of schema_change_gc jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_failed,Number of schema_change_gc jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.fail_or_cancel_retry_error,Number of schema_change_gc jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.protected_age_sec,The age of the oldest PTS record protected by schema_change_gc jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.schema_change_gc.protected_record_count,Number of protected timestamp records held by schema_change_gc jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.schema_change_gc.resume_completed,Number of schema_change_gc jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.resume_failed,Number of schema_change_gc jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.schema_change_gc.resume_retry_error,Number of schema_change_gc jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.currently_idle,Number of typedesc_schema_change jobs currently considered Idle and can be freely shut down,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.currently_paused,Number of typedesc_schema_change jobs currently considered Paused,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.currently_running,Number of typedesc_schema_change jobs currently running in Resume or OnFailOrCancel state,jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.expired_pts_records,Number of expired protected timestamp records owned by typedesc_schema_change jobs,records,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_completed,Number of typedesc_schema_change jobs which successfully completed their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_failed,Number of typedesc_schema_change jobs which failed with a non-retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.fail_or_cancel_retry_error,Number of typedesc_schema_change jobs which failed with a retriable error on their failure or cancelation process,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.protected_age_sec,The age of the oldest PTS record protected by typedesc_schema_change jobs,seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.protected_record_count,Number of protected timestamp records held by typedesc_schema_change jobs,records,GAUGE,COUNT,AVG,NONE
+APPLICATION,jobs.typedesc_schema_change.resume_completed,Number of typedesc_schema_change jobs which successfully resumed to completion,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.resume_failed,Number of typedesc_schema_change jobs which failed with a non-retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,jobs.typedesc_schema_change.resume_retry_error,Number of typedesc_schema_change jobs which failed with a retriable error,jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.errors,number of errors encountered during reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.num_runs,number of successful reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.records_processed,number of records processed without error during reconciliation on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,kv.protectedts.reconciliation.records_removed,number of records removed during reconciliation runs on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.batch_hist_nanos,Time spent flushing a batch,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,logical_replication.checkpoint_events_ingested,Checkpoint events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.commit_latency,"Event commit latency: a difference between event MVCC timestamp and the time it was flushed into disk. If we batch events, then the difference between the oldest event in the batch and flush is recorded",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,logical_replication.events_dlqed,Row update events sent to DLQ,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_dlqed_age,Row update events sent to DLQ due to reaching the maximum time allowed in the retry queue,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_dlqed_errtype,Row update events sent to DLQ due to an error not considered retryable,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_dlqed_space,Row update events sent to DLQ due to capacity of the retry queue,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_ingested,Events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_initial_failure,Failed attempts to apply an incoming row update,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_initial_success,Successful applications of an incoming row update,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_retry_failure,Failed re-attempts to apply a row update,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.events_retry_success,Row update events applied after one or more retries,Failures,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.flush_bytes,Number of bytes in a given flush,Logical bytes,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,logical_replication.flush_hist_nanos,Time spent flushing messages across all replication streams,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,logical_replication.flush_row_count,Number of rows in a given flush,Rows,HISTOGRAM,COUNT,AVG,NONE
+APPLICATION,logical_replication.logical_bytes,Logical bytes (sum of keys + values) received by all replication jobs,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.optimistic_insert_conflict_count,Total number of times the optimistic insert encountered a conflict,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.replan_count,Total number of dist sql replanning events,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,logical_replication.replicated_time_seconds,The replicated time of the logical replication stream in seconds since the unix epoch.,Seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,logical_replication.retry_queue_bytes,The replicated time of the logical replication stream in seconds since the unix epoch.,Bytes,GAUGE,BYTES,AVG,NONE
+APPLICATION,logical_replication.retry_queue_events,The replicated time of the logical replication stream in seconds since the unix epoch.,Events,GAUGE,COUNT,AVG,NONE
+APPLICATION,physical_replication.admit_latency,Event admission latency: a difference between event MVCC timestamp and the time it was admitted into ingestion processor,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.commit_latency,"Event commit latency: a difference between event MVCC timestamp and the time it was flushed into disk. If we batch events, then the difference between the oldest event in the batch and flush is recorded",Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.cutover_progress,The number of ranges left to revert in order to complete an inflight cutover,Ranges,GAUGE,COUNT,AVG,NONE
+APPLICATION,physical_replication.distsql_replan_count,Total number of dist sql replanning events,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.earliest_data_checkpoint_span,The earliest timestamp of the last checkpoint forwarded by an ingestion data processor,Timestamp,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,physical_replication.events_ingested,Events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.flush_hist_nanos,Time spent flushing messages across all replication streams,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,physical_replication.flushes,Total flushes across all replication jobs,Flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.job_progress_updates,Total number of updates to the ingestion job progress,Job Updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.latest_data_checkpoint_span,The latest timestamp of the last checkpoint forwarded by an ingestion data processor,Timestamp,GAUGE,TIMESTAMP_NS,AVG,NONE
+APPLICATION,physical_replication.logical_bytes,Logical bytes (sum of keys + values) ingested by all replication jobs,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.replicated_time_seconds,The replicated time of the physical replication stream in seconds since the unix epoch.,Seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,physical_replication.resolved_events_ingested,Resolved events ingested by all replication jobs,Events,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,physical_replication.running,Number of currently running replication streams,Replication Streams,GAUGE,COUNT,AVG,NONE
+APPLICATION,physical_replication.sst_bytes,SST bytes (compressed) sent to KV by all replication jobs,Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,requests.slow.distsender,"Number of range-bound RPCs currently stuck or retrying for a long time.
+
+Note that this is not a good signal for KV health. The remote side of the
+RPCs tracked here may experience contention, so an end user can easily
+cause values for this metric to be emitted by leaving a transaction open
+for a long time and contending with it using a second transaction.",Requests,GAUGE,COUNT,AVG,NONE
+APPLICATION,round-trip-latency,"Distribution of round-trip latencies with other nodes.
+
+This only reflects successful heartbeats and measures gRPC overhead as well as
+possible head-of-line blocking. Elevated values in this metric may hint at
+network issues and/or saturation, but they are no proof of them. CPU overload
+can similarly elevate this metric. The operator should look towards OS-level
+metrics such as packet loss, retransmits, etc, to conclusively diagnose network
+issues. Heartbeats are not very frequent (~seconds), so they may not capture
+rare or short-lived degradations.
+",Round-trip time,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.avg_round_trip_latency,"Sum of exponentially weighted moving average of round-trip latencies, as measured through a gRPC RPC.
+
+Dividing this Gauge by rpc.connection.healthy gives an approximation of average
+latency, but the top-level round-trip-latency histogram is more useful. Instead,
+users should consult the label families of this metric if they are available
+(which requires prometheus and the cluster setting 'server.child_metrics.enabled');
+these provide per-peer moving averages.
+
+This metric does not track failed connection. A failed connection's contribution
+is reset to zero.
+",Latency,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.failures,"Counter of failed connections.
+
+This includes both the event in which a healthy connection terminates as well as
+unsuccessful reconnection attempts.
+
+Connections that are terminated as part of local node shutdown are excluded.
+Decommissioned peers are excluded.
+",Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,rpc.connection.healthy,Gauge of current connections in a healthy state (i.e. bidirectionally connected and heartbeating),Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.healthy_nanos,"Gauge of nanoseconds of healthy connection time
+
+On the prometheus endpoint scraped with the cluster setting 'server.child_metrics.enabled' set,
+the constituent parts of this metric are available on a per-peer basis and one can read off
+for how long a given peer has been connected",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,rpc.connection.heartbeats,Counter of successful heartbeats.,Heartbeats,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,rpc.connection.inactive,"Gauge of current connections in an inactive state and pending deletion; these are not healthy but are not tracked as unhealthy either because there is reason to believe that the connection is no longer relevant,for example if the node has since been seen under a new address",Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.unhealthy,Gauge of current connections in an unhealthy state (not bidirectionally connected or heartbeating),Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,rpc.connection.unhealthy_nanos,"Gauge of nanoseconds of unhealthy connection time.
+
+On the prometheus endpoint scraped with the cluster setting 'server.child_metrics.enabled' set,
+the constituent parts of this metric are available on a per-peer basis and one can read off
+for how long a given peer has been unreachable",Nanoseconds,GAUGE,NANOSECONDS,AVG,NONE
+APPLICATION,schedules.BACKUP.failed,Number of BACKUP jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.BACKUP.last-completed-time,The unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric,Jobs,GAUGE,TIMESTAMP_SEC,AVG,NONE
+APPLICATION,schedules.BACKUP.protected_age_sec,The age of the oldest PTS record protected by BACKUP schedules,Seconds,GAUGE,SECONDS,AVG,NONE
+APPLICATION,schedules.BACKUP.protected_record_count,Number of PTS records held by BACKUP schedules,Records,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.BACKUP.started,Number of BACKUP jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.BACKUP.succeeded,Number of BACKUP jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.failed,Number of CHANGEFEED jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.started,Number of CHANGEFEED jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.CHANGEFEED.succeeded,Number of CHANGEFEED jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.error,Number of schedules which did not execute successfully,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.malformed,Number of malformed schedules,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.jobs-started,The number of jobs started,Jobs,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.reschedule-skip,The number of schedules rescheduled due to SKIP policy,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.round.reschedule-wait,The number of schedules rescheduled due to WAIT policy,Schedules,GAUGE,COUNT,AVG,NONE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.failed,Number of scheduled-row-level-ttl-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.started,Number of scheduled-row-level-ttl-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-row-level-ttl-executor.succeeded,Number of scheduled-row-level-ttl-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.failed,Number of scheduled-schema-telemetry-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.started,Number of scheduled-schema-telemetry-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-schema-telemetry-executor.succeeded,Number of scheduled-schema-telemetry-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.failed,Number of scheduled-sql-stats-compaction-executor jobs failed,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.started,Number of scheduled-sql-stats-compaction-executor jobs started,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,schedules.scheduled-sql-stats-compaction-executor.succeeded,Number of scheduled-sql-stats-compaction-executor jobs succeeded,Jobs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.bytesin,Number of SQL bytes received,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.bytesout,Number of SQL bytes sent,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.conn.failures,Number of SQL connection failures,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.conn.latency,Latency to establish and authenticate a SQL connection,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.conns,Number of open SQL connections,Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.conns_waiting_to_hash,Number of SQL connection attempts that are being throttled in order to limit password hashing concurrency,Connections,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.contention.resolver.failed_resolutions,Number of failed transaction ID resolution attempts,Failed transaction ID resolution count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.resolver.queue_size,Length of queued unresolved contention events,Queue length,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.contention.resolver.retries,Number of times transaction id resolution has been retried,Retry count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.txn_id_cache.miss,Number of cache misses,Cache miss,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.contention.txn_id_cache.read,Number of cache read,Cache read,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.count,Number of COPY SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.count.internal,Number of COPY SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.count,Number of non-atomic COPY SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.count.internal,Number of non-atomic COPY SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.started.count,Number of non-atomic COPY SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.nonatomic.started.count.internal,Number of non-atomic COPY SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.started.count,Number of COPY SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.copy.started.count.internal,Number of COPY SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.count,Number of SQL DDL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.count.internal,Number of SQL DDL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.started.count,Number of SQL DDL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.ddl.started.count.internal,Number of SQL DDL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.count,Number of SQL DELETE statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.count.internal,Number of SQL DELETE statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.started.count,Number of SQL DELETE statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.delete.started.count.internal,Number of SQL DELETE statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.disk.distsql.current,Current sql statement disk usage for distsql,Disk,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.disk.distsql.max,Disk usage per sql statement for distsql,Disk,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.disk.distsql.spilled.bytes.read,Number of bytes read from temporary disk storage as a result of spilling,Disk,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.disk.distsql.spilled.bytes.written,Number of bytes written to temporary disk storage as a result of spilling,Disk,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.contended_queries.count,Number of SQL queries that experienced contention,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.cumulative_contention_nanos,Cumulative contention across all queries (in nanoseconds),Nanoseconds,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.dist_query_rerun_locally.count,Total number of cases when distributed query error resulted in a local rerun,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.dist_query_rerun_locally.failure_count,Total number of cases when the local rerun of a distributed query resulted in an error,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.exec.latency,Latency of DistSQL statement execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.exec.latency.internal,Latency of DistSQL statement execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.flows.active,Number of distributed SQL flows currently active,Flows,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.distsql.flows.total,Number of distributed SQL flows executed,Flows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.queries.active,Number of SQL queries currently active,Queries,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.distsql.queries.spilled,Number of queries that have spilled to disk,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.queries.total,Number of SQL queries executed,Queries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.select.count,Number of DistSQL SELECT statements,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.select.count.internal,Number of DistSQL SELECT statements (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.distsql.service.latency,Latency of DistSQL request execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.service.latency.internal,Latency of DistSQL request execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.distsql.vec.openfds,Current number of open file descriptors used by vectorized external storage,Files,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.exec.latency,Latency of SQL statement execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.exec.latency.internal,Latency of SQL statement execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.failure.count,Number of statements resulting in a planning or runtime error,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.failure.count.internal,Number of statements resulting in a planning or runtime error (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.feature_flag_denial,Counter of the number of statements denied by a feature flag,Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.full.scan.count,Number of full table or index scans,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.full.scan.count.internal,Number of full table or index scans (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.full_scan_rejected.count,Number of full table or index scans that have been rejected because of `disallow_full_table_scans` guardrail,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.full_scan_rejected.count.internal,Number of full table or index scans that have been rejected because of `disallow_full_table_scans` guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_err.count,Number of rows observed violating sql.guardrails.max_row_size_err,Rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_err.count.internal,Number of rows observed violating sql.guardrails.max_row_size_err (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_log.count,Number of rows observed violating sql.guardrails.max_row_size_log,Rows,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.max_row_size_log.count.internal,Number of rows observed violating sql.guardrails.max_row_size_log (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_err.count,Number of transactions errored because of transaction_rows_read_err guardrail,Errored transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_err.count.internal,Number of transactions errored because of transaction_rows_read_err guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_log.count,Number of transactions logged because of transaction_rows_read_log guardrail,Logged transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_read_log.count.internal,Number of transactions logged because of transaction_rows_read_log guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_err.count,Number of transactions errored because of transaction_rows_written_err guardrail,Errored transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_err.count.internal,Number of transactions errored because of transaction_rows_written_err guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_log.count,Number of transactions logged because of transaction_rows_written_log guardrail,Logged transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.guardrails.transaction_rows_written_log.count.internal,Number of transactions logged because of transaction_rows_written_log guardrail (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_schema_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_schema_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_table_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_table_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_type_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_type_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_udf_cache.hits,counter on the number of cache hits,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.hydrated_udf_cache.misses,counter on the number of cache misses,reads,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.count,Number of SQL INSERT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.count.internal,Number of SQL INSERT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.started.count,Number of SQL INSERT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insert.started.count.internal,Number of SQL INSERT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insights.anomaly_detection.evictions,Evictions of fingerprint latency summaries due to memory pressure,Evictions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.insights.anomaly_detection.fingerprints,Current number of statement fingerprints being monitored for anomaly detection,Fingerprints,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.insights.anomaly_detection.memory,Current memory used to support anomaly detection,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.leases.active,The number of outstanding SQL schema leases.,Outstanding leases,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.leases.expired,The number of outstanding session based SQL schema leases expired.,Leases expired because of a new version,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.leases.long_wait_for_no_version,The number of wait for no versions that are taking more than the lease duration.,Number of wait for long wait for no version routines executing,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.leases.long_wait_for_one_version,The number of wait for one versions that are taking more than the lease duration.,Number of wait for long wait for one version routines executing,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.leases.long_wait_for_two_version_invariant,The number of two version invariant waits that are taking more than the lease duration.,Number of two version invariant wait routines executing,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.leases.waiting_to_expire,The number of outstanding session based SQL schema leases with expiry.,Outstanding Leases Waiting to Expire,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.mem.bulk.current,Current sql statement memory usage for bulk operations,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.bulk.max,Memory usage per sql statement for bulk operations,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.conns.current,Current sql statement memory usage for conns,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.conns.max,Memory usage per sql statement for conns,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.distsql.current,Current sql statement memory usage for distsql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.distsql.max,Memory usage per sql statement for distsql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.current,Current sql statement memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.max,Memory usage per sql statement for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.current,Current sql session memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.max,Memory usage per sql session for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.prepared.current,Current sql session memory usage by prepared statements for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.session.prepared.max,Memory usage by prepared statements per sql session for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.txn.current,Current sql transaction memory usage for internal,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.internal.txn.max,Memory usage per sql transaction for internal,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.root.current,Current sql statement memory usage for root,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.root.max,Memory usage per sql statement for root,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.current,Current sql statement memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.max,Memory usage per sql statement for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.current,Current sql session memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.max,Memory usage per sql session for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.prepared.current,Current sql session memory usage by prepared statements for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.session.prepared.max,Memory usage by prepared statements per sql session for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.txn.current,Current sql transaction memory usage for sql,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.mem.sql.txn.max,Memory usage per sql transaction for sql,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.misc.count,Number of other SQL statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.count.internal,Number of other SQL statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.started.count,Number of other SQL statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.misc.started.count.internal,Number of other SQL statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.new_conns,Number of SQL connections created,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.fallback.count,Number of statements which the cost-based optimizer was unable to plan,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.fallback.count.internal,Number of statements which the cost-based optimizer was unable to plan (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.hits,Number of non-prepared statements for which a cached plan was used,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.hits.internal,Number of non-prepared statements for which a cached plan was used (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.misses,Number of non-prepared statements for which a cached plan was not used,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.optimizer.plan_cache.misses.internal,Number of non-prepared statements for which a cached plan was not used (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire.pipeline.count,Number of pgwire commands received by the server that have not yet begun processing,Commands,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.pgwire_cancel.ignored,Number of pgwire query cancel requests that were ignored due to rate limiting,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire_cancel.successful,Number of pgwire query cancel requests that were successful,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pgwire_cancel.total,Number of pgwire query cancel requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.bytesin,Number of SQL bytes received prior to routing the connection to the target SQL server,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.bytesout,Number of SQL bytes sent prior to routing the connection to the target SQL server,SQL Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.conn.failures,Number of SQL connection failures prior to routing the connection to the target SQL server,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.pre_serve.mem.cur,Current memory usage for SQL connections prior to routing the connection to the target SQL server,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.pre_serve.mem.max,Memory usage for SQL connections prior to routing the connection to the target SQL server,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.pre_serve.new_conns,Number of SQL connections created prior to routing the connection to the target SQL server,Connections,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.count,Number of SQL queries executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.count.internal,Number of SQL queries executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.started.count,Number of SQL queries started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.query.started.count.internal,Number of SQL queries started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.count,Number of `SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.count.internal,Number of `SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.count,Number of `RELEASE SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.count.internal,Number of `RELEASE SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.started.count,Number of `RELEASE SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.release.started.count.internal,Number of `RELEASE SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.count,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.count.internal,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.started.count,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.rollback.started.count.internal,Number of `ROLLBACK TO SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.started.count,Number of `SAVEPOINT cockroach_restart` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.restart_savepoint.started.count.internal,Number of `SAVEPOINT cockroach_restart` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.count,Number of SQL SAVEPOINT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.count.internal,Number of SQL SAVEPOINT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.count,Number of `RELEASE SAVEPOINT` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.count.internal,Number of `RELEASE SAVEPOINT` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.started.count,Number of `RELEASE SAVEPOINT` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.release.started.count.internal,Number of `RELEASE SAVEPOINT` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.count,Number of `ROLLBACK TO SAVEPOINT` statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.count.internal,Number of `ROLLBACK TO SAVEPOINT` statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.started.count,Number of `ROLLBACK TO SAVEPOINT` statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.rollback.started.count.internal,Number of `ROLLBACK TO SAVEPOINT` statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.started.count,Number of SQL SAVEPOINT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.savepoint.started.count.internal,Number of SQL SAVEPOINT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema.invalid_objects,Gauge of detected invalid objects within the system.descriptor table (measured by querying crdb_internal.invalid_objects),Objects,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.schema_changer.permanent_errors,Counter of the number of permanent errors experienced by the schema changer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema_changer.retry_errors,Counter of the number of retriable errors experienced by the schema changer,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.schema_changer.running,Gauge of currently running schema changes,Schema changes,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.schema_changer.successes,Counter of the number of schema changer resumes which succeed,Schema changes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.count,Number of SQL SELECT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.count.internal,Number of SQL SELECT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.started.count,Number of SQL SELECT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.select.started.count.internal,Number of SQL SELECT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.service.latency,Latency of SQL request execution,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.service.latency.internal,Latency of SQL request execution (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.statements.active,Number of currently active user SQL statements,Active Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.statements.active.internal,Number of currently active user SQL statements (internal queries),SQL Internal Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.stats.activity.update.latency,The latency of updates made by the SQL activity updater job. Includes failed update attempts,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.stats.activity.updates.failed,Number of update attempts made by the SQL activity updater job that failed with errors,failed updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.activity.updates.successful,Number of successful updates made by the SQL activity updater job,successful updates,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.cleanup.rows_removed,Number of stale statistics rows that are removed,SQL Stats Cleanup,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.discarded.current,Number of fingerprint statistics being discarded,Discarded SQL Stats,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flush.done_signals.ignored,Number of times the SQL Stats activity update job ignored the signal sent to it indicating a flush has completed,flush done signals ignored,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flush.fingerprint.count,The number of unique statement and transaction fingerprints included in the SQL Stats flush,statement & transaction fingerprints,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flush.latency,The latency of SQL Stats flushes to persistent storage. Includes failed flush attempts,nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.stats.flushes.failed,Number of attempted SQL Stats flushes that failed with errors,failed flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.flushes.successful,Number of times SQL Stats are flushed successfully to persistent storage,successful flushes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.stats.mem.current,Current memory usage for fingerprint storage,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.stats.mem.max,Memory usage for fingerprint storage,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.stats.reported.mem.current,Current memory usage for reported fingerprint storage,Memory,GAUGE,BYTES,AVG,NONE
+APPLICATION,sql.stats.reported.mem.max,Memory usage for reported fingerprint storage,Memory,HISTOGRAM,BYTES,AVG,NONE
+APPLICATION,sql.stats.txn_stats_collection.duration,Time took in nanoseconds to collect transaction stats,SQL Transaction Stats Collection Overhead,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.temp_object_cleaner.active_cleaners,number of cleaner tasks currently running on this node,Count,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.temp_object_cleaner.schemas_deletion_error,number of errored schema deletions by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.temp_object_cleaner.schemas_deletion_success,number of successful schema deletions by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.temp_object_cleaner.schemas_to_delete,number of schemas to be deleted by the temp object cleaner on this node,Count,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.abort.count,Number of SQL transaction abort errors,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.abort.count.internal,Number of SQL transaction abort errors (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.count,Number of SQL transaction BEGIN statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.count.internal,Number of SQL transaction BEGIN statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.started.count,Number of SQL transaction BEGIN statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.begin.started.count.internal,Number of SQL transaction BEGIN statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.count,Number of SQL transaction COMMIT statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.count.internal,Number of SQL transaction COMMIT statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.started.count,Number of SQL transaction COMMIT statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.commit.started.count.internal,Number of SQL transaction COMMIT statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.contended.count,Number of SQL transactions experienced contention,Contention,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.contended.count.internal,Number of SQL transactions experienced contention (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.latency,Latency of SQL transactions,Latency,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.txn.latency.internal,Latency of SQL transactions (internal queries),SQL Internal Statements,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,sql.txn.rollback.count,Number of SQL transaction ROLLBACK statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.count.internal,Number of SQL transaction ROLLBACK statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.started.count,Number of SQL transaction ROLLBACK statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.rollback.started.count.internal,Number of SQL transaction ROLLBACK statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.upgraded_iso_level.count,Number of times a weak isolation level was automatically upgraded to a stronger one,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txn.upgraded_iso_level.count.internal,Number of times a weak isolation level was automatically upgraded to a stronger one (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.txns.open,Number of currently open user SQL transactions,Open SQL Transactions,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.txns.open.internal,Number of currently open user SQL transactions (internal queries),SQL Internal Statements,GAUGE,COUNT,AVG,NONE
+APPLICATION,sql.update.count,Number of SQL UPDATE statements successfully executed,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.count.internal,Number of SQL UPDATE statements successfully executed (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.started.count,Number of SQL UPDATE statements started,SQL Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sql.update.started.count.internal,Number of SQL UPDATE statements started (internal queries),SQL Internal Statements,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.is_alive.cache_hits,Number of calls to IsAlive that return from the cache,Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.is_alive.cache_misses,Number of calls to IsAlive that do not return from the cache,Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.sessions_deleted,Number of expired sessions which have been deleted,Sessions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.sessions_deletion_runs,Number of calls to delete sessions which have been performed,Sessions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.write_failures,Number of update or insert calls which have failed,Writes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,sqlliveness.write_successes,Number of update or insert calls successfully performed,Writes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.cost_client.blocked_requests,Number of requests currently blocked by the rate limiter,Requests,GAUGE,COUNT,AVG,NONE
+APPLICATION,tenant.sql_usage.cross_region_network_ru,Total number of RUs charged for cross-region network traffic,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.estimated_cpu_seconds,Estimated amount of CPU consumed by a virtual cluster,CPU Seconds,COUNTER,SECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.estimated_kv_cpu_seconds,"Estimated amount of CPU consumed by a virtual cluster, in the KV layer",CPU Seconds,COUNTER,SECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.estimated_replication_bytes,Total number of estimated bytes for KV replication traffic,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.external_io_egress_bytes,Total number of bytes written to external services such as cloud storage providers,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.external_io_ingress_bytes,Total number of bytes read from external services such as cloud storage providers,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.kv_request_units,RU consumption attributable to KV,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.pgwire_egress_bytes,Total number of bytes transferred from a SQL pod to the client,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.read_batches,Total number of KV read batches,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.read_bytes,Total number of bytes read from KV,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.read_requests,Total number of KV read requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.request_units,RU consumption,Request Units,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.sql_pods_cpu_seconds,Total amount of CPU used by SQL pods,CPU Seconds,COUNTER,SECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.write_batches,Total number of KV write batches,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.write_bytes,Total number of bytes written to KV,Bytes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,tenant.sql_usage.write_requests,Total number of KV write requests,Requests,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.aborts,Number of aborted KV transactions,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commit_waits,Number of KV transactions that had to commit-wait on commit in order to ensure linearizability. This generally happens to transactions writing to global ranges.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commits,Number of committed KV transactions (including 1PC),KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commits1PC,Number of KV transaction one-phase commits,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.commits_read_only,Number of read only KV transaction commits,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.condensed_intent_spans,KV transactions that have exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). See also txn.condensed_intent_spans_gauge for a gauge of such transactions currently running.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.condensed_intent_spans_gauge,KV transactions currently running that have exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). See also txn.condensed_intent_spans for a perpetual counter/rate.,KV Transactions,GAUGE,COUNT,AVG,NONE
+APPLICATION,txn.condensed_intent_spans_rejected,KV transactions that have been aborted because they exceeded their intent tracking memory budget (kv.transaction.max_intents_bytes). Rejection is caused by kv.transaction.reject_over_max_intents_budget.,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.durations,KV transaction durations,KV Txn Duration,HISTOGRAM,NANOSECONDS,AVG,NONE
+APPLICATION,txn.inflight_locks_over_tracking_budget,KV transactions whose in-flight writes and locking reads have exceeded the intent tracking memory budget (kv.transaction.max_intents_bytes).,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.parallelcommits,Number of KV transaction parallel commits,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.parallelcommits.auto_retries,Number of commit tries after successful failed parallel commit attempts,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.auto_retries,Number of request retries after successful client-side refreshes,Retries,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.fail,Number of failed client-side transaction refreshes,Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.fail_with_condensed_spans,"Number of failed client-side refreshes for transactions whose read tracking lost fidelity because of condensing. Such a failure could be a false conflict. Failures counted here are also counted in txn.refresh.fail, and the respective transactions are also counted in txn.refresh.memory_limit_exceeded.",Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.memory_limit_exceeded,"Number of transaction which exceed the refresh span bytes limit, causing their read spans to be condensed",Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.success,"Number of successful client-side transaction refreshes. A refresh may be preemptive or reactive. A reactive refresh is performed after a request throws an error because a refresh is needed for it to succeed. In these cases, the request will be re-issued as an auto-retry (see txn.refresh.auto_retries) after the refresh succeeds.",Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.refresh.success_server_side,Number of successful server-side transaction refreshes,Refreshes,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts,Number of restarted KV transactions,KV Transactions,HISTOGRAM,COUNT,AVG,NONE
+APPLICATION,txn.restarts.asyncwritefailure,Number of restarts due to async consensus writes that failed to leave intents,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.commitdeadlineexceeded,Number of restarts due to a transaction exceeding its deadline,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.readwithinuncertainty,Number of restarts due to reading a new value within the uncertainty interval,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.serializable,Number of restarts due to a forwarded commit timestamp and isolation=SERIALIZABLE,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.txnaborted,Number of restarts due to an abort by a concurrent transaction (usually due to deadlock),Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.txnpush,Number of restarts due to a transaction push failure,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.unknown,Number of restarts due to a unknown reasons,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.writetooold,Number of restarts due to a concurrent writer committing first,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.restarts.writetoooldmulti,Number of restarts due to multiple concurrent writers committing first,Restarted Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.rollbacks.async.failed,Number of KV transaction that failed to send abort asynchronously which is not always retried,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+APPLICATION,txn.rollbacks.failed,Number of KV transaction that failed to send final abort,KV Transactions,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,build.timestamp,Build information,Build Time,GAUGE,TIMESTAMP_SEC,AVG,NONE
+SERVER,go.scheduler_latency,Go scheduling latency,Nanoseconds,HISTOGRAM,NANOSECONDS,AVG,NONE
+SERVER,log.buffered.messages.dropped,"Count of log messages that are dropped by buffered log sinks. When CRDB attempts to buffer a log message in a buffered log sink whose buffer is already full, it drops the oldest buffered messages to make space for the new message",Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.fluent.sink.conn.attempts,Number of connection attempts experienced by fluent-server logging sinks,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.fluent.sink.conn.errors,Number of connection errors experienced by fluent-server logging sinks,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.fluent.sink.write.attempts,Number of write attempts experienced by fluent-server logging sinks,Attempts,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.fluent.sink.write.errors,Number of write errors experienced by fluent-server logging sinks,Errors,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,log.messages.count,Count of messages logged on the node since startup. Note that this does not measure the fan-out of single log messages to the various configured logging sinks.,Messages,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cgo.allocbytes,Current bytes of memory allocated by cgo,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.cgo.totalbytes,"Total bytes of memory allocated by cgo, but not released",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.cgocalls,Total number of cgo calls,cgo Calls,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cpu.combined.percent-normalized,"Current user+system cpu percentage consumed by the CRDB process, normalized 0-1 by number of cores",CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.host.combined.percent-normalized,"Current user+system cpu percentage across the whole machine, normalized 0-1 by number of cores",CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.now.ns,"The time when CPU measurements were taken, as nanoseconds since epoch",CPU Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cpu.sys.ns,Total system cpu time consumed by the CRDB process,CPU Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cpu.sys.percent,Current system cpu percentage consumed by the CRDB process,CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.cpu.user.ns,Total user cpu time consumed by the CRDB process,CPU Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.cpu.user.percent,Current user cpu percentage consumed by the CRDB process,CPU Time,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.fd.open,Process open file descriptors,File Descriptors,GAUGE,COUNT,AVG,NONE
+SERVER,sys.fd.softlimit,Process open FD soft limit,File Descriptors,GAUGE,COUNT,AVG,NONE
+SERVER,sys.gc.assist.ns,Estimated total CPU time user goroutines spent to assist the GC process,CPU Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.gc.count,Total number of GC runs,GC Runs,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.gc.pause.ns,Total GC pause,GC Pause,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.gc.pause.percent,Current GC pause percentage,GC Pause,GAUGE,PERCENT,AVG,NONE
+SERVER,sys.gc.stop.ns,Estimated GC stop-the-world stopping latencies,GC Stopping,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.go.allocbytes,Current bytes of memory allocated by go,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.heap.allocbytes,Cumulative bytes allocated for heap objects.,Memory,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.go.heap.heapfragmentbytes,"Total heap fragmentation bytes, derived from bytes in in-use spans minus bytes allocated",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.heap.heapreleasedbytes,Total bytes returned to the OS from heap.,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.heap.heapreservedbytes,"Total bytes reserved by heap, derived from bytes in idle (unused) spans subtracts bytes returned to the OS",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.pause.other.ns,Estimated non-GC-related total pause time,Non-GC Pause,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.go.stack.systembytes,Stack memory obtained from the OS.,Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.go.stop.other.ns,Estimated non-GC-related stop-the-world stopping latencies,Non-GC Stopping,GAUGE,NANOSECONDS,AVG,NONE
+SERVER,sys.go.totalbytes,"Total bytes of memory allocated by go, but not released",Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.goroutines,Current number of goroutines,goroutines,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.io.time,Time spent reading from or writing to all disks since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.iopsinprogress,IO operations currently in progress on this host (as reported by the OS),Operations,GAUGE,COUNT,AVG,NONE
+SERVER,sys.host.disk.read.bytes,Bytes read from all disks since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.read.count,Disk read operations across all disks since this process started (as reported by the OS),Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.read.time,Time spent reading from all disks since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.weightedio.time,Weighted time spent reading from or writing to all disks since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.write.bytes,Bytes written to all disks since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.write.count,Disk write operations across all disks since this process started (as reported by the OS),Operations,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.disk.write.time,Time spent writing to all disks since this process started (as reported by the OS),Time,COUNTER,NANOSECONDS,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.recv.bytes,Bytes received on all network interfaces since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.recv.drop,Receiving packets that got dropped on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.recv.err,Error receiving packets on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.recv.packets,Packets received on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.send.bytes,Bytes sent on all network interfaces since this process started (as reported by the OS),Bytes,COUNTER,BYTES,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.send.drop,Sending packets that got dropped on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.send.err,Error on sending packets on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.host.net.send.packets,Packets sent on all network interfaces since this process started (as reported by the OS),Packets,COUNTER,COUNT,AVG,NON_NEGATIVE_DERIVATIVE
+SERVER,sys.rss,Current process RSS,RSS,GAUGE,BYTES,AVG,NONE
+SERVER,sys.runnable.goroutines.per.cpu,"Average number of goroutines that are waiting to run, normalized by number of cores",goroutines,GAUGE,COUNT,AVG,NONE
+SERVER,sys.totalmem,Total memory (both free and used),Memory,GAUGE,BYTES,AVG,NONE
+SERVER,sys.uptime,Process uptime,Uptime,COUNTER,SECONDS,AVG,NON_NEGATIVE_DERIVATIVE
diff --git a/src/current/_data/redirects.yml b/src/current/_data/redirects.yml
index b07b9b9a9da..7f98a41cd4a 100644
--- a/src/current/_data/redirects.yml
+++ b/src/current/_data/redirects.yml
@@ -246,9 +246,6 @@
- 'learn-about-request-units.md'
versions: ['cockroachcloud']
-- destination: molt/live-migration-service.md
- sources: [':version/live-migration-service.md']
-
- destination: logging-overview.md
sources: ['debug-and-error-logs.md']
versions: ['v21.1']
@@ -274,6 +271,11 @@
- destination: molt/molt-fetch.md
sources: [':version/molt-fetch.md']
+- destination: molt/molt-overview.md
+ sources:
+ - molt/live-migration-service.md
+ - :version/live-migration-service.md
+
- destination: molt/molt-verify.md
sources: [':version/molt-verify.md']
diff --git a/src/current/_data/releases.yml b/src/current/_data/releases.yml
index df541e45d58..c90f61aa107 100644
--- a/src/current/_data/releases.yml
+++ b/src/current/_data/releases.yml
@@ -5060,7 +5060,6 @@
major_version: v23.1
release_date: '2023-11-13'
release_type: Production
- lts: true
go_version: go1.21
sha: d7e9824b4cd6ebf7a8548156f2a772ae6648257d
has_sql_only: true
@@ -5250,7 +5249,6 @@
major_version: v23.1
release_date: '2023-12-11'
release_type: Production
- lts: true
go_version: go1.21
sha: 8d065df26e25a762a1abbbf2b1e475456b341a00
has_sql_only: true
@@ -5359,7 +5357,6 @@
major_version: v23.1
release_date: '2024-01-17'
release_type: Production
- lts: true
go_version: go1.21
sha: b95f2225b09cf25f9f2be31ef6a6f65c73a1b081
has_sql_only: true
@@ -5468,7 +5465,6 @@
major_version: v23.1
release_date: '2024-02-20'
release_type: Production
- lts: true
go_version: go1.21
sha: 69a32fafce429e5b75dba8f339ea15922286a0ba
has_sql_only: true
@@ -5523,7 +5519,6 @@
major_version: v23.1
release_date: '2024-02-27'
release_type: Production
- lts: true
go_version: go1.21
sha: 37f75744ac468fe5a97b343a188ea248bce8fb4a
has_sql_only: true
@@ -5657,7 +5652,6 @@
major_version: v23.1
release_date: '2024-03-19'
release_type: Production
- lts: true
go_version: go1.22.0
sha: d50ccb5a52cdf5a1f41cbb2fa61ef971c65e1346
has_sql_only: true
@@ -5766,7 +5760,6 @@
major_version: v23.1
release_date: '2024-04-09'
release_type: Production
- lts: true
go_version: go1.22.0
sha: 84cf36a2a05dcfcf6dfccf4014aad8f703ff6cef
has_sql_only: true
@@ -5848,7 +5841,6 @@
major_version: v23.1
release_date: '2024-04-18'
release_type: Production
- lts: true
go_version: go1.22.0
sha: 1bca2adcbc1deb23067e28369f8b24c99194f2bb
has_sql_only: true
@@ -5930,7 +5922,6 @@
major_version: v23.1
release_date: '2024-05-01'
release_type: Production
- lts: true
go_version: go1.22.0
sha: 93a67980ee45391b8ef02d40a6d50ddb0245817b
has_sql_only: true
@@ -5985,7 +5976,6 @@
major_version: v23.1
release_date: '2024-05-07'
release_type: Production
- lts: true
go_version: go1.22.0
sha: fceb4cf5c378bfb53b3cf12c672716168192f1fe
has_sql_only: true
@@ -6094,7 +6084,6 @@
major_version: v23.1
release_date: '2024-05-23'
release_type: Production
- lts: true
go_version: go1.22.0
sha: 6ed4ef16634f683adfb7d77b4ebf414e0c1e42a7
has_sql_only: true
@@ -6198,7 +6187,6 @@
docker_arm_limited_access: false
source: true
previous_release: v23.1.22
- lts: true
- release_name: v24.2.0-alpha.1
major_version: v24.2
@@ -6252,7 +6240,6 @@
docker_arm_limited_access: false
source: true
previous_release: v23.2.6
- lts: true
- release_name: v24.1.2
major_version: v24.1
@@ -6309,7 +6296,6 @@
previous_release: v24.2.0-alpha.1
- release_name: v23.2.8
- lts: true
major_version: v23.2
release_date: '2024-07-15'
release_type: Production
@@ -6362,12 +6348,11 @@
docker_arm_limited_access: false
source: true
previous_release: v24.2.0-alpha.2
-
+
- release_name: v23.1.24
major_version: v23.1
release_date: '2024-07-18'
release_type: Production
- lts: true
go_version: go1.22.5
sha: b9b86f7f30053d86327d80f0bd582af57ffc3020
has_sql_only: true
@@ -6390,13 +6375,6 @@
docker_arm_limited_access: false
source: true
previous_release: v23.1.23
- cloud_only: true
- cloud_only_message_short: 'Available only for select CockroachDB Cloud clusters'
- cloud_only_message: >
- This version is currently available only for select
- CockroachDB Cloud clusters. To request to upgrade
- a CockroachDB self-hosted cluster to this version,
- [contact support](https://support.cockroachlabs.com/hc/requests/new)
- release_name: v24.2.0-beta.2
major_version: v24.2
@@ -6424,3 +6402,300 @@
docker_arm_limited_access: false
source: true
previous_release: v24.2.0-beta.1
+
+- release_name: v24.2.0-beta.3
+ major_version: v24.2
+ release_date: '2024-08-01'
+ release_type: Testing
+ go_version: go1.22.5
+ sha: 742a2251a05088a238fc6eb4c2466dace3cb1bb2
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach-unstable
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.2.0-beta.2
+
+- release_name: v23.2.9
+ major_version: v23.2
+ release_date: '2024-08-01'
+ release_type: Production
+ go_version: go1.22.5
+ sha: 579c0a000fb80ef7184e46ea038937c135ee2f0c
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: true
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v23.2.8
+
+- release_name: v24.1.3
+ major_version: v24.1
+ release_date: '2024-08-01'
+ release_type: Production
+ go_version: go1.22.5
+ sha: 9e10212477fde97f55ea4fff01797288c836575c
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.1.2
+
+- release_name: v24.2.0-rc.1
+ major_version: v24.2
+ release_date: '2024-08-07'
+ release_type: Testing
+ go_version: go1.22.5
+ sha: 3d1bcc1df630c10c4065a22fc846daa911b436d6
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach-unstable
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.2.0-beta.3
+
+- release_name: v24.2.0
+ major_version: v24.2
+ release_date: '2024-08-12'
+ release_type: Production
+ go_version: go1.22.5
+ sha: 953d09cce5a01cc0053e138516d80a27454f027c
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.2.0-rc.1
+- release_name: v23.1.25
+ major_version: v23.1
+ release_date: '2024-08-15'
+ release_type: Production
+ go_version: go1.22.5
+ sha: e2f43c504ae49a71313add928f35c107774124d6
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: true
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v23.1.24
+
+- release_name: v23.2.10
+ major_version: v23.2
+ release_date: '2024-08-29'
+ release_type: Production
+ go_version: go1.22.5
+ sha: 7b9d20d87208db1ac6c24b68b73c742eb9b1168d
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: true
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v23.2.9
+
+- release_name: v24.1.4
+ major_version: v24.1
+ release_date: '2024-08-29'
+ release_type: Production
+ go_version: go1.22.5
+ sha: f629e9a3a88152ab73ee154eb5fe1e7c819e1af3
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.1.3
+
+- release_name: v24.2.1
+ major_version: v24.2
+ release_date: '2024-09-05'
+ release_type: Production
+ go_version: go1.22.5
+ sha: b95f17a1ddc0676a7cd64c1a0e3415cd85c221ba
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v24.2.0
+ withdrawn: true
+
+- release_name: v23.1.26
+ major_version: v23.1
+ release_date: '2024-09-12'
+ release_type: Production
+ go_version: go1.22.5
+ sha: 43e6847e94880caa6626471a919d683e418195d1
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: true
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v23.1.25
+
+- release_name: v23.2.11
+ major_version: v23.2
+ release_date: '2024-09-16'
+ release_type: Production
+ go_version: go1.22.5
+ sha: bb17c9628b6b830a43ad1f8f25ee19342a4217d8
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v23.2.10
diff --git a/src/current/_data/versions.csv b/src/current/_data/versions.csv
index 24e13a5d442..86070b45fd1 100644
--- a/src/current/_data/versions.csv
+++ b/src/current/_data/versions.csv
@@ -14,4 +14,4 @@ v22.2,2022-12-05,2023-12-05,2024-06-05,N/A,N/A,N/A,N/A,N/A,v22.1,release-22.2
v23.1,2023-05-15,2024-05-15,2024-11-15,23.1.11,23.1.12,2023-11-13,2024-11-13,2025-11-13,v22.2,release-23.1
v23.2,2024-02-05,2025-02-05,2025-08-05,23.2.6,23.2.7,2024-07-08,2025-07-08,2026-07-08,v23.1,release-23.2
v24.1,2024-05-20,2025-05-20,2025-11-20,N/A,N/A,N/A,N/A,N/A,v23.2,release-24.1
-v24.2,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,v24.1,master
+v24.2,2024-08-12,2025-02-12,N/A,N/A,N/A,N/A,N/A,N/A,v24.1,release-24.2
diff --git a/src/current/_includes/cockroachcloud/app/before-you-begin.md b/src/current/_includes/cockroachcloud/app/before-you-begin.md
index b9729fc471c..8c75cf1bf5b 100644
--- a/src/current/_includes/cockroachcloud/app/before-you-begin.md
+++ b/src/current/_includes/cockroachcloud/app/before-you-begin.md
@@ -1,5 +1,5 @@
-1. [Install CockroachDB](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/install-cockroachdb).
-1. Start up a [secure](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/secure-a-cluster) or [insecure](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/start-a-local-cluster) local cluster.
+1. [Install CockroachDB]({% link {{site.current_cloud_version}}/install-cockroachdb.md %}).
+1. Start up a [secure]({% link {{site.current_cloud_version}}/secure-a-cluster.md %}) or [insecure]({% link {{site.current_cloud_version}}/start-a-local-cluster.md %}) local cluster.
1. Choose the instructions that correspond to whether your cluster is secure or insecure:
diff --git a/src/current/_includes/cockroachcloud/app/see-also-links.md b/src/current/_includes/cockroachcloud/app/see-also-links.md
index c2736441b1a..c22758df229 100644
--- a/src/current/_includes/cockroachcloud/app/see-also-links.md
+++ b/src/current/_includes/cockroachcloud/app/see-also-links.md
@@ -1,8 +1,8 @@
You might also be interested in the following pages:
-- [Client Connection Parameters](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/connection-parameters)
-- [Data Replication](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/demo-data-replication)
-- [Fault Tolerance & Recovery](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/demo-fault-tolerance-and-recovery)
-- [Automatic Rebalancing](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/demo-automatic-rebalancing)
-- [Cross-Cloud Migration](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/demo-automatic-cloud-migration)
-- [Automated Operations](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/orchestrate-a-local-cluster-with-kubernetes-insecure)
+- [Client Connection Parameters]({% link {{site.current_cloud_version}}/connection-parameters.md %})
+- [Data Replication]({% link {{site.current_cloud_version}}/demo-data-replication.md %})
+- [Fault Tolerance & Recovery]({% link {{site.current_cloud_version}}/demo-fault-tolerance-and-recovery.md %})
+- [Automatic Rebalancing]({% link {{site.current_cloud_version}}/demo-automatic-rebalancing.md %})
+- [Cross-Cloud Migration]({% link {{site.current_cloud_version}}/demo-automatic-cloud-migration.md %})
+- [Automated Operations]({% link {{site.current_cloud_version}}/orchestrate-a-local-cluster-with-kubernetes-insecure.md %})
diff --git a/src/current/_includes/cockroachcloud/backup-examples.md b/src/current/_includes/cockroachcloud/backup-examples.md
index d65bc154384..910c13fe6f2 100644
--- a/src/current/_includes/cockroachcloud/backup-examples.md
+++ b/src/current/_includes/cockroachcloud/backup-examples.md
@@ -1,6 +1,6 @@
#### Back up a cluster
-To take a [full backup](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/take-full-and-incremental-backups#full-backups) of a cluster:
+To take a [full backup]({% link {{site.current_cloud_version}}/take-full-and-incremental-backups.md %}#full-backups) of a cluster:
{% include_cached copy-clipboard.html %}
~~~ sql
@@ -11,7 +11,7 @@ AS OF SYSTEM TIME '-10s';
#### Back up a database
-To take a [full backup](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/take-full-and-incremental-backups#full-backups) of a single database:
+To take a [full backup]({% link {{site.current_cloud_version}}/take-full-and-incremental-backups.md %}#full-backups) of a single database:
{% include_cached copy-clipboard.html %}
~~~ sql
@@ -20,7 +20,7 @@ INTO 's3://{BUCKET NAME}/{PATH}?AWS_ACCESS_KEY_ID={KEY ID}&AWS_SECRET_ACCESS_KEY
AS OF SYSTEM TIME '-10s';
~~~
-To take a [full backup](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/take-full-and-incremental-backups#full-backups) of multiple databases:
+To take a [full backup]({% link {{site.current_cloud_version}}/take-full-and-incremental-backups.md %}#full-backups) of multiple databases:
{% include_cached copy-clipboard.html %}
~~~ sql
@@ -31,7 +31,7 @@ AS OF SYSTEM TIME '-10s';
#### Back up a table or view
-To take a [full backup](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/take-full-and-incremental-backups#full-backups) of a single table or view:
+To take a [full backup]({% link {{site.current_cloud_version}}/take-full-and-incremental-backups.md %}#full-backups) of a single table or view:
{% include_cached copy-clipboard.html %}
~~~ sql
diff --git a/src/current/_includes/cockroachcloud/backup-types.md b/src/current/_includes/cockroachcloud/backup-types.md
index 652c8b363c9..628c2b37b88 100644
--- a/src/current/_includes/cockroachcloud/backup-types.md
+++ b/src/current/_includes/cockroachcloud/backup-types.md
@@ -1,4 +1,4 @@
CockroachDB supports two types of backups:
- **Managed-service backups**: Cockroach Labs takes automated backups of CockroachDB {{ site.data.products.serverless }} and CockroachDB {{ site.data.products.dedicated }} clusters that are stored in Cockroach Labs' cloud storage. {% if page.name != "use-managed-service-backups.md" %} See [Use Managed-Service Backups]({% link cockroachcloud/use-managed-service-backups.md %}) to learn more about the type and frequency of backups supported for both CockroachDB {{ site.data.products.cloud }} clusters. {% else %} {% endif %}
-- {% if page.name == "take-and-restore-customer-owned-backups.md" %} **Customer-owned backups**: {% else %} **[Customer-owned backups]({% link cockroachcloud/take-and-restore-customer-owned-backups.md %})**: {% endif %} You can take manual backups and store them in your [cloud storage buckets](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/use-cloud-storage) using the [`BACKUP`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/backup) statement. Customer-owned backups are supported in CockroachDB {{ site.data.products.serverless }}, CockroachDB {{ site.data.products.dedicated }}, and CockroachDB {{ site.data.products.core }}.
+- {% if page.name == "take-and-restore-customer-owned-backups.md" %} **Customer-owned backups**: {% else %} **[Customer-owned backups]({% link cockroachcloud/take-and-restore-customer-owned-backups.md %})**: {% endif %} You can take manual backups and store them in your [cloud storage buckets]({% link {{site.current_cloud_version}}/use-cloud-storage.md %}) using the [`BACKUP`]({% link {{site.current_cloud_version}}/backup.md %}) statement. Customer-owned backups are supported in CockroachDB {{ site.data.products.serverless }}, CockroachDB {{ site.data.products.dedicated }}, and CockroachDB {{ site.data.products.core }}.
diff --git a/src/current/_includes/cockroachcloud/cdc/cdc-bulk-examples.md b/src/current/_includes/cockroachcloud/cdc/cdc-bulk-examples.md
index 9b5f7b9b757..5ef4794d9f4 100644
--- a/src/current/_includes/cockroachcloud/cdc/cdc-bulk-examples.md
+++ b/src/current/_includes/cockroachcloud/cdc/cdc-bulk-examples.md
@@ -1,6 +1,6 @@
Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
-A changefeed targets an allowlist of tables, called "watched rows". Each change to a watched row is emitted as a record to a configurable sink, like [Kafka](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed#create-a-changefeed-connected-to-kafka) or a [cloud storage sink](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed#create-a-changefeed-connected-to-a-cloud-storage-sink). You can manage your changefeeds with [create](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#create), [pause](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#pause), [resume](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#resume), or [cancel](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#cancel) in this version of CockroachDB {{ site.data.products.cloud }}.
+A changefeed targets an allowlist of tables, called "watched rows". Each change to a watched row is emitted as a record to a configurable sink, like [Kafka]({% link {{site.current_cloud_version}}/create-changefeed.md %}#create-a-changefeed-connected-to-kafka) or a [cloud storage sink]({% link {{site.current_cloud_version}}/create-changefeed.md %}#create-a-changefeed-connected-to-a-cloud-storage-sink). You can manage your changefeeds with [create]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#create), [pause]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#pause), [resume]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#resume), or [cancel]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#cancel) in this version of CockroachDB {{ site.data.products.cloud }}.
#### Create a changefeed connected to Kafka
@@ -20,10 +20,10 @@ A changefeed targets an allowlist of tables, called "watched rows". Each change
~~~
{{site.data.alerts.callout_info}}
-Currently, [changefeeds](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds) connected to [Kafka versions < v1.0](https://docs.confluent.io/platform/current/installation/versions-interoperability.html) are not supported in CockroachDB v21.1.
+Currently, [changefeeds]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}) connected to [Kafka versions < v1.0](https://docs.confluent.io/platform/current/installation/versions-interoperability.html) are not supported in CockroachDB v21.1.
{{site.data.alerts.end}}
-For more information on how to create a changefeed connected to Kafka, see [Stream Data Out of CockroachDB Using Changefeeds](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#create-a-changefeed-connected-to-kafka) and [`CREATE CHANGEFEED`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed).
+For more information on how to create a changefeed connected to Kafka, see [Stream Data Out of CockroachDB Using Changefeeds]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#create-a-changefeed-connected-to-kafka) and [`CREATE CHANGEFEED`]({% link {{site.current_cloud_version}}/create-changefeed.md %}).
#### Create a changefeed connected to a cloud storage sink
@@ -46,4 +46,4 @@ For more information on how to create a changefeed connected to Kafka, see [Stre
(1 row)
~~~
-For more information on how to create a changefeed connected to a cloud storage sink, see [Stream Data Out of CockroachDB Using Changefeeds](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#create-a-changefeed-connected-to-a-cloud-storage-sink) and [`CREATE CHANGEFEED`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed).
+For more information on how to create a changefeed connected to a cloud storage sink, see [Stream Data Out of CockroachDB Using Changefeeds]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#create-a-changefeed-connected-to-a-cloud-storage-sink) and [`CREATE CHANGEFEED`]({% link {{site.current_cloud_version}}/create-changefeed.md %}).
diff --git a/src/current/_includes/cockroachcloud/cdc/core-csv.md b/src/current/_includes/cockroachcloud/cdc/core-csv.md
index 149f8c06a4c..35af6446f3d 100644
--- a/src/current/_includes/cockroachcloud/cdc/core-csv.md
+++ b/src/current/_includes/cockroachcloud/cdc/core-csv.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-To determine how wide the columns need to be, the default `table` display format in `cockroach sql` buffers the results it receives from the server before printing them to the console. When consuming core changefeed data using `cockroach sql`, it's important to use a display format like `csv` that does not buffer its results. To set the display format, use the [`--format=csv` flag](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-sql#sql-flag-format) when starting the [built-in SQL client](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-sql), or set the [`\set display_format=csv` option](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-sql#client-side-options) once the SQL client is open.
+To determine how wide the columns need to be, the default `table` display format in `cockroach sql` buffers the results it receives from the server before printing them to the console. When consuming core changefeed data using `cockroach sql`, it's important to use a display format like `csv` that does not buffer its results. To set the display format, use the [`--format=csv` flag]({% link {{site.current_cloud_version}}/cockroach-sql.md %}#sql-flag-format) when starting the [built-in SQL client]({% link {{site.current_cloud_version}}/cockroach-sql.md %}), or set the [`\set display_format=csv` option]({% link {{site.current_cloud_version}}/cockroach-sql.md %}#client-side-options) once the SQL client is open.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/cdc/core-url.md b/src/current/_includes/cockroachcloud/cdc/core-url.md
index 1817d33ddbf..7aae06336da 100644
--- a/src/current/_includes/cockroachcloud/cdc/core-url.md
+++ b/src/current/_includes/cockroachcloud/cdc/core-url.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Because core changefeeds return results differently than other SQL statements, they require a dedicated database connection with specific settings around result buffering. In normal operation, CockroachDB improves performance by buffering results server-side before returning them to a client; however, result buffering is automatically turned off for core changefeeds. Core changefeeds also have different cancellation behavior than other queries: they can only be canceled by closing the underlying connection or issuing a [`CANCEL QUERY`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cancel-query) statement on a separate connection. Combined, these attributes of changefeeds mean that applications should explicitly create dedicated connections to consume changefeed data, instead of using a connection pool as most client drivers do by default.
+Because core changefeeds return results differently than other SQL statements, they require a dedicated database connection with specific settings around result buffering. In normal operation, CockroachDB improves performance by buffering results server-side before returning them to a client; however, result buffering is automatically turned off for core changefeeds. Core changefeeds also have different cancellation behavior than other queries: they can only be canceled by closing the underlying connection or issuing a [`CANCEL QUERY`]({% link {{site.current_cloud_version}}/cancel-query.md %}) statement on a separate connection. Combined, these attributes of changefeeds mean that applications should explicitly create dedicated connections to consume changefeed data, instead of using a connection pool as most client drivers do by default.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/cdc/create-core-changefeed-avro.md b/src/current/_includes/cockroachcloud/cdc/create-core-changefeed-avro.md
index 3c765961afb..4485a37fd9b 100644
--- a/src/current/_includes/cockroachcloud/cdc/create-core-changefeed-avro.md
+++ b/src/current/_includes/cockroachcloud/cdc/create-core-changefeed-avro.md
@@ -21,7 +21,7 @@ In this example, you'll set up a core changefeed for a single-node cluster that
Only `zookeeper`, `kafka`, and `schema-registry` are needed. To troubleshoot Confluent, see [their docs](https://docs.confluent.io/current/installation/installing_cp.html#zip-and-tar-archives).
-1. As the `root` user, open the [built-in SQL client](https://www.cockroachlabs.com/docs/{{ site.current_cloud_version }}/cockroach-sql):
+1. As the `root` user, open the [built-in SQL client]({% link {{ site.current_cloud_version }}/cockroach-sql.md %}):
{% include_cached copy-clipboard.html %}
~~~ shell
diff --git a/src/current/_includes/cockroachcloud/cdc/create-core-changefeed.md b/src/current/_includes/cockroachcloud/cdc/create-core-changefeed.md
index b6da0298014..051c243d72f 100644
--- a/src/current/_includes/cockroachcloud/cdc/create-core-changefeed.md
+++ b/src/current/_includes/cockroachcloud/cdc/create-core-changefeed.md
@@ -1,6 +1,6 @@
In this example, you'll set up a core changefeed on your CockroachDB {{ site.data.products.serverless }} cluster.
-1. As the `root` user, open the [built-in SQL client](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-sql):
+1. As the `root` user, open the [built-in SQL client]({% link {{site.current_cloud_version}}/cockroach-sql.md %}):
{% include_cached copy-clipboard.html %}
~~~ shell
@@ -11,7 +11,7 @@ In this example, you'll set up a core changefeed on your CockroachDB {{ site.dat
{% include cockroachcloud/cdc/core-csv.md %}
-1. Enable the `kv.rangefeed.enabled` [cluster setting](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cluster-settings):
+1. Enable the `kv.rangefeed.enabled` [cluster setting]({% link {{site.current_cloud_version}}/cluster-settings.md %}):
{% include_cached copy-clipboard.html %}
~~~ sql
diff --git a/src/current/_includes/cockroachcloud/cdc/kafka-vpc-limitation.md b/src/current/_includes/cockroachcloud/cdc/kafka-vpc-limitation.md
index e330a646d9b..543a20ebfa6 100644
--- a/src/current/_includes/cockroachcloud/cdc/kafka-vpc-limitation.md
+++ b/src/current/_includes/cockroachcloud/cdc/kafka-vpc-limitation.md
@@ -1 +1 @@
-[VPC Peering](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#vpc-peering) and [AWS PrivateLink](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/changefeed-sinks#kafka) sink's internal IP addresses for [changefeeds](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/change-data-capture-overview). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
\ No newline at end of file
+[VPC Peering]({% link cockroachcloud/network-authorization.md %}#vpc-peering) and [AWS PrivateLink]({% link cockroachcloud/network-authorization.md %}#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{site.current_cloud_version}}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{site.current_cloud_version}}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
diff --git a/src/current/_includes/cockroachcloud/fgac-transition-callout.md b/src/current/_includes/cockroachcloud/fgac-transition-callout.md
index cce9a28ab17..be5508c2c9d 100644
--- a/src/current/_includes/cockroachcloud/fgac-transition-callout.md
+++ b/src/current/_includes/cockroachcloud/fgac-transition-callout.md
@@ -1,7 +1,7 @@
{{site.data.alerts.callout_info}}
CockroachDB {{ site.data.products.cloud }} is transitioning to a new authorization model that offers fine-grained access-control (FGAC), meaning that users can be given access to exactly the actions and resources required to perform their tasks. This is significant security enhancement, and may be required to meet advanced security goals, such as regulatory benchmarks, for example [Payment Card Industry Data Security Standard (PCI DSS) compliance]({% link cockroachcloud/pci-dss.md %}).
-Currently, the FGAC authorization model, comprising an updated set of [organization user roles]({% link cockroachcloud/authorization.md %}#organization-user-roles) is in [**limited access**](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroachdb-feature-availability), and is only available to organizations that choose to opt-in. To enroll your organization, contact your Cockroach Labs account team. These features are subject to change.
+Currently, the FGAC authorization model, comprising an updated set of [organization user roles]({% link cockroachcloud/authorization.md %}#organization-user-roles) is in [**limited access**]({% link {{site.current_cloud_version}}/cockroachdb-feature-availability.md %}), and is only available to organizations that choose to opt-in. To enroll your organization, contact your Cockroach Labs account team. These features are subject to change.
Until you enroll your organization, only the legacy roles, Organization Administrator and Organization Developer, will be available.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/known-limitations/cdc.md b/src/current/_includes/cockroachcloud/known-limitations/cdc.md
index 11a5a68150c..67269e031db 100644
--- a/src/current/_includes/cockroachcloud/known-limitations/cdc.md
+++ b/src/current/_includes/cockroachcloud/known-limitations/cdc.md
@@ -1,9 +1,9 @@
-- Changefeeds only work on tables with a single [column family](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/column-families) (which is the default for new tables).
+- Changefeeds only work on tables with a single [column family]({% link {{site.current_cloud_version}}/column-families.md %}) (which is the default for new tables).
- Changefeeds do not share internal buffers, so each running changefeed will increase total memory usage. To watch multiple tables, we recommend creating a changefeed with a comma-separated list of tables.
-- Many DDL queries (including [`TRUNCATE`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/truncate) and [`DROP TABLE`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/drop-table)) will cause errors on a changefeed watching the affected tables. You will need to [start a new changefeed](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed#start-a-new-changefeed-where-another-ended).
-- Changefeeds cannot be [backed up](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/backup) or [restored](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore).
-- Partial or intermittent sink unavailability may impact changefeed stability; however, [ordering guarantees](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#ordering-and-delivery-guarantees) will still hold for as long as a changefeed [remains active](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds#monitor-a-changefeed).
-- Changefeeds cannot be altered. To alter, cancel the changefeed and [create a new one with updated settings from where it left off](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed#start-a-new-changefeed-where-another-ended).
+- Many DDL queries (including [`TRUNCATE`]({% link {{site.current_cloud_version}}/truncate.md %}) and [`DROP TABLE`]({% link {{site.current_cloud_version}}/drop-table.md %})) will cause errors on a changefeed watching the affected tables. You will need to [start a new changefeed]({% link {{site.current_cloud_version}}/create-changefeed.md %}#start-a-new-changefeed-where-another-ended).
+- Changefeeds cannot be [backed up]({% link {{site.current_cloud_version}}/backup.md %}) or [restored]({% link {{site.current_cloud_version}}/restore.md %}).
+- Partial or intermittent sink unavailability may impact changefeed stability; however, [ordering guarantees]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#ordering-and-delivery-guarantees) will still hold for as long as a changefeed [remains active]({% link {{site.current_cloud_version}}/stream-data-out-of-cockroachdb-using-changefeeds.md %}#monitor-a-changefeed).
+- Changefeeds cannot be altered. To alter, cancel the changefeed and [create a new one with updated settings from where it left off]({% link {{site.current_cloud_version}}/create-changefeed.md %}#start-a-new-changefeed-where-another-ended).
- Additional target options will be added, including partitions and ranges of primary key rows.
-- Changefeeds do not pick up data ingested with the [`IMPORT INTO`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/import-into) statement.
-- Using a [cloud storage sink](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/create-changefeed#cloud-storage-sink) only works with `JSON` and emits [newline-delimited json](http://ndjson.org) files.
+- Changefeeds do not pick up data ingested with the [`IMPORT INTO`]({% link {{site.current_cloud_version}}/import-into.md %}) statement.
+- Using a [cloud storage sink]({% link {{site.current_cloud_version}}/create-changefeed.md %}#cloud-storage-sink) only works with `JSON` and emits [newline-delimited json](http://ndjson.org) files.
diff --git a/src/current/_includes/cockroachcloud/migration/sct-self-hosted.md b/src/current/_includes/cockroachcloud/migration/sct-self-hosted.md
index 336014b6d72..16970c158bc 100644
--- a/src/current/_includes/cockroachcloud/migration/sct-self-hosted.md
+++ b/src/current/_includes/cockroachcloud/migration/sct-self-hosted.md
@@ -1,5 +1,5 @@
{% if page.cloud != true %}
-If you are migrating to a CockroachDB {{ site.data.products.core }} database, you can [export the converted schema](https://www.cockroachlabs.com/docs/cockroachcloud/migrations-page#export-the-schema) from the Schema Conversion Tool and execute the statements in [`cockroach sql`]({% link {{ page.version.version }}/cockroach-sql.md %}), or use a third-party schema migration tool such as [Alembic]({% link {{ page.version.version }}/alembic.md %}), [Flyway]({% link {{ page.version.version }}/flyway.md %}), or [Liquibase]({% link {{ page.version.version }}/liquibase.md %}).
+If you are migrating to a CockroachDB {{ site.data.products.core }} database, you can [export the converted schema]({% link cockroachcloud/migrations-page.md %}#export-the-schema) from the Schema Conversion Tool and execute the statements in [`cockroach sql`]({% link {{ page.version.version }}/cockroach-sql.md %}), or use a third-party schema migration tool such as [Alembic]({% link {{ page.version.version }}/alembic.md %}), [Flyway]({% link {{ page.version.version }}/flyway.md %}), or [Liquibase]({% link {{ page.version.version }}/liquibase.md %}).
{% else %}
-To migrate to a CockroachDB {{ site.data.products.core }} database, you can execute the statements in [`cockroach sql`](https://www.cockroachlabs.com/docs/{{version_prefix}}cockroach-sql), or use a third-party schema migration tool such as [Alembic](https://www.cockroachlabs.com/docs/{{version_prefix}}alembic), [Flyway](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/flyway), or [Liquibase](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/liquibase).
+To migrate to a CockroachDB {{ site.data.products.core }} database, you can execute the statements in [`cockroach sql`]({% link {{version_prefix}}cockroach-sql.md %}), or use a third-party schema migration tool such as [Alembic]({% link {{version_prefix}}alembic.md %}), [Flyway]({% link {{site.current_cloud_version}}/flyway.md %}), or [Liquibase]({% link {{site.current_cloud_version}}/liquibase.md %}).
{% endif %}
diff --git a/src/current/_includes/cockroachcloud/note-egress-perimeter-cdc-backup.md b/src/current/_includes/cockroachcloud/note-egress-perimeter-cdc-backup.md
index ee8352b424c..ffa1c87e2a2 100644
--- a/src/current/_includes/cockroachcloud/note-egress-perimeter-cdc-backup.md
+++ b/src/current/_includes/cockroachcloud/note-egress-perimeter-cdc-backup.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls](https://www.cockroachlabs.com/docs/cockroachcloud/egress-perimeter-controls) for detail and setup instructions.
+Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls]({% link cockroachcloud/egress-perimeter-controls.md %}) for detail and setup instructions.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/quickstart/database-url-environment-variable.md b/src/current/_includes/cockroachcloud/quickstart/database-url-environment-variable.md
index 2bff1c498f3..2455a270ee9 100644
--- a/src/current/_includes/cockroachcloud/quickstart/database-url-environment-variable.md
+++ b/src/current/_includes/cockroachcloud/quickstart/database-url-environment-variable.md
@@ -23,5 +23,5 @@ The code sample uses the connection string stored in the environment variable `D
{{site.data.alerts.callout_success}}
-For reference information about connecting to CockroachDB with supported client drivers, see [Connect to a CockroachDB Cluster](https://www.cockroachlabs.com/docs/stable/connect-to-the-database).
-{{site.data.alerts.end}}
\ No newline at end of file
+For reference information about connecting to CockroachDB with supported client drivers, see [Connect to a CockroachDB Cluster]({% link {{ page.version.version }}/connect-to-the-database.md %}).
+{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/restore-examples.md b/src/current/_includes/cockroachcloud/restore-examples.md
index c6df040c877..6df5969b845 100644
--- a/src/current/_includes/cockroachcloud/restore-examples.md
+++ b/src/current/_includes/cockroachcloud/restore-examples.md
@@ -1,6 +1,6 @@
#### View the backup subdirectories
-`BACKUP ... INTO` adds a backup to a [collection](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/take-full-and-incremental-backups#backup-collections) within the backup destination. The path to the backup is created using a date-based naming scheme. To view the backup paths in a given destination, use [`SHOW BACKUPS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#view-the-backup-subdirectories):
+`BACKUP ... INTO` adds a backup to a [collection]({% link {{site.current_cloud_version}}/take-full-and-incremental-backups.md %}#backup-collections) within the backup destination. The path to the backup is created using a date-based naming scheme. To view the backup paths in a given destination, use [`SHOW BACKUPS`]({% link {{site.current_cloud_version}}/restore.md %}#view-the-backup-subdirectories):
{% include_cached copy-clipboard.html %}
~~~ sql
@@ -16,7 +16,7 @@ To restore a full cluster:
RESTORE FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';
~~~
-To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#view-the-backup-subdirectories).
+To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`]({% link {{site.current_cloud_version}}/restore.md %}#view-the-backup-subdirectories).
#### Restore a database
@@ -27,7 +27,7 @@ To restore a database:
RESTORE DATABASE bank FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';
~~~
-To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#view-the-backup-subdirectories).
+To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`]({% link {{site.current_cloud_version}}/restore.md %}#view-the-backup-subdirectories).
{{site.data.alerts.callout_info}}
`RESTORE DATABASE` can only be used if the entire database was backed up.
@@ -49,4 +49,4 @@ To restore multiple tables:
> RESTORE TABLE bank.customers, bank.accounts FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';
~~~
-To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#view-the-backup-subdirectories).
+To view the available subdirectories to restore a backup from, use [`SHOW BACKUPS`]({% link {{site.current_cloud_version}}/restore.md %}#view-the-backup-subdirectories).
diff --git a/src/current/_includes/cockroachcloud/restore-multiregion-dedicated.md b/src/current/_includes/cockroachcloud/restore-multiregion-dedicated.md
index b35135767c3..d6b87e246e3 100644
--- a/src/current/_includes/cockroachcloud/restore-multiregion-dedicated.md
+++ b/src/current/_includes/cockroachcloud/restore-multiregion-dedicated.md
@@ -3,9 +3,9 @@
The **Restore database** module displays with backup details.
-1. In the **Restore to** field, enter the name of the destination database. You can only restore to the same database name as the backed-up database. Therefore, you need to [`DROP`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/drop-database) or [`RENAME`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/alter-database#rename-to) your existing database before restoring.
+1. In the **Restore to** field, enter the name of the destination database. You can only restore to the same database name as the backed-up database. Therefore, you need to [`DROP`]({% link {{site.current_cloud_version}}/drop-database.md %}) or [`RENAME`]({% link {{site.current_cloud_version}}/alter-database.md %}#rename-to) your existing database before restoring.
- To restore a [multi-region database](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/multiregion-overview) you have backed up to a **different** database name, you can use the following procedure. (In this example, the original, backed-up database is `movr` and the new database is `new_movr`.)
+ To restore a [multi-region database]({% link {{site.current_cloud_version}}/multiregion-overview.md %}) you have backed up to a **different** database name, you can use the following procedure. (In this example, the original, backed-up database is `movr` and the new database is `new_movr`.)
In the SQL shell, create a new database named `new_movr`:
@@ -13,11 +13,11 @@
CREATE DATABASE new_movr;
~~~
- Add the regions that are in the backup of `movr` to your new database. The [database regions](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/multiregion-overview#database-regions) in your new database **must** match the regions of the backed-up database (`movr` in this example). You must:
+ Add the regions that are in the backup of `movr` to your new database. The [database regions]({% link {{site.current_cloud_version}}/multiregion-overview.md %}#database-regions) in your new database **must** match the regions of the backed-up database (`movr` in this example). You must:
- Ensure the databases have the same primary region.
- Add the regions to the new database in the same region order as the backed-up database.
- To verify the regions in your backed-up database, use [`SHOW REGIONS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/show-regions):
+ To verify the regions in your backed-up database, use [`SHOW REGIONS`]({% link {{site.current_cloud_version}}/show-regions.md %}):
~~~sql
SHOW REGIONS FROM DATABASE movr;
@@ -41,16 +41,16 @@
1. Click **Restore** for each table you want to restore into the new database.
1. Provide the new database's name (e.g., `new_movr`) in **Restore to** for the **Destination database** name.
- For more detail on "matching" regions, see [Restoring to multi-region databases](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#restoring-to-multi-region-databases).
+ For more detail on "matching" regions, see [Restoring to multi-region databases]({% link {{site.current_cloud_version}}/restore.md %}#restoring-to-multi-region-databases).
1. Select any of the **Dependency options** to skip. You can:
- - **Skip missing foreign keys**, which will remove missing [foreign key](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/foreign-key) constraints (i.e., when the referenced table is not in the backup or is not being restored) before restoring.
- - **Skip missing sequences**, which will ignore [sequence](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/show-sequences) dependencies (i.e., the `DEFAULT` expression that uses the sequence).
- - **Skip missing views**, which will skip restoring [views](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/views) that cannot be restored because their dependencies are not being restored at the same time.
+ - **Skip missing foreign keys**, which will remove missing [foreign key]({% link {{site.current_cloud_version}}/foreign-key.md %}) constraints (i.e., when the referenced table is not in the backup or is not being restored) before restoring.
+ - **Skip missing sequences**, which will ignore [sequence]({% link {{site.current_cloud_version}}/show-sequences.md %}) dependencies (i.e., the `DEFAULT` expression that uses the sequence).
+ - **Skip missing views**, which will skip restoring [views]({% link {{site.current_cloud_version}}/views.md %}) that cannot be restored because their dependencies are not being restored at the same time.
1. Click **Continue**
1. Once you have reviewed the restore details, click **Restore**.
When the restore job has been created successfully, you will be taken to the **Restore Jobs** tab, which will show you the status of your restore.
-When the restore is complete, be sure to set any database-specific [zone configurations](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/configure-replication-zones) and, if applicable, [grant privileges](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/grant).
+When the restore is complete, be sure to set any database-specific [zone configurations]({% link {{site.current_cloud_version}}/configure-replication-zones.md %}) and, if applicable, [grant privileges]({% link {{site.current_cloud_version}}/grant.md %}).
diff --git a/src/current/_includes/cockroachcloud/serverless-usage.md b/src/current/_includes/cockroachcloud/serverless-usage.md
index a03fb9cb334..c6d9e2b5dd3 100644
--- a/src/current/_includes/cockroachcloud/serverless-usage.md
+++ b/src/current/_includes/cockroachcloud/serverless-usage.md
@@ -1,3 +1,3 @@
The best way to estimate your resource usage is to [set resource limits]({% link cockroachcloud/serverless-cluster-management.md %}#edit-cluster-capacity) you're comfortable with and run your workload. You can see the RUs and storage your cluster has used in the **Usage this month** section of the [**Cluster Overview**]({% link cockroachcloud/serverless-cluster-management.md %}#view-cluster-overview) page. Once enough usage data is available, you can also see a graph of your monthly resource usage and recommended spend limit on the [**Edit cluster**]({% link cockroachcloud/serverless-cluster-management.md %}#edit-cluster-capacity) page.
-A typical `SELECT` query consumes between 1 and 15 RUs, depending on the amount of data it scans and returns. A typical `INSERT` or `UPDATE` statement consumes between 10 and 25 RUs, depending on the amount of data it inserts or updates. To estimate the RU consumption of individual SQL statements, you can use the [`EXPLAIN ANALYZE`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/explain-analyze) SQL statement. For an example, see [Example Request Unit calculation]({% link cockroachcloud/serverless-resource-usage.md %}#example-request-unit-calculation).
\ No newline at end of file
+A typical `SELECT` query consumes between 1 and 15 RUs, depending on the amount of data it scans and returns. A typical `INSERT` or `UPDATE` statement consumes between 10 and 25 RUs, depending on the amount of data it inserts or updates. To estimate the RU consumption of individual SQL statements, you can use the [`EXPLAIN ANALYZE`]({% link {{site.current_cloud_version}}/explain-analyze.md %}) SQL statement. For an example, see [Example Request Unit calculation]({% link cockroachcloud/serverless-resource-usage.md %}#example-request-unit-calculation).
diff --git a/src/current/_includes/cockroachcloud/use-cockroachcloud-instead.md b/src/current/_includes/cockroachcloud/use-cockroachcloud-instead.md
index ce94b7250c3..778cab6d340 100644
--- a/src/current/_includes/cockroachcloud/use-cockroachcloud-instead.md
+++ b/src/current/_includes/cockroachcloud/use-cockroachcloud-instead.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_success}}
-To deploy a free CockroachDB {{ site.data.products.cloud }} cluster instead of running CockroachDB yourself, see the Quickstart.
+To deploy a free CockroachDB {{ site.data.products.cloud }} cluster instead of running CockroachDB yourself, see the Quickstart.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/cockroachcloud/userfile-examples/backup-userfile.md b/src/current/_includes/cockroachcloud/userfile-examples/backup-userfile.md
index 73eb685e661..cf59c2636d0 100644
--- a/src/current/_includes/cockroachcloud/userfile-examples/backup-userfile.md
+++ b/src/current/_includes/cockroachcloud/userfile-examples/backup-userfile.md
@@ -1,4 +1,4 @@
-We recommend starting backups from a time at least 10 seconds in the past using [`AS OF SYSTEM TIME`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/as-of-system-time). Read our guidance in the [Performance](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/backup#performance) section on the [`BACKUP`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/backup) page.
+We recommend starting backups from a time at least 10 seconds in the past using [`AS OF SYSTEM TIME`]({% link {{site.current_cloud_version}}/as-of-system-time.md %}). Read our guidance in the [Performance]({% link {{site.current_cloud_version}}/backup.md %}#performance) section on the [`BACKUP`]({% link {{site.current_cloud_version}}/backup.md %}) page.
{{site.data.alerts.callout_info}}
Only database and table-level backups are possible when using `userfile` as storage. Restoring cluster-level backups will not work because `userfile` data is stored in the `defaultdb` database, and you cannot restore a cluster with existing table data.
@@ -16,10 +16,10 @@ BACKUP DATABASE bank INTO 'userfile://defaultdb.public.userfiles_$user/bank-back
This directory will hold the files that make up a backup; including the manifest file and data files.
{{site.data.alerts.callout_info}}
-When backing up from a cluster and restoring a database or table that is stored in your `userfile` space to a different cluster, you can run [`cockroach userfile get`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-userfile-get) to download the backup files to a local machine and [`cockroach userfile upload --url {CONNECTION STRING}`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroach-userfile-upload) to upload to the `userfile` of the alternate cluster.
+When backing up from a cluster and restoring a database or table that is stored in your `userfile` space to a different cluster, you can run [`cockroach userfile get`]({% link {{site.current_cloud_version}}/cockroach-userfile-get.md %}) to download the backup files to a local machine and [`cockroach userfile upload --url {CONNECTION STRING}`]({% link {{site.current_cloud_version}}/cockroach-userfile-upload.md %}) to upload to the `userfile` of the alternate cluster.
{{site.data.alerts.end}}
-`BACKUP ... INTO` adds a backup to a collection within the backup destination. The path to the backup is created using a date-based naming scheme by default, unless an [explicit subdirectory](https://www.cockroachlabs.com/docs/v21.2/backup#specify-a-subdirectory-for-backups) is passed with the `BACKUP` statement. To view the backup paths in a given destination, use [`SHOW BACKUPS`](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/restore#view-the-backup-subdirectories):
+`BACKUP ... INTO` adds a backup to a collection within the backup destination. The path to the backup is created using a date-based naming scheme by default, unless an [explicit subdirectory]({% link {{site.current_cloud_version}}/backup.md %}#subdirectory) is passed with the `BACKUP` statement. To view the backup paths in a given destination, use [`SHOW BACKUPS`]({% link {{site.current_cloud_version}}/restore.md %}#view-the-backup-subdirectories):
{% include_cached copy-clipboard.html %}
~~~ sql
diff --git a/src/current/_includes/common/license/evolving.md b/src/current/_includes/common/license/evolving.md
new file mode 100644
index 00000000000..9c49fc7b557
--- /dev/null
+++ b/src/current/_includes/common/license/evolving.md
@@ -0,0 +1 @@
+CockroachDB is evolving. In late 2024, we will retire our Core offering to consolidate on a single CockroachDB Enterprise offering under a new [license](https://www.cockroachlabs.com/cockroachdb-software-license/). CockroachDB Enterprise will be available at no charge for individual users and small businesses and will offer all users, free and paid, the full breadth of CockroachDB capabilities. See the [CockroachDB licensing update page](https://www.cockroachlabs.com/enterprise-license-update/) for details.
diff --git a/src/current/_includes/corestyle.scss b/src/current/_includes/corestyle.scss
index f9fc8a47611..ff0ab8e97eb 100644
--- a/src/current/_includes/corestyle.scss
+++ b/src/current/_includes/corestyle.scss
@@ -471,6 +471,9 @@ section table tr.warning, table tr.testing, table tr.testing > td.sorting_1 {
section table tr.danger, table tr.preference, table tr.preference > td.sorting_1 {
background-color: #f2dede !important;
}
+section table tr.version {
+ background-color: rgba(105, 51, 255, 0.2);
+}
.orange {
color: orange;
diff --git a/src/current/_includes/head.html b/src/current/_includes/head.html
index 8e6fe7d4825..32d2b92ff86 100755
--- a/src/current/_includes/head.html
+++ b/src/current/_includes/head.html
@@ -129,3 +129,35 @@
+
+
+
+
diff --git a/src/current/_includes/latest-release-details.md b/src/current/_includes/latest-release-details.md
new file mode 100644
index 00000000000..2e75e28de80
--- /dev/null
+++ b/src/current/_includes/latest-release-details.md
@@ -0,0 +1,31 @@
+{% comment %}
+ This is included by v24.2+ install-cockroachdb-*.md upgrade-cockroach-version.md
+{% endcomment %}
+
+{% assign DEBUG = false %}
+
+{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
+{% assign latest = site.data.releases | where_exp: "latest", "latest.major_version == page.version.version" | sort: "release_date" | last %}
+
+{% assign released = false %}
+{% assign skippable = false %}
+{% if rd.release_date != "N/A" and rd.maint_supp_exp_date != "N/A" %}
+ {% assign released = true %}
+ {% if rd.asst_supp_exp_date == "N/A" %}
+ {% assign skippable = true %}
+ {% endif %}
+{% endif %}
+
+{% if DEBUG == true %}
+version: {{ rd }}
+latest release: {{ latest }}
+page version: {{ page.version }}
+released: {{ released }}
+skippable: {{ skippable }}
+{% endif %}
+
+CockroachDB {{ latest.major_version }} is the latest supported supported production release.{% if skippable == true %} It is an [Innovation release]({% link releases/release-support-policy.md %}#support-types) that is optional for CockroachDB {{ site.data.products.dedicated }} and CockroachDB {{ site.data.products.core }} but required for CockroachDB {{ site.data.products.serverless }}.{% else %} It is a required [Regular release]({% link releases/release-support-policy.md %}#support-types).{% endif %} To learn more, refer to [CockroachDB {{ latest.major_version }} Release Notes](https://cockroachlabs.com/docs/releases/{{ latest.major_version }}.html).
+
+{% if page.version.version != blank and page.version.version != latest.major_version %}
+**This page refers to CockroachDB {{ page.version.version }}, not {{ latest.major_version }}.**
+{% endif %}
diff --git a/src/current/_includes/molt/molt-docker.md b/src/current/_includes/molt/molt-docker.md
new file mode 100644
index 00000000000..b9a8ada2a4a
--- /dev/null
+++ b/src/current/_includes/molt/molt-docker.md
@@ -0,0 +1,80 @@
+For details on pulling Docker images, see [Docker image](#docker-image).
+
+### Performance
+
+MOLT Fetch and Verify are likely to run more slowly in a Docker container than on a local machine. To improve performance, increase the memory or compute resources, or both, on your Docker container.
+
+{% if page.name == "molt-fetch.md" %}
+### Authentication
+
+When using MOLT Fetch with [cloud storage](#cloud-storage), it is necessary to specify volumes and environment variables, as described in the following sections for [Google Cloud Storage](#google-cloud-storage) and [Amazon S3](#amazon-s3).
+
+No additional configuration is needed when running MOLT Fetch with a [local file server](#local-file-server) or in [direct copy mode](#direct-copy):
+
+~~~ shell
+docker run -it cockroachdb/molt fetch ...
+~~~
+
+For more information on `docker run`, see the [Docker documentation](https://docs.docker.com/reference/cli/docker/container/run/).
+
+#### Google Cloud Storage
+
+If you are using [Google Cloud Storage](https://cloud.google.com/storage/docs/access-control) for [cloud storage](#cloud-storage):
+
+Volume map the `application_default_credentials.json` file into the container, and set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable to point to this file.
+
+~~~ shell
+docker run \
+ -v ~/.config/gcloud/application_default_credentials.json:/gcp/creds.json:ro \
+ -e GOOGLE_APPLICATION_CREDENTIALS=/gcp/creds.json \
+ -it \
+ cockroachdb/molt fetch ...
+~~~
+
+In case the previous authentication method fails, you can volume map the entire [Google Cloud configuration directory](https://cloud.google.com/sdk/docs/configurations) into the container. In addition to setting the `GOOGLE_APPLICATION_CREDENTIALS` environment variable, set `CLOUDSDK_CONFIG` to point to the configuration directory:
+
+~~~ shell
+docker run \
+ -v ~/.config/gcloud:/gcp/config:ro \
+ -e CLOUDSDK_CONFIG=/gcp/config \
+ -e GOOGLE_APPLICATION_CREDENTIALS=/gcp/config/application_default_credentials.json \
+ -it \
+ cockroachdb/molt fetch ...
+~~~
+
+For details on Google Cloud Storage authentication, see [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials).
+
+#### Amazon S3
+
+If you are using [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html) for [cloud storage](#cloud-storage):
+
+Volume map the host's `~/.aws` directory to the `/root/.aws` directory inside the container, and set the required `AWS_REGION`, `AWS_SECRET_ACCESS_KEY`, and `AWS_ACCESS_KEY_ID` environment variables:
+
+~~~ shell
+docker run \
+ -v ~/.aws:/root/.aws \
+ -e AWS_REGION=your-region \
+ -e AWS_SECRET_ACCESS_KEY=your-secret-access-key \
+ -e AWS_ACCESS_KEY_ID=your-access-key-id \
+ -it \
+ cockroachdb/molt fetch ...
+~~~
+{% endif %}
+
+### Local connection strings
+
+When testing locally, specify the host as follows:
+
+- For macOS, use `host.docker.internal`. For example:
+
+~~~
+--source 'postgres://postgres:postgres@host.docker.internal:5432/molt?sslmode=disable'
+--target "postgres://root@host.docker.internal:26257/molt?sslmode=disable"
+~~~
+
+- For Linux and Windows, use `172.17.0.1`. For example:
+
+~~~
+--source 'postgres://postgres:postgres@172.17.0.1:5432/molt?sslmode=disable'
+--target "postgres://root@172.17.0.1:26257/molt?sslmode=disable"
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/molt/molt-install.md b/src/current/_includes/molt/molt-install.md
index b7bf042d6cf..587b358ab72 100644
--- a/src/current/_includes/molt/molt-install.md
+++ b/src/current/_includes/molt/molt-install.md
@@ -4,4 +4,28 @@
| Linux | [Download](https://molt.cockroachdb.com/molt/cli/molt-latest.linux-amd64.tgz) | [Download](https://molt.cockroachdb.com/molt/cli/molt-latest.linux-arm64.tgz) |
| Mac | [Download](https://molt.cockroachdb.com/molt/cli/molt-latest.darwin-amd64.tgz) | [Download](https://molt.cockroachdb.com/molt/cli/molt-latest.darwin-arm64.tgz) |
-For previous binaries, refer to the [MOLT version manifest](https://molt.cockroachdb.com/molt/cli/versions.html). {% if page.name != "molt.md" %} For release details, see the [MOLT changelog]({% link releases/molt.md %}).{% endif %}
\ No newline at end of file
+For previous binaries, refer to the [MOLT version manifest](https://molt.cockroachdb.com/molt/cli/versions.html). {% if page.name != "molt.md" %}For release details, see the [MOLT changelog]({% link releases/molt.md %}).{% endif %}
+
+{% if page.name == "molt-fetch.md" or page.name == "molt.md" %}
+{{site.data.alerts.callout_info}}
+MOLT Fetch is supported on Red Hat Enterprise Linux (RHEL) 9 and above.
+{{site.data.alerts.end}}
+{% endif %}
+
+### Docker image
+
+[Docker multi-platform images](https://hub.docker.com/r/cockroachdb/molt/tags) containing both the AMD and ARM binaries are available. To pull the latest image:
+
+{% include_cached copy-clipboard.html %}
+~~~ shell
+docker pull cockroachdb/molt
+~~~
+
+To pull a specific version (e.g., `1.1.3`):
+
+{% include_cached copy-clipboard.html %}
+~~~ shell
+docker pull cockroachdb/molt:1.1.3
+~~~
+
+{% if page.name != "molt.md" %}For details on running in Docker, see [Docker usage](#docker-usage).{% endif %}
\ No newline at end of file
diff --git a/src/current/_includes/molt/update-lms-version.md b/src/current/_includes/molt/update-lms-version.md
deleted file mode 100644
index 571ae48f254..00000000000
--- a/src/current/_includes/molt/update-lms-version.md
+++ /dev/null
@@ -1,6 +0,0 @@
-~~~ yaml
-image:
- tag: 0.2.6
-~~~
-
-`image.tag` specifies the LMS version. This **must** match the installed [`molt-lms-cli`]({% link molt/live-migration-service.md %}#molt-lms-cli) version, which can be queried with `molt-lms-cli version`.
\ No newline at end of file
diff --git a/src/current/_includes/releases/cloud/2024-06-12.md b/src/current/_includes/releases/cloud/2024-06-12.md
deleted file mode 100644
index 9d5b617c882..00000000000
--- a/src/current/_includes/releases/cloud/2024-06-12.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## June 12, 2024
-
-
General updates
-
-- CockroachDB {{ site.data.products.dedicated }} on AWS is now available in new [regions]({% link cockroachcloud/regions.md %}?filters=dedicated#aws-regions):
- - `ap-east-1` (Hong Kong)
- - `ap-southeast-3` (Jakarta)
- - `ca-west-1` (Calgary)
- - `eu-south-1` (Milan)
- - `il-central-1` (Tel Aviv)
- - `me-south-1` (Bahrain)
-
-
Security updates
-
-- [Configuring private connectivity using Azure Private Link]({% link cockroachcloud/connect-to-your-cluster.md %}#azure-private-link) is available in [preview](https://www.cockroachlabs.com/docs/{{site.current_cloud_version}}/cockroachdb-feature-availability) for CockroachDB {{ site.data.products.dedicated }} clusters on Azure. [Private connectivity]({% link cockroachcloud/network-authorization.md %}#options-for-controlling-network-access) allows you to establish SQL access to a CockroachDB {{ site.data.products.dedicated }} cluster entirely through cloud provider private infrastructure, without exposing the cluster to the public internet, affording enhanced security and performance.
diff --git a/src/current/_includes/releases/cloud/2024-06-14.md b/src/current/_includes/releases/cloud/2024-06-14.md
deleted file mode 100644
index 43214e7c32f..00000000000
--- a/src/current/_includes/releases/cloud/2024-06-14.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## June 14, 2024
-
-
General updates
-
-- Deletion protection, which helps to prevent a cluster in CockroachDB {{ site.data.products.cloud }} from being deleted by mistake, is generally available for CockroachDB {{ site.data.products.serverless }} and CockroachDB {{ site.data.products.dedicated }} clusters. A user with permission to delete a cluster can enable deletion protection for the cluster. Refer to the instructions for [CockroachDB {{ site.data.products.serverless }}]({% link cockroachcloud/serverless-cluster-management.md %}#enable-deletion-protection) and [CockroachDB {{ site.data.products.dedicated }}]({% link cockroachcloud/cluster-management.md %}#enable-deletion-protection).
diff --git a/src/current/_includes/releases/cloud/2024-06-17.md b/src/current/_includes/releases/cloud/2024-06-17.md
deleted file mode 100644
index 4ce7456a1c4..00000000000
--- a/src/current/_includes/releases/cloud/2024-06-17.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## June 17, 2024
-
-
Security updates
-
-- The [IdP-initiated SAML flow]({% link cockroachcloud/cloud-org-sso.md %}#cloud-organization-sso) is now enabled by default. When you configure a [Cloud Organization SSO SAML connection]({% link cockroachcloud/configure-cloud-org-sso.md %}#saml), your users can optionally sign in to CockroachDB {{ site.data.products.cloud }} directly from your IdP, such as by using a tile in Okta.
diff --git a/src/current/_includes/releases/cloud/2024-06-26.md b/src/current/_includes/releases/cloud/2024-06-26.md
deleted file mode 100644
index e2751ed15c6..00000000000
--- a/src/current/_includes/releases/cloud/2024-06-26.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## June 26, 2024
-
-
General updates
-
-- The `qatarcentral` (Doha) region has been disabled for CockroachDB {{ site.data.products.dedicated }} clusters on Azure due to capacity issues. To express interest in this region, contact your account team.
diff --git a/src/current/_includes/releases/cloud/2024-07-18.md b/src/current/_includes/releases/cloud/2024-07-18.md
deleted file mode 100644
index 8ce01afee59..00000000000
--- a/src/current/_includes/releases/cloud/2024-07-18.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## July 18, 2024
-
-
Security updates
-
-- The maximum number of [IP allowlist]({% link cockroachcloud/network-authorization.md %}#ip-allowlisting) entries has increased from 7 to 20 for CockroachDB {{ site.data.products.dedicated }} on AWS.
diff --git a/src/current/_includes/releases/cloud/2024-07-19.md b/src/current/_includes/releases/cloud/2024-07-19.md
deleted file mode 100644
index 5518a23006c..00000000000
--- a/src/current/_includes/releases/cloud/2024-07-19.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## July 19, 2024
-
-
General updates
-
-- CockroachDB {{ site.data.products.cloud }} is now available as a pay-as-you-go offering on the AWS Marketplace. This allows AWS customers to pay for CockroachDB Cloud charges via their AWS accounts, with no up-front commitments. For more detail, refer to:
- - [CockroachDB (pay-as-you-go)](https://aws.amazon.com/marketplace/pp/prodview-n3xpypxea63du) on AWS Marketplace.
- - [Subscribe through AWS Marketplace]({% link cockroachcloud/billing-management.md %}?filters=marketplace#subscribe-through-aws-marketplace) in the CockroachDB {{ site.data.products.cloud }} documentation.
\ No newline at end of file
diff --git a/src/current/_includes/releases/v19.2/v19.2.0-rc.3.md b/src/current/_includes/releases/v19.2/v19.2.0-rc.3.md
index c599a5b306c..aec8736fa9b 100644
--- a/src/current/_includes/releases/v19.2/v19.2.0-rc.3.md
+++ b/src/current/_includes/releases/v19.2/v19.2.0-rc.3.md
@@ -36,7 +36,7 @@ $ docker pull cockroachdb/cockroach-unstable:v19.2.0-rc.3
Doc updates
-- Added a [CockroachDB Performance](https://www.cockroachlabs.com/docs/v19.2/performance) page describing the performance profiles you can expect (scaling, throughout, and latency), based on Cockroach Labs' extensive testing using industry-standard benchmarks like TPC-C and Sysbench. [#5595][#5595]
+- Added a [CockroachDB Performance](https://www.cockroachlabs.com/docs/v19.2/performance) page describing the performance profiles you can expect (scaling, throughput, and latency), based on Cockroach Labs' extensive testing using the industry-standard benchmark TPC-C. [#5595][#5595]
- Documented how to [run the built-in `movr` workload](https://www.cockroachlabs.com/docs/v19.2/cockroach-workload#run-the-movr-workload). [#5713][#5713]
- Documented how to [show comments for virtual tables](https://www.cockroachlabs.com/docs/v19.2/show-tables#show-virtual-tables-with-comments), including links to further documentation. [#5695][#5695]
- Refreshed the [Deploy a Python To-Do App with Flask, Kubernetes, and CockroachCloud](https://www.cockroachlabs.com/docs/cockroachcloud/deploy-a-python-to-do-app-with-flask-kubernetes-and-cockroachcloud). [#5694][#5694]
diff --git a/src/current/_includes/releases/v19.2/v19.2.0.md b/src/current/_includes/releases/v19.2/v19.2.0.md
index 792d2f83f6b..2ea1929d303 100644
--- a/src/current/_includes/releases/v19.2/v19.2.0.md
+++ b/src/current/_includes/releases/v19.2/v19.2.0.md
@@ -124,7 +124,7 @@ For information about new and unresolved limitations in CockroachDB v19.2, with
Topic | Description
------|------------
-**Performance Benchmarking** | Added an [overview of CockroachDB's performance profiles](https://www.cockroachlabs.com/docs/v19.2/performance) (scaling, throughput, latency), based on Cockroach Labs' extensive testing using industry-standard benchmarks like TPC-C and Sysbench, as well as [detailed instructions for reproducing our TPC-C benchmarking results](https://www.cockroachlabs.com/docs/v19.2/performance-benchmarking-with-tpc-c-10-warehouses) at different scales.
+**Performance Benchmarking** | Added an [overview of CockroachDB's performance profiles](https://www.cockroachlabs.com/docs/v19.2/performance) (scaling, throughput, latency), based on Cockroach Labs's extensive testing using the TPC-C industry-standard benchmark, as well as [detailed instructions for reproducing our TPC-C benchmarking results](https://www.cockroachlabs.com/docs/v19.2/performance-benchmarking-with-tpc-c-10-warehouses) at different scales.
**Multi-Region Deployment** | Updated the tutorial on getting [low latency reads and writes in a multi-region cluster](https://www.cockroachlabs.com/docs/v19.2/demo-low-latency-multi-region-deployment) to feature two of the most important multi-region data topologies for dramatically reducing the impact of network latency, [Geo-Partitioned Replicas](https://www.cockroachlabs.com/docs/v19.2/topology-geo-partitioned-replicas) and [Duplicate Indexes](https://www.cockroachlabs.com/docs/v19.2/topology-duplicate-indexes).
**Orchestration with Kubernetes** | Expanded the tutorial on [Kubernetes single-region deployment](https://www.cockroachlabs.com/docs/v19.2/orchestrate-cockroachdb-with-kubernetes) to cover running on Amazon's hosted EKS and [naming CSR naming requirements](https://www.cockroachlabs.com/docs/v19.2/orchestrate-cockroachdb-with-kubernetes#csr-names) for secure deployments. Also updated and expanded the instructions on using Helm.
**Client-Side Transaction Retries** | Updated and simplified the client-side transaction logic in the [Java](https://www.cockroachlabs.com/docs/v19.2/build-a-java-app-with-cockroachdb), [Python](https://www.cockroachlabs.com/docs/v19.2/build-a-python-app-with-cockroachdb), and [Go](https://www.cockroachlabs.com/docs/v19.2/build-a-go-app-with-cockroachdb) getting started tutorials and code samples. Also added [pseudocode](https://www.cockroachlabs.com/docs/v19.2/transactions#client-side-intervention-example) to help with the implementation of this logic in other languages as well as [instructions for authors of database drivers and ORMs](https://www.cockroachlabs.com/docs/v19.2/advanced-client-side-transaction-retries) who would like to implement client-side retries in their database driver or ORM for maximum efficiency and ease of use by application developers.
diff --git a/src/current/_includes/releases/v20.1/v20.1.0.md b/src/current/_includes/releases/v20.1/v20.1.0.md
index 23e625c2ea7..f2bdcefba92 100644
--- a/src/current/_includes/releases/v20.1/v20.1.0.md
+++ b/src/current/_includes/releases/v20.1/v20.1.0.md
@@ -130,4 +130,4 @@ Docs | **"Hello World" Repos** | Added several language-specific [GitHub repos](
Docs | **Multi-Region Sample App and Tutorial** | Added a full-stack, multi-region sample application ([GitHub repo](https://github.com/cockroachlabs/movr-flask)) with an [accompanying tutorial](https://www.cockroachlabs.com/docs/v20.1/multi-region-overview) on building a multi-region application on a multi-region CockroachCloud cluster. Also added a [video demonstration](https://www.youtube.com/playlist?list=PL_QaflmEF2e8o2heLyIt5iDUTgJE3EPkp) as a YouTube playlist.
Docs | **Streaming Changefeeds to Snowflake Tutorial** | Added an [end-to-end tutorial](https://www.cockroachlabs.com/docs/cockroachcloud/stream-changefeed-to-snowflake-aws) on how to use an Enterprise changefeed to stream row-level changes from CockroachCloud to Snowflake, an online analytical processing (OLAP) database.
Docs | **Improved Backup/Restore Docs** | Updated the backup/restore docs to better separate [broadly applicable guidance and best practices](https://www.cockroachlabs.com/docs/v20.1/backup-and-restore) from more advanced topics.
-Docs | **Release Support Policy** | Added a page explaining Cockroach Labs' [policy for supporting major releases of CockroachDB]({% link releases/release-support-policy.md %}), including the phases of support that each major release moves through, the currently supported releases, and an explanation of the [naming scheme]({% link releases/index.md %}#release-naming) used for CockroachDB.
+Docs | **Release Support Policy** | Added a page explaining Cockroach Labs' [policy for supporting major releases of CockroachDB]({% link releases/release-support-policy.md %}), including the phases of support that each major release moves through, the currently supported releases, and an explanation of the [naming scheme]({% link releases/index.md %}#overview) used for CockroachDB.
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.1.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.1.md
index f9a2115bd85..50c54f1fda8 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.1.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.1.md
@@ -6,13 +6,13 @@ Release Date: December 19, 2022
Backward-incompatible changes
-- Replaced the `cdc_prev()` [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) in favor of a `cdc_prev` tuple. This is an incompatible change that may break [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) that use the previous `cdc_prev()` function. [#85177][#85177]
-- [`SHOW RANGES FOR TABLE`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) now includes rows for all indexes that support the table. Prior to this change, `SHOW RANGES FOR TABLE foo` was an alias for `SHOW RANGES FOR INDEX foo@primary`. This was causing confusion, as it would miss data for secondary indexes. It is still possible to filter to just the primary index using `SHOW RANGES FOR INDEX foo@primary`. The statement output now also includes the index name. [#93545][#93545]
+- Replaced the `cdc_prev()` [function]({% link v23.1/functions-and-operators.md %}) in favor of a `cdc_prev` tuple. This is an incompatible change that may break [changefeeds]({% link v23.1/change-data-capture-overview.md %}) that use the previous `cdc_prev()` function. [#85177][#85177]
+- [`SHOW RANGES FOR TABLE`]({% link v23.1/show-ranges.md %}) now includes rows for all indexes that support the table. Prior to this change, `SHOW RANGES FOR TABLE foo` was an alias for `SHOW RANGES FOR INDEX foo@primary`. This was causing confusion, as it would miss data for secondary indexes. It is still possible to filter to just the primary index using `SHOW RANGES FOR INDEX foo@primary`. The statement output now also includes the index name. [#93545][#93545]
Security updates
-- It is now possible to create [TLS client certificates](https://www.cockroachlabs.com/docs/v23.1/security-reference/transport-layer-security) for identity principals that are not a valid SQL username using [`cockroach cert create-client`](https://www.cockroachlabs.com/docs/v23.1/cockroach-cert) and the new flag `--disable-username-validation`. This is meant to be used in combination with the [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.identity_map.configuration` and the `map` option in HBA rules (`server.host_based_authentication.configuration`). To test this feature, use `cockroach sql`. Cockroach Labs recommends passing the username separately from the connection URL. [#90439][#90439]
-- There is a new SQL [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) `system_identity` defined to contain the identity principal presented by the SQL clients during the initial connection. This may be different from `session_user` when the identity was mapped, either using GSSAPI and `include_realm=0`, or when using an identity map. [#90439][#90439]
+- It is now possible to create [TLS client certificates](https://www.cockroachlabs.com/docs/v23.1/security-reference/transport-layer-security) for identity principals that are not a valid SQL username using [`cockroach cert create-client`]({% link v23.1/cockroach-cert.md %}) and the new flag `--disable-username-validation`. This is meant to be used in combination with the [cluster setting]({% link v23.1/cluster-settings.md %}) `server.identity_map.configuration` and the `map` option in HBA rules (`server.host_based_authentication.configuration`). To test this feature, use `cockroach sql`. Cockroach Labs recommends passing the username separately from the connection URL. [#90439][#90439]
+- There is a new SQL [session variable]({% link v23.1/set-vars.md %}) `system_identity` defined to contain the identity principal presented by the SQL clients during the initial connection. This may be different from `session_user` when the identity was mapped, either using GSSAPI and `include_realm=0`, or when using an identity map. [#90439][#90439]
General changes
@@ -23,73 +23,73 @@ Release Date: December 19, 2022
-- [`SHOW CHANGEFEED JOBS`](https://www.cockroachlabs.com/docs/v23.1/show-jobs#show-changefeed-jobs) no longer reveals Confluent schema registry user information, including a user's secret key. This information is now redacted, meaning it will not be stored in CockroachDB internal tables at all. [#86603][#86603]
-- [Changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) JSON encoder performance is improved by 50%. [#88064][#88064]
+- [`SHOW CHANGEFEED JOBS`]({% link v23.1/show-jobs.md %}#show-changefeed-jobs) no longer reveals Confluent schema registry user information, including a user's secret key. This information is now redacted, meaning it will not be stored in CockroachDB internal tables at all. [#86603][#86603]
+- [Changefeeds]({% link v23.1/change-data-capture-overview.md %}) JSON encoder performance is improved by 50%. [#88064][#88064]
- Changefeeds, using cloud storage sink, now have better throughput. [#88395][#88395]
-- Added the [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `changefeed.event_consumer_workers` which allows changefeeds to process events concurrently. [#87994][#87994]
+- Added the [cluster setting]({% link v23.1/cluster-settings.md %}) `changefeed.event_consumer_workers` which allows changefeeds to process events concurrently. [#87994][#87994]
- Changefeed) exports are up to 25% faster due to uniform work assignment. [#88672][#88672]
- Changefeeds can emit files compressed with the ZSTD algorithm, which provides good compression and is much faster than GZIP. In addition, a new, faster implementation of GZIP is used by default. [#88635][#88635]
- When a changefeed is run with the option `virtual_columns = "null"`, the virtual column will be ordered last in each row. [#89329][#89329]
-- For Kafka [sinks](https://www.cockroachlabs.com/docs/v23.1/changefeed-sinks), you can now add the optional JSON field `"Compression"` to the `kafka_sink_config` option. This field can be set to `"none"` (default), `"GZIP"`, `"SNAPPY"`, `"LZ4"`, or `"ZSTD"`. Setting this field will result in the specified compression protocol to be used when emitting events. [#90270][#90270]
+- For Kafka [sinks]({% link v23.1/changefeed-sinks.md %}), you can now add the optional JSON field `"Compression"` to the `kafka_sink_config` option. This field can be set to `"none"` (default), `"GZIP"`, `"SNAPPY"`, `"LZ4"`, or `"ZSTD"`. Setting this field will result in the specified compression protocol to be used when emitting events. [#90270][#90270]
- Fixed a bug that could cause changefeeds to fail during a rolling restart. [#89913][#89913]
- Changefeeds will now treat all errors, unless otherwise indicated, as retryable errors. [#90810][#90810]
-- CockroachDB now supports passing in the optional external ID when [assuming a role](https://www.cockroachlabs.com/docs/v23.1/cloud-storage-authentication). This is done by extending the values of the comma-separated string value of the `ASSUME_ROLE` parameter to the format `;external_id=`. Users can still use the previous format of just `` to specify a role without any external ID. When using role chaining, each role in the chain can be associated with a different external ID. [#91040][#91040]
-- [JWT authentication](https://www.cockroachlabs.com/docs/v23.1/sso-sql) [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) can now be modified from within tenants to better support serverless use cases. [#92406][#92406]
-- [CDC queries](https://www.cockroachlabs.com/docs/v23.1/cdc-queries) are now planned and evaluated using the SQL optimizer and distSQL execution. The state of the previous row is now exposed as the `cdc_prev` tuple. [#85177][#85177]
+- CockroachDB now supports passing in the optional external ID when [assuming a role]({% link v23.1/cloud-storage-authentication.md %}). This is done by extending the values of the comma-separated string value of the `ASSUME_ROLE` parameter to the format `;external_id=`. Users can still use the previous format of just `` to specify a role without any external ID. When using role chaining, each role in the chain can be associated with a different external ID. [#91040][#91040]
+- [JWT authentication]({% link v23.1/sso-sql.md %}) [cluster settings]({% link v23.1/cluster-settings.md %}) can now be modified from within tenants to better support serverless use cases. [#92406][#92406]
+- [CDC queries]({% link v23.1/cdc-queries.md %}) are now planned and evaluated using the SQL optimizer and distSQL execution. The state of the previous row is now exposed as the `cdc_prev` tuple. [#85177][#85177]
- Changefeeds no longer require the `COCKROACH_EXPERIMENTAL_ENABLE_PER_CHANGEFEED_METRICS` environment variable to be set in order to use the `metrics_label` option. [#93423][#93423]
- Changefeeds can now be scheduled at intervals specified in crontab notation. [#92232][#92232]
SQL language changes
-- Added the `crdb_internal.to_json_as_changefeed_with_flags` [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) to help debug JSON [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview). [#84509][#84509]
-- Added the `regions` column to the [`SHOW BACKUP`](https://www.cockroachlabs.com/docs/v23.1/show-backup) command which will output a string of `ALTER DATABASE` commands if the database is a multi-region database and `NULL` for everything else. Previously, the user did not have an easy way to see if a backed up database is multi-region. [#88136][#88136]
+- Added the `crdb_internal.to_json_as_changefeed_with_flags` [function]({% link v23.1/functions-and-operators.md %}) to help debug JSON [changefeeds]({% link v23.1/change-data-capture-overview.md %}). [#84509][#84509]
+- Added the `regions` column to the [`SHOW BACKUP`]({% link v23.1/show-backup.md %}) command which will output a string of `ALTER DATABASE` commands if the database is a multi-region database and `NULL` for everything else. Previously, the user did not have an easy way to see if a backed up database is multi-region. [#88136][#88136]
- Types with length modifiers can now be used to prefix literals. [#82028][#82028]
- A new column `plan_gist` was added to `crdb_internal.{node,cluster}_queries` representing the compressed logical plan. [#88770][#88770]
-- You can generate easy-to-read [`CREATE INDEX`](https://www.cockroachlabs.com/docs/v23.1/create-index) statements for a table's (secondary) indexes using the `SHOW CREATE INDEXES FROM ` and `SHOW CREATE SECONDARY INDEXES FROM ` statements. [#88861][#88861]
+- You can generate easy-to-read [`CREATE INDEX`]({% link v23.1/create-index.md %}) statements for a table's (secondary) indexes using the `SHOW CREATE INDEXES FROM ` and `SHOW CREATE SECONDARY INDEXES FROM ` statements. [#88861][#88861]
- `enum_first`, `enum_last`, and `enum_range` may now take `NULL` arguments as long as their type can be inferred from the expression. [#89124][#89124]
-- [Declarative schema changer](https://www.cockroachlabs.com/docs/v23.1/online-schema-changes#declarative-schema-changer) support for `ALTER PRIMARY KEY` statements now extends to tables which have secondary indexes. [#86176][#86176]
-- The `backup.restore_span.target_size` cluster setting now defaults to `384 MiB `. This should reduce the number of ranges created during [restore](https://www.cockroachlabs.com/docs/v23.1/restore) and thereby reduce the merging of ranges that needs to occur after the restore. [#89333][#89333]
-- The `transaction_timeout` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) was added. `transaction_timeout` aborts an explicit transaction when it runs longer than the configured duration. When the timer times out, the current statement is cancelled and the transaction enters an aborted state. This timeout does not have any effect when no statement is being executed, so it should be used with `idle_in_transaction_timeout` for the best results. [#89033][#89033]
-- The `crdb_internal.check_consistency` [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) now does not include the diff between inconsistent replicas, should they occur. If an inconsistency occurs, the storage engine checkpoints should be inspected. This change is made because the maximum range size limit has been increased from 64 MiB to 512 MiB, so inlining diffs in consistency checks does not scale. [#89502][#89502]
-- CockroachDB now shows a hash-sharded check constraint in [`SHOW CREATE TABLE`](https://www.cockroachlabs.com/docs/v23.1/show-create) if it is set to `NOT VALID`. [#89517][#89517]
-- Added the `SHOW FUNCTIONS` and `SHOW FUNCTIONS FROM ` statements, which list [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). [#89557][#89557]
+- [Declarative schema changer]({% link v23.1/online-schema-changes.md %}#declarative-schema-changer) support for `ALTER PRIMARY KEY` statements now extends to tables which have secondary indexes. [#86176][#86176]
+- The `backup.restore_span.target_size` cluster setting now defaults to `384 MiB `. This should reduce the number of ranges created during [restore]({% link v23.1/restore.md %}) and thereby reduce the merging of ranges that needs to occur after the restore. [#89333][#89333]
+- The `transaction_timeout` [session variable]({% link v23.1/set-vars.md %}) was added. `transaction_timeout` aborts an explicit transaction when it runs longer than the configured duration. When the timer times out, the current statement is cancelled and the transaction enters an aborted state. This timeout does not have any effect when no statement is being executed, so it should be used with `idle_in_transaction_timeout` for the best results. [#89033][#89033]
+- The `crdb_internal.check_consistency` [function]({% link v23.1/functions-and-operators.md %}) now does not include the diff between inconsistent replicas, should they occur. If an inconsistency occurs, the storage engine checkpoints should be inspected. This change is made because the maximum range size limit has been increased from 64 MiB to 512 MiB, so inlining diffs in consistency checks does not scale. [#89502][#89502]
+- CockroachDB now shows a hash-sharded check constraint in [`SHOW CREATE TABLE`]({% link v23.1/show-create.md %}) if it is set to `NOT VALID`. [#89517][#89517]
+- Added the `SHOW FUNCTIONS` and `SHOW FUNCTIONS FROM ` statements, which list [user-defined functions]({% link v23.1/user-defined-functions.md %}). [#89557][#89557]
- The default value of `sql.metrics.statement_details.plan_collection.enabled` is now `false`. [#89847][#89847]
- CockroachDB now supports executing statements of the form `DELETE FROM ... USING`. [#88974][#88974]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `sql.ttl.default_range_concurrency` and table storage parameter `ttl_range_concurrency` are no longer configurable. [#89392][#89392]
-- CockroachDB drops the associated scheduled incremental backup when [`DROP SCHEDULE`](https://www.cockroachlabs.com/docs/v23.1/drop-schedules) or `DROP SCHEDULES` is called. Previously, whenever a user dropped a [scheduled full backup](https://www.cockroachlabs.com/docs/v23.1/create-schedule-for-backup), the corresponding scheduled incremental backup would not be dropped. [#89768][#89768]
-- Added the `sql.auth.change_own_password.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). It defaults to `false`. When set to `true`, any user is allowed to change their own password to a non-null value. Changing other role options still has the same privilege requirements as before (either `CREATEROLE` or `CREATELOGIN`, depending on the option). [#90485][#90485]
-- The `sql.distsql.max_running_flows` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) has been removed. [#84888][#84888]
+- The [cluster setting]({% link v23.1/cluster-settings.md %}) `sql.ttl.default_range_concurrency` and table storage parameter `ttl_range_concurrency` are no longer configurable. [#89392][#89392]
+- CockroachDB drops the associated scheduled incremental backup when [`DROP SCHEDULE`]({% link v23.1/drop-schedules.md %}) or `DROP SCHEDULES` is called. Previously, whenever a user dropped a [scheduled full backup]({% link v23.1/create-schedule-for-backup.md %}), the corresponding scheduled incremental backup would not be dropped. [#89768][#89768]
+- Added the `sql.auth.change_own_password.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}). It defaults to `false`. When set to `true`, any user is allowed to change their own password to a non-null value. Changing other role options still has the same privilege requirements as before (either `CREATEROLE` or `CREATELOGIN`, depending on the option). [#90485][#90485]
+- The `sql.distsql.max_running_flows` [cluster setting]({% link v23.1/cluster-settings.md %}) has been removed. [#84888][#84888]
- The query field in the `crdb_internal.node_queries`, `crdb_internal.cluster_queries`, and `SHOW QUERIES` commands now includes the original comments in the queries. [#86968][#86968]
-- Added a new `descriptor_validation` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) which can be set to `read_only` or `off` to disable descriptor validation, which may be useful when mitigating or recovering from catalog corruption. [#90488][#90488]
-- CockroachDB now supports using [`DROP CONSTRAINT, ADD CONSTRAINT`](https://www.cockroachlabs.com/docs/v23.1/alter-table#drop-constraint) to add a new primary key without moving the existing primary key to a secondary index if the primary key name is a reserved SQL keyword. Previously, a `constraint already exists` error was returned. [#90865][#90865]
+- Added a new `descriptor_validation` [session variable]({% link v23.1/set-vars.md %}) which can be set to `read_only` or `off` to disable descriptor validation, which may be useful when mitigating or recovering from catalog corruption. [#90488][#90488]
+- CockroachDB now supports using [`DROP CONSTRAINT, ADD CONSTRAINT`]({% link v23.1/alter-table.md %}#drop-constraint) to add a new primary key without moving the existing primary key to a secondary index if the primary key name is a reserved SQL keyword. Previously, a `constraint already exists` error was returned. [#90865][#90865]
- Added the `contention_events` column to the `cluster_execution_insights` table to see which transaction is blocking the specific statement. [#90660][#90660]
- `crdb_internal.scan` and `crdb_internal.list_sql_keys_in_range` return the timestamp for the time at which the value for a key was written, in addition to the raw key and value. [#90956][#90956]
-- Previously, the [`AS OF SYSTEM TIME`](https://www.cockroachlabs.com/docs/v23.1/as-of-system-time) value was set at the start of the TTL job (with a TTL cutoff - 30s), but this results in an error for TTL jobs that run longer than `gc.ttlseconds`: `error selecting rows to delete: ttl select defaultdb.public.events: batch timestamp 1666883527.780656000,0 must be after replica GC threshold 1666883574.542825089,0`. CockroachDB now makes the `AS OF SYSTEM TIME` value relative to when each `SELECT` query is run (query time - 30s) to prevent this error from happening, but each `SELECT` query will run against a different table state. This should be ok because if records are missed during one job invocation they should still be picked up the next. [#90981][#90981]
+- Previously, the [`AS OF SYSTEM TIME`]({% link v23.1/as-of-system-time.md %}) value was set at the start of the TTL job (with a TTL cutoff - 30s), but this results in an error for TTL jobs that run longer than `gc.ttlseconds`: `error selecting rows to delete: ttl select defaultdb.public.events: batch timestamp 1666883527.780656000,0 must be after replica GC threshold 1666883574.542825089,0`. CockroachDB now makes the `AS OF SYSTEM TIME` value relative to when each `SELECT` query is run (query time - 30s) to prevent this error from happening, but each `SELECT` query will run against a different table state. This should be ok because if records are missed during one job invocation they should still be picked up the next. [#90981][#90981]
- The `system.sql_instances` table now includes pre-allocated ID entries, where all the fields except `id` will be `NULL`. [#90427][#90427]
-- The `to_char(timestamp, string)` [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) has been added. [#91382][#91382]
-- The `to_char(interval, string)` built-in [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) has been added. [#91382][#91382]
+- The `to_char(timestamp, string)` [function]({% link v23.1/functions-and-operators.md %}) has been added. [#91382][#91382]
+- The `to_char(interval, string)` built-in [function]({% link v23.1/functions-and-operators.md %}) has been added. [#91382][#91382]
- The `system.table_statistics` table now contains a column called `partialPredicate` to store a predicate for a partial statistic collection. [#91248][#91248]
- A new `NumericStat`, `idleLat`, was introduced to the statistics column of `crdb_internal.statement_statistics`. This reports the time spent waiting for the client to send the statement while holding a transaction open. Developers may use this stat to identify opportunities for restructuring their apps to reduce contention. [#91098][#91098]
-- The set of supported compression algorithms in compress/decompress built-in [functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) is expanded to include `lz4`, `snappy`, and `zstd`. [#91162][#91162]
-- A new column `database` was added to `crdb_internal.{node,cluster}_queries` and list sessions [endpoint](https://www.cockroachlabs.com/docs/v23.1/cluster-api). [#91629][#91629]
+- The set of supported compression algorithms in compress/decompress built-in [functions]({% link v23.1/functions-and-operators.md %}) is expanded to include `lz4`, `snappy`, and `zstd`. [#91162][#91162]
+- A new column `database` was added to `crdb_internal.{node,cluster}_queries` and list sessions [endpoint]({% link v23.1/cluster-api.md %}). [#91629][#91629]
- Fixed a bug in the legacy schema changer where comments were not dropped together with the database. [#91689][#91689]
-- The `round(decimal`) built-in [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) no longer returns negative 0 for any input. [#86106][#86106]
-- Added an estimate for the number of request units consumed by a query to the output of [`EXPLAIN ANALYZE`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze) for tenant sessions. [#89256][#89256]
+- The `round(decimal`) built-in [function]({% link v23.1/functions-and-operators.md %}) no longer returns negative 0 for any input. [#86106][#86106]
+- Added an estimate for the number of request units consumed by a query to the output of [`EXPLAIN ANALYZE`]({% link v23.1/explain-analyze.md %}) for tenant sessions. [#89256][#89256]
- Enabled forward indexes on arrays. [#91762][#91762]
-- Users can now manually create partial single-column statistics at the extreme values on columns that are prefixes of their index. The output of [`SHOW STATISTICS`](https://www.cockroachlabs.com/docs/v23.1/show-statistics) now includes a column indicating the partial predicate for a partial statistic, or `NULL` for a full statistic. [#91228][#91228]
+- Users can now manually create partial single-column statistics at the extreme values on columns that are prefixes of their index. The output of [`SHOW STATISTICS`]({% link v23.1/show-statistics.md %}) now includes a column indicating the partial predicate for a partial statistic, or `NULL` for a full statistic. [#91228][#91228]
- A new SQL statement `SHOW COMMIT TIMESTAMP` has been added. This statement can be used to retrieve the commit timestamp of the current explicit transaction, current multi-statement implicit transaction, or previous transaction. The statement may be used in a variety of settings to maximize its utility in the face of connection pooling. When used as a part of an explicit transaction, the statement implicitly commits the transaction internally before being able to return a causality token. [#80848][#80848]
-- Added support for the `pg_blocking_pids` built-in [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators). It is hardcoded to return an empty array because CockroachDB has no equivalent concept of PIDs as in PostgreSQL. [#92253][#92253]
+- Added support for the `pg_blocking_pids` built-in [function]({% link v23.1/functions-and-operators.md %}). It is hardcoded to return an empty array because CockroachDB has no equivalent concept of PIDs as in PostgreSQL. [#92253][#92253]
- Added a list of indexes used by the query on the statistics column on the `system.statement_statistics` and `crdb_internal.statement_statistics` tables. The format is `tableID@indexID`. [#92351][#92351]
- Added a list of used indexes (with the format `tableID@indexID`) to the sampled query telemetry log. [#92464][#92464]
- A new `NumericStat`, `idleLat`, was introduced to the statistics column of `crdb_internal.transaction_statistics`. It reports the time spent waiting for the client to send statements while holding a transaction open. [#92695][#92695]
- Added an in-memory-only evaluation of `tsvector` and `tsquery` datatypes and the `@@` matches operator. [#90842][#90842]
-- Implemented the [`ALTER TABLE ... ADD CHECK`](https://www.cockroachlabs.com/docs/v23.1/alter-table) statement in the [declarative schema changer](https://www.cockroachlabs.com/docs/v23.1/online-schema-changes#declarative-schema-changer). [#91153][#91153]
+- Implemented the [`ALTER TABLE ... ADD CHECK`]({% link v23.1/alter-table.md %}) statement in the [declarative schema changer]({% link v23.1/online-schema-changes.md %}#declarative-schema-changer). [#91153][#91153]
- `to_char` now has caching for parse formats, marking a speedup when running `to_char` with the same format between sessions. [#91564][#91564]
- Casts from index name to `REGCLASS` are now supported. Previously, only table names could be cast to `REGCLASS`. [#90649][#90649]
- Added user-defined composite column types. [#90491][#90491]
- SQL queries running on remote nodes now show up in CPU profiles with `distsql.*` labels. Currently this includes `appname`, `gateway`, `txn`, and stmt. [#92775][#92775]
- CockroachDB now permits non-indexed storage of `tsvector` and `tsquery` datatypes [#92957][#92957]
-- Implemented the `parse_ident` built-in [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators), which splits a qualified identifier into an array of identifiers, removing any quoting of individual identifiers. By default, extra characters after the last identifier are considered an error; but if the second parameter is `false`, then such extra characters are ignored. [#93300][#93300]
+- Implemented the `parse_ident` built-in [function]({% link v23.1/functions-and-operators.md %}), which splits a qualified identifier into an array of identifiers, removing any quoting of individual identifiers. By default, extra characters after the last identifier are considered an error; but if the second parameter is `false`, then such extra characters are ignored. [#93300][#93300]
Operational changes
@@ -108,10 +108,10 @@ Release Date: December 19, 2022
- The consistency check failure message is now more informative, and suggests a few actions that operators should perform in the unlikely event a failure occurs. [#89899][#89899]
- Updated metric descriptions of `rebalancing.*` to include the recording period. [#90619][#90619]
- CockroachDB now prioritizes non-voters in voter additions, meaning that when selecting a store to add a voter on (in the allocator), CockroachDB will prioritize candidate stores that contain a non-voter replica higher. This reduces the number of snapshots that need to be sent over the WAN. [#89650][#89650]
-- CockroachDB now uses response data rather than just the request span in the [load-based splitter](https://www.cockroachlabs.com/docs/v23.1/load-based-splitting) to pass more accurate data about the keys iterated over to the load splitter to find a suitable split key, enabling the load splitter to find a split key under heavy range query workloads. [#89217][#89217]
+- CockroachDB now uses response data rather than just the request span in the [load-based splitter]({% link v23.1/load-based-splitting.md %}) to pass more accurate data about the keys iterated over to the load splitter to find a suitable split key, enabling the load splitter to find a split key under heavy range query workloads. [#89217][#89217]
- Added the `replicas.leaders_invalid_lease` metric, which indicates how many replicas are Raft group leaders but holding invalid leases. [#91179][#91179]
-- The [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.web_session.purge.period` and `server.web_session.purge.max_deletions_per_cycle`, which were specific to the cleanup function for `system.web_sessions`, have been replaced by `server.log_gc.period` and `server.log_gc.max_deletions_per_cycle` which apply to the cleanup function for `system.eventlog`, `system.rangelog` and `system.web_sessions` equally. [#90789][#90789]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.web_session.auto_logout.timeout` has been removed. [#90789][#90789]
+- The [cluster settings]({% link v23.1/cluster-settings.md %}) `server.web_session.purge.period` and `server.web_session.purge.max_deletions_per_cycle`, which were specific to the cleanup function for `system.web_sessions`, have been replaced by `server.log_gc.period` and `server.log_gc.max_deletions_per_cycle` which apply to the cleanup function for `system.eventlog`, `system.rangelog` and `system.web_sessions` equally. [#90789][#90789]
+- The [cluster setting]({% link v23.1/cluster-settings.md %}) `server.web_session.auto_logout.timeout` has been removed. [#90789][#90789]
- Splunk dashboard templates are available in the public repository under `/monitoring/splunk-dashboard/`. [#92330][#92330]
- The network timeout for RPC connections between cluster nodes has been reduced from 3 seconds to 2 seconds, with a connection timeout of 4 seconds, in order to reduce unavailability and tail latencies during infrastructure outages. This can now be changed by setting the `COCKROACH_NETWORK_TIMEOUT` environment variable, which defaults to `2s`. [#92542][#92542]
- The Raft election timeout has been reduced from 3 seconds to 2 seconds, and the lease interval from 9 seconds to 6 seconds, with a corresponding reduction in the node heartbeat interval from 4.5 seconds to 3 seconds. This reduces the period of unavailability following leaseholder loss, but places tighter restrictions on network latencies (no more than 500ms roundtrip time). This can be adjusted by setting the `COCKROACH_RAFT_ELECTION_TIMEOUT_TICKS` environment variable, which now defaults to 10 and will scale all of these intervals proportionally. [#91947][#91947]
@@ -119,16 +119,16 @@ Release Date: December 19, 2022
Command-line changes
-- The interactive [SQL shell](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) now retains a maximum of 1000 entries. There was no limit previously. [#88173][#88173]
+- The interactive [SQL shell]({% link v23.1/cockroach-sql.md %}) now retains a maximum of 1000 entries. There was no limit previously. [#88173][#88173]
- The deprecated CLI command `debug unsafe-remove-dead-replicas` has been removed. Use `debug recover` instead. [#89150][#89150]
-- The `\df` metacommand was added to the [SQL shell](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql), which will list all [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) in the current database. [#89557][#89557]
-- In the [`kv` workload](https://www.cockroachlabs.com/docs/v23.1/cockroach-workload#kv-workload), you can now enable `--splits` with the `--sequential` flag and adjust splitting to uniformly partition the keyspace. [#90000][#90000]
-- Added the `--insert-count` flag to insert rows before the [`kv` workload](https://www.cockroachlabs.com/docs/v23.1/cockroach-workload#kv-workload) begins. [#90055][#90055]
+- The `\df` metacommand was added to the [SQL shell]({% link v23.1/cockroach-sql.md %}), which will list all [user-defined functions]({% link v23.1/user-defined-functions.md %}) in the current database. [#89557][#89557]
+- In the [`kv` workload]({% link v23.1/cockroach-workload.md %}#kv-workload), you can now enable `--splits` with the `--sequential` flag and adjust splitting to uniformly partition the keyspace. [#90000][#90000]
+- Added the `--insert-count` flag to insert rows before the [`kv` workload]({% link v23.1/cockroach-workload.md %}#kv-workload) begins. [#90055][#90055]
- CockroachDB will now include recommended remediation actions alongside log messages for some errors. [#82891][#82891]
- The input syntax of `\set` is now more flexible: it is now more accepting of space characters in various positions of the syntax and it supports quoted values, e.g., via `\set prompt1 "a b c"`. [#90520][#90520]
-- [`cockroach demo --global`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) will now start up more quickly. The latency that will be injected will not be injected until after the initial cluster is set up internally. [#92231][#92231]
-- The engine used as line editor in the interactive shell ([`cockroach sql`](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) and [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo)) has been updated. It includes numerous bug fixes and new features. The previous engine can still be accessed by setting the `COCKROACH_SQL_FORCE_LIBEDIT` environment variable to true. This support will be removed in a later version. [#86457][#86457]
-- The interactive [SQL shell](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) now supports an advanced debug mode for troubleshooting when `--debug-sql-cli` is specified on the command line. The debug mode can be enabled with Ctrl+@ or Ctrl+_ (Ctrl+space on macOS). [#86457][#86457]
+- [`cockroach demo --global`]({% link v23.1/cockroach-demo.md %}) will now start up more quickly. The latency that will be injected will not be injected until after the initial cluster is set up internally. [#92231][#92231]
+- The engine used as line editor in the interactive shell ([`cockroach sql`]({% link v23.1/cockroach-sql.md %}) and [`cockroach demo`]({% link v23.1/cockroach-demo.md %})) has been updated. It includes numerous bug fixes and new features. The previous engine can still be accessed by setting the `COCKROACH_SQL_FORCE_LIBEDIT` environment variable to true. This support will be removed in a later version. [#86457][#86457]
+- The interactive [SQL shell]({% link v23.1/cockroach-sql.md %}) now supports an advanced debug mode for troubleshooting when `--debug-sql-cli` is specified on the command line. The debug mode can be enabled with Ctrl+@ or Ctrl+_ (Ctrl+space on macOS). [#86457][#86457]
- The following fields have been redacted and were added to the redacted debug zip:
- `crdb_internal.create_statements`:
- `create_statement`
@@ -144,21 +144,21 @@ Release Date: December 19, 2022
- `crdb_internal.{cluster,node}_queries`:
- `query` [#92263][#92263]
-- The interactive [SQL shell](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) now supports a rudimentary form of tab completion to input the name of SQL objects and functions. [#87606][#87606]
-- The command-line flag `--empty` to [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) is not marked as deprecated anymore; it is more convenient than `--no-example-database`. However, the latter remains supported as an alias. [#93255][#93255]
+- The interactive [SQL shell]({% link v23.1/cockroach-sql.md %}) now supports a rudimentary form of tab completion to input the name of SQL objects and functions. [#87606][#87606]
+- The command-line flag `--empty` to [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) is not marked as deprecated anymore; it is more convenient than `--no-example-database`. However, the latter remains supported as an alias. [#93255][#93255]
- The command-line flags `--logtostderr`, `--log-file-verbosity`, `--no-color`, `--redactable-logs`, `--log-file-max-size`, `--log-group-max-size`, `--log-dir`, `--sql-audit-dir` are not marked as deprecated anymore; instead, they are defined as convenience aliases for various `--log` specifications. [#93255][#93255]
-- [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) now supports `--pid-file` for symmetry with [`cockroach start`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start). [#93343][#93343]
+- [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) now supports `--pid-file` for symmetry with [`cockroach start`]({% link v23.1/cockroach-start.md %}). [#93343][#93343]
- The debug utility script `hot-ranges.sh` partitions output by statistics: `queries_per_second`, `writes_per_second`, `read_bytes_per_second`, `write_bytes_per_second`. It also decreased the number of ranges shown under each heading from 20 to 10. [#93528][#93528]
DB Console changes
-- The High Contention Time insight description now accurately reflects the event's contention duration in the [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview). [#89035][#89035]
+- The High Contention Time insight description now accurately reflects the event's contention duration in the [DB Console]({% link v23.1/ui-overview.md %}). [#89035][#89035]
- **Overview** and **Explain Plan** tabs were added to the **Active Statement Details** page. [#89021][#89021]
-- The **Apply** button was added on the **Table Details** page ([DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) only) when there is a recommendation to drop an unused index. [#90070][#90070]
+- The **Apply** button was added on the **Table Details** page ([DB Console]({% link v23.1/ui-overview.md %}) only) when there is a recommendation to drop an unused index. [#90070][#90070]
- **Overview** and **Explain Plan** tabs were added to the **Statement Insight Details** page. [#90250][#90250]
-- The [Jobs Page](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page) now includes a column picker. [#89678][#89678]
-- The fingerprint ID values for statements and transactions on the [Insights](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) pages are links that open the respective details page on the time period of the execution of that statement or transaction. [#90403][#90403]
-- Requests to fetch table and database statistics now have limited concurrency. This may make loading the [Databases](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page) page slower, but in return should result in making those pages less disruptive. [#90210][#90210]
+- The [Jobs Page]({% link v23.1/ui-jobs-page.md %}) now includes a column picker. [#89678][#89678]
+- The fingerprint ID values for statements and transactions on the [Insights]({% link v23.1/ui-insights-page.md %}) pages are links that open the respective details page on the time period of the execution of that statement or transaction. [#90403][#90403]
+- Requests to fetch table and database statistics now have limited concurrency. This may make loading the [Databases]({% link v23.1/ui-databases-page.md %}) page slower, but in return should result in making those pages less disruptive. [#90210][#90210]
- The **Transaction** filter label on the **SQL Activity** page was fixed. [#91255][#91255]
- The metric graph tooltip styling was fixed to prevent content collapse. [#91290][#91290]
- Index recommendations were added to the **Statement Active Execution Details** page, and the plan gist was added as the first line of the explain plan. [#91629][#91629]
@@ -169,7 +169,7 @@ Release Date: December 19, 2022
- Graphs on the **Metrics** page now downsample using max value instead of average. Previously, zooming out on a graph would cause any spikes in the graph to smooth out, potentially hiding anomalies. These anomalies are now visible even when looking at a zoomed out interval. [#92017][#92017]
- The **Statement Execution** and **Planning Time** chart on the **Statement Fingerprint** page now includes a third value ("Idle") representing the time spent by the application waiting to execute this statement while holding a transaction open. [#92284][#92284]
- A list of used index per explain plan was added, under the **Explain Plan** tab on the **Statement Details** page, with links to the table or index details pages. [#92463][#92463]
-- The [Insights](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) pages in the [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) now show the seconds and milliseconds for all timestamp values. [#92571][#92571]
+- The [Insights]({% link v23.1/ui-insights-page.md %}) pages in the [DB Console]({% link v23.1/ui-overview.md %}) now show the seconds and milliseconds for all timestamp values. [#92571][#92571]
- Links were added on the fingerprint ID in the **High Contention** table on the **Transaction Insights Details** page. [#92612][#92612]
- The following new charts were added to the Metrics page, under SQL view: **Service Latency: SQL Statements, 99.9th percentile** and **Service Latency: SQL Statements, 99.99th percentile**. [#92591][#92591]
- Renamed the chart on the **Statement Details** page from **Statement Execution and Planning Time** to **Statement Times**. [#92765][#92765]
@@ -264,24 +264,24 @@ Release Date: December 19, 2022
Performance improvements
-- The [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) will now plan [inverted index](https://www.cockroachlabs.com/docs/v23.1/inverted-indexes) scans for queries with JSON subscripting filters, like `json_col['field'] = '"value"`. [#87957][#87957]
+- The [optimizer]({% link v23.1/cost-based-optimizer.md %}) will now plan [inverted index]({% link v23.1/inverted-indexes.md %}) scans for queries with JSON subscripting filters, like `json_col['field'] = '"value"`. [#87957][#87957]
- CockroachDB now avoids wasteful contention on the gossip mutex caused by checking if the network needs tightening hundreds of times per second. [#88472][#88472]
- Some types of queries with comparisons with constant values now execute faster. [#88638][#88638]
-- The [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) now explores plans with a single [lookup join](https://www.cockroachlabs.com/docs/v23.1/joins#lookup-joins) expressions in rare cases where it previously planned two lookup join expressions. [#88491][#88491]
+- The [optimizer]({% link v23.1/cost-based-optimizer.md %}) now explores plans with a single [lookup join]({% link v23.1/joins.md %}#lookup-joins) expressions in rare cases where it previously planned two lookup join expressions. [#88491][#88491]
- Consistency checks are now properly cancelled on timeout, preventing them from piling up. [#86591][#86591]
- Raft ticks now adapt to scheduling delays. This helps preventing re-elections, and the corresponding performance effects, in the event of relatively short (sub-second) processing delays. [#86240][#86240]
- HTTP requests with `Accept-encoding: gzip` previously resulted in valid GZIP-encoded, but uncompressed, responses. This resulted in inefficient HTTP transfer times, as far more bytes were transferred than necessary. Those responses are now properly compressed, resulting in smaller network responses. [#88950][#88950]
- `pg_catalog.col_description` is now much faster when resolving columns for tables in the `pg_catalog`, `crdb_internal`, or `information_schema` namespaces. [#89465][#89465]
-- The [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) now does less copying of histograms while planning queries, which will reduce memory pressure a little. [#88526][#88526]
+- The [optimizer]({% link v23.1/cost-based-optimizer.md %}) now does less copying of histograms while planning queries, which will reduce memory pressure a little. [#88526][#88526]
- Added early inlining of `VALUES` clauses and unnested arrays in `WITH` queries in order to eliminate unnecessary joins. [#87790][#87790]
-- Added significantly faster JSON parsing, which should help with any workloads that insert large amounts of JSON data, including [`IMPORT`](https://www.cockroachlabs.com/docs/v23.1/import) workloads. [#89884][#89884]
+- Added significantly faster JSON parsing, which should help with any workloads that insert large amounts of JSON data, including [`IMPORT`]({% link v23.1/import.md %}) workloads. [#89884][#89884]
- Loading the **Database Details** page in the DB Console is now somewhat less expensive when there are a large number of databases and a large number of tables in each database and a large number of ranges in the cluster. [#90198][#90198]
- Tables in `pg_catalog` and `information_schema` (when not explicitly referenced as `"".information_schema`) may now be much faster if the current database has a small number of relations relative to the total number in the cluster. [#90116][#90116]
-- The overhead of running [`EXPLAIN ANALYZE`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze) and `EXPLAIN ANALYZE (DISTSQL)` has been significantly reduced. The overhead of `EXPLAIN ANALYZE (DEBUG)` did not change. [#91117][#91117]
-- Enabled more efficient [lookup joins](https://www.cockroachlabs.com/docs/v23.1/joins#lookup-joins) by deriving new join constraints when equijoin predicates exist on the column(s) of a unique constraint on one table which are a proper subset of the referencing columns of a foreign key constraint on the other table. If an index exists on those foreign key constraint referencing columns, equijoin predicates are derived between the primary key and foreign key columns not currently bound by `ON` clause predicates. [#90599][#90599]
+- The overhead of running [`EXPLAIN ANALYZE`]({% link v23.1/explain-analyze.md %}) and `EXPLAIN ANALYZE (DISTSQL)` has been significantly reduced. The overhead of `EXPLAIN ANALYZE (DEBUG)` did not change. [#91117][#91117]
+- Enabled more efficient [lookup joins]({% link v23.1/joins.md %}#lookup-joins) by deriving new join constraints when equijoin predicates exist on the column(s) of a unique constraint on one table which are a proper subset of the referencing columns of a foreign key constraint on the other table. If an index exists on those foreign key constraint referencing columns, equijoin predicates are derived between the primary key and foreign key columns not currently bound by `ON` clause predicates. [#90599][#90599]
- The setup of the distributed query execution is now fully parallelized which should reduce the query latencies, especially in multi-region setups. [#89649][#89649]
- Performance of the `LIKE` and `ILIKE` operators using patterns without any wildcards has been improved. [#91895][#91895]
-- The [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) can now better calculate the properties of recursive [common table expressions](https://www.cockroachlabs.com/docs/v23.1/common-table-expressions) in the presence of a `LIMIT`. [#90725][#90725]
+- The [optimizer]({% link v23.1/cost-based-optimizer.md %}) can now better calculate the properties of recursive [common table expressions]({% link v23.1/common-table-expressions.md %}) in the presence of a `LIMIT`. [#90725][#90725]
- Certain types of reads will now have a far smaller contention footprint with conflicting concurrent writers. [#85993][#85993]
- In some cases, the key-value store client now needs to look up where to send requests. Prior to this change, such lookup requests were always routed to the leaseholder of the metadata range storing that information. Now the client can attempt to look up this metadata from followers. This can improve tail latency in multi-region clusters in cases where the range addressing cache is cold. [#91638][#91638]
- The garbage collection score triggering a MVCC GC run has been lowered. The GC Score is a ratio computed from MVCC stats and uses the ratio of live objects and estimated garbage age to estimate collectability of existing data. The reduced score will trigger garbage collection earlier, lowering the interval between runs 3 times, giving 2 times reduced peak garbage usage at the expense of 30% increase of wasteful data scanning on constantly updated data. [#92118][#92118]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.2.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.2.md
index 04c3ec774d9..afbb2cd6ab7 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.2.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.2.md
@@ -8,7 +8,7 @@ Release Date: February 13, 2022
- CockroachDB now supports sharing storage ranges across multiple indexes/tables. As a result, there is no longer a guarantee that there is at most one SQL object (e.g., table/index/sequence/materialized view) per storage range. Therefore, the columns `table_id`, `database_name`, `schema_name`, `table_name` and `index_name` in `crdb_internal.ranges` and `.ranges_no_leases` have become nonsensical: a range cannot be attributed to a single table/index anymore. As a result:
- - The aforementioned columns in the `crdb_internal` virtual tables have been removed. Existing code can use the [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) statement instead, optionally using `WITH KEYS` to expose the raw start/end keys.
+ - The aforementioned columns in the `crdb_internal` virtual tables have been removed. Existing code can use the [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) statement instead, optionally using `WITH KEYS` to expose the raw start/end keys.
- `SHOW RANGES FROM DATABASE` continues to report one row per range, but stops returning the database / schema / table / index name.
- `SHOW RANGES FROM TABLE` continues to report one row per range, but stops returning the index name. Suggested replacements:
- Instead of: `SELECT range_id FROM crdb_internal.ranges WHERE table_name = 'x'`, use: `SELECT range_id FROM [SHOW RANGES FROM TABLE x]`
@@ -17,7 +17,7 @@ Release Date: February 13, 2022
- Instead of `SELECT start_key FROM crdb_internal.ranges WHERE table_name = $1 OR table_id = $2` (unpredictable / variable table name or ID), use: `SELECT raw_start_key FROM [SHOW RANGES FROM CURRENT_CATALOG WITH TABLES, KEYS] WHERE table_name = $1 OR table_id = $2` [#93644][#93644]
- The format of the columns `start_key` and `end_key` for `SHOW RANGES FROM DATABASE` and `SHOW RANGES FROM TABLE` have been extended to include which table/index the key belongs to. This is necessary because a range can now contain data from more than one table/index. [#93644][#93644]
- The format of the columns `start_key` and `end_key` for `SHOW RANGE ... FOR ROW` has been changed to be consistent with the output of `SHOW RANGES FROM INDEX`. [#93644][#93644]
-- The output of [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) no longer includes `range_size`, `range_size_mb`, `lease_holder`, or `lease_holder_localities` by default. This ensures that `SHOW RANGES` remains fast in the common case. Use the new option `WITH DETAILS` to include these columns. [#93644][#93644]
+- The output of [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) no longer includes `range_size`, `range_size_mb`, `lease_holder`, or `lease_holder_localities` by default. This ensures that `SHOW RANGES` remains fast in the common case. Use the new option `WITH DETAILS` to include these columns. [#93644][#93644]
- Changefeeds using "preview" expressions (released in v22.2.0) and that access the previous state of the row using the `cdc_prev()` function will no longer work and will need to be recreated with new syntax. [#94429][#94429]
- Fixed a bug where, when `server.identity_map.configuration` was used, CockroachDB did not verify the client-provided username against the target mappings. Note that **this means that the client must now provide a valid DB username.** This requirement is compatible with PostgreSQL; it was not previously required by CockroachDB but it is now. This does not apply when identity maps are not in use. [#94915][#94915]
- Previously, the type of the `replicas`, `voting_replicas`,`non_voting_replicas` and `learner_replicas` in `crdb_internal.ranges` were overridden to `INT2VECTOR` causing incompatible indexing between `.ranges` and `.ranges_no_leases`. Now the types of those columns in the two tables are set to `INT[]`. [#96287][#96287]
@@ -25,11 +25,11 @@ Release Date: February 13, 2022
Security updates
- Added an option to re-enable "old" cipher suites for use with very old clients. Fixes [issue #1989](https://github.com/cockroachlabs/support/issues/1989). [#95091][#95091]
-- Previously, the `ENCRYPTION_PASSPHRASE` option passed to [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) would appear as 'redacted'. It now appears as '******' which is consistent with [`SHOW BACKUP`](https://www.cockroachlabs.com/docs/v23.1/show-backup) and [`BACKUP`](https://www.cockroachlabs.com/docs/v23.1/backup). [#95562][#95562]
+- Previously, the `ENCRYPTION_PASSPHRASE` option passed to [`RESTORE`]({% link v23.1/restore.md %}) would appear as 'redacted'. It now appears as '******' which is consistent with [`SHOW BACKUP`]({% link v23.1/show-backup.md %}) and [`BACKUP`]({% link v23.1/backup.md %}). [#95562][#95562]
General changes
-The [garbage collection TTL](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#replication-zone-variables) previously defaulted to `25h`. This value was configurable using `ALTER RANGE DEFAULT CONFIGURE ZONE USING gc.ttlseconds = `, but it was also possible to scope to specific schema objects using `ALTER {DATABASE,TABLE,INDEX} CONFIGURE ZONE USING ...`. The GC TTL value determined how long overwritten values were retained before being garbage collected.
+The [garbage collection TTL]({% link v23.1/configure-replication-zones.md %}#replication-zone-variables) previously defaulted to `25h`. This value was configurable using `ALTER RANGE DEFAULT CONFIGURE ZONE USING gc.ttlseconds = `, but it was also possible to scope to specific schema objects using `ALTER {DATABASE,TABLE,INDEX} CONFIGURE ZONE USING ...`. The GC TTL value determined how long overwritten values were retained before being garbage collected.
With CockroachDB v23.1, the `RANGE DEFAULT` value is lowered to `4h` but only for freshly created clusters. When existing clusters upgrade to this release, CockroachDB will respect whatever value was in use before the upgrade for all schema objects. This value will therefore be `25h` if the GC TTL was never altered, or some specific value if the GC TTL had been set explicitly. Full cluster backups taken on earlier version clusters, when restored to clusters that started off at v23.1, will use the GC TTL recorded in the backup image.
@@ -39,30 +39,30 @@ We chose a default of `25h` originally to accommodate daily incremental backups
-- The `changefeed.active_protected_timestamps.enabled` [[cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings)](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) has been removed and is now always treated as if it was `true`. [#89975][#89975]
-- Improved [changefeed expressions](https://www.cockroachlabs.com/docs/v23.1/cdc-queries) logic to rely on the optimizer to evaluate star expansion. [#93979][#93979]
+- The `changefeed.active_protected_timestamps.enabled` [[cluster setting]({% link v23.1/cluster-settings.md %})]({% link v23.1/cluster-settings.md %}) has been removed and is now always treated as if it was `true`. [#89975][#89975]
+- Improved [changefeed expressions]({% link v23.1/cdc-queries.md %}) logic to rely on the optimizer to evaluate star expansion. [#93979][#93979]
- Changefeed expressions now support system columns. [#93979][#93979]
- Changefeed expressions now have access to the `cdc_prev` tuple which contains the previous state of the row. [#94429][#94429]
- Changefeed expressions now support non-volatile user defined functions (UDFs). [#94429][#94429]
- Changefeed transformations (e.g., `CREATE CHANGEFEED ... AS SELECT ...`) no longer require the `schema_change_policy=stop` option. [#94653][#94653]
- Changefeed transformations introduced in the v22.2 release in preview mode are no longer experimental. This feature can now be considered to be fully production-ready. [#94806][#94806]
-- The [`CREATE EXTERNAL CONNECTION`](https://www.cockroachlabs.com/docs/v23.1/create-external-connection) statement now supports URIs with the prefixes `azure`, `gs`, `gcpubsub`, `http`, `https`, `webhook-https`, `nodelocal`, `s3`, and `kafka` for use by changefeeds. [#86061][#86061]
-- The `CONTROLCHANGEFEED` [role option](https://www.cockroachlabs.com/docs/v23.1/alter-role#role-options) will be deprecated in the future (see issue [#94757](https://github.com/cockroachdb/cockroach/issues/94757)). With this change, usages of the `CONTROLCHANGEFEED` role option will come with a deprecation warning. Its existing behavior remains the same. The `SELECT` and `CHANGEFEED` privileges will be used for changefeeds henceforth:
+- The [`CREATE EXTERNAL CONNECTION`]({% link v23.1/create-external-connection.md %}) statement now supports URIs with the prefixes `azure`, `gs`, `gcpubsub`, `http`, `https`, `webhook-https`, `nodelocal`, `s3`, and `kafka` for use by changefeeds. [#86061][#86061]
+- The `CONTROLCHANGEFEED` [role option]({% link v23.1/alter-role.md %}#role-options) will be deprecated in the future (see issue [#94757](https://github.com/cockroachdb/cockroach/issues/94757)). With this change, usages of the `CONTROLCHANGEFEED` role option will come with a deprecation warning. Its existing behavior remains the same. The `SELECT` and `CHANGEFEED` privileges will be used for changefeeds henceforth:
- The `SELECT` privilege on a set of tables allows a user to run core changefeeds against them.
- The `CHANGEFEED` privilege on a set of tables allows a user to run enterprise changefeeds on them, and also manage the underlying changefeed job (ie. view, pause, cancel, and resume the job).
- Notably, a new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `changefeed.permissions.require_external_connection_sink.enabled` is added and set to `false` by default. Enabling this setting restricts users with `CHANGEFEED` on a set of tables to create enterprise changefeeds into external connections only. To use a given external connection, a user typically needs the `USAGE` privilege on it. Note that `ALTER DEFAULT PRIVILEGES` can be used with both the `CHANGEFEED` and `SELECT` privileges to assign coarse-grained permissions (i.e., assign permissions to all tables in a schema rather than manually assign them for each table). [#94796][#94796]
+ Notably, a new [cluster setting]({% link v23.1/cluster-settings.md %}) `changefeed.permissions.require_external_connection_sink.enabled` is added and set to `false` by default. Enabling this setting restricts users with `CHANGEFEED` on a set of tables to create enterprise changefeeds into external connections only. To use a given external connection, a user typically needs the `USAGE` privilege on it. Note that `ALTER DEFAULT PRIVILEGES` can be used with both the `CHANGEFEED` and `SELECT` privileges to assign coarse-grained permissions (i.e., assign permissions to all tables in a schema rather than manually assign them for each table). [#94796][#94796]
- Changefeeds created/altered with a `metrics_label` set while `server.child_metrics.enabled` is set to `false` will now provide the user a notice upon creation. [#94948][#94948]
-- Fix a bug in [`ALTER CHANGEFEED`](https://www.cockroachlabs.com/docs/v23.1/alter-changefeed) that would panic when altering changefeeds to remove a table that has already been dropped. [#95739][#95739]
+- Fix a bug in [`ALTER CHANGEFEED`]({% link v23.1/alter-changefeed.md %}) that would panic when altering changefeeds to remove a table that has already been dropped. [#95739][#95739]
- Reduced the default size of scan RPC replies to improve cluster stability during changefeed accounting for transient memory. [#95798][#95798]
- Changefeed expressions now support the `changefeed_created_timestamp` function. [#95179][#95179]
-- Increased the default `changefeed.memory.per_changefeed_limit` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to `1/2GiB`. This should result in changefeeds being able to produce larger files. [#96340][#96340]
+- Increased the default `changefeed.memory.per_changefeed_limit` [cluster setting]({% link v23.1/cluster-settings.md %}) to `1/2GiB`. This should result in changefeeds being able to produce larger files. [#96340][#96340]
- The `confluent_schema_registry` URI for avro changefeeds now supports `client_cert` and `client_key` parameters. [#96510][#96510]
SQL language changes
-- Added the `pg_get_function_arguments` [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators). This returns the argument list (with defaults) necessary to identify the function with a given OID. [#93675][#93675]
+- Added the `pg_get_function_arguments` [built-in function]({% link v23.1/functions-and-operators.md %}). This returns the argument list (with defaults) necessary to identify the function with a given OID. [#93675][#93675]
- Added `voting_replicas` and `non_voting_replicas` columns to the output of `SHOW RANGE` and `SHOW RANGES` statements. [#93513][#93513]
-- It is now possible to create and alter [`NOT VISIBLE`](https://www.cockroachlabs.com/docs/v23.1/create-table#not-visible-property) indexes using the alias `INVISIBLE`. The alias can be used anywhere `NOT VISIBLE` is used when creating or altering indexes. NOTE: the `INVISIBLE` alias is **not supported** for `NOT VISIBLE` columns. [#93750][#93750]
+- It is now possible to create and alter [`NOT VISIBLE`]({% link v23.1/create-table.md %}#not-visible-property) indexes using the alias `INVISIBLE`. The alias can be used anywhere `NOT VISIBLE` is used when creating or altering indexes. NOTE: the `INVISIBLE` alias is **not supported** for `NOT VISIBLE` columns. [#93750][#93750]
- The `system.table_statistics` table now contains a column called `fullStatisticsID` to store an id referencing the full table statistic the partial statistic was derived from. [#93751][#93751]
- Ordinal column references (e.g., `SELECT @1, @2 FROM t`) are now deprecated. By default, statements using this syntax will now result in an error. If desired, such statements can be allowed using the session setting `SET allow_ordinal_column_references=true`. Support for ordinal column references is scheduled to be removed in upcoming version v23.2. [#93754][#93754]
- The optimizer will now use table statistics that are merged combinations of the newest partial statistic and latest full statistic collection. And, if forecasting is enabled, the merged statistic will be used in the forecast. [#91933][#91933]
@@ -80,40 +80,40 @@ We chose a default of `25h` originally to accommodate daily incremental backups
- `WITH EXPLAIN`: produces the text of the SQL query used to run the statement. [#93644][#93644]
- Implemented the `pg_timezone_names` `pg_catalog` table, which lists all supported timezones. [#94122][#94122]
- Improved the performance of trigram operations. [#93757][#93757]
-- Previously, CockroachDB would crash if a user creates a [user-defined function (UDF)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) whose function signature includes a implicit record type (essentially a table) which has a column using a user defined enum type. The root cause was a hydration deadloop when looking up descriptors during hydration. This fix adds a new flag to avoid hydration in order to avoid the deadloop. [#94106][#94106]
+- Previously, CockroachDB would crash if a user creates a [user-defined function (UDF)]({% link v23.1/user-defined-functions.md %}) whose function signature includes a implicit record type (essentially a table) which has a column using a user defined enum type. The root cause was a hydration deadloop when looking up descriptors during hydration. This fix adds a new flag to avoid hydration in order to avoid the deadloop. [#94106][#94106]
- Previously, error messages for missing users sometimes had different forms. This is now unified in the form `role/user "user" does not exist`. [#94677][#94677]
-- [User-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) with subqueries in the body of the function are now supported. [#94962][#94962]
+- [User-defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}) with subqueries in the body of the function are now supported. [#94962][#94962]
- Previously, setting a table's locality was not allowed if the table contained any hash sharded index. This restriction is now removed. [#94436][#94436]
- Users can now add a super region when creating a database. [#93939][#93939]
-- [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) now logs an error during the insert phase on the `SQL_EXEC` logging channel. [#95038][#95038]
-- Added a new `REDACT` flag to [`EXPLAIN`](https://www.cockroachlabs.com/docs/v23.1/explain) which causes constants, literal values, parameter values, and any other user data to be redacted in explain output. Redacted statement diagnostics bundles can now be collected with [`EXPLAIN ANALYZE (DEBUG, REDACT)`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze). [#94950][#94950]
+- [`COPY`]({% link v23.1/copy-from.md %}) now logs an error during the insert phase on the `SQL_EXEC` logging channel. [#95038][#95038]
+- Added a new `REDACT` flag to [`EXPLAIN`]({% link v23.1/explain.md %}) which causes constants, literal values, parameter values, and any other user data to be redacted in explain output. Redacted statement diagnostics bundles can now be collected with [`EXPLAIN ANALYZE (DEBUG, REDACT)`]({% link v23.1/explain-analyze.md %}). [#94950][#94950]
- Added two new virtual tables displaying execution insights for transactions:
- `crdb_internal.cluster_txn_execution_insights`
- `crdb_internal.node_txn_execution_insights` [#94720][#94720]
- Some queries which previously resulted in the error "could not decorrelate subquery" now succeed. [#95234][#95234]
-- If `copy_from_retries_enabled` is set, [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) is now able to retry certain safe circumstances: namely when `copy_from_atomic_enabled` is `false`, there is no transaction running `COPY` and the error returned is retriable. This prevents users who keep running into `TransactionProtoWithRefreshError` from having issues. [#95275][#95275]
+- If `copy_from_retries_enabled` is set, [`COPY`]({% link v23.1/copy-from.md %}) is now able to retry certain safe circumstances: namely when `copy_from_atomic_enabled` is `false`, there is no transaction running `COPY` and the error returned is retriable. This prevents users who keep running into `TransactionProtoWithRefreshError` from having issues. [#95275][#95275]
- Fixed the databases list API when the database name has special characters. [#95209][#95209]
- The pgwire protocol implementation can now accept arguments of the `JSON[]` type (oid=199). Previously, it could only accept `JSONB[]` (oid=3804). Internally, `JSON[]` and `JSONB[]` values are still identical, so this change only affects how the values are received over the wire protocol. [#94705][#94705]
-- CPU time spent during SQL execution is now visible in the output of queries run with [`EXPLAIN ANALYZE`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze). This measure does not include CPU time spent while serving KV requests, and CPU time is not shown for queries that perform mutations or for plans that aren't vectorized. This can be useful for diagnosing performance issues and optimizing SQL queries. [#93952][#93952]
-- The [`SHOW GRANTS ON EXTERNAL CONNECTION`](https://www.cockroachlabs.com/docs/v23.1/show-grants) and [`SHOW SYSTEM GRANTS`](https://www.cockroachlabs.com/docs/v23.1/show-system-grants) statements now use a column name of `privilege_type` rather than `privilege`. For external connections, the `name` column has been changed to `connection_name`. This makes the commands consistent with other `SHOW GRANTS` commands. [#95532][#95532]
-- The [`SHOW INDEXES`](https://www.cockroachlabs.com/docs/v23.1/show-index) statement will now show the expression used to define an index, if one was used. [#95413][#95413]
+- CPU time spent during SQL execution is now visible in the output of queries run with [`EXPLAIN ANALYZE`]({% link v23.1/explain-analyze.md %}). This measure does not include CPU time spent while serving KV requests, and CPU time is not shown for queries that perform mutations or for plans that aren't vectorized. This can be useful for diagnosing performance issues and optimizing SQL queries. [#93952][#93952]
+- The [`SHOW GRANTS ON EXTERNAL CONNECTION`]({% link v23.1/show-grants.md %}) and [`SHOW SYSTEM GRANTS`]({% link v23.1/show-system-grants.md %}) statements now use a column name of `privilege_type` rather than `privilege`. For external connections, the `name` column has been changed to `connection_name`. This makes the commands consistent with other `SHOW GRANTS` commands. [#95532][#95532]
+- The [`SHOW INDEXES`]({% link v23.1/show-index.md %}) statement will now show the expression used to define an index, if one was used. [#95413][#95413]
- It is now possible to run efficient `tsvector @@ tsquery` searches when there is an inverted index on the `tsvector` column being searched. [#93769][#93769]
- Added a `cpuNanos` field to the statistics column of the `crdb_internal.statement_statistics` and `system.statement_statistics` tables that reports the amount of CPU time in nanoseconds during SQL execution for queries that track CPU time. [#95639][#95639]
-- Previously, [`SHOW BACKUP`](https://www.cockroachlabs.com/docs/v23.1/show-backup) options would get parsed as `kv_options`, which meant that a user could not pass multiple values to a `SHOW BACKUP` option, causing feature gaps in `SHOW BACKUP` relative to [`BACKUP`](https://www.cockroachlabs.com/docs/v23.1/backup) and [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore). This patch rewrites the show backup option parser, closing the following feature gaps:
+- Previously, [`SHOW BACKUP`]({% link v23.1/show-backup.md %}) options would get parsed as `kv_options`, which meant that a user could not pass multiple values to a `SHOW BACKUP` option, causing feature gaps in `SHOW BACKUP` relative to [`BACKUP`]({% link v23.1/backup.md %}) and [`RESTORE`]({% link v23.1/restore.md %}). This patch rewrites the show backup option parser, closing the following feature gaps:
- A user can now pass and check multiple KMS URIs in `SHOW BACKUP`
- A user can pass locality-aware `incremental_locations`, allowing a user to also pass the `check_files` parameter to a locality-aware backup chain that also specifies the backup incremental location. [#95562][#95562]
- Updated the name of the `cpuNanos` column to `cpuSQLNanos` on `crdb_internal.statement_statistics` and `system.statement_statistics` [#96278][#96278]
- Some queries with `EXISTS` subqueries which previously resulted in the error "could not decorrelate subquery" now succeed. [#95883][#95883]
- Users can query the `crdb_internal.kv_dropped_relation` table to see which tables, materialized views and sequences are currently already dropped but have not yet been garbage collected, along with the garbage collection TTL setting that is currently in force. This setting originates from the table's own zone configuration, or from its parent database which it inherits, or in turn from the default zone configuration. These settings are typically set using `ALTER TABLE ... CONFIGURE ZONE USING gc.ttlseconds = ...;`. [#96217][#96217]
-- Administrators may now call a new [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) `crdb_internal.upsert_dropped_relation_gc_ttl` to retroactively set the garbage collection TTL on a table, materialized view, or sequence which has already been dropped. Effectively, this retroactively performs `ALTER TABLE ... CONFIGURE ZONE USING gc.ttlseconds = ...;`. Note that this statement is prevented from being executed on dropped tables because they can no longer be referenced by name at that point. Usage of this built-in is typically in conjunction with the recently-added `crdb_internal.kv_dropped_relations` virtual table. For example, garbage collection can be triggered ASAP for all dropped relations by querying: `SELECT crdb_internal.upsert_dropped_relation_gc_ttl(id, '1 second') FROM crdb_internal.kv_dropped_relations;`. Doing so for all tables in a dropped database requires filtering on the `parent_id` column, the database name being lost at that point. [#96217][#96217]
-- Allow `*` expressions in [user-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). [#95710][#95710]
-- Previously, [user-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) could be created with any volatility no matter if the function body statements contained any expression which would violate the target volatility. For example, an immutable function might use `random()` in it. This change added validations to guarantee that all statements in the function body should be as strict as the expected UDF volatility. [#96476][#96476]
+- Administrators may now call a new [built-in function]({% link v23.1/functions-and-operators.md %}) `crdb_internal.upsert_dropped_relation_gc_ttl` to retroactively set the garbage collection TTL on a table, materialized view, or sequence which has already been dropped. Effectively, this retroactively performs `ALTER TABLE ... CONFIGURE ZONE USING gc.ttlseconds = ...;`. Note that this statement is prevented from being executed on dropped tables because they can no longer be referenced by name at that point. Usage of this built-in is typically in conjunction with the recently-added `crdb_internal.kv_dropped_relations` virtual table. For example, garbage collection can be triggered ASAP for all dropped relations by querying: `SELECT crdb_internal.upsert_dropped_relation_gc_ttl(id, '1 second') FROM crdb_internal.kv_dropped_relations;`. Doing so for all tables in a dropped database requires filtering on the `parent_id` column, the database name being lost at that point. [#96217][#96217]
+- Allow `*` expressions in [user-defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}). [#95710][#95710]
+- Previously, [user-defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}) could be created with any volatility no matter if the function body statements contained any expression which would violate the target volatility. For example, an immutable function might use `random()` in it. This change added validations to guarantee that all statements in the function body should be as strict as the expected UDF volatility. [#96476][#96476]
Operational changes
- Updated the metrics `queue.gc.info.clearrangesuccess` and `queue.gc.info.clearrangefailed` to include statistics about GC operations that perform `ClearRange` on parts of the range keyspace. Previously those metrics only included requests to remove range data completely when performing a schema change. [#90830][#90830]
- The load-based splitter has been redesigned to be more consistent with CPU-based rebalancing rather than QPS-based rebalancing to improve range splits. This redesign is disabled by default currently. [#93838][#93838]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `storage.value_blocks.enabled`, when set to `true`, writes the values of older versions of the same key to separate value blocks in the same sstable. For workloads that create many versions, this can improve the performance of reads by increasing locality. It can also help scan performance with single versions due to an optimization that avoids a key comparison (useful if the key are not very short). The default value of this setting is currently `false`. [#94634][#94634]
+- The [cluster setting]({% link v23.1/cluster-settings.md %}) `storage.value_blocks.enabled`, when set to `true`, writes the values of older versions of the same key to separate value blocks in the same sstable. For workloads that create many versions, this can improve the performance of reads by increasing locality. It can also help scan performance with single versions due to an optimization that avoids a key comparison (useful if the key are not very short). The default value of this setting is currently `false`. [#94634][#94634]
- The bytes read from SQL clients prior to authentication are now reported via the metric `sql.pre_serve.bytesin`. Previously, this was reported via the `sql.bytesin` metric. [#92580][#92580]
- Transaction errors will contain more detailed information in redacted logs. [#93760][#93760]
- Added the `COCKROACH_RAFT_MAX_INFLIGHT_BYTES` environment variable, which helps strictly limit inflight traffic from a Raft leader to its followers, particularly in situations when many large messages are sent and significantly exceed `COCKROACH_RAFT_MAX_SIZE_PER_MSG * COCKROACH_RAFT_MAX_INFLIGHT_MSGS` which is a softer limit. [#94692][#94692]
@@ -126,10 +126,10 @@ We chose a default of `25h` originally to accommodate daily incremental backups
Command-line changes
-- The TLS parameters to connect to a [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) cluster from SQL clients have been simplified. [#94421][#94421]
-- The password assigned to the `demo` user in [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) can now be overridden by the env var `COCKROACH_DEMO_PASSWORD`. This is meant for use in automated tests, when tests cannot be configured to use TLS client certificate authentication using the client certificates in `$HOME/.cockroach-demo`. [#94421][#94421]
-- [`cockroach sql`](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) and [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) now support an `\info` client-side command to print the server details again. [#94421][#94421]
-- [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) is now able to preserve open web sessions across restarts of the `cockroach demo` command. The sessions are saved in the directory `~/.cockroach-demo` alongside the TLS certificates and keys. [#94455][#94455]
+- The TLS parameters to connect to a [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) cluster from SQL clients have been simplified. [#94421][#94421]
+- The password assigned to the `demo` user in [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) can now be overridden by the env var `COCKROACH_DEMO_PASSWORD`. This is meant for use in automated tests, when tests cannot be configured to use TLS client certificate authentication using the client certificates in `$HOME/.cockroach-demo`. [#94421][#94421]
+- [`cockroach sql`]({% link v23.1/cockroach-sql.md %}) and [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) now support an `\info` client-side command to print the server details again. [#94421][#94421]
+- [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) is now able to preserve open web sessions across restarts of the `cockroach demo` command. The sessions are saved in the directory `~/.cockroach-demo` alongside the TLS certificates and keys. [#94455][#94455]
- The file format used for transient loss of quorum recovery files has changed. It is not possible to use replica info files generated by earlier versions to be used with current and future versions. [#93157][#93157]
- Workloads that take a `--seed` argument previously defaulted to `1`. Now, they use a randomly generated seed in each run. Users can still pass a custom seed with the `--seed` flag. [#95326][#95326]
- Added `cpu_time_per_second` to the `hot-ranges.sh` utility `debug zip` script. [#96213][#96213]
@@ -151,7 +151,7 @@ We chose a default of `25h` originally to accommodate daily incremental backups
- Hid the apply option for index recommendation when the user is not an admin. [#95516][#95516]
- The Database list filter now shows all databases in the cluster on CC console. [#95450][#95450]
- Hid the filter for the **Databases** and **Database Details** pages if both the node and regions dropdowns are also hidden. [#95376][#95376]
-- The introduction of the **Key Visualizer** makes it easy to identify historical hotspots. To support this new feature, three new [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) are introduced:
+- The introduction of the **Key Visualizer** makes it easy to identify historical hotspots. To support this new feature, three new [cluster settings]({% link v23.1/cluster-settings.md %}) are introduced:
- `keyvisualizer.enabled`: enables the Key Visualizer.
- `keyvisualizer.sample_interval`: controls the frequency at which the Key Visualizer collects samples.
- `keyvisualizer.max_buckets` controls the maximum number of buckets in a sample. [#88353][#88353]
@@ -168,7 +168,7 @@ We chose a default of `25h` originally to accommodate daily incremental backups
Bug fixes
- Fixed a bug where the `session_id` session variable would not be properly set if used from a subquery. [#93748][#93748]
-- Fixed a bug where CockroachDB could, in rare cases, encounter an internal error when evaluating the `crdb_internal.range_stats` [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) (which powers the [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) command among other things). The bug was introduced in v22.2.0 and is now fixed. [#93868][#93868]
+- Fixed a bug where CockroachDB could, in rare cases, encounter an internal error when evaluating the `crdb_internal.range_stats` [built-in function]({% link v23.1/functions-and-operators.md %}) (which powers the [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) command among other things). The bug was introduced in v22.2.0 and is now fixed. [#93868][#93868]
- Fixed a bug that could prevent `CASE` expressions that used placeholder return values from type-checking correctly. [#93855][#93855]
- Updated the volatility of the `hmac`, `digest`, and `crypt` built-ins to be immutable. [#93628][#93628]
- Server logs are now correctly fsynced at every syncInterval. [#93956][#93956]
@@ -176,68 +176,68 @@ We chose a default of `25h` originally to accommodate daily incremental backups
- Fixed a bug where, when experimental MVCC range tombstones are enabled (they are disabled by default), a bulk ingestion (e.g., an `IMPORT`) could fail to take a committed-but-unresolved write intent into account during conflict checks when written above an MVCC range tombstone. It was therefore possible in very rare circumstances for the ingestion to write a value below the timestamp of the committed intent, causing the ingested value to disappear. [#93938][#93938]
- This patch fixes `JOIN` queries involving tables with unique constraints using `LIMIT`, `GROUP BY`, and `ORDER BY` clauses to ensure that the optimizer considers streaming group-by with no `TopK` operation, when possible. This is often the most efficient query plan. [#93858][#93858]
- Secure clusters now show correct login information in the top right corner. [#94021][#94021]
-- Previously, CockroachDB could crash in rare circumstances when evaluating lookup and index joins. The bug has been present since the v22.2.0 release. You can also employ a temporary workaround without upgrading to the release with this fix by changing the value of the undocumented [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `sql.distsql.use_streamer.enabled` to `false`. [#94031][#94031]
+- Previously, CockroachDB could crash in rare circumstances when evaluating lookup and index joins. The bug has been present since the v22.2.0 release. You can also employ a temporary workaround without upgrading to the release with this fix by changing the value of the undocumented [cluster setting]({% link v23.1/cluster-settings.md %}) `sql.distsql.use_streamer.enabled` to `false`. [#94031][#94031]
- The `CREATE ROLE`, `DELETE ROLE`, `GRANT`, and `REVOKE` statements no longer function when the transaction is in read-only mode. [#93991][#93991]
- Fixed a bug where, when experimental MVCC range tombstones are enabled (they are disabled by default), a bulk ingestion (e.g., an `IMPORT`) could, in some situations, fail to properly check for conflicts with existing MVCC range tombstones. This could cause the ingestion to write below a recently-written MVCC range tombstone, in turn losing the ingested data. This could only happen in rare circumstances where a bulk ingestion was applied concurrently with an import cancellation. [#94045][#94045]
-- Fixed a bug where, in some cases, the start/end key columns of the output of [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) was missing. [#93644][#93644]
+- Fixed a bug where, in some cases, the start/end key columns of the output of [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) was missing. [#93644][#93644]
- Fixed a bug where trigrams ignored unicode (multi-byte) characters from input strings. [#93757][#93757]
- Fixed a bug that could happen when type-checking an array expression that only contains NULLs and placeholder values. The bug was only present in v22.2.1. [#94207][#94207]
- Fixed a bug where tables which receive writes concurrently with portions of an `ALTER TABLE ... SET LOCALITY REGIONAL BY ROW` may fail with an error: `duplicate key value violates unique constraint "new_primary_key"`. This bug was introduced in 22.1. [#94151][#94151]
- Fixed a bug where CockroachDB could encounter an internal error when evaluating window functions with `RANGE` window frame mode with an `OFFSET PRECEDING` or `OFFSET FOLLOWING` boundary set when an `ORDER BY` clause has the `NULLS LAST` option set. This will now result in a regular error since the feature is marked as unsupported. [#94342][#94342]
-- Previously, CockroachDB could delay the release of the locks acquired when evaluating `SELECT FOR UPDATE` statements in some cases. This delay (up to 5s) could then block future readers. The bug was introduced in 22.2.0, and the temporary workaround without upgrading to a release with this fix is to set the undocumented [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `sql.distsql.use_streamer.enabled` to `false`. [#94399][#94399]
+- Previously, CockroachDB could delay the release of the locks acquired when evaluating `SELECT FOR UPDATE` statements in some cases. This delay (up to 5s) could then block future readers. The bug was introduced in 22.2.0, and the temporary workaround without upgrading to a release with this fix is to set the undocumented [cluster setting]({% link v23.1/cluster-settings.md %}) `sql.distsql.use_streamer.enabled` to `false`. [#94399][#94399]
- Record types can now be encoded with the binary encoding of the Postgres wire protocol. Previously, trying to use this encoding could case a panic. [#94405][#94405]
- Fixed a panic that could be caused when using a SQL cursor to access tables in the `crdb_internal` schema. [#94425][#94425]
-- Fixed a bug in which `RESTORE SYSTEM USERS` would fail to restore [role options](https://www.cockroachlabs.com/docs/v23.1/alter-role#role-options). [#94134][#94134]
-- Fixed a crash that could occur on the gateway node when collecting a statement diagnostics bundle (e.g., [`EXPLAIN ANALYZE (DEBUG)`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze)) on a statement that fails with certain errors. This crash has existed in various forms since the introduction of statement bundles in v20.1.0. [#94440][#94440]
+- Fixed a bug in which `RESTORE SYSTEM USERS` would fail to restore [role options]({% link v23.1/alter-role.md %}#role-options). [#94134][#94134]
+- Fixed a crash that could occur on the gateway node when collecting a statement diagnostics bundle (e.g., [`EXPLAIN ANALYZE (DEBUG)`]({% link v23.1/explain-analyze.md %})) on a statement that fails with certain errors. This crash has existed in various forms since the introduction of statement bundles in v20.1.0. [#94440][#94440]
- Fixed a recursive CTE expressions which cause internal errors when explicit CASTs of initial expressions to output types are missing. [#94581][#94581]
- Previously, certain `GRANT` or `REVOKE` commands on a user which does not exist would error with the correct PG code. This is now fixed. [#94677][#94677]
- The `pg_proc` and `pg_type` virtual OID indexes no longer incorrectly show cross-db objects. [#94339][#94339]
- It is now possible to run `cockroach version` and `cockroach start` (and possibly other sub-commands) when the user running the command does not have permission to access the current working directory. [#94894][#94894]
- It is now possible to use a directory whose name is `"disabled"` via `--external-io-dir`. To actually disable external I/O, use `--external-io-dir=""`. [#94985][#94985]
- This patch fixes an internal error occurring in CASE expressions when a column present in a `THEN` or `ELSE` expression is of an inequivalent type compared to that of a constant this column is compared to in an equality predicate, e.g., `(CASE WHEN false THEN int_col ELSE 1 END) IN (int_col) AND int_col=3/2`. [#94791][#94791]
-- The `pronamespace` column of the `pg_proc` table now correctly reports the `crdb_internal` schema for [built-in functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) that have the "crdb_internal" prefix. [#95029][#95029]
-- In the SQL shell ([`cockroach sql`](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) / [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo)), when using `\c`/`\connect` to connect to a different server, CockroachDB would previously report an error if the new server had a different cluster ID. This has been fixed: this situation is merely a warning. [#95219][#95219]
+- The `pronamespace` column of the `pg_proc` table now correctly reports the `crdb_internal` schema for [built-in functions]({% link v23.1/functions-and-operators.md %}) that have the "crdb_internal" prefix. [#95029][#95029]
+- In the SQL shell ([`cockroach sql`]({% link v23.1/cockroach-sql.md %}) / [`cockroach demo`]({% link v23.1/cockroach-demo.md %})), when using `\c`/`\connect` to connect to a different server, CockroachDB would previously report an error if the new server had a different cluster ID. This has been fixed: this situation is merely a warning. [#95219][#95219]
- When using identity maps (via `server.identity_map.configuration`), authentication now correctly verifies that the client-provided username matches at least one of the mappings for the system identity. Previously, the client-provided username was incorrectly ignored and authentication could fail if the first candidate mapping did not result in a valid DB username. [#94915][#94915]
- The `prokind` column of `pg_catalog.pg_proc` is now populated properly. [#95289][#95289]
-- `pg_catalog.pg_description` and `pg_catalog.obj_description()` are now able to retrieve the descriptive help for [built-in functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators). [#95294][#95294]
+- `pg_catalog.pg_description` and `pg_catalog.obj_description()` are now able to retrieve the descriptive help for [built-in functions]({% link v23.1/functions-and-operators.md %}). [#95294][#95294]
- Fixed a crash that could occur when formatting a tuple with an unknown type. [#95009][#95009]
- Fixed a bug where a DNS lookup was performed during gossip remote forwarding while holding the gossip mutex. This could cause processing stalls if the DNS server was slow to respond. [#95426][#95426]
- Fixed a bug where `CLOSE ALL` would not respect the "ALL" flag and would instead attempt to close a cursor with no name. [#95414][#95414]
- Fixed a bug where default expressions could have a type which differs from the type of the column as long as the expression's type could be cast in an assignment context, which could lead to a panic during a backfill if such a default expression was added to a new column. This bug was introduced in v22.2.0. [#95398][#95398]
- DB Console features that check for the `VIEWACTIVITYREDACTED` privilege now also account for [system-level privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges). [#95258][#95258]
- CockroachDB now supports receiving `regXXX`-type values in binary extended protocol. [#94355][#94355]
-- Operations like [`BACKUP`](https://www.cockroachlabs.com/docs/v23.1/backup) can now reuse a previously created AWS KMS client if the client was created with the same parameters. This addresses the `NoCredentialProviders` errors on EC2 for backups with long incremental chains. [#95026][#95026]
+- Operations like [`BACKUP`]({% link v23.1/backup.md %}) can now reuse a previously created AWS KMS client if the client was created with the same parameters. This addresses the `NoCredentialProviders` errors on EC2 for backups with long incremental chains. [#95026][#95026]
- The syntax `EXPLAIN (DDL) COMMENT ON` is now possible. [#95467][#95467]
-- Fixed a bug where a database [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) would not grant `CREATE` and `USAGE` on the public schema to the public role. [#95466][#95466]
+- Fixed a bug where a database [`RESTORE`]({% link v23.1/restore.md %}) would not grant `CREATE` and `USAGE` on the public schema to the public role. [#95466][#95466]
- Fixed the formatting of JSON values inside of a SQL array so they no longer have improper quoting. [#94705][#94705]
- Fixed a bug which could cause expressions with side-effects (e.g., volatile expressions or data-modifying statements like `INSERT`) in `NOT MATERIALIZED` CTEs to be executed more than once. This bug was present since `NOT MATERIALIZED` was first supported in version 20.2.0. [#95454][#95454]
- Fixed `pg_get_indexdef` so that it shows the expression used to define an expression-based index. In addition, the function was previously including columns stored by the index, which was incorrect and has now also been fixed. [#95413][#95413]
- Reduced register session, deregister session, and session cancel query contention. [#95553][#95553]
-- Fixed a bug that could cause arguments of a [`COALESCE`](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#conditional-and-function-like-operators) statement to be evaluated when previous arguments always evaluated to non-NULL values. This bug could cause query errors to originate from arguments of a `COALESCE` that should have never been evaluated. [#95599][#95599]
-- Fixed the `array_to_string` [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) so that nested arrays are traversed without printing 'ARRAY' at each nesting level. [#95802][#95802]
-- Fixed a bug where using the [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statement to copy data into a column with collated strings would result in an error similar to `internal error: unknown type collatedstring`. [#95894][#95894]
+- Fixed a bug that could cause arguments of a [`COALESCE`]({% link v23.1/functions-and-operators.md %}#conditional-and-function-like-operators) statement to be evaluated when previous arguments always evaluated to non-NULL values. This bug could cause query errors to originate from arguments of a `COALESCE` that should have never been evaluated. [#95599][#95599]
+- Fixed the `array_to_string` [built-in function]({% link v23.1/functions-and-operators.md %}) so that nested arrays are traversed without printing 'ARRAY' at each nesting level. [#95802][#95802]
+- Fixed a bug where using the [`COPY`]({% link v23.1/copy-from.md %}) statement to copy data into a column with collated strings would result in an error similar to `internal error: unknown type collatedstring`. [#95894][#95894]
- The content of `column_default` in `information_schema.columns` no longer has type annotations. [#94153][#94153]
- Fixed a long-standing bug that caused incorrect parsing of double-quoted identifiers separated by one or more newlines. [#96019][#96019]
- Fixed a rare internal errors in `LATERAL` queries with redundant function calls. [#96048][#96048]
- Fixed an internal error which may occur in the `SHOW RANGE FROM TABLE` statement when the `FOR ROW` clause specifies a `BYTE` literal and the corresponding column data type is `BIT`. [#96002][#96002]
- Fixed an internal errors which may occur on some `AS OF SYSTEM TIME` expressions. [#96113][#96113]
- Fixed a bug where a node with a disk stall would continue to accept new connections and preserve existing connections until the disk stall abated. [#96371][#96371]
-- Fixed a bug where a [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) flow could hang indefinitely in the face of a context cancellation, manifesting as a stuck restore job. [#96302][#96302]
-- Fixed a bug where the `NOSQLLOGIN` [system-level privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) had a bug that made CockroachDB ignore it entirely, so it had no effect. The bug was introduced in v22.2.0-alpha.1. The `NOSQLLOGIN` [role option](https://www.cockroachlabs.com/docs/v23.1/alter-role#role-options) is unaffected by this bug. [#96466][#96466]
+- Fixed a bug where a [`RESTORE`]({% link v23.1/restore.md %}) flow could hang indefinitely in the face of a context cancellation, manifesting as a stuck restore job. [#96302][#96302]
+- Fixed a bug where the `NOSQLLOGIN` [system-level privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) had a bug that made CockroachDB ignore it entirely, so it had no effect. The bug was introduced in v22.2.0-alpha.1. The `NOSQLLOGIN` [role option]({% link v23.1/alter-role.md %}#role-options) is unaffected by this bug. [#96466][#96466]
- The compatibility scalar functions in `information_schema` are now listed in the proper namespace in `pg_catalog.pg_proc`. [#96562][#96562]
-- Fixed a bug in which the [`CREATE SCHEDULE`](https://www.cockroachlabs.com/docs/v23.1/create-schedule-for-backup) statement would not properly handle a placeholder for the `revision_history` option. [#95675][#95675]
+- Fixed a bug in which the [`CREATE SCHEDULE`]({% link v23.1/create-schedule-for-backup.md %}) statement would not properly handle a placeholder for the `revision_history` option. [#95675][#95675]
Performance improvements
-- The optimizer can now avoid planning a sort in more cases with joins that perform lookups into an index with one or more columns sorted in descending order. This can significantly decrease the number of rows that have to be scanned in order to satisfy a [`LIMIT`](https://www.cockroachlabs.com/docs/v23.1/limit-offset) clause. [#93673][#93673]
+- The optimizer can now avoid planning a sort in more cases with joins that perform lookups into an index with one or more columns sorted in descending order. This can significantly decrease the number of rows that have to be scanned in order to satisfy a [`LIMIT`]({% link v23.1/limit-offset.md %}) clause. [#93673][#93673]
- Significantly reduced CPU usage of the underlying gossip network in large clusters. [#89613][#89613]
- Refactored the query logic when fetching database index recommendations for the `DatabaseDetails` API endpoint, greatly reducing the query time and cost, particularly for large schemas. [#93937][#93937]
- Improved performance when populating `crdb_internal.default_privileges`. [#94247][#94247]
-- Some types of [user-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) are now inlined in query plans as relation expressions, which speeds up their evaluation. UDFs must be non-volatile and have a single statement in the function body to be inlined. [#92955][#92955]
+- Some types of [user-defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}) are now inlined in query plans as relation expressions, which speeds up their evaluation. UDFs must be non-volatile and have a single statement in the function body to be inlined. [#92955][#92955]
- Improved the performance of `pg_{function,table,type}_is_visible`. [#94339][#94339]
- Long chains of incremental backups and restore of such chains will now allocate less memory during the unmarshaling of metadata. [#93997][#93997]
- Extended the RPC compression encoding with a length prefixing format, allowing more efficient decompression on receivers. [#93871][#93871]
-- When planning lookup joins with a [`LIMIT`](https://www.cockroachlabs.com/docs/v23.1/limit-offset) clause from a `REGIONAL BY ROW` input table, the optimizer will now explore a locality-optimized-search plan of two lookup joins to possibly avoid high latency of reading rows in a remote region. [#93377][#93377]
+- When planning lookup joins with a [`LIMIT`]({% link v23.1/limit-offset.md %}) clause from a `REGIONAL BY ROW` input table, the optimizer will now explore a locality-optimized-search plan of two lookup joins to possibly avoid high latency of reading rows in a remote region. [#93377][#93377]
- Improve the performance of the `SHOW FUNCTIONS` statement. [#94771][#94771]
- Improved the performance of several PostgreSQL compatibility built-ins. [#94771][#94771]
- In some cases, when planning an inverted zigzag join, the optimizer can now detect whether it is necessary to re-apply the filter after the zigzag join. If it is not necessary, the optimizer can produce a more efficient plan. [#95638][#95638]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.3.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.3.md
index b161441e5d7..2861acc640a 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.3.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.3.md
@@ -6,52 +6,52 @@ Release Date: February 21, 2023
General changes
-- Added new metrics to count [paused jobs](https://www.cockroachlabs.com/docs/v23.1/pause-job) for every job type. For example, the metric for paused changefeed jobs is `jobs.changefeed.currently_paused`. These metrics are updated at an interval defined by the cluster setting `jobs.metrics.interval.poll`, which defaults to 10 seconds. [#89752][#89752]
+- Added new metrics to count [paused jobs]({% link v23.1/pause-job.md %}) for every job type. For example, the metric for paused changefeed jobs is `jobs.changefeed.currently_paused`. These metrics are updated at an interval defined by the cluster setting `jobs.metrics.interval.poll`, which defaults to 10 seconds. [#89752][#89752]
-- Added support for Azure Key Vault KMS, which will allow users to [encrypt and decrypt their backups](https://www.cockroachlabs.com/docs/v23.1/take-and-restore-encrypted-backups#use-key-management-service) using keys stored in Azure Key Vault. App Registration authentication (Azure RBAC) for Azure Storage is also now supported.[#96459][#96459]
-- Introduced a new locality filter option (`coordinator_locality`) that can be specified when a [backup job](https://www.cockroachlabs.com/docs/v23.1/backup) is created. This option restricts the backup metadata writing to the designated nodes. [#95791][#95791]
-- Fixed a bug that caused the server to crash if trying to restore a table from a backup generated by `BACKUP TABLE` from a schema that includes [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions), and the restore target database does not have a schema with the same name. [#96911][#96911]
-- Changefeeds with the `unordered` option can use multi-region [Google Cloud Pub/Sub topics](https://www.cockroachlabs.com/docs/v23.1/changefeed-sinks). [#96567][#96567]
-- Fixed a bug in changefeeds where long running [initial scans](https://www.cockroachlabs.com/docs/v23.1/create-changefeed#initial-scan) will fail to generate checkpoints. Failure to generate [checkpoints](https://www.cockroachlabs.com/docs/v23.1/how-does-an-enterprise-changefeed-work) is particularly bad if the changefeed restarts. Without checkpoints, the changefeed will restart from the beginning, and in the worst case, when exporting substantially sized tables, the changefeed initial scan may not complete. [#96995][#96995]
+- Added support for Azure Key Vault KMS, which will allow users to [encrypt and decrypt their backups]({% link v23.1/take-and-restore-encrypted-backups.md %}#use-key-management-service) using keys stored in Azure Key Vault. App Registration authentication (Azure RBAC) for Azure Storage is also now supported.[#96459][#96459]
+- Introduced a new locality filter option (`coordinator_locality`) that can be specified when a [backup job]({% link v23.1/backup.md %}) is created. This option restricts the backup metadata writing to the designated nodes. [#95791][#95791]
+- Fixed a bug that caused the server to crash if trying to restore a table from a backup generated by `BACKUP TABLE` from a schema that includes [user-defined functions]({% link v23.1/user-defined-functions.md %}), and the restore target database does not have a schema with the same name. [#96911][#96911]
+- Changefeeds with the `unordered` option can use multi-region [Google Cloud Pub/Sub topics]({% link v23.1/changefeed-sinks.md %}). [#96567][#96567]
+- Fixed a bug in changefeeds where long running [initial scans]({% link v23.1/create-changefeed.md %}#initial-scan) will fail to generate checkpoints. Failure to generate [checkpoints]({% link v23.1/how-does-an-enterprise-changefeed-work.md %}) is particularly bad if the changefeed restarts. Without checkpoints, the changefeed will restart from the beginning, and in the worst case, when exporting substantially sized tables, the changefeed initial scan may not complete. [#96995][#96995]
SQL language changes
-- Added [latency information](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page#statement-statistics) in seconds to the statement statistics on `crdb_internal.statement_statistics`, `system.statement_statistics`, and `crdb_internal.cluster_statement_statistics`, with information about: `min`, `max`, `p50`, `p90`, and `p99. Also added the columns: `latency_seconds_min`, `latency_seconds_max`, `latency_seconds_p50`, `latency_seconds_p90`, and `latency_seconds_p99` to `crdb_internal.node_statement_statistics`.[#96396][#96396]
-- Deprecated the `PGDUMP` and `MYSQLDUMP` formats for [`IMPORT`](https://www.cockroachlabs.com/docs/v23.1/import). They are still present, but will be removed in a future release. See the [Migration Overview](https://www.cockroachlabs.com/docs/v23.1/migration-overview) page for alternatives. [#96386][#96386]
-- [`COPY ... FROM ... QUOTE '"'`](https://www.cockroachlabs.com/docs/v23.1/copy-from) will no longer error. [#96572][#96572]
+- Added [latency information]({% link cockroachcloud/statements-page.md %}#statement-statistics) in seconds to the statement statistics on `crdb_internal.statement_statistics`, `system.statement_statistics`, and `crdb_internal.cluster_statement_statistics`, with information about: `min`, `max`, `p50`, `p90`, and `p99. Also added the columns: `latency_seconds_min`, `latency_seconds_max`, `latency_seconds_p50`, `latency_seconds_p90`, and `latency_seconds_p99` to `crdb_internal.node_statement_statistics`.[#96396][#96396]
+- Deprecated the `PGDUMP` and `MYSQLDUMP` formats for [`IMPORT`]({% link v23.1/import.md %}). They are still present, but will be removed in a future release. See the [Migration Overview]({% link v23.1/migration-overview.md %}) page for alternatives. [#96386][#96386]
+- [`COPY ... FROM ... QUOTE '"'`]({% link v23.1/copy-from.md %}) will no longer error. [#96572][#96572]
- Added `last_error_code` column to the `crdb_internal.node_statement_statistics` table. Added `last_error_code` field to the `statistics` JSON blob in the `crdb_internal.statement_statistics` and `system.statement_statistics` tables. [#96436][#96436]
-- Added support for expressions of the form `COLLATE "default"`, `COLLATE "C"`, and `COLLATE "POSIX"`. Since the default [collation](https://www.cockroachlabs.com/docs/v23.1/collate) cannot be changed currently, these expressions are all equivalent. The expressions are evaluated by treating the input as a normal string, and ignoring the collation. This means that comparisons between strings and collated strings that use `"default"`, `"C"`, or `"POSIX"` are now supported. Creating a column with the `"C"` or `"POSIX"` collations is still not supported. [#96828][#96828]
+- Added support for expressions of the form `COLLATE "default"`, `COLLATE "C"`, and `COLLATE "POSIX"`. Since the default [collation]({% link v23.1/collate.md %}) cannot be changed currently, these expressions are all equivalent. The expressions are evaluated by treating the input as a normal string, and ignoring the collation. This means that comparisons between strings and collated strings that use `"default"`, `"C"`, or `"POSIX"` are now supported. Creating a column with the `"C"` or `"POSIX"` collations is still not supported. [#96828][#96828]
- The insights subsystem in `sqlstats` is now able to detect failed executions, regardless if they were slow or not. [#97039][#97039]
- The internal `statement_statistics` and `transaction_statistics` tables now include sampled execution statistics on storage iteration. [#96016][#96016]
-- Introduced the `declare_cursor_statement_timeout_enabled` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) that disables statement timeouts during `FETCH` when using `DECLARE CURSOR`. [#96607][#96607]
+- Introduced the `declare_cursor_statement_timeout_enabled` [session variable]({% link v23.1/set-vars.md %}) that disables statement timeouts during `FETCH` when using `DECLARE CURSOR`. [#96607][#96607]
Operational changes
-- A [`BACKUP`](https://www.cockroachlabs.com/docs/v23.1/backup) that encounters too many retryable errors will now fail instead of pausing to allow subsequent backups the chance to succeed. [#96673][#96673]
+- A [`BACKUP`]({% link v23.1/backup.md %}) that encounters too many retryable errors will now fail instead of pausing to allow subsequent backups the chance to succeed. [#96673][#96673]
- Added an option to balance CPU time (`cpu`) instead of queries per second (`qps`) among stores in a cluster. This is done by setting `kv.allocator.load_based_rebalancing.objective='cpu'`. `kv.allocator.cpu_rebalance_threshold` is also added, similar to `kv.allocator.qps_rebalance_threshold` to control the target range for store CPU above and below the cluster mean. [#96127][#96127]
-- The [load-based splitter](https://www.cockroachlabs.com/docs/v23.1/load-based-splitting) now supports using request CPU usage to split ranges. This is introduced with the previous cluster setting `kv.allocator.load_based_rebalancing.objective`, which when set to `cpu`, will use request CPU usage. The threshold above which CPU usage of a range is considered for splitting is defined in the cluster setting `kv.range_split.load_cpu_threshold`, which has a default value of `250ms`. [#96128][#96128]
-- Added the flag `--disable-max-offset-check` to disable node self-termination when it detects [clock skew](https://www.cockroachlabs.com/docs/v23.1/operational-faqs#what-happens-when-node-clocks-are-not-properly-synchronized) with the rest of the cluster beyond `--max-offset`. The operator assumes responsibility for ensuring that real clock skew never exceeds `--max-offset`. [#96141][#96141]
+- The [load-based splitter]({% link v23.1/load-based-splitting.md %}) now supports using request CPU usage to split ranges. This is introduced with the previous cluster setting `kv.allocator.load_based_rebalancing.objective`, which when set to `cpu`, will use request CPU usage. The threshold above which CPU usage of a range is considered for splitting is defined in the cluster setting `kv.range_split.load_cpu_threshold`, which has a default value of `250ms`. [#96128][#96128]
+- Added the flag `--disable-max-offset-check` to disable node self-termination when it detects [clock skew]({% link v23.1/operational-faqs.md %}#what-happens-when-node-clocks-are-not-properly-synchronized) with the rest of the cluster beyond `--max-offset`. The operator assumes responsibility for ensuring that real clock skew never exceeds `--max-offset`. [#96141][#96141]
DB Console changes
-- Added execution insights to the [Statement Fingerprint Details](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page.html#sql-statement-fingerprints) and [Transaction Fingerprint Details](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page#transaction-fingerprints-view) pages. [#96440][#96440]
+- Added execution insights to the [Statement Fingerprint Details](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page.html#sql-statement-fingerprints) and [Transaction Fingerprint Details]({% link v23.1/ui-transactions-page.md %}#transaction-fingerprints-view) pages. [#96440][#96440]
- Transaction insights that were not found will now display a message `Insight not found`. [#96832][#96832]
-- Added a waiting statement ID and fingerprint to the [Insights Transaction](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page#transaction-executions-view) details page. Added a blocking transaction ID and fingerprint to the the [Insights Statement](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page#statement-executions-view) page. [#96872][#96872]
+- Added a waiting statement ID and fingerprint to the [Insights Transaction]({% link v23.1/ui-insights-page.md %}#transaction-executions-view) details page. Added a blocking transaction ID and fingerprint to the the [Insights Statement]({% link v23.1/ui-insights-page.md %}#statement-executions-view) page. [#96872][#96872]
Bug fixes
-- Fixed a bug where casting a [`TIMETZ`](https://www.cockroachlabs.com/docs/v23.1/time) to an [`ARRAY`](https://www.cockroachlabs.com/docs/v23.1/array) results in displaying second offsets, even if they are zero. [#96583][#96583]
-- Allowed [`ALTER TABLE .. ADD/DROP CONSTRAINT .. NOT VALID`](https://www.cockroachlabs.com/docs/v23.1/alter-table) and [`VALIDATE CONSTRAINT ..`](https://www.cockroachlabs.com/docs/v23.1/alter-table#validate-constraints) to behave consistently with PostgreSQL. Previously, the `VALIDATE CONSTRAINT` would fail and cause the whole statement to fail.[#96648][#96648]
-- Resolved the [`TIMESTAMPTZ`](https://www.cockroachlabs.com/docs/v23.1/timestamp) to match PostgreSQL. We previously included the minute/second offset for `TIMESTAMPTZ` in certain places when casting it to [`STRING`](https://www.cockroachlabs.com/docs/v23.1/string), even when they were zero. [#96833][#96833]
-- Resolved using negative years instead of BC when casting a [`TIMESTAMPTZ`](https://www.cockroachlabs.com/docs/v23.1/timestamp) to a [`STRING`](https://www.cockroachlabs.com/docs/v23.1/string). [#96833][#96833]
-- Fixed the [`SHOW GRANTS FOR public`](https://www.cockroachlabs.com/docs/v23.1/show-grants) command so it works correctly. Previously, this would return an error saying that the `public` role does not exist. [#96957][#96957]
-- Statement source (square bracket) syntax is no longer allowed in [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). Prior to this fix, using this syntax in a UDF would cause a panic. This restriction will be lifted in the future. [#96824][#96824]
+- Fixed a bug where casting a [`TIMETZ`]({% link v23.1/time.md %}) to an [`ARRAY`]({% link v23.1/array.md %}) results in displaying second offsets, even if they are zero. [#96583][#96583]
+- Allowed [`ALTER TABLE .. ADD/DROP CONSTRAINT .. NOT VALID`]({% link v23.1/alter-table.md %}) and [`VALIDATE CONSTRAINT ..`]({% link v23.1/alter-table.md %}#validate-constraints) to behave consistently with PostgreSQL. Previously, the `VALIDATE CONSTRAINT` would fail and cause the whole statement to fail.[#96648][#96648]
+- Resolved the [`TIMESTAMPTZ`]({% link v23.1/timestamp.md %}) to match PostgreSQL. We previously included the minute/second offset for `TIMESTAMPTZ` in certain places when casting it to [`STRING`]({% link v23.1/string.md %}), even when they were zero. [#96833][#96833]
+- Resolved using negative years instead of BC when casting a [`TIMESTAMPTZ`]({% link v23.1/timestamp.md %}) to a [`STRING`]({% link v23.1/string.md %}). [#96833][#96833]
+- Fixed the [`SHOW GRANTS FOR public`]({% link v23.1/show-grants.md %}) command so it works correctly. Previously, this would return an error saying that the `public` role does not exist. [#96957][#96957]
+- Statement source (square bracket) syntax is no longer allowed in [user-defined functions]({% link v23.1/user-defined-functions.md %}). Prior to this fix, using this syntax in a UDF would cause a panic. This restriction will be lifted in the future. [#96824][#96824]
Performance improvements
-- The execution of multiple [`FOREIGN KEY`](https://www.cockroachlabs.com/docs/v23.1/foreign-key) and [`UNIQUE`](https://www.cockroachlabs.com/docs/v23.1/unique) constraint checks have been parallelized in some cases. As a result, these checks should be completed faster, particularly in multi-region environments where the checks require cross-region reads. [#96123][#96123]
+- The execution of multiple [`FOREIGN KEY`]({% link v23.1/foreign-key.md %}) and [`UNIQUE`]({% link v23.1/unique.md %}) constraint checks have been parallelized in some cases. As a result, these checks should be completed faster, particularly in multi-region environments where the checks require cross-region reads. [#96123][#96123]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.4.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.4.md
index 22a5e6e2041..ec383b0fedf 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.4.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.4.md
@@ -9,7 +9,7 @@ Release Date: February 27, 2023
- Some of the transformations specific to changefeeds have been deprecated and replaced. These functions were released in limited access in v22.2. Deprecated changefeed transformations continue to function. Closely monitor changefeeds that are created during upgrade. While effort was made to maintain backward compatibility, the updated changefeed transformation may produce slightly different output, such as different column names. [#96295][#96295]
- Add support for implicit authentication to Azure Storage and KMS. [#96825][#96825]
- Add support for `CREATE EXTERNAL CONNECTION ... AS "postgresql://"` or `"postgres://"`. These external connections may be specified as the source in streaming replication. [#96551][#96551]
-- Add support for referencing [user defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) from other objects. Backup and restore operations can now read and write UDF descriptors. [#97038][#97038]
+- Add support for referencing [user defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}) from other objects. Backup and restore operations can now read and write UDF descriptors. [#97038][#97038]
SQL language changes
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.5.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.5.md
index b35fd4d8f6c..1478bb9f1c3 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.5.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.5.md
@@ -6,32 +6,32 @@ Release Date: March 6, 2023
Security updates
-- The new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.user_login.downgrade_scram_stored_passwords_to_bcrypt.enabled`, which allows you to migrate passwords from SCRAM to bcrypt during user authentication, defaults to `true`. If it is `true` and if `server.user_login.password_encryption` is `crdb-bcrypt`, then during login, the stored hashed password will be migrated from SCRAM to bcrypt. [#97429][#97429]
+- The new [cluster setting]({% link v23.1/cluster-settings.md %}) `server.user_login.downgrade_scram_stored_passwords_to_bcrypt.enabled`, which allows you to migrate passwords from SCRAM to bcrypt during user authentication, defaults to `true`. If it is `true` and if `server.user_login.password_encryption` is `crdb-bcrypt`, then during login, the stored hashed password will be migrated from SCRAM to bcrypt. [#97429][#97429]
General changes
-- Users with the `CONTROLJOB` [role option](https://www.cockroachlabs.com/docs/v23.1/create-role#role-options) can now [view jobs](https://www.cockroachlabs.com/docs/v23.1/show-jobs) owned by admins. [#96382][#96382]
-- Users with the `VIEWJOB` [role option](https://www.cockroachlabs.com/docs/v23.1/create-role#role-options) can now [view all jobs](https://www.cockroachlabs.com/docs/v23.1/show-jobs). This role can be revoked by granting the `NOVIEWJOB` role option. [#96382][#96382]
+- Users with the `CONTROLJOB` [role option]({% link v23.1/create-role.md %}#role-options) can now [view jobs]({% link v23.1/show-jobs.md %}) owned by admins. [#96382][#96382]
+- Users with the `VIEWJOB` [role option]({% link v23.1/create-role.md %}#role-options) can now [view all jobs]({% link v23.1/show-jobs.md %}). This role can be revoked by granting the `NOVIEWJOB` role option. [#96382][#96382]
- Jobs that utilize a protected timestamp system (such as `BACKUP`, `CHANGEFEED`, or `IMPORT`) now produce metrics that can be monitored to detect cases when a job leaves a stale protected timestamp that will prevent garbage collection from occurring. [#97148][#97148]
-- [Changefeeds](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) now automatically expire protected timestamp records for paused jobs if the changefeed is configured with the `gc_protect_expires_after` option. [#97148][#97148]
-- User-defined functions (UDFs) can now be referenced from column [`DEFAULT`](https://www.cockroachlabs.com/docs/v23.1/default-value) expressions when creating a new table or issuing the `SET DEFAULT` command. Backup and restore operations also back up and restore UDF IDs that are referenced in a column's DEFAULT expression. If UDF dependencies are missing and the `skip_missing_udfs` flag is provided, the `DEFAULT` expressions are dropped during a restore operation. [#97501][#97501]
+- [Changefeeds]({% link v23.1/create-changefeed.md %}) now automatically expire protected timestamp records for paused jobs if the changefeed is configured with the `gc_protect_expires_after` option. [#97148][#97148]
+- User-defined functions (UDFs) can now be referenced from column [`DEFAULT`]({% link v23.1/default-value.md %}) expressions when creating a new table or issuing the `SET DEFAULT` command. Backup and restore operations also back up and restore UDF IDs that are referenced in a column's DEFAULT expression. If UDF dependencies are missing and the `skip_missing_udfs` flag is provided, the `DEFAULT` expressions are dropped during a restore operation. [#97501][#97501]
SQL language changes
- String literals are now allowed for region names in DDL syntax, in addition to quoted syntax. [#97021][#97021]
-- It is now possible to use `*` inside a [`CREATE VIEW`](https://www.cockroachlabs.com/docs/v23.1/create-view) statement. The list of columns is expanded at the time the view is created, so that new columns added after the view was defined are not included in the view. This behavior is the same as in PostgreSQL. [#97515][#97515]
+- It is now possible to use `*` inside a [`CREATE VIEW`]({% link v23.1/create-view.md %}) statement. The list of columns is expanded at the time the view is created, so that new columns added after the view was defined are not included in the view. This behavior is the same as in PostgreSQL. [#97515][#97515]
- The default value of `sql.stats.cleanup.rows_to_delete_per_txn` has been increased to `10000` to increase efficiency of the cleanup job for SQL statistics. [#97642][#97642]
-- The new [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) `optimizer_use_improved_split_disjunction_for_joins` allows the optimizer to split disjunctions (`OR` expressions) in more `JOIN` conditions by building a `UNION` of two `JOIN` expressions. If this setting is true, all disjunctions in inner, semi, and anti `JOIN`s will be split. Otherwise, only disjunctions that potentially contain an equijoin condition will be split. [#97696][#97696]
+- The new [session setting]({% link v23.1/set-vars.md %}) `optimizer_use_improved_split_disjunction_for_joins` allows the optimizer to split disjunctions (`OR` expressions) in more `JOIN` conditions by building a `UNION` of two `JOIN` expressions. If this setting is true, all disjunctions in inner, semi, and anti `JOIN`s will be split. Otherwise, only disjunctions that potentially contain an equijoin condition will be split. [#97696][#97696]
- Builtins have been added for `tsvector`, `to_tsquery`, `phraseto_tsquery`, and `plainto_tsquery`, which parse input documents into tsvectors and tsqueries, respectively. The new `ts_parse` builtin is used to debug the text search parser. [#92966][#92966]
-- The new [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) `inject_retry_errors_on_commit_enabled` returns a [transaction retry error](https://www.cockroachlabs.com/docs/v23.1/transaction-retry-error-reference) if it is run inside of an explicit transaction when it is set to `true`. The transaction retry error continues to be returned until `inject_retry_errors_on_commit_enabled` is set to `false`. This setting allows you to test your transaction retry logic. [#97226][#97226]
-- Previously, [`ADD PRIMARY KEY NOT VALID`](https://www.cockroachlabs.com/docs/v23.1/primary-key) ignored the `NOT VALID` qualifier. This behavior was not compatible with PostgreSQL. CockroachDB now throws the error `PRIMARY KEY constraints cannot be marked NOT VALID`. [#97746][#97746]
+- The new [session variable]({% link v23.1/set-vars.md %}) `inject_retry_errors_on_commit_enabled` returns a [transaction retry error]({% link v23.1/transaction-retry-error-reference.md %}) if it is run inside of an explicit transaction when it is set to `true`. The transaction retry error continues to be returned until `inject_retry_errors_on_commit_enabled` is set to `false`. This setting allows you to test your transaction retry logic. [#97226][#97226]
+- Previously, [`ADD PRIMARY KEY NOT VALID`]({% link v23.1/primary-key.md %}) ignored the `NOT VALID` qualifier. This behavior was not compatible with PostgreSQL. CockroachDB now throws the error `PRIMARY KEY constraints cannot be marked NOT VALID`. [#97746][#97746]
Operational changes
-- The following [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), which control rebalancing and upreplication behavior in the face of IO-overloaded storage, have been deprecated:
+- The following [cluster settings]({% link v23.1/cluster-settings.md %}), which control rebalancing and upreplication behavior in the face of IO-overloaded storage, have been deprecated:
- `kv.allocator.l0_sublevels_threshold`
- `kv.allocator.l0_sublevels_threshold_enforce`
These cluster settings have been replaced by internal mechanisms. [#97142][#97142]
@@ -41,7 +41,7 @@ Release Date: March 6, 2023
Command-line changes
-- The SQL shell ([`cockroach sql`](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql), [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo)) now supports the client-side commands `\l`, `\dn`, `\d`, `\di`, `\dm`, `\ds`, `\dt`, `\dv`, `\dC`, `\dT`, `\dd`, `\dg`, `\du` and `\dd` in a similar manner to PostgreSQL, including the modifier flags `S` and `+`, for convenience for users migrating from PostgreSQL. A notable difference is that when a pattern argument is specified, it should use the SQL `LIKE` syntax (with `%` representing the wildcard character) instead of PostgreSQL's glob-like syntax (with `*` representing wildcards). [#88061][#88061]
+- The SQL shell ([`cockroach sql`]({% link v23.1/cockroach-sql.md %}), [`cockroach demo`]({% link v23.1/cockroach-demo.md %})) now supports the client-side commands `\l`, `\dn`, `\d`, `\di`, `\dm`, `\ds`, `\dt`, `\dv`, `\dC`, `\dT`, `\dd`, `\dg`, `\du` and `\dd` in a similar manner to PostgreSQL, including the modifier flags `S` and `+`, for convenience for users migrating from PostgreSQL. A notable difference is that when a pattern argument is specified, it should use the SQL `LIKE` syntax (with `%` representing the wildcard character) instead of PostgreSQL's glob-like syntax (with `*` representing wildcards). [#88061][#88061]
DB Console changes
@@ -71,35 +71,35 @@ Release Date: March 6, 2023
[#97590][#97590]
-- Active execution information is now shown on the [Statements page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) even when there is a max size limit error. [#97662][#97662]
-- "Retrying" is no longer a status shown in the [Jobs](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page) page. [#97505][#97505]
+- Active execution information is now shown on the [Statements page]({% link v23.1/ui-statements-page.md %}) even when there is a max size limit error. [#97662][#97662]
+- "Retrying" is no longer a status shown in the [Jobs]({% link v23.1/ui-jobs-page.md %}) page. [#97505][#97505]
Bug fixes
- Transaction uncertainty intervals are now correctly configured for reverse scans, to prevent reverse scans from serving stale reads when clocks in a cluster are skewed. [#97443][#97443]
- The formatting of uniqueness violation errors now matches the corresponding errors from PostgreSQL. [#96914][#96914]
-- Previously, when a new column name would require quoting due to mixed-case or special characters, [`ALTER TABLE ... ADD COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#add-column) would not run in an explicit or multi-statement transaction. This is now fixed. [#97514][#97514]
-- Fixed a bug when formatting [`CREATE TYPE` statements for user-defined types](https://www.cockroachlabs.com/docs/v23.1/create-type) which require quoting which might prevent those statements from round-tripping. [#97514][#97514]
+- Previously, when a new column name would require quoting due to mixed-case or special characters, [`ALTER TABLE ... ADD COLUMN`]({% link v23.1/alter-table.md %}#add-column) would not run in an explicit or multi-statement transaction. This is now fixed. [#97514][#97514]
+- Fixed a bug when formatting [`CREATE TYPE` statements for user-defined types]({% link v23.1/create-type.md %}) which require quoting which might prevent those statements from round-tripping. [#97514][#97514]
- Using subqueries in user-defined functions without an `AS` clause is now supported, for consistency with the syntax supported outside of user-defined functions. [#97515][#97515]
- Fixed a rare bug introduced before v22.1.x that could cause a projected expression to replace column references with the wrong values. [#97554][#97554]
-- Cross-descriptor validation on lease renewal is now disabled, because it can starve [online schema changes](https://www.cockroachlabs.com/docs/v23.1/online-schema-changes) when there are many descriptors with many foreign key references. [#97630][#97630]
-- Fixed a bug with pagination on the [Insights](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) page. [#97640][#97640]
-- Columns referenced in partial index predicates and partial unique constraint predicates can no longer be dropped. The [`ALTER TABLE .. DROP COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#drop-column) statement now returns an error with a suggestion to drop the indexes and constraints first. This is a temporary safeguard to prevent users from hitting [#96924][#96924]. This restriction will be lifted when that bug is fixed. [#97372][#97372]
-- The [Jobs](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page) page now displays an error state when an error is encountered during data fetching. [#97486][#97486]
+- Cross-descriptor validation on lease renewal is now disabled, because it can starve [online schema changes]({% link v23.1/online-schema-changes.md %}) when there are many descriptors with many foreign key references. [#97630][#97630]
+- Fixed a bug with pagination on the [Insights]({% link v23.1/ui-insights-page.md %}) page. [#97640][#97640]
+- Columns referenced in partial index predicates and partial unique constraint predicates can no longer be dropped. The [`ALTER TABLE .. DROP COLUMN`]({% link v23.1/alter-table.md %}#drop-column) statement now returns an error with a suggestion to drop the indexes and constraints first. This is a temporary safeguard to prevent users from hitting [#96924][#96924]. This restriction will be lifted when that bug is fixed. [#97372][#97372]
+- The [Jobs]({% link v23.1/ui-jobs-page.md %}) page now displays an error state when an error is encountered during data fetching. [#97486][#97486]
- Fixed a bug introduced in v22.1 that caused the internal error `no bytes in account to release ...`. [#97750][#97750]
-- The [`COPY FROM`](https://www.cockroachlabs.com/docs/v23.1/copy-from) command now respects the `statement_timeout` and `transaction_timeout` [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). [#97808][#97808]
-- [`COPY FROM`](https://www.cockroachlabs.com/docs/v23.1/copy-from) commands now appear in the output of the [`SHOW STATEMENTS`](https://www.cockroachlabs.com/docs/v23.1/show-statements) command. [#97808][#97808]
+- The [`COPY FROM`]({% link v23.1/copy-from.md %}) command now respects the `statement_timeout` and `transaction_timeout` [cluster settings]({% link v23.1/cluster-settings.md %}). [#97808][#97808]
+- [`COPY FROM`]({% link v23.1/copy-from.md %}) commands now appear in the output of the [`SHOW STATEMENTS`]({% link v23.1/show-statements.md %}) command. [#97808][#97808]
- Fixed an error where querying a `pg_catalog` table included information about a temporary table created in another session. [#97727][#97727]
Performance improvements
-- If the [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) `optimizer_use_improved_split_disjunction_for_joins` is `true`, the optimizer now creates a better query plan in some cases where an inner, semi, or anti join contains a join predicate with a disjuction (`OR` condition). [#97696][#97696]
+- If the [session setting]({% link v23.1/set-vars.md %}) `optimizer_use_improved_split_disjunction_for_joins` is `true`, the optimizer now creates a better query plan in some cases where an inner, semi, or anti join contains a join predicate with a disjuction (`OR` condition). [#97696][#97696]
Miscellaneous
- UDFs can now return the `RECORD` result type, which represents any tuple. For example, `CREATE FUNCTION f() RETURNS RECORD AS 'SELECT * FROM t' LANGUAGE SQL;` is equivalent to `CREATE FUNCTION f() RETURNS t AS 'SELECT * FROM t' LANGUAGE SQL;`. [#97199][#97199]
- The parameters for [delegated snapshots](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer#snapshots) have been marked as internal. [#97408][#97408]
-- Fixed an error when calling [`CREATE OR REPLACE FUNCTION`](https://www.cockroachlabs.com/docs/v23.1/create-function) with a [user-defined return type](https://www.cockroachlabs.com/docs/v23.1/create-type) if the user-defined type was modified after the original [user-defined function](https://www.cockroachlabs.com/docs/v23.1/create-function) was created. The command now succeeds as long as the function body returns output that matches the modified user-defined type. [#97274][#97274]
+- Fixed an error when calling [`CREATE OR REPLACE FUNCTION`]({% link v23.1/create-function.md %}) with a [user-defined return type]({% link v23.1/create-type.md %}) if the user-defined type was modified after the original [user-defined function]({% link v23.1/create-function.md %}) was created. The command now succeeds as long as the function body returns output that matches the modified user-defined type. [#97274][#97274]
- Columns with referenced constraints can now be dropped. [#97579][#97579]
- Index cascades with a dependent inbound foreign key can now be dropped. [#97065][#97065]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.6.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.6.md
index 8e21d1dae7c..89fb3c6523e 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.6.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.6.md
@@ -9,29 +9,29 @@ Release Date: March 13, 2023
- Previously, an `ALTER TABLE .. ADD UNIQUE .. NOT VALID` statement would be processed by ignoring the `NOT VALID` qualifier. This is not in keeping with PostgreSQL, which would throw an error instead. Now, CockroachDB throws the same error as PostgreSQL for such a statement: "UNIQUE constraints cannot be marked NOT VALID". [#97758][#97758]
- Introduced a new internal virtual table `crdb_internal.node_memory_monitors`, which exposes all of the current reservations with the memory accounting system on a single node. Access to the table requires the `VIEWACTIVITY` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) (or the legacy `VIEWACTIVITY` [role option](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#role-options)), or the `VIEWACTIVITYREDACTED` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) (or the legacy `VIEWACTIVITYREDACTED` [role option](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#role-options)) defined. [#97657][#97657]
- Each type cast is now expressible as a function, e.g., `now()::date` can be expressed as `date(now())`. [#97093][#97093]
-- Added support for a new syntax to provide options to the [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statement. The options can now be given in a comma-separated list enclosed by parentheses. The old syntax is still supported. [#97863][#97863]
+- Added support for a new syntax to provide options to the [`COPY`]({% link v23.1/copy-from.md %}) statement. The options can now be given in a comma-separated list enclosed by parentheses. The old syntax is still supported. [#97863][#97863]
- Added support for the syntax `CREATE DATABASE IF NOT EXISTS ... WITH OWNER`. [#97951][#97951]
-- Added a new internal [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#trigrams-functions), `crdb_internal.redactable_sql_constants`, which can be used to redact SQL statements passed in as strings. [#97834][#97834]
+- Added a new internal [built-in function]({% link v23.1/functions-and-operators.md %}#trigrams-functions), `crdb_internal.redactable_sql_constants`, which can be used to redact SQL statements passed in as strings. [#97834][#97834]
- Added an `error_code` column to the `crdb_internal.cluster_execution_insights` and `crdb_internal.node_execution_insights`virtual tables, which contains the error code for a failed execution. Also added a `last_error_code` column to the `crdb_internal.cluster_txn_execution_insights` and `crdb_internal.node_txn_execution_insights` virtual tables, which contains the error code of the last failed statement in that transaction. [#97046][#97046]
-- Added a new internal [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#trigrams-functions), `crdb_internal.redact`, which replaces substrings surrounded by redaction markers with the redacted marker. [#98008][#98008]
+- Added a new internal [built-in function]({% link v23.1/functions-and-operators.md %}#trigrams-functions), `crdb_internal.redact`, which replaces substrings surrounded by redaction markers with the redacted marker. [#98008][#98008]
Command-line changes
-- The [`cockroach node decommission`](https://www.cockroachlabs.com/docs/v23.1/cockroach-node) operation now validates the ability of the node to complete a decommission before attempting it, given the cluster configuration and the ranges with replicas present on the node. When errors are detected that would result in the inability to complete node decommission, they will be printed to stderr and the command will exit, instead of marking the node as `decommissioning` and beginning the node decommission process. Strict readiness evaluation mode can be used by setting`--checks=strict`. In this case, any ranges that need preliminary actions prior to replacement for the decommission process (e.g., ranges that are not yet fully up-replicated) will block the decommission process. Validation can be skipped by using the flag `--checks=skip`. [#96100][#96100]
+- The [`cockroach node decommission`]({% link v23.1/cockroach-node.md %}) operation now validates the ability of the node to complete a decommission before attempting it, given the cluster configuration and the ranges with replicas present on the node. When errors are detected that would result in the inability to complete node decommission, they will be printed to stderr and the command will exit, instead of marking the node as `decommissioning` and beginning the node decommission process. Strict readiness evaluation mode can be used by setting`--checks=strict`. In this case, any ranges that need preliminary actions prior to replacement for the decommission process (e.g., ranges that are not yet fully up-replicated) will block the decommission process. Validation can be skipped by using the flag `--checks=skip`. [#96100][#96100]
DB Console changes
-- Updated the description for [Suboptimal Insight](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) and added a **Learn more** link to it. [#97719][#97719]
+- Updated the description for [Suboptimal Insight]({% link v23.1/ui-insights-page.md %}) and added a **Learn more** link to it. [#97719][#97719]
Bug fixes
-- The unquoted value `none` is now allowed as the value in a [`SET`](https://www.cockroachlabs.com/docs/v23.1/set-vars) statement. [#97816][#97816]
+- The unquoted value `none` is now allowed as the value in a [`SET`]({% link v23.1/set-vars.md %}) statement. [#97816][#97816]
- `IMPORT INTO ... DELIMITED DATA` will now correctly handle quoted fields that contain unescaped newlines. [#97545][#97545]
- Previously, casting an `inet` to a string type omitted the mask if a mask was not provided. This was not in keeping with PostgreSQL and is now resolved. [#97093][#97093]
- Fixed link encoding on links to database/table/index pages. [#97893][#97893]
-- Fixed the [`SHOW CREATE ALL {TYPES|SCHEMAS|TABLES}`](https://www.cockroachlabs.com/docs/v23.1/show-create) commands so they handle database names that have mixed-case, hyphens, or quotes. [#97915][#97915]
+- Fixed the [`SHOW CREATE ALL {TYPES|SCHEMAS|TABLES}`]({% link v23.1/show-create.md %}) commands so they handle database names that have mixed-case, hyphens, or quotes. [#97915][#97915]
- Tables referenced in index recommendations are now fully qualified, ensuring that they are not ambiguous. [#97262][#97262]
-- Changed the database used for [SQL API](https://www.cockroachlabs.com/docs/v23.1/sql-statements) calls, to no longer use `defaultdb`, which was causing error messages on some pages when that database no longer exists. [#97990][#97990]
+- Changed the database used for [SQL API]({% link v23.1/sql-statements.md %}) calls, to no longer use `defaultdb`, which was causing error messages on some pages when that database no longer exists. [#97990][#97990]
Build changes
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.7.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.7.md
index 7a908a9a498..ea36770dc9a 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.7.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.7.md
@@ -6,49 +6,49 @@ Release Date: March 20, 2023
Security updates
-- The default value for the `server.user_login.password_hashes.default_cost.scram_sha_256` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) is now 10610. (Previously the default was 119680.) The old value was found to have been too high for many types of client hardware, and in some cases could cause regressions in connection latency. The new value was chosen by running tests with clients that have 1 or 2 vCPUs provisioned. Additionally, the new cluster setting `server.user_login.rehash_scram_stored_passwords_on_cost_change.enabled` was added, and defaults to `true`. If it is `true` and the stored SCRAM password for a user has a different cost than the configured default cost, then the next time the user logs in, their password will automatically be rehashed using the configured default cost. If the rehashing is not desired, then operators should update the `server.user_login.password_hashes.default_cost.scram_sha_256` cluster setting to the value they desire before upgrading. This change is being backported to [v22.2]({% link releases/v22.2.md %}). [#98254][#98254]
+- The default value for the `server.user_login.password_hashes.default_cost.scram_sha_256` [cluster setting]({% link v23.1/cluster-settings.md %}) is now 10610. (Previously the default was 119680.) The old value was found to have been too high for many types of client hardware, and in some cases could cause regressions in connection latency. The new value was chosen by running tests with clients that have 1 or 2 vCPUs provisioned. Additionally, the new cluster setting `server.user_login.rehash_scram_stored_passwords_on_cost_change.enabled` was added, and defaults to `true`. If it is `true` and the stored SCRAM password for a user has a different cost than the configured default cost, then the next time the user logs in, their password will automatically be rehashed using the configured default cost. If the rehashing is not desired, then operators should update the `server.user_login.password_hashes.default_cost.scram_sha_256` cluster setting to the value they desire before upgrading. This change is being backported to [v22.2]({% link releases/v22.2.md %}). [#98254][#98254]
General changes
-- CockroachDB now uses the soft memory limit of Go runtime by default. This feature of Go has been available since v22.2 by setting the `GOMEMLIMIT` environment variable. Now it is enabled by default, which should reduce the likelihood of the CockroachDB process [OOMing](https://www.cockroachlabs.com/docs/v23.1/cluster-setup-troubleshooting#out-of-memory-oom-crash). This soft memory limit can be disabled by specifying `--max-go-memory=0` to [`cockroach start`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start). [#97666][#97666]
-- Previously, the output of [`SHOW CHANGEFEED JOBS`](https://www.cockroachlabs.com/docs/v23.1/show-jobs#show-changefeed-jobs) was limited to show unfinished jobs and finished jobs from the last 14 days. This change makes the command show all changefeed jobs, regardless of if they finished and when they finished. Note that jobs still obey the [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-jobs-retention-time) `jobs.retention_time`. Completed jobs older than that time are deleted. Fixes: https://github.com/cockroachdb/cockroach/issues/97883 [#98175][#98175]
+- CockroachDB now uses the soft memory limit of Go runtime by default. This feature of Go has been available since v22.2 by setting the `GOMEMLIMIT` environment variable. Now it is enabled by default, which should reduce the likelihood of the CockroachDB process [OOMing]({% link v23.1/cluster-setup-troubleshooting.md %}#out-of-memory-oom-crash). This soft memory limit can be disabled by specifying `--max-go-memory=0` to [`cockroach start`]({% link v23.1/cockroach-start.md %}). [#97666][#97666]
+- Previously, the output of [`SHOW CHANGEFEED JOBS`]({% link v23.1/show-jobs.md %}#show-changefeed-jobs) was limited to show unfinished jobs and finished jobs from the last 14 days. This change makes the command show all changefeed jobs, regardless of if they finished and when they finished. Note that jobs still obey the [cluster setting]({% link v23.1/cluster-settings.md %}#setting-jobs-retention-time) `jobs.retention_time`. Completed jobs older than that time are deleted. Fixes: https://github.com/cockroachdb/cockroach/issues/97883 [#98175][#98175]
-- Sinkless [changefeeds](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) that use the [`AS SELECT`](https://www.cockroachlabs.com/docs/v23.1/selection-queries) syntax now require an [enterprise license](https://www.cockroachlabs.com/docs/v23.1/enterprise-licensing). [#98241][#98241]
-- [External connections](https://www.cockroachlabs.com/docs/v23.1/create-external-connection) can now be used as the URI value for a Confluent schema registry. For example, `CREATE EXTERNAL CONNECTION reg AS "https://example.cloud?opt=val"; CREATE CHANGEFEED FOR foo WITH format='avro',confluent_schema_registry='external://reg'` [#97140][#97140]
-- [Backup schedules](https://www.cockroachlabs.com/docs/v23.1/create-schedule-for-backup) created or altered to have the option `on_previous_running` will have the full backup schedule created with the user specified option, but will override the incremental backup schedule to always default to `on_previous_running = wait`. This ensures correctness of the backup chains created by the incremental schedule by preventing duplicate incremental jobs from racing against each other. [#98249][#98249]
-- [Changefeeds](https://www.cockroachlabs.com/docs/v23.1/changefeed-sinks#kafka) to a Kafka sink now support the `OAUTHBEARER` `sasl_mechanism`. [#98053][#98053]
-- [Changefeeds](https://www.cockroachlabs.com/docs/v23.1/changefeed-examples) running with the `changefeed.mux_rangefeed.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) set to `true` are more efficient, particularly when executing against large tables. [#96756][#96756]
+- Sinkless [changefeeds]({% link v23.1/create-changefeed.md %}) that use the [`AS SELECT`]({% link v23.1/selection-queries.md %}) syntax now require an [enterprise license]({% link v23.1/enterprise-licensing.md %}). [#98241][#98241]
+- [External connections]({% link v23.1/create-external-connection.md %}) can now be used as the URI value for a Confluent schema registry. For example, `CREATE EXTERNAL CONNECTION reg AS "https://example.cloud?opt=val"; CREATE CHANGEFEED FOR foo WITH format='avro',confluent_schema_registry='external://reg'` [#97140][#97140]
+- [Backup schedules]({% link v23.1/create-schedule-for-backup.md %}) created or altered to have the option `on_previous_running` will have the full backup schedule created with the user specified option, but will override the incremental backup schedule to always default to `on_previous_running = wait`. This ensures correctness of the backup chains created by the incremental schedule by preventing duplicate incremental jobs from racing against each other. [#98249][#98249]
+- [Changefeeds]({% link v23.1/changefeed-sinks.md %}#kafka) to a Kafka sink now support the `OAUTHBEARER` `sasl_mechanism`. [#98053][#98053]
+- [Changefeeds]({% link v23.1/changefeed-examples.md %}) running with the `changefeed.mux_rangefeed.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) set to `true` are more efficient, particularly when executing against large tables. [#96756][#96756]
SQL language changes
-- A regions field was added to the `statistics` column of [`crdb_internal.statement_statistics`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal#statement_statistics), reporting the [regions](https://www.cockroachlabs.com/docs/v23.1/show-regions) of the nodes on which the statement was executed. [#95449][#95449]
-- The `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars#enforce-home-region) was extended with a new optional preview feature and session setting, which is disabled by default, to dynamically detect and report the home region for [`SELECT`](https://www.cockroachlabs.com/docs/v23.1/selection-queries) queries based on the [locality](https://www.cockroachlabs.com/docs/v23.1/show-locality) of the queried rows, if different from the region of the [gateway node](https://www.cockroachlabs.com/docs/v23.1/ui-sessions-page#session-details-gateway-node). [cockroachdb/cockroach#97827][#97827]
-- Added a URL to errors related to the `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars#enforce-home-region) that users can view to see additional information about the error. [#97827][#97827]
-- Added a new [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) `enforce_home_region_follower_reads_enabled` as a preview feature to allow errors triggered by the `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars#enforce-home-region) to perform reads using [`AS OF SYSTEM TIME follower_read_timestamp()`](https://www.cockroachlabs.com/docs/v23.1/follower-reads) in order to find and report a query's [home region](https://www.cockroachlabs.com/docs/v23.1/multiregion-overview#table-localities). [#97827][#97827]
-- Added a new aggregate [builtin function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#array-functions) `array_cat_agg`. It behaves similarly to `array_agg(unnest(array_column))`: it takes arrays as its input, unnests them into the array elements which are then aggregated into a single result array. It's similar to concatenating all input arrays into a single array. [#97826][#97826]
-- Added a new [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) `optimizer_always_use_histograms`, which ensures that the [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) always uses histograms when available to calculate the [statistics](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer#table-statistics) of every plan that it explores. Enabling this setting can prevent the optimizer from choosing a suboptimal [index](https://www.cockroachlabs.com/docs/v23.1/indexes) when statistics for a table are stale. [#98194][#98194]
-- Added the `MODIFYSQLCLUSTERSETTING` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges). This privilege allows users the ability to view all [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), but only modify those settings with the `sql.defaults.*` prefix. This re-introduces the modify functionality seen with `MODIFYCLUSTERSETTING` CockroachDB [v22.2]({% link releases/v22.2.md %}). [#97521][#97521]
+- A regions field was added to the `statistics` column of [`crdb_internal.statement_statistics`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal#statement_statistics), reporting the [regions]({% link v23.1/show-regions.md %}) of the nodes on which the statement was executed. [#95449][#95449]
+- The `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}#enforce-home-region) was extended with a new optional preview feature and session setting, which is disabled by default, to dynamically detect and report the home region for [`SELECT`]({% link v23.1/selection-queries.md %}) queries based on the [locality]({% link v23.1/show-locality.md %}) of the queried rows, if different from the region of the [gateway node]({% link v23.1/ui-sessions-page.md %}#session-details-gateway-node). [cockroachdb/cockroach#97827][#97827]
+- Added a URL to errors related to the `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}#enforce-home-region) that users can view to see additional information about the error. [#97827][#97827]
+- Added a new [session setting]({% link v23.1/set-vars.md %}) `enforce_home_region_follower_reads_enabled` as a preview feature to allow errors triggered by the `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}#enforce-home-region) to perform reads using [`AS OF SYSTEM TIME follower_read_timestamp()`]({% link v23.1/follower-reads.md %}) in order to find and report a query's [home region]({% link v23.1/multiregion-overview.md %}#table-localities). [#97827][#97827]
+- Added a new aggregate [builtin function]({% link v23.1/functions-and-operators.md %}#array-functions) `array_cat_agg`. It behaves similarly to `array_agg(unnest(array_column))`: it takes arrays as its input, unnests them into the array elements which are then aggregated into a single result array. It's similar to concatenating all input arrays into a single array. [#97826][#97826]
+- Added a new [session setting]({% link v23.1/set-vars.md %}) `optimizer_always_use_histograms`, which ensures that the [optimizer]({% link v23.1/cost-based-optimizer.md %}) always uses histograms when available to calculate the [statistics]({% link v23.1/cost-based-optimizer.md %}#table-statistics) of every plan that it explores. Enabling this setting can prevent the optimizer from choosing a suboptimal [index]({% link v23.1/indexes.md %}) when statistics for a table are stale. [#98194][#98194]
+- Added the `MODIFYSQLCLUSTERSETTING` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges). This privilege allows users the ability to view all [cluster settings]({% link v23.1/cluster-settings.md %}), but only modify those settings with the `sql.defaults.*` prefix. This re-introduces the modify functionality seen with `MODIFYCLUSTERSETTING` CockroachDB [v22.2]({% link releases/v22.2.md %}). [#97521][#97521]
- Added a `status` column to the following [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal#) virtual tables: `crdb_internal.cluster_txn_execution_insights` and `crdb_internal.node_txn_execution_insights`. [cockroachdb/cockroach#98217][#98217]
-- Added a new session variable `allow_role_memberships_to_change_during_transaction` which can be used to make the [granting](https://www.cockroachlabs.com/docs/v23.1/grant) and [revoking](https://www.cockroachlabs.com/docs/v23.1/revoke) of [role memberships](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#roles) faster at the cost of some [isolation](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#isolation-levels) claims. By default, when granting or revoking a role from another role, CockroachDB waits for all [transactions](https://www.cockroachlabs.com/docs/v23.1/transactions) that are consulting the current set of role memberships to complete. This means that by the time the transaction which performed the grant or revoke operation returns successfully, the user has a proof that no ongoing transaction is relying on the state that existed prior to the change. The downside of this waiting is that it means that `GRANT` and `REVOKE` will take longer than the longest currently executing transaction. In some cases, users do not care about whether concurrent transactions will immediately see the side-effects of the operation, and would instead prefer that the grant or revoke finish rapidly. In order to aid in those cases, the session variable `allow_role_memberships_to_change_during_transaction` has been added. Now, the grant or revoke will only need to wait for the completion of statements in [sessions](https://www.cockroachlabs.com/docs/v23.1/show-sessions) which do not have this option set. One can set the option as enabled by default in all sessions in order to accelerate and grant and revoke role operations. [#98370][#98370]
-- Fixed a bug where CockroachDB panicked when a user tried to [truncate a table](https://www.cockroachlabs.com/docs/v23.1/truncate) which had an ongoing [Row-level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) change. CockroachDB still does not support truncating a table in this scenario, but instead of panicking an "unimplemented" error is returned. [#98537][#98537]
+- Added a new session variable `allow_role_memberships_to_change_during_transaction` which can be used to make the [granting]({% link v23.1/grant.md %}) and [revoking]({% link v23.1/revoke.md %}) of [role memberships](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#roles) faster at the cost of some [isolation](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#isolation-levels) claims. By default, when granting or revoking a role from another role, CockroachDB waits for all [transactions]({% link v23.1/transactions.md %}) that are consulting the current set of role memberships to complete. This means that by the time the transaction which performed the grant or revoke operation returns successfully, the user has a proof that no ongoing transaction is relying on the state that existed prior to the change. The downside of this waiting is that it means that `GRANT` and `REVOKE` will take longer than the longest currently executing transaction. In some cases, users do not care about whether concurrent transactions will immediately see the side-effects of the operation, and would instead prefer that the grant or revoke finish rapidly. In order to aid in those cases, the session variable `allow_role_memberships_to_change_during_transaction` has been added. Now, the grant or revoke will only need to wait for the completion of statements in [sessions]({% link v23.1/show-sessions.md %}) which do not have this option set. One can set the option as enabled by default in all sessions in order to accelerate and grant and revoke role operations. [#98370][#98370]
+- Fixed a bug where CockroachDB panicked when a user tried to [truncate a table]({% link v23.1/truncate.md %}) which had an ongoing [Row-level TTL]({% link v23.1/row-level-ttl.md %}) change. CockroachDB still does not support truncating a table in this scenario, but instead of panicking an "unimplemented" error is returned. [#98537][#98537]
Operational changes
-- [Range leases](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-leaseholder) will no longer be transferred to [stores](https://www.cockroachlabs.com/docs/v23.1/cockroach-start#store) which are IO overloaded. [#97587][#97587]
-- The environment variable `COCKROACH_IGNORE_CLUSTER_SETTINGS` can be used to [start a node](https://www.cockroachlabs.com/docs/v23.1/cockroach-start) so that it ignores all stored [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) values in an emergency. [#97805][#97805]
-- Introduce two [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to control disk utilization thresholds for [replica allocation](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer): `kv.allocator.rebalance_to_max_disk_utilization_threshold`, which controls the maximum disk utilization before a store will never be used as a rebalance target, and `kv.allocator.max_disk_utilization_threshold`, which controls maximum disk utilization before a store will never be used as a rebalance or allocation target _and_ will actively have [replicas](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-replica) moved off of it. [#97409][#97409]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `kv.trace.slow_request_stacks.threshold` can be used to attach available stack history from [tracer snapshots](https://www.cockroachlabs.com/docs/v23.1/show-trace) to traces of [slow requests](https://www.cockroachlabs.com/docs/v23.1/logging#sql_perf). [#97895][#97895]
-- Added a new [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) `changefeed.schema_registry.retry_count`. This measures the number of request retries performed when sending requests to the [changefeed schema registry](https://www.cockroachlabs.com/docs/v23.1/changefeed-examples). Observing a nonzero value may indicate improper configuration of the schema registry or changefeed parameters. [#98338][#98338]
-- The `kv.range_split.load_cpu_threshold` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-kv-range-split-load-cpu-threshold) now has a minimum setting value of `10ms`. [#98250][#98250]
-- The `kv.allocator.lease_io_overload_threshold_enforcement` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) value which disables enforcement is updated to be spelled correctly as "ignore" rather than "ingore". [cockroachdb/cockroach#98543][#98543]
+- [Range leases](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-leaseholder) will no longer be transferred to [stores]({% link v23.1/cockroach-start.md %}#store) which are IO overloaded. [#97587][#97587]
+- The environment variable `COCKROACH_IGNORE_CLUSTER_SETTINGS` can be used to [start a node]({% link v23.1/cockroach-start.md %}) so that it ignores all stored [cluster setting]({% link v23.1/cluster-settings.md %}) values in an emergency. [#97805][#97805]
+- Introduce two [cluster settings]({% link v23.1/cluster-settings.md %}) to control disk utilization thresholds for [replica allocation](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer): `kv.allocator.rebalance_to_max_disk_utilization_threshold`, which controls the maximum disk utilization before a store will never be used as a rebalance target, and `kv.allocator.max_disk_utilization_threshold`, which controls maximum disk utilization before a store will never be used as a rebalance or allocation target _and_ will actively have [replicas](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-replica) moved off of it. [#97409][#97409]
+- The [cluster setting]({% link v23.1/cluster-settings.md %}) `kv.trace.slow_request_stacks.threshold` can be used to attach available stack history from [tracer snapshots]({% link v23.1/show-trace.md %}) to traces of [slow requests](https://www.cockroachlabs.com/docs/v23.1/logging#sql_perf). [#97895][#97895]
+- Added a new [metric]({% link v23.1/metrics.md %}) `changefeed.schema_registry.retry_count`. This measures the number of request retries performed when sending requests to the [changefeed schema registry]({% link v23.1/changefeed-examples.md %}). Observing a nonzero value may indicate improper configuration of the schema registry or changefeed parameters. [#98338][#98338]
+- The `kv.range_split.load_cpu_threshold` [cluster setting]({% link v23.1/cluster-settings.md %}#setting-kv-range-split-load-cpu-threshold) now has a minimum setting value of `10ms`. [#98250][#98250]
+- The `kv.allocator.lease_io_overload_threshold_enforcement` [cluster setting]({% link v23.1/cluster-settings.md %}) value which disables enforcement is updated to be spelled correctly as "ignore" rather than "ingore". [cockroachdb/cockroach#98543][#98543]
- The [range lease](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-leaseholder) duration can now be adjusted via the environment variable `COCKROACH_RANGE_LEASE_DURATION`. Users are advised to exercise caution when adjusting this, and consider the relationship with e.g. [Raft](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer#raft) election timeouts and network timeouts. [#98616][#98616]
Command-line changes
-- [`cockroach sql`](https://www.cockroachlabs.com/docs/v23.1/cockroach-sql) and [`cockroach demo`](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) now support the client-side command `\s` to display the previous command history. [#98035][#98035]
-- Added a new flag `--max-go-memory` to the [`cockroach start`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start) command. It controls the soft memory limit on the Go runtime which adjusts the behavior of the Go garbage collector to try keeping the memory usage under the soft memory limit (the limit is "soft" in a sense that it is not enforced if live objects (RSS) exceed it). Similar to the [`--max-sql-memory` flag](https://www.cockroachlabs.com/docs/v23.1/cockroach-start), the new flag `--max-go-memory` accepts numbers interpreted as bytes, size suffixes (e.g. `1GB` and `1GiB`) or a percentage of physical memory (e.g. `.25`). If left unspecified, the flag defaults to 2.25x of `--max-sql-memory` (subject to `--max-go-memory + 1.15 x --cache` not exceeding 90% of available RAM). Set to `0` to disable the soft memory limit (not recommended). If the `GOMEMLIMIT` env var is set and `--max-go-memory` is not, then the value from the env var is used; if both are set, then the flag takes precedence. [#97666][#97666]
+- [`cockroach sql`]({% link v23.1/cockroach-sql.md %}) and [`cockroach demo`]({% link v23.1/cockroach-demo.md %}) now support the client-side command `\s` to display the previous command history. [#98035][#98035]
+- Added a new flag `--max-go-memory` to the [`cockroach start`]({% link v23.1/cockroach-start.md %}) command. It controls the soft memory limit on the Go runtime which adjusts the behavior of the Go garbage collector to try keeping the memory usage under the soft memory limit (the limit is "soft" in a sense that it is not enforced if live objects (RSS) exceed it). Similar to the [`--max-sql-memory` flag]({% link v23.1/cockroach-start.md %}), the new flag `--max-go-memory` accepts numbers interpreted as bytes, size suffixes (e.g. `1GB` and `1GiB`) or a percentage of physical memory (e.g. `.25`). If left unspecified, the flag defaults to 2.25x of `--max-sql-memory` (subject to `--max-go-memory + 1.15 x --cache` not exceeding 90% of available RAM). Set to `0` to disable the soft memory limit (not recommended). If the `GOMEMLIMIT` env var is set and `--max-go-memory` is not, then the value from the env var is used; if both are set, then the flag takes precedence. [#97666][#97666]
- Here are a few examples of how the default value is calculated on a machine with 16GiB of RAM. In the first two lines we use the default formula `2.25x --max-sql-memory`. In the third line, the default formula results in exceeding the upper bound on total usage (including the cache), so we use the upper bound determined as `0.9 * total RAM - 1.15 * cache size`. In the fourth line, the default formula results in 225MiB which is smaller than the lower bound of 256MiB, so we bump the value to that lower bound. In the fifth line, we use the value specified by the user (even though it is smaller than the lower bound on the default value).
| Command line flags | Computed max SQL memory | Computed cache size | Computed max Go memory |
@@ -59,44 +59,44 @@ Release Date: March 20, 2023
| --max-sql-memory=100MiB | 100MiB | 128MiB | 256MiB |
| --max-sql-memory=.4 --cache=.2 --max-go-memory=100MiB | 6.4GiB | 3.2GiB | 100MiB |
-- The `--drain-wait` argument to the [`cockroach node drain`](https://www.cockroachlabs.com/docs/v23.1/cockroach-node) command will be automatically increased if the command detects that it is smaller than the sum of the [cluster settings](https://www.cockroachlabs.com/docs/v23.1/node-shutdown#cluster-settings) `server.shutdown.drain_wait`, `server.shutdown.connection_wait`, `server.shutdown.query_wait` times two, and `server.shutdown.lease_transfer_wait`. If the `--drain-wait` argument is 0, then no timeout is used. This recommendation [was already documented](https://www.cockroachlabs.com/docs/v23.1/node-shutdown#drain-timeout), but now the advice will be applied automatically. [#98390][#98390]
+- The `--drain-wait` argument to the [`cockroach node drain`]({% link v23.1/cockroach-node.md %}) command will be automatically increased if the command detects that it is smaller than the sum of the [cluster settings]({% link v23.1/node-shutdown.md %}#cluster-settings) `server.shutdown.drain_wait`, `server.shutdown.connection_wait`, `server.shutdown.query_wait` times two, and `server.shutdown.lease_transfer_wait`. If the `--drain-wait` argument is 0, then no timeout is used. This recommendation [was already documented]({% link v23.1/node-shutdown.md %}#drain-timeout), but now the advice will be applied automatically. [#98390][#98390]
DB Console changes
-- Fixed the error `Cannot read properties of undefined (reading 'length')` which could cause [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) pages to fail to load. [#98222][#98222]
-- Added a new metric to the [Hardware dashboard](https://www.cockroachlabs.com/docs/v23.1/ui-hardware-dashboard) showing the system-wide CPU usage in addition to the existing CockroachDB CPU usage. [#98187][#98187]
+- Fixed the error `Cannot read properties of undefined (reading 'length')` which could cause [DB Console]({% link v23.1/ui-overview.md %}) pages to fail to load. [#98222][#98222]
+- Added a new metric to the [Hardware dashboard]({% link v23.1/ui-hardware-dashboard.md %}) showing the system-wide CPU usage in addition to the existing CockroachDB CPU usage. [#98187][#98187]
- Users will see an upgrade error message when a response from the SQL-over-HTTP API (from `/api/v2/sql/`) says that a relation or column does not exist. [cockroachdb/cockroach#98312][#98312]
-- The description of the average QPS graph in the [Replication Metrics Dashboard](https://www.cockroachlabs.com/docs/v23.1/ui-replication-dashboard) no longer claims the average is exponentially weighted. [#98270][#98270]
-- The metric `rebalancing.cpunanospersecond` is now included in the [Replication Metrics Dashboard](https://www.cockroachlabs.com/docs/v23.1/ui-replication-dashboard). [#98270][#98270]
-- Added an error code column to the insights table for a failed execution to the statement and transaction detail views on the [Insights Page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page). Added a status column to the statement and transaction workload insights tables on the [Insights Page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page). [cockroachdb/cockroach#97138][#97138]
+- The description of the average QPS graph in the [Replication Metrics Dashboard]({% link v23.1/ui-replication-dashboard.md %}) no longer claims the average is exponentially weighted. [#98270][#98270]
+- The metric `rebalancing.cpunanospersecond` is now included in the [Replication Metrics Dashboard]({% link v23.1/ui-replication-dashboard.md %}). [#98270][#98270]
+- Added an error code column to the insights table for a failed execution to the statement and transaction detail views on the [Insights Page]({% link v23.1/ui-insights-page.md %}). Added a status column to the statement and transaction workload insights tables on the [Insights Page]({% link v23.1/ui-insights-page.md %}). [cockroachdb/cockroach#97138][#97138]
Bug fixes
-- RPC connections between nodes now require RPC connections to be established in both directions, otherwise the connection will be closed. This is done to prevent asymmetric network partitions where nodes are able to send outbound messages but not receive inbound messages, which could result in persistent unavailability. This behavior can be disabled by the [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `rpc.dialback.enabled`. [#94778][#94778]
-- The owner of the public schema can now be changed using [`ALTER SCHEMA public OWNER TO new_owner`](https://www.cockroachlabs.com/docs/v23.1/alter-schema). [#98000][#98000]
-- Fixed a bug in which [common table expressions](https://www.cockroachlabs.com/docs/v23.1/common-table-expressions) (CTEs) marked as `WITH RECURSIVE` which were not actually recursive could return incorrect results. This could happen if the CTE used a `UNION ALL`, because the [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) incorrectly converted the `UNION ALL` to a `UNION`. This bug had existed since support for recursive CTEs was first added in [v20.1]({% link releases/v20.1.md %}). [#98042][#98042]
-- Internal queries that are executed in order to serve a client-initiated query already appeared in [statistics](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer#table-statistics) with an `application_name` prefixed by the string `$$`. But this name was not used in the output of [`SHOW QUERIES`](https://www.cockroachlabs.com/docs/v23.1/show-statements). Now, `SHOW QUERIES` also shows the `$$` prefix for these types of queries.
-- Fixed a bug in evaluation of `ANY`, `SOME`, and `ALL` [sub-operators](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#operators) that would cause expressions like `NULL = ANY(ARRAY[]::INT[])` to return `NULL` instead of `False`. [cockroachdb/cockroach#97948][#97948]
-- Fixed a bug that could crash the process when a query contained a literal [tuple expression](https://www.cockroachlabs.com/docs/v23.1/scalar-expressions#tuple-constructors) with more than two elements and only a single label, e.g., `((1, 2, 3) AS foo)`. [#98142][#98142]
-- Fixed a bug where certain special character combinations in the [`options` field in connection URLs](https://www.cockroachlabs.com/docs/v23.1/connection-parameters#supported-options-parameters) were not properly supported by CockroachDB. [#98302][#98302]
-- Fixed a bug where the stats columns on the [Transaction Fingerprints overview page](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page#transaction-fingerprints-view) was continuously incrementing. The fix was to ensure we don't re-use the stats object between re-renders by creating a new copy of the stats for every aggregation. [cockroachdb/cockroach#98307][#98307]
-- Fixed a bug where [transactions](https://www.cockroachlabs.com/docs/v23.1/transactions) that performed a [`SELECT FOR UPDATE`](https://www.cockroachlabs.com/docs/v23.1/select-for-update) across multiple [ranges](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-range) but never performed writes could fail to eagerly clean up their [locks](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#writing) after commit. Future transactions that encountered these abandoned locks could be delayed for 50ms before unlocking them. [#98044][#98044]
-- Fixed a bug which could result in some [`CREATE INDEX`](https://www.cockroachlabs.com/docs/v23.1/create-index) statements to fail with the error `failed to verify keys for Scan`. [#98262][#98262]
+- RPC connections between nodes now require RPC connections to be established in both directions, otherwise the connection will be closed. This is done to prevent asymmetric network partitions where nodes are able to send outbound messages but not receive inbound messages, which could result in persistent unavailability. This behavior can be disabled by the [cluster setting]({% link v23.1/cluster-settings.md %}) `rpc.dialback.enabled`. [#94778][#94778]
+- The owner of the public schema can now be changed using [`ALTER SCHEMA public OWNER TO new_owner`]({% link v23.1/alter-schema.md %}). [#98000][#98000]
+- Fixed a bug in which [common table expressions]({% link v23.1/common-table-expressions.md %}) (CTEs) marked as `WITH RECURSIVE` which were not actually recursive could return incorrect results. This could happen if the CTE used a `UNION ALL`, because the [optimizer]({% link v23.1/cost-based-optimizer.md %}) incorrectly converted the `UNION ALL` to a `UNION`. This bug had existed since support for recursive CTEs was first added in [v20.1]({% link releases/v20.1.md %}). [#98042][#98042]
+- Internal queries that are executed in order to serve a client-initiated query already appeared in [statistics]({% link v23.1/cost-based-optimizer.md %}#table-statistics) with an `application_name` prefixed by the string `$$`. But this name was not used in the output of [`SHOW QUERIES`]({% link v23.1/show-statements.md %}). Now, `SHOW QUERIES` also shows the `$$` prefix for these types of queries.
+- Fixed a bug in evaluation of `ANY`, `SOME`, and `ALL` [sub-operators]({% link v23.1/functions-and-operators.md %}#operators) that would cause expressions like `NULL = ANY(ARRAY[]::INT[])` to return `NULL` instead of `False`. [cockroachdb/cockroach#97948][#97948]
+- Fixed a bug that could crash the process when a query contained a literal [tuple expression]({% link v23.1/scalar-expressions.md %}#tuple-constructors) with more than two elements and only a single label, e.g., `((1, 2, 3) AS foo)`. [#98142][#98142]
+- Fixed a bug where certain special character combinations in the [`options` field in connection URLs]({% link v23.1/connection-parameters.md %}#supported-options-parameters) were not properly supported by CockroachDB. [#98302][#98302]
+- Fixed a bug where the stats columns on the [Transaction Fingerprints overview page]({% link v23.1/ui-transactions-page.md %}#transaction-fingerprints-view) was continuously incrementing. The fix was to ensure we don't re-use the stats object between re-renders by creating a new copy of the stats for every aggregation. [cockroachdb/cockroach#98307][#98307]
+- Fixed a bug where [transactions]({% link v23.1/transactions.md %}) that performed a [`SELECT FOR UPDATE`]({% link v23.1/select-for-update.md %}) across multiple [ranges](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-range) but never performed writes could fail to eagerly clean up their [locks](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#writing) after commit. Future transactions that encountered these abandoned locks could be delayed for 50ms before unlocking them. [#98044][#98044]
+- Fixed a bug which could result in some [`CREATE INDEX`]({% link v23.1/create-index.md %}) statements to fail with the error `failed to verify keys for Scan`. [#98262][#98262]
- Fixed a bug where CockroachDB could encounter an internal error `concurrent txn use detected`. The bug was introduced in [v22.2.0]({% link releases/v22.2.md %}). [#98120][#98120]
-- Fixed a bug where if an [`UPDATE`](https://www.cockroachlabs.com/docs/v23.1/update) was performed during an on-going [`ADD COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#add-column) or [`DROP COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#drop-column) on a table, the update could incorrectly fail due to a duplicate key error. [#98354][#98354]
-- Fixed a bug where it was possible for CockroachDB to temporarily not respect [zone configurations](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones) other than [the default zone config](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#view-the-default-replication-zone). This could only happen for a short window of a few seconds after nodes with existing [replicas](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-replica) were [restarted](https://www.cockroachlabs.com/docs/v23.1/cockroach-start), and self-rectified (also within seconds). [#98422][#98422]
+- Fixed a bug where if an [`UPDATE`]({% link v23.1/update.md %}) was performed during an on-going [`ADD COLUMN`]({% link v23.1/alter-table.md %}#add-column) or [`DROP COLUMN`]({% link v23.1/alter-table.md %}#drop-column) on a table, the update could incorrectly fail due to a duplicate key error. [#98354][#98354]
+- Fixed a bug where it was possible for CockroachDB to temporarily not respect [zone configurations]({% link v23.1/configure-replication-zones.md %}) other than [the default zone config]({% link v23.1/configure-replication-zones.md %}#view-the-default-replication-zone). This could only happen for a short window of a few seconds after nodes with existing [replicas](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-replica) were [restarted]({% link v23.1/cockroach-start.md %}), and self-rectified (also within seconds). [#98422][#98422]
- This manifested in a few ways:
- If [`num_replicas`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#num_replicas) was set to something other than 3, we would still add or remove replicas to get to 3x replication.
- If [`num_voters`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#num_voters) was set explicitly to get a mix of voting and [non-voting replicas](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer#non-voting-replicas), it would be ignored. CockroachDB could possibly even remove non-voting replicas.
- - If [`range_min_bytes`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#range-min-bytes) or [`range_max_bytes`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#range-max-bytes) were changed from their default values of 128 MiB and 512 MiB respectively, we would instead try to size ranges to be within [128 MiB, 512MiB]. This could appear as an excess amount of [range splits](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-splits) or [merges](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges), as visible in the [Replication Dashboard](https://www.cockroachlabs.com/docs/v23.1/ui-replication-dashboard) under "Range Operations".
- - If [`gc.ttlseconds`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#gc-ttlseconds) was set to something other than the default 90000 seconds (25h), we would still only GC data older than 90000s. If the GC TTL was set to something larger than 25h, [`AS OF SYSTEM TIME`](https://www.cockroachlabs.com/docs/v23.1/as-of-system-time) queries going further back could start failing. For GC TTLs less than the default, clusters would observe increased disk usage due to more retained [MVCC garbage](https://www.cockroachlabs.com/docs/v23.1/performance-recipes#too-many-mvcc-values).
- - If [`constraints`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#constraints), [`lease_preferences`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#lease_preferences) or [`voter_constraints`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#voter_constraints) were set, they would be ignored. Range data and [leases](https://www.cockroachlabs.com/docs/v23.1/architecture/glossary#architecture-leaseholder) would possibly be moved outside where prescribed.
-- Allow users with the `VIEWACTIVITY`/`VIEWACTIVITYREDACTED` [permissions](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#role-options) to access the [`crdb_internal.ranges_no_leases`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) table, necessary to view important DB Console pages (specifically, the [Databases Page](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page), including database details, and database tables). [#98535][#98535]
-- Fixed a bug that caused incorrect results when comparisons of [tuples](https://www.cockroachlabs.com/docs/v23.1/scalar-expressions#tuple-constructors) were done using the `ANY` [operator](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#operators). For example, an expression like (x, y) = ANY (SELECT a, b FROM t WHERE ...) could return `true` instead of the correct result of `NULL` when `x` and `y` were `NULL`, or `a` and `b` were `NULL`. This could only occur if the [subquery was correlated](https://www.cockroachlabs.com/docs/v23.1/subqueries#correlated-subqueries), i.e., it references columns from the outer part of the query. This bug was present since the [cost-based optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) was introduced in [v2.1]({% link releases/v2.1.md %}). [#98700][#98700]
+ - If [`range_min_bytes`]({% link v23.1/configure-replication-zones.md %}#range-min-bytes) or [`range_max_bytes`]({% link v23.1/configure-replication-zones.md %}#range-max-bytes) were changed from their default values of 128 MiB and 512 MiB respectively, we would instead try to size ranges to be within [128 MiB, 512MiB]. This could appear as an excess amount of [range splits](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-splits) or [merges](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges), as visible in the [Replication Dashboard]({% link v23.1/ui-replication-dashboard.md %}) under "Range Operations".
+ - If [`gc.ttlseconds`]({% link v23.1/configure-replication-zones.md %}#gc-ttlseconds) was set to something other than the default 90000 seconds (25h), we would still only GC data older than 90000s. If the GC TTL was set to something larger than 25h, [`AS OF SYSTEM TIME`]({% link v23.1/as-of-system-time.md %}) queries going further back could start failing. For GC TTLs less than the default, clusters would observe increased disk usage due to more retained [MVCC garbage]({% link v23.1/performance-recipes.md %}#too-many-mvcc-values).
+ - If [`constraints`]({% link v23.1/configure-replication-zones.md %}#constraints), [`lease_preferences`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#lease_preferences) or [`voter_constraints`](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#voter_constraints) were set, they would be ignored. Range data and [leases](https://www.cockroachlabs.com/docs/v23.1/architecture/glossary#architecture-leaseholder) would possibly be moved outside where prescribed.
+- Allow users with the `VIEWACTIVITY`/`VIEWACTIVITYREDACTED` [permissions](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#role-options) to access the [`crdb_internal.ranges_no_leases`]({% link v23.1/crdb-internal.md %}) table, necessary to view important DB Console pages (specifically, the [Databases Page]({% link v23.1/ui-databases-page.md %}), including database details, and database tables). [#98535][#98535]
+- Fixed a bug that caused incorrect results when comparisons of [tuples]({% link v23.1/scalar-expressions.md %}#tuple-constructors) were done using the `ANY` [operator]({% link v23.1/functions-and-operators.md %}#operators). For example, an expression like (x, y) = ANY (SELECT a, b FROM t WHERE ...) could return `true` instead of the correct result of `NULL` when `x` and `y` were `NULL`, or `a` and `b` were `NULL`. This could only occur if the [subquery was correlated]({% link v23.1/subqueries.md %}#correlated-subqueries), i.e., it references columns from the outer part of the query. This bug was present since the [cost-based optimizer]({% link v23.1/cost-based-optimizer.md %}) was introduced in [v2.1]({% link releases/v2.1.md %}). [#98700][#98700]
Miscellaneous
-- Added two views to the [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) catalog: `crdb_internal.statement_statistics_persisted`, which surfaces data in the persisted `system.statement_statistics` table, and `crdb_internal.transaction_statistics_persisted`, which surfaces the `system.transaction_statistics` table. [cockroachdb/cockroach#98261][#98261]
+- Added two views to the [`crdb_internal`]({% link v23.1/crdb-internal.md %}) catalog: `crdb_internal.statement_statistics_persisted`, which surfaces data in the persisted `system.statement_statistics` table, and `crdb_internal.transaction_statistics_persisted`, which surfaces the `system.transaction_statistics` table. [cockroachdb/cockroach#98261][#98261]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.8.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.8.md
index 6617da3f750..32750185403 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.8.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.8.md
@@ -6,61 +6,61 @@ Release Date: March 27, 2023
Security updates
-- Previously, users could gain unauthorized access to [statement diagnostic bundles](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) they did not create if they requested the bundle through an HTTP request to `/_admin/v1/stmtbundle/` and correctly guessed its (non-secret) `ID`. This change ensures that only authorized SQL users can request statement diagnostic bundles. [#99051][#99051]
+- Previously, users could gain unauthorized access to [statement diagnostic bundles]({% link v23.1/ui-statements-page.md %}#diagnostics) they did not create if they requested the bundle through an HTTP request to `/_admin/v1/stmtbundle/` and correctly guessed its (non-secret) `ID`. This change ensures that only authorized SQL users can request statement diagnostic bundles. [#99051][#99051]
General changes
-- Increased the specificity of log messages to help troubleshoot [DB Console SSO](https://www.cockroachlabs.com/docs/v23.1/sso-db-console) issues. [#98522][#98522]
+- Increased the specificity of log messages to help troubleshoot [DB Console SSO]({% link v23.1/sso-db-console.md %}) issues. [#98522][#98522]
-- The MuxRangefeed client, which is enabled with the `changefeed.mux_rangefeed.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), is now more efficient when running against large-scale workloads. [#97957][#97957]
-- The `server.oidc_authentication.claim_json_key` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) for DB Console SSO now accepts list-valued token claims. [#98522][#98522]
-- Added the `WITH` key_column option to override the message metadata key for [changefeeds](https://www.cockroachlabs.com/docs/v23.1/changefeed-examples). This changes the key hashed to determine Kafka partitions. It does not affect the output of `key_in_value` or the domain of the per-key ordering guarantee. [#98806][#98806]
-- The [Node Map](https://www.cockroachlabs.com/docs/v23.1/ui-cluster-overview-page#node-map-enterprise) now shows normalized CPU usage. [#98225][#98225]
+- The MuxRangefeed client, which is enabled with the `changefeed.mux_rangefeed.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}), is now more efficient when running against large-scale workloads. [#97957][#97957]
+- The `server.oidc_authentication.claim_json_key` [cluster setting]({% link v23.1/cluster-settings.md %}) for DB Console SSO now accepts list-valued token claims. [#98522][#98522]
+- Added the `WITH` key_column option to override the message metadata key for [changefeeds]({% link v23.1/changefeed-examples.md %}). This changes the key hashed to determine Kafka partitions. It does not affect the output of `key_in_value` or the domain of the per-key ordering guarantee. [#98806][#98806]
+- The [Node Map]({% link v23.1/ui-cluster-overview-page.md %}#node-map-enterprise) now shows normalized CPU usage. [#98225][#98225]
SQL language changes
- Fixed a bug where the check constraint on an `OID` type column results in a panic in the legacy schema changer. [#98800][#98800]
-- Added a new `WITH REDACT` option to the following statements: [`SHOW CREATE`](https://www.cockroachlabs.com/docs/v23.1/show-create), [`SHOW CREATE TABLE`](https://www.cockroachlabs.com/docs/v23.1/show-create#show-the-create-table-statement-for-a-table), and [`SHOW CREATE VIEW`](https://www.cockroachlabs.com/docs/v23.1/show-create#show-the-create-view-statement-for-a-view) which replaces constants and literals in the printed `CREATE` statement with the redacted marker, `‹×›`. [#98251][#98251]
-- Added support for the `REDACT` flag to the following variants of [`EXPLAIN`](https://www.cockroachlabs.com/docs/v23.1/explain): `EXPLAIN (OPT)`, `EXPLAIN (OPT, CATALOG)`, `EXPLAIN (OPT, MEMO)`, `EXPLAIN (OPT, TYPES)`, and `EXPLAIN (OPT, VERBOSE)`. These `EXPLAIN` statements will have constants, literal values, parameter values, and any other user data redacted in the output. [#97549][#97549]
-- Disallowed the [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) of backups taken on a cluster version older than the minimum binary version the current cluster can interoperate with. This is described in an updated version of the policy outlined in ["Restoring Backups Across Versions"](https://www.cockroachlabs.com/docs/v23.1/restoring-backups-across-versions). [#98597][#98597]
-- Bulk [`COPY FROM`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statements are now processed with a vectorized insert and can be anywhere from 0.5x to 5x faster. Typical hardware and schemas should see a 2x improvement. Vectorized inserts are only used for `COPY` statements and are not yet applied to regular inserts. Both the `vectorize` and `copy_fast_path_enabled` session variables can be used to disable this feature. [#98605][#98605]
+- Added a new `WITH REDACT` option to the following statements: [`SHOW CREATE`]({% link v23.1/show-create.md %}), [`SHOW CREATE TABLE`]({% link v23.1/show-create.md %}#show-the-create-table-statement-for-a-table), and [`SHOW CREATE VIEW`]({% link v23.1/show-create.md %}#show-the-create-view-statement-for-a-view) which replaces constants and literals in the printed `CREATE` statement with the redacted marker, `‹×›`. [#98251][#98251]
+- Added support for the `REDACT` flag to the following variants of [`EXPLAIN`]({% link v23.1/explain.md %}): `EXPLAIN (OPT)`, `EXPLAIN (OPT, CATALOG)`, `EXPLAIN (OPT, MEMO)`, `EXPLAIN (OPT, TYPES)`, and `EXPLAIN (OPT, VERBOSE)`. These `EXPLAIN` statements will have constants, literal values, parameter values, and any other user data redacted in the output. [#97549][#97549]
+- Disallowed the [`RESTORE`]({% link v23.1/restore.md %}) of backups taken on a cluster version older than the minimum binary version the current cluster can interoperate with. This is described in an updated version of the policy outlined in ["Restoring Backups Across Versions"]({% link v23.1/restoring-backups-across-versions.md %}). [#98597][#98597]
+- Bulk [`COPY FROM`]({% link v23.1/copy-from.md %}) statements are now processed with a vectorized insert and can be anywhere from 0.5x to 5x faster. Typical hardware and schemas should see a 2x improvement. Vectorized inserts are only used for `COPY` statements and are not yet applied to regular inserts. Both the `vectorize` and `copy_fast_path_enabled` session variables can be used to disable this feature. [#98605][#98605]
- Added [stemming and stopword-eliminating](https://www.cockroachlabs.com/blog/full-text-indexing-search/) text search configurations for English, Danish, Dutch, Finnish, French, German, Hungarian, Italian, Norwegian, Portuguese, Russian, Spanish, Swedish, and Turkish. [#97677][#97677]
-- Added the `system.statement_activity` and `system.transaction_activity` tables. These tables are used to populate the [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) pages, and contain the top N statements and transactions based on different key columns. [#99179][#99179]
-- Added helper text for [`UPDATE`](https://www.cockroachlabs.com/docs/v23.1/update) to include `FROM `. [#99301][#99301]
+- Added the `system.statement_activity` and `system.transaction_activity` tables. These tables are used to populate the [SQL Activity]({% link v23.1/ui-statements-page.md %}) pages, and contain the top N statements and transactions based on different key columns. [#99179][#99179]
+- Added helper text for [`UPDATE`]({% link v23.1/update.md %}) to include `FROM `. [#99301][#99301]
- Added the `default_text_search_config` variable for compatibility with single-argument variants to the following text search functions: `to_tsvector`, `to_tsquery`, `phraseto_tsquery`, and `plainto_tsquery`, which use the value of `default_text_search_config` instead of expecting one to be included as in the two-argument variants. The default value of this setting is `english`. [#99323][#99323]
- Added the `ts_rank` function for ranking text search query results. [#99323][#99323]
-- Renamed the `coordinator_locality` option in `BACKUP` to [`EXECUTION LOCALITY`](https://www.cockroachlabs.com/docs/v23.1/take-locality-restricted-backups). This option allows the user to control the nodes involved in the execution of a backup job, including the processing of row data and job coordination. For example, defining an execution locality for a backup job could reduce latency when a cluster is running heavy workloads and has a frequent backup schedule. [#99176][#99176]
+- Renamed the `coordinator_locality` option in `BACKUP` to [`EXECUTION LOCALITY`]({% link v23.1/take-locality-restricted-backups.md %}). This option allows the user to control the nodes involved in the execution of a backup job, including the processing of row data and job coordination. For example, defining an execution locality for a backup job could reduce latency when a cluster is running heavy workloads and has a frequent backup schedule. [#99176][#99176]
Operational changes
- Checkpoint directories that can be created in the rare event of range inconsistency are now clearly indicated as `pending` until they are fully populated. This helps operators distinguish valid checkpoints from corrupted ones. [#99119][#99119]
-- [Prometheus](https://www.cockroachlabs.com/docs/v23.1/monitor-cockroachdb-with-prometheus) metrics available at the `_status/vars` path now contain a `node_id` label that identifies the node they were scraped from. [#99235][#99235]
+- [Prometheus]({% link v23.1/monitor-cockroachdb-with-prometheus.md %}) metrics available at the `_status/vars` path now contain a `node_id` label that identifies the node they were scraped from. [#99235][#99235]
DB Console changes
-- The [Statement & Transaction Fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprint-page) pages no longer poll data, to simplify the user experience and reduce any performance impact. [#98331][#98331]
-- Data on the [Statement Fingerprint Details](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) page no longer updates automatically every 5mins. [#99298][#99298]
+- The [Statement & Transaction Fingerprints]({% link v23.1/ui-statements-page.md %}#statement-fingerprint-page) pages no longer poll data, to simplify the user experience and reduce any performance impact. [#98331][#98331]
+- Data on the [Statement Fingerprint Details]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) page no longer updates automatically every 5mins. [#99298][#99298]
- Updated the Jobs table column name from "Last Modified Time" to "Last Execution Time". [#99021][#99021]
-- On the [SQL Activity Fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) pages, users will not see stats that have not yet been flushed to disk. [#98815][#98815]
+- On the [SQL Activity Fingerprints]({% link v23.1/ui-overview.md %}#sql-activity) pages, users will not see stats that have not yet been flushed to disk. [#98815][#98815]
- Users can now request `top-k statements by % runtime` on the SQL Activity Fingerprints pages. [#98815][#98815]
-- Added Search Criteria to the [Statements](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) and [Transactions](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page) pages, and updated the UX with improvements. [#98815][#98815]
-- Added badges for each selected filter on the [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) and [Insights](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) pages. [#98988][#98988]
-- The default request sort for the [Statement Fingerprints Overview](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) page is now `% of All Runtime`. [#99298][#99298]
-- Fixed a bug where the table's `CREATE` statement would not display correctly on the [Table Details](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page#table-details) page. [#99434][#99434]
+- Added Search Criteria to the [Statements]({% link v23.1/ui-statements-page.md %}) and [Transactions]({% link v23.1/ui-transactions-page.md %}) pages, and updated the UX with improvements. [#98815][#98815]
+- Added badges for each selected filter on the [SQL Activity]({% link v23.1/ui-overview.md %}#sql-activity) and [Insights]({% link v23.1/ui-insights-page.md %}) pages. [#98988][#98988]
+- The default request sort for the [Statement Fingerprints Overview]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) page is now `% of All Runtime`. [#99298][#99298]
+- Fixed a bug where the table's `CREATE` statement would not display correctly on the [Table Details]({% link v23.1/ui-databases-page.md %}#table-details) page. [#99434][#99434]
- Added an assertion on the KV side to prevent other existing or future attempts of LeafTxn issuing locking requests. This ensures the KV API is used as agreed upon and can be helpful in debugging latency issues caused by holding locks. [#99412][#99412]
Bug fixes
- Fixed a rare panic in `upstream etcd-io/raft` when a message appends race with log compaction. [#98721][#98721]
- In the DB Console Stats pages, issuing a new request for stats while one is pending is now allowed and will replace the pending request. [#98331][#98331]
-- Fixed a bug in which [`SET avoid_buffering = true`](https://www.cockroachlabs.com/docs/v23.1/set-vars) could produce a crash on subsequent operations. [#98290][#98290]
+- Fixed a bug in which [`SET avoid_buffering = true`]({% link v23.1/set-vars.md %}) could produce a crash on subsequent operations. [#98290][#98290]
- Fixed a bug where using [`ST_Transform`](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#st_transform) could result in a memory leak. [#98740][#98740]
-- Fixed internal errors in [`SHOW JOBS`](https://www.cockroachlabs.com/docs/v23.1/show-jobs) statements that have a `WITH` clause. [#98389][#98389]
-- Previously, the [`ADD COLUMN ... DEFAULT cluster_logical_timestamp()`](https://www.cockroachlabs.com/docs/v23.1/alter-table#add-column) statement would crash the node and leave the table in a corrupt state. The root cause is a `nil` pointer dereference. The bug is now fixed by returning an unimplemented error and hence disallowing using the [builtin function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#array-functions) as the default value when backfilling. [#98696][#98696]
+- Fixed internal errors in [`SHOW JOBS`]({% link v23.1/show-jobs.md %}) statements that have a `WITH` clause. [#98389][#98389]
+- Previously, the [`ADD COLUMN ... DEFAULT cluster_logical_timestamp()`]({% link v23.1/alter-table.md %}#add-column) statement would crash the node and leave the table in a corrupt state. The root cause is a `nil` pointer dereference. The bug is now fixed by returning an unimplemented error and hence disallowing using the [builtin function]({% link v23.1/functions-and-operators.md %}#array-functions) as the default value when backfilling. [#98696][#98696]
- Fixed a bug that could prevent a cached query with a user-defined type reference from being invalidated even after a schema change that should prevent the type from being resolved. [#96045][#96045]
-- Fixed a bug that could prevent a cached query from being invalidated when a [UDF](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) referenced by that query was altered or dropped. [#96045][#96045]
+- Fixed a bug that could prevent a cached query from being invalidated when a [UDF]({% link v23.1/user-defined-functions.md %}) referenced by that query was altered or dropped. [#96045][#96045]
- Fixed the replacement of in-flight requests for `KeyedCachedDataReducer`s to prevent permanent loading on requests stuck on an `inFlight` status. [#99095][#99095]
- Improved the reliability of latency data in v23.1 clusters. [#99294][#99294]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-alpha.9.md b/src/current/_includes/releases/v23.1/v23.1.0-alpha.9.md
index 1ec8d1aa96d..16f6d54e4ed 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-alpha.9.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-alpha.9.md
@@ -6,28 +6,28 @@ Release Date: April 4, 2023
Backward-incompatible changes
-- The output of the [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) command for the `crdb_internal.ranges` and `crdb_internal.ranges_no_leases` tables has been updated, and the previous output is deprecated. To enable the new command output, set the `sql.show_ranges_deprecated_behavior.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to `false`. The new output will become default in v23.2. [#99618][#99618]
+- The output of the [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) command for the `crdb_internal.ranges` and `crdb_internal.ranges_no_leases` tables has been updated, and the previous output is deprecated. To enable the new command output, set the `sql.show_ranges_deprecated_behavior.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) to `false`. The new output will become default in v23.2. [#99618][#99618]
-- The [`CREATE CHANGEFEED`](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) statement now allows you to limit the nodes that can execute a changefeed by including a locality filter in the `WITH` clause. A node can execute the changefeed only if it was started with a matching [`--locality`](https://cockroachlabs.com/docs/v23.1/cockroach-start#locality) flag. Replace `{locality}` with a comma-separated list of key-value pairs. [#99935][#99935]
+- The [`CREATE CHANGEFEED`]({% link v23.1/create-changefeed.md %}) statement now allows you to limit the nodes that can execute a changefeed by including a locality filter in the `WITH` clause. A node can execute the changefeed only if it was started with a matching [`--locality`](https://cockroachlabs.com/docs/v23.1/cockroach-start#locality) flag. Replace `{locality}` with a comma-separated list of key-value pairs. [#99935][#99935]
SQL language changes
-- The new `prepared_statements_cache_size` [session setting](https://www.cockroachlabs.com/docs/v22.2/set-vars) helps to prevent [prepared statement](https://www.cockroachlabs.com/docs/v23.1/savepoint#savepoints-and-prepared-statements) leaks by automatically deallocating the least-recently-used prepared statements when the cache reaches a given size. [#99254][#99254]
+- The new `prepared_statements_cache_size` [session setting](https://www.cockroachlabs.com/docs/v22.2/set-vars) helps to prevent [prepared statement]({% link v23.1/savepoint.md %}#savepoints-and-prepared-statements) leaks by automatically deallocating the least-recently-used prepared statements when the cache reaches a given size. [#99254][#99254]
Operational changes
-- The new `COCKROACH_DISABLE_NODE_AND_TENANT_METRIC_LABELS` [environment variable](https://www.cockroachlabs.com/docs/v23.1/cockroach-commands#environment-variables) allows you to suppress metrics from a cluster's [Prometheus endpoint](https://www.cockroachlabs.com/docs/v23.1/monitoring-and-alerting#prometheus-endpoint) if they conflict with labels that are applied by external tools that collect metrics from the endpoint. Set the environment variable to a comma-separated list of key-value pairs. [#99820][#99820]
+- The new `COCKROACH_DISABLE_NODE_AND_TENANT_METRIC_LABELS` [environment variable]({% link v23.1/cockroach-commands.md %}#environment-variables) allows you to suppress metrics from a cluster's [Prometheus endpoint]({% link v23.1/monitoring-and-alerting.md %}#prometheus-endpoint) if they conflict with labels that are applied by external tools that collect metrics from the endpoint. Set the environment variable to a comma-separated list of key-value pairs. [#99820][#99820]
DB Console changes
-- The [**Index Details**](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page#index-details) section of the **Databases** page now displays the list of most-frequently-used index fingerprints to all users, rather than only to `admin` users, because the page now queries a view rather than a system table directly. [#99485][#99485]
-- When you search or filter within the [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) or [**Transactions** page](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page), if you interactively sort the results using a column that was not part of the original query, a warning displays if you are viewing only a subset of the results, along with a suggestion to update the original query. [#99795][#99795]
+- The [**Index Details**]({% link v23.1/ui-databases-page.md %}#index-details) section of the **Databases** page now displays the list of most-frequently-used index fingerprints to all users, rather than only to `admin` users, because the page now queries a view rather than a system table directly. [#99485][#99485]
+- When you search or filter within the [**Statements** page]({% link v23.1/ui-statements-page.md %}) or [**Transactions** page]({% link v23.1/ui-transactions-page.md %}), if you interactively sort the results using a column that was not part of the original query, a warning displays if you are viewing only a subset of the results, along with a suggestion to update the original query. [#99795][#99795]
Miscellaneous
-- Several computed columns have been added to the `statement_statistics_persisted` and `transaction_statistics_persisted` views in the [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) system catalog and indexed in the corresponding system tables:
+- Several computed columns have been added to the `statement_statistics_persisted` and `transaction_statistics_persisted` views in the [`crdb_internal`]({% link v23.1/crdb-internal.md %}) system catalog and indexed in the corresponding system tables:
- `execution_count`
- `service_latency`
@@ -40,15 +40,15 @@ Release Date: April 4, 2023
Bug fixes
-- Fixed pagination bugs when searching or filtering within the [**Databases** page](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page) or viewing the details of a database. [#99513][#99513]
-- Fixed a rare bug introduced in v22.2.0 that could cause a node to crash with an `attempting to append refresh spans after the tracked timestamp has moved forward` error when querying virtual tables in the [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) or [`pg_catalog`](https://www.cockroachlabs.com/docs/v23.1/pg-catalog) system catalogs. If you are experiencing this bug, set the `sql.distsql.use_streamer.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to `false` before upgrading a cluster to v23.1. [#99443][#99443]
-- Fixed a bug that could erroneously cause multiple garbage-collection jobs to be created when executing a [`DROP SCHEMA ... CASCADE`](https://www.cockroachlabs.com/docs/v23.1/drop-schema) command, one job for each table and one for the cascaded `DROP` itself. [#99706][#99706]
-- Fixed a bug in the [**Insights** page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page#schema-insights-tab) that prevented a recommendation to drop an index from being executed if the index's name contained a space. [#100023][#100023]
-- Fixed a rare bug that prevented the garbage-collection job for a [`TRUNCATE`](https://www.cockroachlabs.com/docs/v23.1/truncate) command from successfully finishing if the table descriptor had already been garbage-collected. The garbage-collection job now succeeds in this situation. [#100009][#100009]
-- Fixed a rare bug that could cause a query of a virtual table in the [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) or [`pg_catalog`](https://www.cockroachlabs.com/docs/v23.1/pg-catalog) system catalog to hang indefinitely if the query returned an error. [#99969][#99969]
-- Fixed a bug introduced prior to v21.2 that could cause the SQL gateway node to crash if you [created a view](https://www.cockroachlabs.com/docs/v23.1/create-view) with a circular or self-referencing dependencies. This situation no longer crashes the node, and a `cyclic view dependency for relation` error is now logged. [#100159][#100159]
-- Several rare bugs have been fixed that could cause corruption in the existing primary index when a rollback occurs concurrent to adding or removing a [column family](https://www.cockroachlabs.com/docs/v23.1/column-families). This could lead to subsequent unavailability of the table. [#100030][#100030]
-- Fixed a bug that could cause a node to crash with an out-of-memory (OOM) exception when viewing details in the [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) or [**Transactions** page](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page). [#99550][#99550]
+- Fixed pagination bugs when searching or filtering within the [**Databases** page]({% link v23.1/ui-databases-page.md %}) or viewing the details of a database. [#99513][#99513]
+- Fixed a rare bug introduced in v22.2.0 that could cause a node to crash with an `attempting to append refresh spans after the tracked timestamp has moved forward` error when querying virtual tables in the [`crdb_internal`]({% link v23.1/crdb-internal.md %}) or [`pg_catalog`]({% link v23.1/pg-catalog.md %}) system catalogs. If you are experiencing this bug, set the `sql.distsql.use_streamer.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) to `false` before upgrading a cluster to v23.1. [#99443][#99443]
+- Fixed a bug that could erroneously cause multiple garbage-collection jobs to be created when executing a [`DROP SCHEMA ... CASCADE`]({% link v23.1/drop-schema.md %}) command, one job for each table and one for the cascaded `DROP` itself. [#99706][#99706]
+- Fixed a bug in the [**Insights** page]({% link v23.1/ui-insights-page.md %}#schema-insights-tab) that prevented a recommendation to drop an index from being executed if the index's name contained a space. [#100023][#100023]
+- Fixed a rare bug that prevented the garbage-collection job for a [`TRUNCATE`]({% link v23.1/truncate.md %}) command from successfully finishing if the table descriptor had already been garbage-collected. The garbage-collection job now succeeds in this situation. [#100009][#100009]
+- Fixed a rare bug that could cause a query of a virtual table in the [`crdb_internal`]({% link v23.1/crdb-internal.md %}) or [`pg_catalog`]({% link v23.1/pg-catalog.md %}) system catalog to hang indefinitely if the query returned an error. [#99969][#99969]
+- Fixed a bug introduced prior to v21.2 that could cause the SQL gateway node to crash if you [created a view]({% link v23.1/create-view.md %}) with a circular or self-referencing dependencies. This situation no longer crashes the node, and a `cyclic view dependency for relation` error is now logged. [#100159][#100159]
+- Several rare bugs have been fixed that could cause corruption in the existing primary index when a rollback occurs concurrent to adding or removing a [column family]({% link v23.1/column-families.md %}). This could lead to subsequent unavailability of the table. [#100030][#100030]
+- Fixed a bug that could cause a node to crash with an out-of-memory (OOM) exception when viewing details in the [**Statements** page]({% link v23.1/ui-statements-page.md %}) or [**Transactions** page]({% link v23.1/ui-transactions-page.md %}). [#99550][#99550]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-beta.1.md b/src/current/_includes/releases/v23.1/v23.1.0-beta.1.md
index 4f22a1a4601..ab7a58dbe3b 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-beta.1.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-beta.1.md
@@ -6,44 +6,44 @@ Release Date: April 13, 2023
-- The [Avro](https://www.cockroachlabs.com/docs/v23.1/changefeed-messages#avro) schema registry URI now allows an additional `timeout=T` query parameter, which allows you to change the default timeout for contacting the schema registry. [#99300][#99300]
+- The [Avro]({% link v23.1/changefeed-messages.md %}#avro) schema registry URI now allows an additional `timeout=T` query parameter, which allows you to change the default timeout for contacting the schema registry. [#99300][#99300]
SQL language changes
-- Changed the [GC TTL](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#gc-ttlseconds) on the SQL Stats table to 1h on CockroachDB {{ site.data.products.dedicated }} and Self-Hosted clusters. This change is not applicable to CockroachDB {{ site.data.products.serverless }} clusters. [#100359][#100359]
+- Changed the [GC TTL]({% link v23.1/configure-replication-zones.md %}#gc-ttlseconds) on the SQL Stats table to 1h on CockroachDB {{ site.data.products.dedicated }} and Self-Hosted clusters. This change is not applicable to CockroachDB {{ site.data.products.serverless }} clusters. [#100359][#100359]
- When there is no data persisted, show the in-memory data. [#100505][#100505]
-- Added two new [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) that enable users to change the number of histogram samples and buckets collected when building histograms as part of table statistics collection. While the default values should work for most cases, it may be beneficial to increase the number of samples and buckets for very large tables to avoid creating a histogram that misses important values: [#100662][#100662]
+- Added two new [cluster settings]({% link v23.1/cluster-settings.md %}) that enable users to change the number of histogram samples and buckets collected when building histograms as part of table statistics collection. While the default values should work for most cases, it may be beneficial to increase the number of samples and buckets for very large tables to avoid creating a histogram that misses important values: [#100662][#100662]
- `sql.stats.histogram_samples.count`
- `sql.stats.histogram_buckets.count`
-- Added two new table storage parameters, `sql_stats_histogram_buckets_count` and `sql_stats_histogram_samples_count`. These parameters can be used to override the [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `sql.stats.histogram_buckets.count` and `sql.stats.histogram_samples.count` at the table level, allowing you to change the number of histogram samples and buckets collected when building histograms as part of table statistics collection. While the default values should work for most cases, it may be beneficial to increase the number of samples and buckets for very large tables to avoid creating a histogram that misses important values. [#100662][#100662]
+- Added two new table storage parameters, `sql_stats_histogram_buckets_count` and `sql_stats_histogram_samples_count`. These parameters can be used to override the [cluster settings]({% link v23.1/cluster-settings.md %}) `sql.stats.histogram_buckets.count` and `sql.stats.histogram_samples.count` at the table level, allowing you to change the number of histogram samples and buckets collected when building histograms as part of table statistics collection. While the default values should work for most cases, it may be beneficial to increase the number of samples and buckets for very large tables to avoid creating a histogram that misses important values. [#100662][#100662]
Operational changes
-- Introduced seven new timeseries [metrics](https://www.cockroachlabs.com/docs/v23.1/metrics) for better visibility into the behavior of storage engine iterators and their internals. [#100445][#100445]
-- Added a new [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) `range.snapshots.delegate.in-progress` and renamed two metrics:
+- Introduced seven new timeseries [metrics]({% link v23.1/metrics.md %}) for better visibility into the behavior of storage engine iterators and their internals. [#100445][#100445]
+- Added a new [metric]({% link v23.1/metrics.md %}) `range.snapshots.delegate.in-progress` and renamed two metrics:
- `range.snapshot.delegate.successes` -> `range.snapshots.delegate.successes`
- `range.snapshot.delegate.failures` -> `range.snapshots.delegate.failures` [#100421][#100421]
-- Added two new timeseries [metrics](https://www.cockroachlabs.com/docs/v23.1/metrics), providing some observability into the volume of keys preserved by open LSM snapshots: [#100878][#100878]
+- Added two new timeseries [metrics]({% link v23.1/metrics.md %}), providing some observability into the volume of keys preserved by open LSM snapshots: [#100878][#100878]
- `storage.compactions.keys.pinned.count`
- `storage.compactions.keys.pinned.bytes`
DB Console changes
-- Fixed an issue with properly rendering placeholders on the **Node Map** view for [insecure](https://www.cockroachlabs.com/docs/v23.1/start-a-local-cluster) clusters. [#100214][#100214]
+- Fixed an issue with properly rendering placeholders on the **Node Map** view for [insecure]({% link v23.1/start-a-local-cluster.md %}) clusters. [#100214][#100214]
Bug fixes
-- Fixed a bug which could cause [`SHOW CLUSTER SETTING version`](https://www.cockroachlabs.com/docs/v23.1/show-cluster-setting) to hang and return an opaque error while cluster finalization is ongoing. [#100259][#100259]
+- Fixed a bug which could cause [`SHOW CLUSTER SETTING version`]({% link v23.1/show-cluster-setting.md %}) to hang and return an opaque error while cluster finalization is ongoing. [#100259][#100259]
- Fixed a bug that could cause internal errors and corrupt partial indexes when deleting rows with the `DELETE FROM .. USING` syntax. This bug is only present in alpha versions of v23.1.0. [#100307][#100307]
-- The [**Hot Ranges** page](https://www.cockroachlabs.com/docs/v23.1/ui-hot-ranges-page) DB Console page would show hot ranges by CPU and not QPS (queries per second), depending on the value of the `kv.allocator.load_based_rebalancing.objective` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) (default `cpu`). Now the page will always collect statistics based on QPS. [#100211][#100211]
+- The [**Hot Ranges** page]({% link v23.1/ui-hot-ranges-page.md %}) DB Console page would show hot ranges by CPU and not QPS (queries per second), depending on the value of the `kv.allocator.load_based_rebalancing.objective` [cluster setting]({% link v23.1/cluster-settings.md %}) (default `cpu`). Now the page will always collect statistics based on QPS. [#100211][#100211]
- In rare cases involving overload and schema changes, users could sometimes, transiently, see errors of the form `deadline below read timestamp is nonsensical; txn has would have no chance to commit`. These errors carried and internal pgcode and could not be retried. This form of error is now classified as a retriable error and will be retried automatically either by the client or internally. [#100256][#100256]
-- Fixed a bug in the declarative schema changer in v23.1 where unique without index can be incorrectly added in tables with duplicate values if it was added with a [`ALTER TABLE ... ADD/DROP COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table) in one `ALTER TABLE` statement. [#100535][#100535]
-- Fixed an issue where the `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) did not prevent a locality-optimized anti-join from looking up rows in remote regions. This bug is only present in alpha versions of v23.1.0. [#100735][#100735]
+- Fixed a bug in the declarative schema changer in v23.1 where unique without index can be incorrectly added in tables with duplicate values if it was added with a [`ALTER TABLE ... ADD/DROP COLUMN`]({% link v23.1/alter-table.md %}) in one `ALTER TABLE` statement. [#100535][#100535]
+- Fixed an issue where the `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}) did not prevent a locality-optimized anti-join from looking up rows in remote regions. This bug is only present in alpha versions of v23.1.0. [#100735][#100735]
Performance improvements
- Audit logging should no longer incur extra latency when resolving table/view/sequence names. [#99548][#99548]
-- The webhook sink is now able to handle a drastically higher maximum throughput by enabling the `changefeed.new_webhook_sink_enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). [#100639][#100639]
+- The webhook sink is now able to handle a drastically higher maximum throughput by enabling the `changefeed.new_webhook_sink_enabled` [cluster setting]({% link v23.1/cluster-settings.md %}). [#100639][#100639]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-beta.2.md b/src/current/_includes/releases/v23.1/v23.1.0-beta.2.md
index 7906b9dcf5b..5cd2883fa1a 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-beta.2.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-beta.2.md
@@ -6,31 +6,31 @@ Release Date: April 17, 2023
-- [CDC queries](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) now support wrapped envelope with diff (`envelope='wrapped', diff`). [#101391][#101391]
+- [CDC queries]({% link v23.1/create-changefeed.md %}) now support wrapped envelope with diff (`envelope='wrapped', diff`). [#101391][#101391]
SQL language changes
-- Added the [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars#supported-variables) `multiple_active_portals_enabled`. This setting is only for a [preview feature](https://www.cockroachlabs.com/docs/v23.1/cockroachdb-feature-availability). When set to `true`, it allows multiple portals to be open at the same time, with their execution interleaved with each other. In other words, these portals can be paused. The underlying statement for a pausable portal must be a read-only [`SELECT`](https://www.cockroachlabs.com/docs/v23.1/selection-queries) query without [sub-queries](https://www.cockroachlabs.com/docs/v23.1/subqueries) or postqueries (such as executed by [foreign key](https://www.cockroachlabs.com/docs/v23.1/foreign-key) checks), and such a portal is always executed with a [local query plan](https://www.cockroachlabs.com/docs/v23.1/architecture/sql-layer#distsql). [#101026][#101026]
+- Added the [session variable]({% link v23.1/set-vars.md %}#supported-variables) `multiple_active_portals_enabled`. This setting is only for a [preview feature]({% link v23.1/cockroachdb-feature-availability.md %}). When set to `true`, it allows multiple portals to be open at the same time, with their execution interleaved with each other. In other words, these portals can be paused. The underlying statement for a pausable portal must be a read-only [`SELECT`]({% link v23.1/selection-queries.md %}) query without [sub-queries]({% link v23.1/subqueries.md %}) or postqueries (such as executed by [foreign key]({% link v23.1/foreign-key.md %}) checks), and such a portal is always executed with a [local query plan](https://www.cockroachlabs.com/docs/v23.1/architecture/sql-layer#distsql). [#101026][#101026]
DB Console changes
-- Update sort label on *Search Criteria* to match the name on the table columns on the [Statements](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) and [Transactions](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page) pages. [#101126][#101126]
-- By default, we now show the `Application Name` column in the fingerprints overview pages. [Statement fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) and [Transaction fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page#transaction-fingerprints-view) will be displayed per application on the overview pages rather than grouped into a single fingerprint ID. [#101235][#101235]
-- When going from the Fingerprint Overview pages or the Insight Details pages to the Fingerprint Details page for [statements](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) or [transactions](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page#transaction-fingerprints-view), the details page will fetch data for the statement with the provided application name. For overview pages, this is the app name of the selected row. For insight details, it is the app of the execution that generated the insight. [#101235][#101235]
+- Update sort label on *Search Criteria* to match the name on the table columns on the [Statements]({% link v23.1/ui-statements-page.md %}) and [Transactions]({% link v23.1/ui-transactions-page.md %}) pages. [#101126][#101126]
+- By default, we now show the `Application Name` column in the fingerprints overview pages. [Statement fingerprints]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) and [Transaction fingerprints]({% link v23.1/ui-transactions-page.md %}#transaction-fingerprints-view) will be displayed per application on the overview pages rather than grouped into a single fingerprint ID. [#101235][#101235]
+- When going from the Fingerprint Overview pages or the Insight Details pages to the Fingerprint Details page for [statements]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) or [transactions]({% link v23.1/ui-transactions-page.md %}#transaction-fingerprints-view), the details page will fetch data for the statement with the provided application name. For overview pages, this is the app name of the selected row. For insight details, it is the app of the execution that generated the insight. [#101235][#101235]
Bug fixes
-- Fixed a bug so that the text search `@@` [operator](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) ("matches") can work with variable expressions. Fixed a bug where incorrect results were returned when one of the arguments was a [`TEXT`](https://www.cockroachlabs.com/docs/v23.1/string) expression and the other argument was a `TEXT` or `TSQuery` expression. [#100918][#100918]
-- Fixed a bug where running [`DROP COLUMN ... CASCADE`](https://www.cockroachlabs.com/docs/v23.1/alter-table#drop-column) when that column is used in an [index](https://www.cockroachlabs.com/docs/v23.1/indexes) that includes other columns caused a panic. [#100856][#100856]
-- Fixed a rare race condition on [node startup](https://www.cockroachlabs.com/docs/v23.1/cockroach-start) that could cause an `invalid memory address or nil pointer dereference` error. [#100626][#100626]
+- Fixed a bug so that the text search `@@` [operator]({% link v23.1/functions-and-operators.md %}) ("matches") can work with variable expressions. Fixed a bug where incorrect results were returned when one of the arguments was a [`TEXT`]({% link v23.1/string.md %}) expression and the other argument was a `TEXT` or `TSQuery` expression. [#100918][#100918]
+- Fixed a bug where running [`DROP COLUMN ... CASCADE`]({% link v23.1/alter-table.md %}#drop-column) when that column is used in an [index]({% link v23.1/indexes.md %}) that includes other columns caused a panic. [#100856][#100856]
+- Fixed a rare race condition on [node startup]({% link v23.1/cockroach-start.md %}) that could cause an `invalid memory address or nil pointer dereference` error. [#100626][#100626]
- Fixed a bug that was causing nodes running on Windows to crash on startup. This bug only existed in v23.1 alphas. [#101091][#101091]
-- Fixed a rare condition that could allow a [transaction](https://www.cockroachlabs.com/docs/v23.1/transactions) to get stuck indefinitely waiting on a released row-level [lock](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#concurrency-control) if the per-range lock count limit was exceeded while the transaction was waiting on another lock. [#100946][#100946]
-- Fixed a rare internal error in the [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) that has existed since before version v22.1, which could occur while enforcing orderings between SQL operators. [#101355][#101355]
-- Fixed a bug so that the `crdb_internal.deserialize_session` internal function works properly with prepared statements that have more param type hints than params. Before this bugfix, deserializing a [session](https://www.cockroachlabs.com/docs/v23.1/show-sessions) containing a prepared statement with more parameter type hints than parameters would panic. For example: `PREPARE p (int) AS SELECT 1`. These extra type hints are now ignored by `crdb_internal.deserialize_session`. [#101368][#101368]
+- Fixed a rare condition that could allow a [transaction]({% link v23.1/transactions.md %}) to get stuck indefinitely waiting on a released row-level [lock](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#concurrency-control) if the per-range lock count limit was exceeded while the transaction was waiting on another lock. [#100946][#100946]
+- Fixed a rare internal error in the [optimizer]({% link v23.1/cost-based-optimizer.md %}) that has existed since before version v22.1, which could occur while enforcing orderings between SQL operators. [#101355][#101355]
+- Fixed a bug so that the `crdb_internal.deserialize_session` internal function works properly with prepared statements that have more param type hints than params. Before this bugfix, deserializing a [session]({% link v23.1/show-sessions.md %}) containing a prepared statement with more parameter type hints than parameters would panic. For example: `PREPARE p (int) AS SELECT 1`. These extra type hints are now ignored by `crdb_internal.deserialize_session`. [#101368][#101368]
Performance improvements
-- Google Cloud Pub/Sub sink [changefeeds](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) can now support higher throughputs by enabling the `changefeed.new_pubsub_sink_enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). Enabling this setting will cause changefeeds to use a newer Pub/Sub sink, which uses capitalized top-level fields in the message: `{Key: ..., Value: ..., Topic: ...}`. As a result, you may need to reconfigure downstream systems to parse the new message format. If you do not enable `changefeed.new_pubsub_sink_enabled`, the top-level message fields remain all lowercase: `{key: ..., value: ..., topic: ...}`. [#100930][#100930]
+- Google Cloud Pub/Sub sink [changefeeds]({% link v23.1/create-changefeed.md %}) can now support higher throughputs by enabling the `changefeed.new_pubsub_sink_enabled` [cluster setting]({% link v23.1/cluster-settings.md %}). Enabling this setting will cause changefeeds to use a newer Pub/Sub sink, which uses capitalized top-level fields in the message: `{Key: ..., Value: ..., Topic: ...}`. As a result, you may need to reconfigure downstream systems to parse the new message format. If you do not enable `changefeed.new_pubsub_sink_enabled`, the top-level message fields remain all lowercase: `{key: ..., value: ..., topic: ...}`. [#100930][#100930]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-beta.3.md b/src/current/_includes/releases/v23.1/v23.1.0-beta.3.md
index ac37fbc1402..714b1cf739d 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-beta.3.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-beta.3.md
@@ -6,11 +6,11 @@ Release Date: April 24, 2023
Backward-incompatible changes
-- Previously, if a user specified a [`search_path`](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#current-schema) in the connection string parameters, it would always be treated as case sensitive. Now, in order to have the schema names in the `search_path` respect case, the user must include double quotes around the name. [#101492][#101492]
+- Previously, if a user specified a [`search_path`]({% link v23.1/sql-name-resolution.md %}#current-schema) in the connection string parameters, it would always be treated as case sensitive. Now, in order to have the schema names in the `search_path` respect case, the user must include double quotes around the name. [#101492][#101492]
SQL language changes
-- Statements of type [`SET ...`](https://www.cockroachlabs.com/docs/v23.1/set-vars) are no longer displayed on the [Insights page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page). [#101672][#101672]
+- Statements of type [`SET ...`]({% link v23.1/set-vars.md %}) are no longer displayed on the [Insights page]({% link v23.1/ui-insights-page.md %}). [#101672][#101672]
Operational changes
@@ -18,24 +18,24 @@ Release Date: April 24, 2023
DB Console changes
-- When a user activates diagnostics on the [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) page, there is now an option to select the trace rate for statement diagnostics collection. [#101762][#101762]
-- Updated the **Network Latency** side navigation name and Network Diagnostics page title to Network. Updated the Advanced Debugging page title to [Advanced Debug](https://www.cockroachlabs.com/docs/v23.1/ui-debug-pages). [#101761][#101761]
-- Introduced a "draining node" **Node Status** on the [Cluster Overview panel](https://www.cockroachlabs.com/docs/v23.1/ui-cluster-overview-page#cluster-overview-panel) so that "draining node" has it own value instead of counting as a "dead node". [#101794][#101794]
-- Added a time scale selector to the [**Diagnostics** tab](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) under the Statement Details page. This allows users to view bundles from the selected period only. [#101803][#101803]
+- When a user activates diagnostics on the [SQL Activity]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) page, there is now an option to select the trace rate for statement diagnostics collection. [#101762][#101762]
+- Updated the **Network Latency** side navigation name and Network Diagnostics page title to Network. Updated the Advanced Debugging page title to [Advanced Debug]({% link v23.1/ui-debug-pages.md %}). [#101761][#101761]
+- Introduced a "draining node" **Node Status** on the [Cluster Overview panel]({% link v23.1/ui-cluster-overview-page.md %}#cluster-overview-panel) so that "draining node" has it own value instead of counting as a "dead node". [#101794][#101794]
+- Added a time scale selector to the [**Diagnostics** tab]({% link v23.1/ui-statements-page.md %}#diagnostics) under the Statement Details page. This allows users to view bundles from the selected period only. [#101803][#101803]
Bug fixes
-- Fixed a bug that caused internal errors when executing [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) with empty bodies. This bug was only present in alpha pre-release versions of 23.1. [#101383][#101383]
-- Fixed a bug that caused a [restore](https://www.cockroachlabs.com/docs/v23.1/restore) to fail occasionally due to incorrect schema ID resolution when restoring a [backup](https://www.cockroachlabs.com/docs/v23.1/backup) with [user-defined schemas](https://www.cockroachlabs.com/docs/v23.1/schema-design-schema). [#101310][#101310]
-- Fixed a bug in parsing a [`search_path`](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#current-schema) with a quote in it when specified in the [connection string](https://www.cockroachlabs.com/docs/v23.1/connection-parameters). Also, the `search_path` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) now supports schema names that have commas in them. [#101492][#101492]
-- Fixed a bug that has existed since [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) were introduced that could cause a function call to resolve to the wrong function after changes to the [schema search path](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#current-schema). [#101513][#101513]
-- Previously, CockroachDB v23.1 alpha and beta versions would panic on [`cockroach start`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start) command when the `GOMEMLIMIT` environment variable was set and the `--max-go-memory` flag wasn't specified. This is now fixed. [#101565][#101565]
-- Fixed a bug that caused errors in test builds and potentially incorrect results in release builds when invoking a [user-defined function](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) with a [subquery](https://www.cockroachlabs.com/docs/v23.1/subqueries) argument. This bug was only present in v23.1 alpha versions. [#101639][#101639]
-- Fixed an internal error that could occur when the `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) is on and the input to the [lookup join](https://www.cockroachlabs.com/docs/v23.1/joins#lookup-joins) is a `SELECT` of [scalar expressions](https://www.cockroachlabs.com/docs/v23.1/scalar-expressions) (e.g., `1+1`). Also, [subqueries](https://www.cockroachlabs.com/docs/v23.1/subqueries) with no [home region](https://www.cockroachlabs.com/docs/v23.1/multiregion-overview#table-localities) now error out with `enforce_home_region` set. [#101504][#101504]
-- Point [inserts](https://www.cockroachlabs.com/docs/v23.1/insert) and [updates](https://www.cockroachlabs.com/docs/v23.1/update) that write to a remote region of a table created with the [`REGIONAL BY ROW AS`](https://www.cockroachlabs.com/docs/v23.1/create-table#create-a-table-with-a-regional-by-row-locality-using-a-custom-region-column) clause will now error out. [#101708][#101708]
-- Fixed a bug in the [built-in functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) `pg_get_indexdef` and `col_description` that could cause the functions to return errors if the user created tables named `pg_indexes` or `pg_attribute`. Or, if the user created a schema named `system` with a table named `comments`. This bug was only present in pre-release versions of v23.1. [#101690][#101690]
-- Fixed a bug where, when CockroachDB failed to retrieve [contention information](https://www.cockroachlabs.com/docs/v23.1/performance-best-practices-overview#transaction-contention), the full [Insights page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) would return an error. Now the Insights page will load even when there is an issue with decoding contention information. [#101784][#101784]
-- Fixed a bug to ensure that the [list of fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) used per [index](https://www.cockroachlabs.com/docs/v23.1/indexes) is shown even when there is a max-size limit on the SQL API. [#101785][#101785]
+- Fixed a bug that caused internal errors when executing [user-defined functions]({% link v23.1/user-defined-functions.md %}) with empty bodies. This bug was only present in alpha pre-release versions of 23.1. [#101383][#101383]
+- Fixed a bug that caused a [restore]({% link v23.1/restore.md %}) to fail occasionally due to incorrect schema ID resolution when restoring a [backup]({% link v23.1/backup.md %}) with [user-defined schemas]({% link v23.1/schema-design-schema.md %}). [#101310][#101310]
+- Fixed a bug in parsing a [`search_path`]({% link v23.1/sql-name-resolution.md %}#current-schema) with a quote in it when specified in the [connection string]({% link v23.1/connection-parameters.md %}). Also, the `search_path` [session variable]({% link v23.1/set-vars.md %}) now supports schema names that have commas in them. [#101492][#101492]
+- Fixed a bug that has existed since [user-defined functions]({% link v23.1/user-defined-functions.md %}) were introduced that could cause a function call to resolve to the wrong function after changes to the [schema search path]({% link v23.1/sql-name-resolution.md %}#current-schema). [#101513][#101513]
+- Previously, CockroachDB v23.1 alpha and beta versions would panic on [`cockroach start`]({% link v23.1/cockroach-start.md %}) command when the `GOMEMLIMIT` environment variable was set and the `--max-go-memory` flag wasn't specified. This is now fixed. [#101565][#101565]
+- Fixed a bug that caused errors in test builds and potentially incorrect results in release builds when invoking a [user-defined function]({% link v23.1/user-defined-functions.md %}) with a [subquery]({% link v23.1/subqueries.md %}) argument. This bug was only present in v23.1 alpha versions. [#101639][#101639]
+- Fixed an internal error that could occur when the `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}) is on and the input to the [lookup join]({% link v23.1/joins.md %}#lookup-joins) is a `SELECT` of [scalar expressions]({% link v23.1/scalar-expressions.md %}) (e.g., `1+1`). Also, [subqueries]({% link v23.1/subqueries.md %}) with no [home region]({% link v23.1/multiregion-overview.md %}#table-localities) now error out with `enforce_home_region` set. [#101504][#101504]
+- Point [inserts]({% link v23.1/insert.md %}) and [updates]({% link v23.1/update.md %}) that write to a remote region of a table created with the [`REGIONAL BY ROW AS`]({% link v23.1/create-table.md %}#create-a-table-with-a-regional-by-row-locality-using-a-custom-region-column) clause will now error out. [#101708][#101708]
+- Fixed a bug in the [built-in functions]({% link v23.1/functions-and-operators.md %}) `pg_get_indexdef` and `col_description` that could cause the functions to return errors if the user created tables named `pg_indexes` or `pg_attribute`. Or, if the user created a schema named `system` with a table named `comments`. This bug was only present in pre-release versions of v23.1. [#101690][#101690]
+- Fixed a bug where, when CockroachDB failed to retrieve [contention information]({% link v23.1/performance-best-practices-overview.md %}#transaction-contention), the full [Insights page]({% link v23.1/ui-insights-page.md %}) would return an error. Now the Insights page will load even when there is an issue with decoding contention information. [#101784][#101784]
+- Fixed a bug to ensure that the [list of fingerprints]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) used per [index]({% link v23.1/indexes.md %}) is shown even when there is a max-size limit on the SQL API. [#101785][#101785]
Contributors
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-rc.1.md b/src/current/_includes/releases/v23.1/v23.1.0-rc.1.md
index 0b41f9eb609..ba2635f831d 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-rc.1.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-rc.1.md
@@ -6,35 +6,35 @@ Release Date: May 2, 2023
SQL language changes
-- Two views have been added to the [`crdb_internal` system catalog](https://www.cockroachlabs.com/docs/v23.1/crdb-internal): `crdb_internal.statement_activity` surfaces data in the persisted `system.statement_activity` table, and `crdb_internal.transaction_activity` surfaces the `system.transaction_activity` table. [#102047][#102047]
+- Two views have been added to the [`crdb_internal` system catalog]({% link v23.1/crdb-internal.md %}): `crdb_internal.statement_activity` surfaces data in the persisted `system.statement_activity` table, and `crdb_internal.transaction_activity` surfaces the `system.transaction_activity` table. [#102047][#102047]
- Span statistics are now unavailable on mixed-version clusters. [#101878][#101878]
DB Console changes
-- Timestamps are now displayed in DB Console in the timezone specified in the `ui.display_timezone` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), if set. Currently supported timezones are `Coordinated Universal Time` and `America/New_York`. [#102241][#102241]
-- DB Console now limits historical data for SQL Activity pages to 200000 rows by default, based on the new `sql.stats.activity.persisted_rows.max` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). A background job automatically prunes the system tables `transaction_activity` and `statement_activity`. [#101995][#101995]
-- Improved performance when viewing the [`crdb_internal.transaction_contention_events` table](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) in DB Console if there are a large number of rows. [#101871][#101871]
+- Timestamps are now displayed in DB Console in the timezone specified in the `ui.display_timezone` [cluster setting]({% link v23.1/cluster-settings.md %}), if set. Currently supported timezones are `Coordinated Universal Time` and `America/New_York`. [#102241][#102241]
+- DB Console now limits historical data for SQL Activity pages to 200000 rows by default, based on the new `sql.stats.activity.persisted_rows.max` [cluster setting]({% link v23.1/cluster-settings.md %}). A background job automatically prunes the system tables `transaction_activity` and `statement_activity`. [#101995][#101995]
+- Improved performance when viewing the [`crdb_internal.transaction_contention_events` table]({% link v23.1/crdb-internal.md %}) in DB Console if there are a large number of rows. [#101871][#101871]
Bug fixes
- Fixed a bug introduced prior to v22.1 where an `EXPORT` statement could be incorrectly evaluated and result in a node panic or incorrect query results if it had projection or rendering on top of the `EXPORT`, such as the statement `WITH cte AS (EXPORT INTO CSV 'nodelocal://1/export1/' FROM SELECT * FROM t) SELECT filename FROM cte;`. Only the presentation of the query result was affected, not the exported data. [#101806][#101806]
- The descriptions of the `rebalancing.readbytespersecond` and `rebalancing.writebytespersecond` metrics now correctly reference bytes read and bytes written, respectively. [#101710][#101710]
-- Fixed a rare bug introduced prior to v22.1 where distributed plans could cause the graceful drain of a node to become stuck retrying forever during [node shutdown](https://www.cockroachlabs.com/docs/v23.1/node-shutdown). This bug leads to errors like `drain details: distSQL execution flows:`, together with a non-zero number of flows that is not reducing over a long period of time. [#101884][#101884]
-- Fixed a bug where a [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) operation with `skip_localities_check` could fail with errors if regions were missing on a cluster. [#101798][#101798]
-- Fixed a bug introduced in testing releases of v23.1 that could cause incorrect results for queries with `STRICT` [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). [#101951][#101951]
+- Fixed a rare bug introduced prior to v22.1 where distributed plans could cause the graceful drain of a node to become stuck retrying forever during [node shutdown]({% link v23.1/node-shutdown.md %}). This bug leads to errors like `drain details: distSQL execution flows:`, together with a non-zero number of flows that is not reducing over a long period of time. [#101884][#101884]
+- Fixed a bug where a [`RESTORE`]({% link v23.1/restore.md %}) operation with `skip_localities_check` could fail with errors if regions were missing on a cluster. [#101798][#101798]
+- Fixed a bug introduced in testing releases of v23.1 that could cause incorrect results for queries with `STRICT` [user-defined functions]({% link v23.1/user-defined-functions.md %}). [#101951][#101951]
- Fixed a rare bug that could cause keys to be unexpectedly deleted locally within a store by replica rebalancing during a write heavy workload. [#102166][#102166]
-- Fixed a bug where a failed or cancelled [`IMPORT`](https://www.cockroachlabs.com/docs/v23.1/import) operation could leave some of the imported rows behind after it was cancelled, if the writing processes were slow enough to continue writing after the cleanup process started. [#102246][#102246]
-- Fixed a bug in the behavior of the `enforce_home_region` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) that may have allowed a hash join to be favored over a lookup join, or failed to error out remote accesses done by uniqueness checks for mutations on [`REGIONAL BY ROW` tables](https://www.cockroachlabs.com/docs/v23.1/regional-tables). [#102287][#102287]
-- Fixed a bug introduced in testing releases of v23.1 where a node could crash when evaluating a [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) command when the schema had `INT2` or `INT4` type. [#102307][#102307]
+- Fixed a bug where a failed or cancelled [`IMPORT`]({% link v23.1/import.md %}) operation could leave some of the imported rows behind after it was cancelled, if the writing processes were slow enough to continue writing after the cleanup process started. [#102246][#102246]
+- Fixed a bug in the behavior of the `enforce_home_region` [session variable]({% link v23.1/set-vars.md %}) that may have allowed a hash join to be favored over a lookup join, or failed to error out remote accesses done by uniqueness checks for mutations on [`REGIONAL BY ROW` tables]({% link v23.1/regional-tables.md %}). [#102287][#102287]
+- Fixed a bug introduced in testing releases of v23.1 where a node could crash when evaluating a [`COPY`]({% link v23.1/copy-from.md %}) command when the schema had `INT2` or `INT4` type. [#102307][#102307]
- Fixed a bug where a backup of a key's revision history may not correctly be restored to the proper revision of the key if it is split across multiple sorted string tables. [#102342][#102342]
-- Fixed a bug introduced in testing releases of v23.1 where a user could be prevented from logging in or viewing or changing [`GRANT`s](https://www.cockroachlabs.com/docs/v23.1/grant) if the cluster had a long period of inactivity. [#102488][#102488]
+- Fixed a bug introduced in testing releases of v23.1 where a user could be prevented from logging in or viewing or changing [`GRANT`s]({% link v23.1/grant.md %}) if the cluster had a long period of inactivity. [#102488][#102488]
- Fixed a bug where a node that transferred a lease away and missed a liveness heartbeat could then erroneously update the closed timestamp during the stasis period of its liveness. This could lead to closed timestamp invariant violation and could cause the node to crash. In extreme cases, this could lead to inconsistencies in read-only queries. [#102602][#102602]
- Fixed a bug that caused memory leaks when a closed or cancelled connection was released. [#101810][#101810]
Performance improvements
-- [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-sql-dashboard) dashboards now default to using a table optimized with the top data for the most used cases. Otherwise, they use persisted data if available, and in-memory data otherwise. [#102310][#102310]
-- Static erroring of some locality-optimized lookup [joins](https://www.cockroachlabs.com/docs/v23.1/joins) is now handled dynamically during query execution. [#102287][#102287]
+- [SQL Activity]({% link v23.1/ui-sql-dashboard.md %}) dashboards now default to using a table optimized with the top data for the most used cases. Otherwise, they use persisted data if available, and in-memory data otherwise. [#102310][#102310]
+- Static erroring of some locality-optimized lookup [joins]({% link v23.1/joins.md %}) is now handled dynamically during query execution. [#102287][#102287]
Miscellaneous
diff --git a/src/current/_includes/releases/v23.1/v23.1.0-rc.2.md b/src/current/_includes/releases/v23.1/v23.1.0-rc.2.md
index 8da919350b2..252ecfdf4a9 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0-rc.2.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0-rc.2.md
@@ -6,7 +6,7 @@ Release Date: May 4, 2023
Bug fixes
-- Fixed a bug introduced in versions 22.1.19, 22.2.8, and pre-release versions of 23.1 that could cause queries to return spurious insufficient [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) errors. For the bug to occur, two databases would need to have duplicate tables, each with a [foreign key](https://www.cockroachlabs.com/docs/v23.1/foreign-key) reference to another table. The error would then occur if the same SQL string was executed against both databases concurrently by users that have [privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) over only one of the tables. [#102651][#102651]
+- Fixed a bug introduced in versions 22.1.19, 22.2.8, and pre-release versions of 23.1 that could cause queries to return spurious insufficient [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) errors. For the bug to occur, two databases would need to have duplicate tables, each with a [foreign key]({% link v23.1/foreign-key.md %}) reference to another table. The error would then occur if the same SQL string was executed against both databases concurrently by users that have [privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) over only one of the tables. [#102651][#102651]
diff --git a/src/current/_includes/releases/v23.1/v23.1.0.md b/src/current/_includes/releases/v23.1/v23.1.0.md
index bfff7511a04..5d7f86830bd 100644
--- a/src/current/_includes/releases/v23.1/v23.1.0.md
+++ b/src/current/_includes/releases/v23.1/v23.1.0.md
@@ -2,7 +2,7 @@
Release Date: May 15, 2023
-With the release of CockroachDB v23.1, we've added new capabilities in CockroachDB to help you migrate, build, and operate more efficiently. Check out a [summary of the most significant user-facing changes](#v23-1-0-feature-highlights) and then [upgrade to CockroachDB v23.1](https://www.cockroachlabs.com/docs/v23.1/upgrade-cockroach-version).
+With the release of CockroachDB v23.1, we've added new capabilities in CockroachDB to help you migrate, build, and operate more efficiently. Check out a [summary of the most significant user-facing changes](#v23-1-0-feature-highlights) and then [upgrade to CockroachDB v23.1]({% link v23.1/upgrade-cockroach-version.md %}).
{% include releases/new-release-downloads-docker-image.md release=include.release advisory_key="a103220"%}
@@ -11,7 +11,7 @@ With the release of CockroachDB v23.1, we've added new capabilities in Cockroach
This section summarizes the most significant user-facing changes in v23.1.0. For a complete list of features and changes, including bug fixes and performance improvements, see the [release notes]({% link releases/index.md %}#testing-releases) for previous testing releases. You can also search for [what's new in v23.1 in our docs](https://www.cockroachlabs.com/docs/search?query=new+in+v23.1).
{{site.data.alerts.callout_info}}
-The features highlighted below are freely available in CockroachDB {{ site.data.products.core }} and do not require an [enterprise license](https://www.cockroachlabs.com/docs/v23.1/cockroach-demo) to test enterprise features in a local, temporary cluster.
+The features highlighted below are freely available in CockroachDB {{ site.data.products.core }} and do not require an [enterprise license]({% link v23.1/cockroach-demo.md %}) to test enterprise features in a local, temporary cluster.
{{site.data.alerts.end}}
- [SQL](#v23-1-0-sql)
@@ -229,7 +229,7 @@ Asyncpg is commonly used with ORM libraries such as SQLAlchemy to provide a simp
Change data capture (Changefeeds)
{{site.data.alerts.callout_info}}
-The following are [enterprise-only](https://www.cockroachlabs.com/docs/v23.1/enterprise-licensing) features. [Request a 30-day trial license](https://www.cockroachlabs.com/get-cockroachdb/enterprise/) to try them out.
+The following are [enterprise-only]({% link v23.1/enterprise-licensing.md %}) features. [Request a 30-day trial license](https://www.cockroachlabs.com/get-cockroachdb/enterprise/) to try them out.
{{site.data.alerts.end}}
@@ -435,28 +435,28 @@ This change will only apply to new clusters. Existing clusters will retain the 2
Backward-incompatible changes
-Before [upgrading to CockroachDB v23.1](https://www.cockroachlabs.com/docs/v23.1/upgrade-cockroach-version), be sure to review the following backward-incompatible changes, as well as key cluster setting changes, and adjust your deployment as necessary.
+Before [upgrading to CockroachDB v23.1]({% link v23.1/upgrade-cockroach-version.md %}), be sure to review the following backward-incompatible changes, as well as key cluster setting changes, and adjust your deployment as necessary.
-- Replaced the `cdc_prev()` [function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) in favor of a `cdc_prev` tuple. This is an incompatible change that may break [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) that use the previous `cdc_prev()` function. [#85177][#85177]
-- [`SHOW RANGES FOR TABLE`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) now includes rows for all indexes that support the table. Prior to this change, `SHOW RANGES FOR TABLE foo` was an alias for `SHOW RANGES FOR INDEX foo@primary`. This was causing confusion, as it would miss data for secondary indexes. It is still possible to filter to just the primary index using `SHOW RANGES FOR INDEX foo@primary`. The statement output now also includes the index name. [#93545][#93545]
-- CockroachDB now supports sharing storage ranges across multiple indexes/tables. This behavior is not enabled by default in v23.1, but will be enabled by default in a future release. When the behavior is enabled, there will no longer be a guarantee that there is at most one SQL object (e.g., table/index/sequence/materialized view) per storage range. As a result, the columns `table_id`, `database_name`, `schema_name`, `table_name` and `index_name` in `crdb_internal.ranges` and `.ranges_no_leases` will become meaningless, since a range will no longer be attributed to a single table/index. In v23.1, the default behavior of [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) is retained, but you should consider setting the [`sql.show_ranges_deprecated_behavior.enabled`](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-sql-show-ranges-deprecated-behavior-enabled) cluster setting to `false`. This will have the following effects that will become the defaults in a future release:
+- Replaced the `cdc_prev()` [function]({% link v23.1/functions-and-operators.md %}) in favor of a `cdc_prev` tuple. This is an incompatible change that may break [changefeeds]({% link v23.1/change-data-capture-overview.md %}) that use the previous `cdc_prev()` function. [#85177][#85177]
+- [`SHOW RANGES FOR TABLE`]({% link v23.1/show-ranges.md %}) now includes rows for all indexes that support the table. Prior to this change, `SHOW RANGES FOR TABLE foo` was an alias for `SHOW RANGES FOR INDEX foo@primary`. This was causing confusion, as it would miss data for secondary indexes. It is still possible to filter to just the primary index using `SHOW RANGES FOR INDEX foo@primary`. The statement output now also includes the index name. [#93545][#93545]
+- CockroachDB now supports sharing storage ranges across multiple indexes/tables. This behavior is not enabled by default in v23.1, but will be enabled by default in a future release. When the behavior is enabled, there will no longer be a guarantee that there is at most one SQL object (e.g., table/index/sequence/materialized view) per storage range. As a result, the columns `table_id`, `database_name`, `schema_name`, `table_name` and `index_name` in `crdb_internal.ranges` and `.ranges_no_leases` will become meaningless, since a range will no longer be attributed to a single table/index. In v23.1, the default behavior of [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) is retained, but you should consider setting the [`sql.show_ranges_deprecated_behavior.enabled`]({% link v23.1/cluster-settings.md %}#setting-sql-show-ranges-deprecated-behavior-enabled) cluster setting to `false`. This will have the following effects that will become the defaults in a future release:
- - The aforementioned columns in the `crdb_internal` virtual tables will be removed. Existing code can use the updated output of the [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) statement instead, optionally using `WITH KEYS` to expose the raw start/end keys.
+ - The aforementioned columns in the `crdb_internal` virtual tables will be removed. Existing code can use the updated output of the [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) statement instead, optionally using `WITH KEYS` to expose the raw start/end keys.
- `SHOW RANGES FROM DATABASE` continues to report one row per range, but stops returning the database / schema / table / index name.
- `SHOW RANGES FROM TABLE` continues to report one row per range, but stops returning the index name. Suggested replacements:
- Instead of: `SELECT range_id FROM crdb_internal.ranges WHERE table_name = 'x'`, use: `SELECT range_id FROM [SHOW RANGES FROM TABLE x]`
- Instead of `SELECT range_id FROM crdb_internal.ranges WHERE table_name = $1 OR table_id = $2` (variable / unpredictable table name or ID), use: `SELECT range_id FROM [SHOW RANGES FROM CURRENT_CATALOG WITH TABLES] WHERE table_name = $1 OR table_id = $2`
- Instead of `SELECT start_key FROM crdb_internal.ranges WHERE table_name = 'x'`, use: `SELECT raw_start_key FROM [SHOW RANGES FROM TABLE x WITH KEYS]`
- Instead of `SELECT start_key FROM crdb_internal.ranges WHERE table_name = $1 OR table_id = $2` (unpredictable / variable table name or ID), use: `SELECT raw_start_key FROM [SHOW RANGES FROM CURRENT_CATALOG WITH TABLES, KEYS] WHERE table_name = $1 OR table_id = $2` [#93644][#93644]
-- When the [cluster setting `sql.show_ranges_deprecated_behavior.enabled` is set to `false` (recommended in v23.1)](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-sql-show-ranges-deprecated-behavior-enabled), the format of the columns `start_key` and `end_key` for [`SHOW RANGES FROM DATABASE`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) and `SHOW RANGES FROM TABLE` have been extended to include which table/index the key belongs to. This is necessary because a range can now contain data from more than one table/index. [#93644][#93644]
-- When the [cluster setting `sql.show_ranges_deprecated_behavior.enabled` is set to `false` (recommended in v23.1)](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-sql-show-ranges-deprecated-behavior-enabled), the output of [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) no longer includes `range_size`, `range_size_mb`, `lease_holder`, or `lease_holder_localities` by default. This ensures that `SHOW RANGES` remains fast in the common case. Use the new option [`WITH DETAILS`](https://www.cockroachlabs.com/docs/v23.1/show-ranges#options) to include these columns. [#93644][#93644]
+- When the [cluster setting `sql.show_ranges_deprecated_behavior.enabled` is set to `false` (recommended in v23.1)]({% link v23.1/cluster-settings.md %}#setting-sql-show-ranges-deprecated-behavior-enabled), the format of the columns `start_key` and `end_key` for [`SHOW RANGES FROM DATABASE`]({% link v23.1/show-ranges.md %}) and `SHOW RANGES FROM TABLE` have been extended to include which table/index the key belongs to. This is necessary because a range can now contain data from more than one table/index. [#93644][#93644]
+- When the [cluster setting `sql.show_ranges_deprecated_behavior.enabled` is set to `false` (recommended in v23.1)]({% link v23.1/cluster-settings.md %}#setting-sql-show-ranges-deprecated-behavior-enabled), the output of [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) no longer includes `range_size`, `range_size_mb`, `lease_holder`, or `lease_holder_localities` by default. This ensures that `SHOW RANGES` remains fast in the common case. Use the new option [`WITH DETAILS`]({% link v23.1/show-ranges.md %}#options) to include these columns. [#93644][#93644]
- The format of the columns `start_key` and `end_key` for `SHOW RANGE ... FOR ROW` has been changed to be consistent with the output of `SHOW RANGES FROM INDEX`. [#93644][#93644]
- Changefeeds using "preview" expressions (released in v23.1.0) and that access the previous state of the row using the `cdc_prev()` function will no longer work and will need to be recreated with new syntax. [#94429][#94429]
- Some of the transformations specific to changefeeds have been deprecated and replaced. These functions were released in limited access in v22.2. Deprecated changefeed transformations continue to function. Closely monitor changefeeds that are created during upgrade. While effort was made to maintain backward compatibility, the updated changefeed transformation may produce slightly different output, such as different column names. [#96295][#96295]
- Fixed a bug where, when `server.identity_map.configuration` was used, CockroachDB did not verify the client-provided username against the target mappings. Note that **this means that the client must now provide a valid DB username.** This requirement is compatible with PostgreSQL; it was not previously required by CockroachDB but it is now. This does not apply when identity maps are not in use. [#94915][#94915]
- Previously, the type of the `replicas`, `voting_replicas`,`non_voting_replicas` and `learner_replicas` in `crdb_internal.ranges` were overridden to `INT2VECTOR` causing incompatible indexing between `.ranges` and `.ranges_no_leases`. Now the types of those columns in the two tables are set to `INT[]`. [#96287][#96287]
-- The output of the [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges) command for the `crdb_internal.ranges` and `crdb_internal.ranges_no_leases` tables has been updated, and the previous output is deprecated. To enable the new command output, set the `sql.show_ranges_deprecated_behavior.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to `false`. The new output will become default in v23.2. [#99618][#99618]
-- Previously, if a user specified a [`search_path`](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#current-schema) in the connection string parameters, it would always be treated as case sensitive. Now, in order to have the schema names in the `search_path` respect case, the user must include double quotes around the name. [#101492][#101492]
+- The output of the [`SHOW RANGES`]({% link v23.1/show-ranges.md %}) command for the `crdb_internal.ranges` and `crdb_internal.ranges_no_leases` tables has been updated, and the previous output is deprecated. To enable the new command output, set the `sql.show_ranges_deprecated_behavior.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) to `false`. The new output will become default in v23.2. [#99618][#99618]
+- Previously, if a user specified a [`search_path`]({% link v23.1/sql-name-resolution.md %}#current-schema) in the connection string parameters, it would always be treated as case sensitive. Now, in order to have the schema names in the `search_path` respect case, the user must include double quotes around the name. [#101492][#101492]
- The deprecated CLI command `debug unsafe-remove-dead-replicas` has been removed. Use `debug recover` instead. [#89150][#89150]
Key Cluster Setting Changes
@@ -465,31 +465,31 @@ The following changes should be reviewed prior to upgrading. Default cluster set
| Category | Description | Change Type | Backport version |
|---|---|---|---|
-| SQL language change | The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `sql.ttl.default_range_concurrency` and table storage parameter `ttl_range_concurrency` are no longer configurable. [#89392](https://github.com/cockroachdb/cockroach/pull/89392) | No longer configurable | v22.2.1 |
-| SQL language change | The `sql.distsql.max_running_flows` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) has been removed. [#84888](https://github.com/cockroachdb/cockroach/pull/84888) | Removed | None |
-| Operational change | The [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.web_session.purge.period` and `server.web_session.purge.max_deletions_per_cycle`, which were specific to the cleanup function for `system.web_sessions`, have been replaced by `server.log_gc.period` and `server.log_gc.max_deletions_per_cycle` which apply to the cleanup function for `system.eventlog`, `system.rangelog` and `system.web_sessions` equally. [#90789](https://github.com/cockroachdb/cockroach/pull/90789) | Removed, repurposed | None |
-| Operational change | The [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.web_session.auto_logout.timeout` has been removed. [#90789](https://github.com/cockroachdb/cockroach/pull/90789) | Removed, defaults to true | None |
-| Operational change | The [load-based splitter](https://www.cockroachlabs.com/docs/v23.1/load-based-splitting) now supports using request CPU usage to split ranges. This is introduced with the previous cluster setting `kv.allocator.load_based_rebalancing.objective`, which when set to `cpu`, will use request CPU usage. The threshold above which CPU usage of a range is considered for splitting is defined in the cluster setting `kv.range_split.load_cpu_threshold`, which has a default value of `250ms`. (Relates to #100211 in this table.) [#96128](https://github.com/cockroachdb/cockroach/pull/96128) | Repurposed | None |
-| Operational change | The `kv.range_split.load_cpu_threshold` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-kv-range-split-load-cpu-threshold) now has a minimum setting value of `10ms`. Previously there was no minimum so, while unlikely, this could have an impact if you had chosen a custom setting lower than the established minimum. [#98250](https://github.com/cockroachdb/cockroach/pull/98250) | New minimum | None |
-| Security update | The new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.user_login.downgrade_scram_stored_passwords_to_bcrypt.enabled`, which allows you to migrate passwords from SCRAM to bcrypt during user authentication, defaults to `true`. If it is `true` and if `server.user_login.password_encryption` is `crdb-bcrypt`, then during login, the stored hashed password will be migrated from SCRAM to bcrypt. [#97429](https://github.com/cockroachdb/cockroach/pull/97429) | New setting | v22.2.6 |
-| Security update | The default value for the `server.user_login.password_hashes.default_cost.scram_sha_256` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) is now 10610. (Previously the default was 119680.) The old value was found to have been too high for many types of client hardware, and in some cases could cause regressions in connection latency. The new value was chosen by running tests with clients that have 1 or 2 vCPUs provisioned. Additionally, the new cluster setting `server.user_login.rehash_scram_stored_passwords_on_cost_change.enabled` was added, and defaults to `true`. If it is `true` and the stored SCRAM password for a user has a different cost than the configured default cost, then the next time the user logs in, their password will automatically be rehashed using the configured default cost. If the rehashing is not desired, then operators should update the `server.user_login.password_hashes.default_cost.scram_sha_256` cluster setting to the value they desire before upgrading. This change is being backported to [v22.2](https://www.cockroachlabs.com/docs/releases/v22.2). [#98254](https://github.com/cockroachdb/cockroach/pull/98254) | Changed default | v22.2.7 |
-| Command-line change | The `--drain-wait` argument to the [`cockroach node drain`](https://www.cockroachlabs.com/docs/v23.1/cockroach-node) command will be automatically increased if the command detects that it is smaller than the sum of the [cluster settings](https://www.cockroachlabs.com/docs/v23.1/node-shutdown#cluster-settings) `server.shutdown.drain_wait`, `server.shutdown.connection_wait`, `server.shutdown.query_wait` times two, and `server.shutdown.lease_transfer_wait`. If the `--drain-wait` argument is 0, then no timeout is used. This recommendation [was already documented](https://www.cockroachlabs.com/docs/v23.1/node-shutdown#drain-timeout), but now the advice will be applied automatically. [#98390](https://github.com/cockroachdb/cockroach/pull/98390) | New effect | v22.2.1 |
-| Bug fix | RPC connections between nodes now require RPC connections to be established in both directions, otherwise the connection will be closed. This is done to prevent asymmetric network partitions where nodes are able to send outbound messages but not receive inbound messages, which could result in persistent unavailability. This behavior can be disabled by the [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `rpc.dialback.enabled`. [#94778](https://github.com/cockroachdb/cockroach/pull/94778) | New setting, enabled by default | None |
-| Bug fix | Fixed a rare bug introduced in v22.2.0 that could cause a node to crash with an `attempting to append refresh spans after the tracked timestamp has moved forward` error when querying virtual tables in the [`crdb_internal`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal) or [`pg_catalog`](https://www.cockroachlabs.com/docs/v23.1/pg-catalog) system catalogs. If you are experiencing this bug, set the `sql.distsql.use_streamer.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) to `false` before upgrading a cluster to v23.1. [#99443](https://github.com/cockroachdb/cockroach/pull/99443) | New guidance | v22.2.8 |
-| Bug fix | The [**Hot Ranges** page](https://www.cockroachlabs.com/docs/v23.1/ui-hot-ranges-page) DB Console page would show hot ranges by CPU and not QPS (queries per second), depending on the value of the `kv.allocator.load_based_rebalancing.objective` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) (default `cpu`). Now the page will always collect statistics based on QPS. (Relates to #96128 in this table.) [#100211](https://github.com/cockroachdb/cockroach/pull/100211) | Repurposed setting | No |
+| SQL language change | The [cluster setting]({% link v23.1/cluster-settings.md %}) `sql.ttl.default_range_concurrency` and table storage parameter `ttl_range_concurrency` are no longer configurable. [#89392](https://github.com/cockroachdb/cockroach/pull/89392) | No longer configurable | v22.2.1 |
+| SQL language change | The `sql.distsql.max_running_flows` [cluster setting]({% link v23.1/cluster-settings.md %}) has been removed. [#84888](https://github.com/cockroachdb/cockroach/pull/84888) | Removed | None |
+| Operational change | The [cluster settings]({% link v23.1/cluster-settings.md %}) `server.web_session.purge.period` and `server.web_session.purge.max_deletions_per_cycle`, which were specific to the cleanup function for `system.web_sessions`, have been replaced by `server.log_gc.period` and `server.log_gc.max_deletions_per_cycle` which apply to the cleanup function for `system.eventlog`, `system.rangelog` and `system.web_sessions` equally. [#90789](https://github.com/cockroachdb/cockroach/pull/90789) | Removed, repurposed | None |
+| Operational change | The [cluster setting]({% link v23.1/cluster-settings.md %}) `server.web_session.auto_logout.timeout` has been removed. [#90789](https://github.com/cockroachdb/cockroach/pull/90789) | Removed, defaults to true | None |
+| Operational change | The [load-based splitter]({% link v23.1/load-based-splitting.md %}) now supports using request CPU usage to split ranges. This is introduced with the previous cluster setting `kv.allocator.load_based_rebalancing.objective`, which when set to `cpu`, will use request CPU usage. The threshold above which CPU usage of a range is considered for splitting is defined in the cluster setting `kv.range_split.load_cpu_threshold`, which has a default value of `250ms`. (Relates to #100211 in this table.) [#96128](https://github.com/cockroachdb/cockroach/pull/96128) | Repurposed | None |
+| Operational change | The `kv.range_split.load_cpu_threshold` [cluster setting]({% link v23.1/cluster-settings.md %}#setting-kv-range-split-load-cpu-threshold) now has a minimum setting value of `10ms`. Previously there was no minimum so, while unlikely, this could have an impact if you had chosen a custom setting lower than the established minimum. [#98250](https://github.com/cockroachdb/cockroach/pull/98250) | New minimum | None |
+| Security update | The new [cluster setting]({% link v23.1/cluster-settings.md %}) `server.user_login.downgrade_scram_stored_passwords_to_bcrypt.enabled`, which allows you to migrate passwords from SCRAM to bcrypt during user authentication, defaults to `true`. If it is `true` and if `server.user_login.password_encryption` is `crdb-bcrypt`, then during login, the stored hashed password will be migrated from SCRAM to bcrypt. [#97429](https://github.com/cockroachdb/cockroach/pull/97429) | New setting | v22.2.6 |
+| Security update | The default value for the `server.user_login.password_hashes.default_cost.scram_sha_256` [cluster setting]({% link v23.1/cluster-settings.md %}) is now 10610. (Previously the default was 119680.) The old value was found to have been too high for many types of client hardware, and in some cases could cause regressions in connection latency. The new value was chosen by running tests with clients that have 1 or 2 vCPUs provisioned. Additionally, the new cluster setting `server.user_login.rehash_scram_stored_passwords_on_cost_change.enabled` was added, and defaults to `true`. If it is `true` and the stored SCRAM password for a user has a different cost than the configured default cost, then the next time the user logs in, their password will automatically be rehashed using the configured default cost. If the rehashing is not desired, then operators should update the `server.user_login.password_hashes.default_cost.scram_sha_256` cluster setting to the value they desire before upgrading. This change is being backported to [v22.2](https://www.cockroachlabs.com/docs/releases/v22.2). [#98254](https://github.com/cockroachdb/cockroach/pull/98254) | Changed default | v22.2.7 |
+| Command-line change | The `--drain-wait` argument to the [`cockroach node drain`]({% link v23.1/cockroach-node.md %}) command will be automatically increased if the command detects that it is smaller than the sum of the [cluster settings]({% link v23.1/node-shutdown.md %}#cluster-settings) `server.shutdown.drain_wait`, `server.shutdown.connection_wait`, `server.shutdown.query_wait` times two, and `server.shutdown.lease_transfer_wait`. If the `--drain-wait` argument is 0, then no timeout is used. This recommendation [was already documented]({% link v23.1/node-shutdown.md %}#drain-timeout), but now the advice will be applied automatically. [#98390](https://github.com/cockroachdb/cockroach/pull/98390) | New effect | v22.2.1 |
+| Bug fix | RPC connections between nodes now require RPC connections to be established in both directions, otherwise the connection will be closed. This is done to prevent asymmetric network partitions where nodes are able to send outbound messages but not receive inbound messages, which could result in persistent unavailability. This behavior can be disabled by the [cluster setting]({% link v23.1/cluster-settings.md %}) `rpc.dialback.enabled`. [#94778](https://github.com/cockroachdb/cockroach/pull/94778) | New setting, enabled by default | None |
+| Bug fix | Fixed a rare bug introduced in v22.2.0 that could cause a node to crash with an `attempting to append refresh spans after the tracked timestamp has moved forward` error when querying virtual tables in the [`crdb_internal`]({% link v23.1/crdb-internal.md %}) or [`pg_catalog`]({% link v23.1/pg-catalog.md %}) system catalogs. If you are experiencing this bug, set the `sql.distsql.use_streamer.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) to `false` before upgrading a cluster to v23.1. [#99443](https://github.com/cockroachdb/cockroach/pull/99443) | New guidance | v22.2.8 |
+| Bug fix | The [**Hot Ranges** page]({% link v23.1/ui-hot-ranges-page.md %}) DB Console page would show hot ranges by CPU and not QPS (queries per second), depending on the value of the `kv.allocator.load_based_rebalancing.objective` [cluster setting]({% link v23.1/cluster-settings.md %}) (default `cpu`). Now the page will always collect statistics based on QPS. (Relates to #96128 in this table.) [#100211](https://github.com/cockroachdb/cockroach/pull/100211) | Repurposed setting | No |
Deprecations
- Ordinal column references (e.g., `SELECT @1, @2 FROM t`) are now deprecated. By default, statements using this syntax will now result in an error. If desired, such statements can be allowed using the session setting `SET allow_ordinal_column_references=true`. Support for ordinal column references is scheduled to be removed in upcoming version v23.2. [#93754][#93754]
-- The `CONTROLCHANGEFEED` [role option](https://www.cockroachlabs.com/docs/v23.1/alter-role#role-options) will be deprecated in the future (see issue [#94757](https://github.com/cockroachdb/cockroach/issues/94757)). With this change, usages of the `CONTROLCHANGEFEED` role option will come with a deprecation warning. Its existing behavior remains the same. The `SELECT` and `CHANGEFEED` privileges will be used for changefeeds henceforth:
+- The `CONTROLCHANGEFEED` [role option]({% link v23.1/alter-role.md %}#role-options) will be deprecated in the future (see issue [#94757](https://github.com/cockroachdb/cockroach/issues/94757)). With this change, usages of the `CONTROLCHANGEFEED` role option will come with a deprecation warning. Its existing behavior remains the same. The `SELECT` and `CHANGEFEED` privileges will be used for changefeeds henceforth:
- The `SELECT` privilege on a set of tables allows a user to run core changefeeds against them.
- The `CHANGEFEED` privilege on a set of tables allows a user to run enterprise changefeeds on them, and also manage the underlying changefeed job (ie. view, pause, cancel, and resume the job).
- Notably, a new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `changefeed.permissions.require_external_connection_sink.enabled` is added and set to `false` by default. Enabling this setting restricts users with `CHANGEFEED` on a set of tables to create enterprise changefeeds into external connections only. To use a given external connection, a user typically needs the `USAGE` privilege on it. Note that `ALTER DEFAULT PRIVILEGES` can be used with both the `CHANGEFEED` and `SELECT` privileges to assign coarse-grained permissions (i.e., assign permissions to all tables in a schema rather than manually assign them for each table). [#94796][#94796]
-- Deprecated the `PGDUMP` and `MYSQLDUMP` formats for [`IMPORT`](https://www.cockroachlabs.com/docs/v23.1/import). They are still present, but will be removed in a future release. See the [Migration Overview](https://www.cockroachlabs.com/docs/v23.1/migration-overview) page for alternatives. [#96386][#96386]
+ Notably, a new [cluster setting]({% link v23.1/cluster-settings.md %}) `changefeed.permissions.require_external_connection_sink.enabled` is added and set to `false` by default. Enabling this setting restricts users with `CHANGEFEED` on a set of tables to create enterprise changefeeds into external connections only. To use a given external connection, a user typically needs the `USAGE` privilege on it. Note that `ALTER DEFAULT PRIVILEGES` can be used with both the `CHANGEFEED` and `SELECT` privileges to assign coarse-grained permissions (i.e., assign permissions to all tables in a schema rather than manually assign them for each table). [#94796][#94796]
+- Deprecated the `PGDUMP` and `MYSQLDUMP` formats for [`IMPORT`]({% link v23.1/import.md %}). They are still present, but will be removed in a future release. See the [Migration Overview]({% link v23.1/migration-overview.md %}) page for alternatives. [#96386][#96386]
Known limitations
-For information about new and unresolved limitations in CockroachDB v23.1, with suggested workarounds where applicable, see [Known Limitations](https://www.cockroachlabs.com/docs/v23.1/known-limitations).
+For information about new and unresolved limitations in CockroachDB v23.1, with suggested workarounds where applicable, see [Known Limitations]({% link v23.1/known-limitations.md %}).
Additional resources
@@ -499,10 +499,10 @@ Cockroach University | [Introduction to Distributed SQL and CockroachDB](https:/
Cockroach University | [Practical First Steps with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+practical-first-steps-with-crdb+self-paced/about) | This course will give you the tools you need to get started with CockroachDB. During the course, you will learn how to spin up a cluster, use the Admin UI to monitor cluster activity, and use SQL shell to solve a set of hands-on exercises.
Cockroach University | [Building a Highly Resilient Multi-region Database using CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-resilience-in-multi-region+self-paced/about) | This course is part of a series introducing solutions to running low-latency, highly resilient applications for data-intensive workloads on CockroachDB. In this course we focus on surviving large-scale infrastructure failures like losing an entire cloud region without losing data during recovery. We’ll show you how to use CockroachDB survival goals in a multi-region cluster to implement a highly resilient database that survives node or network failures across multiple regions with zero data loss.
Cockroach University | [Introduction to Serverless Databases and CockroachDB Serverless](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-serverless+self-paced/about) | This course introduces the core concepts behind serverless databases and gives you the tools you need to get started with CockroachDB Serverless. You will learn how serverless databases remove the burden of configuring, sizing, provisioning, securing, maintaining and dynamically scaling your database based on load. This means you simply pay for the serverless database resources you use.
-Docs | [Migration Overview](https://www.cockroachlabs.com/docs/v23.1/migration-overview) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
-Docs | [Developer Guide Overview](https://www.cockroachlabs.com/docs/v23.1/developer-guide-overview) | This page provides an overview of resources available to developers building applications on CockroachDB.
+Docs | [Migration Overview]({% link v23.1/migration-overview.md %}) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
+Docs | [Developer Guide Overview]({% link v23.1/developer-guide-overview.md %}) | This page provides an overview of resources available to developers building applications on CockroachDB.
Docs | [Security Overview](https://www.cockroachlabs.com/docs/v23.1/security-reference/security-overview) | The 23.1 release encapsulates a number of security milestones. See the security overview for a summary.
Docs | [Architecture Overview](https://www.cockroachlabs.com/docs/v23.1/architecture/overview) | This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.
-Docs | [SQL Feature Support](https://www.cockroachlabs.com/docs/v23.1/sql-feature-support) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
-Docs | [Change Data Capture Overview](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
-Docs | [Backup Architecture](https://www.cockroachlabs.com/docs/v23.1/backup-architecture) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
+Docs | [SQL Feature Support]({% link v23.1/sql-feature-support.md %}) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
+Docs | [Change Data Capture Overview]({% link v23.1/change-data-capture-overview.md %}) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
+Docs | [Backup Architecture]({% link v23.1/backup-architecture.md %}) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
diff --git a/src/current/_includes/releases/v23.1/v23.1.1.md b/src/current/_includes/releases/v23.1/v23.1.1.md
index 8098b813b27..72f1706cb09 100644
--- a/src/current/_includes/releases/v23.1/v23.1.1.md
+++ b/src/current/_includes/releases/v23.1/v23.1.1.md
@@ -6,7 +6,7 @@ Release Date: May 16, 2023
Bug fixes
-- In CockroachDB v23.1.0 and its testing releases, executing [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) to a target table that has multiple column families could corrupt the table. If data was copied into a table with existing rows, the data in those rows may be irrecoverable. The data would need to be dropped and re-[copied](https://www.cockroachlabs.com/docs/v23.1/copy-from) to be encoded correctly. This has now been fixed. See [Technical Advisory 103220](https://www.cockroachlabs.com/docs/advisories/a103220) for more information. [#103323][#103323]
+- In CockroachDB v23.1.0 and its testing releases, executing [`COPY`]({% link v23.1/copy-from.md %}) to a target table that has multiple column families could corrupt the table. If data was copied into a table with existing rows, the data in those rows may be irrecoverable. The data would need to be dropped and re-[copied]({% link v23.1/copy-from.md %}) to be encoded correctly. This has now been fixed. See [Technical Advisory 103220](https://www.cockroachlabs.com/docs/advisories/a103220) for more information. [#103323][#103323]
diff --git a/src/current/_includes/releases/v23.1/v23.1.11.md b/src/current/_includes/releases/v23.1/v23.1.11.md
index cc6ab8d2b3b..1d6bbb627fe 100644
--- a/src/current/_includes/releases/v23.1/v23.1.11.md
+++ b/src/current/_includes/releases/v23.1/v23.1.11.md
@@ -57,7 +57,7 @@ Release Date: October 2, 2023
- Fixed a bug so the filter on the [Statements Page](../v23.1/ui-statements-page.html) works when the app name is an empty string (represented as 'unset'). [#108985][#108985]
- Fixed a bug where a `SpanStatsRequest` would return post-replicated MVCC stats, which was causing incorrect output in [`SHOW RANGES ... WITH DETAILS`]({% link v23.1/show-ranges.md %}). Now, a `SpanStatsRequest` returns the logical MVCC stats for the requested span. [#109234][#109234]
- Fixed an issue with [the "full scan" filter in the UI]({% link v23.1/ui-sql-dashboard.md %}#full-table-index-scans), where the filter was not returning any results. [#109274][#109274]
-- Going to the [Transaction Details Page](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page#transaction-details-page) from [Workload Insights > High Contention](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page#high-contention) is fixed. Previously, the link would not show any results. [#109253][#109253]
+- Going to the [Transaction Details Page]({% link v23.1/ui-transactions-page.md %}#transaction-details-page) from [Workload Insights > High Contention]({% link v23.1/ui-insights-page.md %}#high-contention) is fixed. Previously, the link would not show any results. [#109253][#109253]
- Fixed the column names on the [`SELECT` queries]({% link v23.1/selection-queries.md %}) against the tables `crdb_internal.node_txn_execution_insights` and `crdb_internal.cluster_txn_execution_insights` during the [creation of debug.zip files]({% link v23.1/cockroach-debug-zip.md %}). [#109515][#109515]
- Fixed a bug that could cause some rows to be silently skipped during [`IMPORT`](../v23.1/import.html) when a node failed. [#109663][#109663]
- Fixed a bug in [geospatial queries]({% link v23.1/spatial-data-overview.md %}) where more rows could be returned by the query than expected. This could happen when a query filter of the form `ST_Distance(geog1, geog2) > constant` or `ST_MaxDistance(geom1, geom2) > constant`, where the operator was one of `>`, `<`, `>=`, `<=`, or a filter of the form `ST_Distance(geog1, geog2, false) = 0` would sometimes mistakenly evaluate to `true` when one or both of the inputs was `NULL` or an empty [geography]({% link v23.1/architecture/glossary.md %}#geography) or [geometry]({% link v23.1/architecture/glossary.md %}#geometry). [#109393][#109393]
diff --git a/src/current/_includes/releases/v23.1/v23.1.12.md b/src/current/_includes/releases/v23.1/v23.1.12.md
index f82e0ee773e..dc4729fa249 100644
--- a/src/current/_includes/releases/v23.1/v23.1.12.md
+++ b/src/current/_includes/releases/v23.1/v23.1.12.md
@@ -6,7 +6,7 @@ Release Date: November 13, 2023
Security updates
-- The `SIGHUP` signal now clears the cached expiration times for [client certificates](https://www.cockroachlabs.com/docs/v23.1/cockroach-cert#how-security-certificates-work) that are reported by the `security.certificate.expiration.client` metric. [#111006][#111006]
+- The `SIGHUP` signal now clears the cached expiration times for [client certificates]({% link v23.1/cockroach-cert.md %}#how-security-certificates-work) that are reported by the `security.certificate.expiration.client` metric. [#111006][#111006]
- SQL commands that were previously limited to the `admin` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) can now be used by users with the `VIEWCLUSTERMETADATA` or `REPAIRCLUSTERMETADATA` system privilege, depending on whether the operation is read-only or modifies state. [#111131][#111131]
General changes
@@ -17,65 +17,65 @@ Release Date: November 13, 2023
SQL language changes
- New datetime built-ins (`make_date`, `make_timestamp`, and `make_timestamptz`) have been added, allowing for the creation of timestamps, timestamps with time zones, and dates. In addition, `date_trunc` now allows for a timestamp to be truncated in a specified timezone (to a specified precision). [#110338][#110338]
-- New system privileges `CREATEROLE`, `CREATELOGIN`, `CREATEDB`, and `CONTROLJOB` have been introduced. Each is analogous to its existing [role option](https://www.cockroachlabs.com/docs/v23.1/create-user#role-options) counterpart but can additionally be inherited through role membership. [#110359][#110359], [#110359][#110359], [#110359][#110359], [#110359][#110359]
-- [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) can now be passed a `WITH EXECUTION LOCALITY` option similar to `BACKUP` to restrict execution of the job to nodes with matching localities. [#110611][#110611]
+- New system privileges `CREATEROLE`, `CREATELOGIN`, `CREATEDB`, and `CONTROLJOB` have been introduced. Each is analogous to its existing [role option]({% link v23.1/create-user.md %}#role-options) counterpart but can additionally be inherited through role membership. [#110359][#110359], [#110359][#110359], [#110359][#110359], [#110359][#110359]
+- [`RESTORE`]({% link v23.1/restore.md %}) can now be passed a `WITH EXECUTION LOCALITY` option similar to `BACKUP` to restrict execution of the job to nodes with matching localities. [#110611][#110611]
- The `statement_activity` and `transaction_activity` table column `execution_total_cluster_seconds` is now accurate. The `combinedstmts` endpoint returns the correct value for the `StmtsTotalRuntimeSecs` and `TxnsTotalRuntimeSecs` properties. [#109639][#109639]
-- The `discard` [log message](https://www.cockroachlabs.com/docs/v23.1/logging-overview) is now limited to once per minute by default. The message now includes both the number of transactions and the number of statements that were discarded. [#110983][#110983]
+- The `discard` [log message]({% link v23.1/logging-overview.md %}) is now limited to once per minute by default. The message now includes both the number of transactions and the number of statements that were discarded. [#110983][#110983]
Operational changes
- The [`cockroach debug zip`](https://www.cockroachlabs.com/docs/v23.1/cockroach-debug-zip.md) command now has an option to omit goroutine stack dumps. This impacts the creation of `nodes/*/stacks.txt` and `nodes/*/stacks_with_labels.txt` within debug ZIP bundles. Users can opt to exclude these goroutine stacks by using the `--include-goroutine-stacks=false` flag. Fetching stack traces for all goroutines is a "stop-the-world" operation, which can momentarily but significantly increase SQL service latency. Any periodic goroutine dumps previously taken on the node will still be included in `nodes/*/goroutines/*.txt.gz`, since they have already been generated and don't require any stop-the-world operations. [#110266][#110266]
- Requests for database details or table details from the UI, or usages of `SHOW RANGES WITH DETAILS` are no longer subject to errors if the number of requested spans is too large. [#109902][#109902]
-- Added a new [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) `changefeed.lagging_ranges` that shows the number of [ranges](https://www.cockroachlabs.com/docs/v22.2/architecture/overview#architecture-range) which are behind in changefeeds. This metric can be used with the [`metrics_label` changefeed option](https://www.cockroachlabs.com/docs/v23.1/create-changefeed#options). The calculation of this metric is controlled by two new [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings): (1) `lagging_ranges_threshold`, with a default of 3 minutes, is the amount of time a range needs to be behind to be considered lagging, and (2) `lagging_ranges_polling_interval`, with a default of 1 minute, controls how often the lagging ranges calculation is done. Note that polling adds latency to the metric being updated. For example, if a range falls behind by 3 minutes, the metric may not update until an additional minute afterwards. Also note that ranges undergoing an initial scan for longer than the threshold are considered to be lagging. Starting a changefeed with an initial scan on a large table will likely increment the metric for each range in the table. However, as ranges complete the initial scan, the number of lagging ranges will decrease. [#110963][#110963]
-- The [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) now constructs client-side requests using relative URLs instead of absolute ones. This enables proxying of the DB Console at arbitrary subpaths. [#111652][#111652]
-- Added a new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.http.base_path` that controls the redirection of the browser after successful login with [OIDC SSO](https://www.cockroachlabs.com/docs/v23.1/sso-db-console). Most users do not need to modify this setting. However, it is helpful in cases where CockroachDB is running behind a load balancer or proxy that serves CockroachDB under a subpath, such as `https:// /crdb/ `. In those cases, it is necessary for the browser to redirect to `/ crdb` after login instead of `/`, which has always been the hard-coded default.[#112038][#112038]
+- Added a new [metric]({% link v23.1/metrics.md %}) `changefeed.lagging_ranges` that shows the number of [ranges](https://www.cockroachlabs.com/docs/v22.2/architecture/overview#architecture-range) which are behind in changefeeds. This metric can be used with the [`metrics_label` changefeed option]({% link v23.1/create-changefeed.md %}#options). The calculation of this metric is controlled by two new [cluster settings]({% link v23.1/cluster-settings.md %}): (1) `lagging_ranges_threshold`, with a default of 3 minutes, is the amount of time a range needs to be behind to be considered lagging, and (2) `lagging_ranges_polling_interval`, with a default of 1 minute, controls how often the lagging ranges calculation is done. Note that polling adds latency to the metric being updated. For example, if a range falls behind by 3 minutes, the metric may not update until an additional minute afterwards. Also note that ranges undergoing an initial scan for longer than the threshold are considered to be lagging. Starting a changefeed with an initial scan on a large table will likely increment the metric for each range in the table. However, as ranges complete the initial scan, the number of lagging ranges will decrease. [#110963][#110963]
+- The [DB Console]({% link v23.1/ui-overview.md %}) now constructs client-side requests using relative URLs instead of absolute ones. This enables proxying of the DB Console at arbitrary subpaths. [#111652][#111652]
+- Added a new [cluster setting]({% link v23.1/cluster-settings.md %}) `server.http.base_path` that controls the redirection of the browser after successful login with [OIDC SSO]({% link v23.1/sso-db-console.md %}). Most users do not need to modify this setting. However, it is helpful in cases where CockroachDB is running behind a load balancer or proxy that serves CockroachDB under a subpath, such as `https:// /crdb/ `. In those cases, it is necessary for the browser to redirect to `/ crdb` after login instead of `/`, which has always been the hard-coded default.[#112038][#112038]
DB Console changes
-- Non-admin users can now view the [**Database**, **Database Details**, and **Database table** pages](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page). [#110342][#110342]
-- The [SQL Connection Rate metric](https://www.cockroachlabs.com/docs/v23.1/ui-sql-dashboard#sql-connection-rate) on the [SQL Dashboard](https://www.cockroachlabs.com/docs/v23.1/ui-sql-dashboard) is downsampled using the MAX function instead of SUM. This improves situations where zooming out would cause the connection rate to increase for downsampled data. [#110497][#110497]
-- Fixed a bug in DB Console's [Statement Diagnostic page](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page#diagnostics) that could cause the page to crash if the response was larger than 50 KB. The page now keeps pulling results until no maximum size errors are encountered. [#111278][#111278]
-- Fixed an error on the [SQL Activity page](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) when there was a workload, and then the workload stopped so that no queries ran against the database in the last hour. [#111496][#111496]
-- The [**Jobs** table](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page) will now correctly display timestamps for creation, last modified, and the completed time fields. [#111901][#111901]
+- Non-admin users can now view the [**Database**, **Database Details**, and **Database table** pages]({% link v23.1/ui-databases-page.md %}). [#110342][#110342]
+- The [SQL Connection Rate metric]({% link v23.1/ui-sql-dashboard.md %}#sql-connection-rate) on the [SQL Dashboard]({% link v23.1/ui-sql-dashboard.md %}) is downsampled using the MAX function instead of SUM. This improves situations where zooming out would cause the connection rate to increase for downsampled data. [#110497][#110497]
+- Fixed a bug in DB Console's [Statement Diagnostic page]({% link cockroachcloud/statements-page.md %}#diagnostics) that could cause the page to crash if the response was larger than 50 KB. The page now keeps pulling results until no maximum size errors are encountered. [#111278][#111278]
+- Fixed an error on the [SQL Activity page]({% link v23.1/ui-overview.md %}#sql-activity) when there was a workload, and then the workload stopped so that no queries ran against the database in the last hour. [#111496][#111496]
+- The [**Jobs** table]({% link v23.1/ui-jobs-page.md %}) will now correctly display timestamps for creation, last modified, and the completed time fields. [#111901][#111901]
- The `Reset Sql Stats` button is now visible to users with the admin role on the DB Console. [#110256][#110256]
-- Reduced memory usage in [SQL activity](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page) jobs. [#112323][#112323]
+- Reduced memory usage in [SQL activity]({% link cockroachcloud/statements-page.md %}) jobs. [#112323][#112323]
Bug fixes
- The new backup option `updates_cluster_monitoring_metrics` tracks the timestamp of the last backup failure due to a KMS error. This option is disabled by default. [#111310][#111310]
- Fixed a bug where vectorized `COPY FROM` could produce a plan with more than one RenderNodes, when only zero or one should be allowed. This could result in multiple render nodes in a table with a hash sharded primary key. [#111412][#111412]
-- Fixed a bug that caused CockroachDB to stop collecting new statistics about [Statement fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprint-page) and [Transaction fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-transactions-page). [#111641][#111641]
+- Fixed a bug that caused CockroachDB to stop collecting new statistics about [Statement fingerprints]({% link v23.1/ui-statements-page.md %}#statement-fingerprint-page) and [Transaction fingerprints]({% link v23.1/ui-transactions-page.md %}). [#111641][#111641]
- Fixed a bug where, internally, printing a 0 decimal with a very low exponent uses excessive memory. The [DECIMAL](https://www.cockroachlabs.com/docs/v23.1/decimal.md) type type is not impacted, but `crdb_internal` functions may be. [#110564][#110564]
-- Fixed a bug where executing the [`EXPORT INTO PARQUET`](https://www.cockroachlabs.com/docs/v23.1/export#export-a-table-into-parquet) statement could cause an [out-of-memory crash (OOM)](https://www.cockroachlabs.com/docs/v23.1/cluster-setup-troubleshooting#out-of-memory-oom-crash). Now, if memory is exceeded, the `EXPORT INTO PARQUET` statement returns an error. If you see an error related to memory, retry the `EXPORT INTO PARQUET` statement using a smaller value for the [`chunk_rows` option](https://www.cockroachlabs.com/docs/v23.1/export#export-options). Cockroach Labs [recommends using changefeeds to export data](https://www.cockroachlabs.com/docs/v23.1/export-data-with-changefeeds) because they provide better performance for growing workloads. Additionally, changefeeds [operate as jobs](https://www.cockroachlabs.com/docs/v23.1/show-jobs), which offer [observability](https://www.cockroachlabs.com/docs/v23.1/monitor-and-debug-changefeeds) and [job management](https://www.cockroachlabs.com/docs/v23.1/create-and-configure-changefeeds). [#110717][#110717] [#110717][#110717]
+- Fixed a bug where executing the [`EXPORT INTO PARQUET`]({% link v23.1/export.md %}#export-a-table-into-parquet) statement could cause an [out-of-memory crash (OOM)]({% link v23.1/cluster-setup-troubleshooting.md %}#out-of-memory-oom-crash). Now, if memory is exceeded, the `EXPORT INTO PARQUET` statement returns an error. If you see an error related to memory, retry the `EXPORT INTO PARQUET` statement using a smaller value for the [`chunk_rows` option]({% link v23.1/export.md %}#export-options). Cockroach Labs [recommends using changefeeds to export data]({% link v23.1/export-data-with-changefeeds.md %}) because they provide better performance for growing workloads. Additionally, changefeeds [operate as jobs]({% link v23.1/show-jobs.md %}), which offer [observability]({% link v23.1/monitor-and-debug-changefeeds.md %}) and [job management]({% link v23.1/create-and-configure-changefeeds.md %}). [#110717][#110717] [#110717][#110717]
- Added limited `statement_statistics` to the `debug.zip` output. [#110662][#110662]
- Fixed a nil dereference panic during node startup that could be caused by an incorrect initialization order. [#109684][#109684]
-- Fixed a bug where the [`BEGIN` statement](https://www.cockroachlabs.com/docs/v23.1/begin-transaction) incorrectly displayed a transaction ID in telemetry logs. It now correctly shows no transaction ID, since there is no open transaction when `BEGIN` is executed.[#109840][#109840]
+- Fixed a bug where the [`BEGIN` statement]({% link v23.1/begin-transaction.md %}) incorrectly displayed a transaction ID in telemetry logs. It now correctly shows no transaction ID, since there is no open transaction when `BEGIN` is executed.[#109840][#109840]
- Fixed a bug that could cause a transaction performing multiple parallel foreign key checks to return a `concurrent txn use detected` error. [#109849][#109849]
- Fixed a bug where dependencies on sequences from tables would be reported with the wrong value for the `classid` column in the `pg_catalog.pg_depend` table. [#110207][#110207]
- Fixed edge cases in decimal and float evaluation for division operators. `'NaN'::DECIMAL / 0` will now return `NaN` instead of a division-by-zero error, and `0 / 'inf'::DECIMAL` will return `0` instead of `0E-2019`. [#110296][#110296]
- Fixed a DB Console issue where the `DROP_UNUSED` index recommendations produced by the table details page produced an invalid `DROP INDEX` statement. [#110453][#110453]
-- Executing two [`ALTER RANGE default CONFIGURE ZONE`](https://www.cockroachlabs.com/docs/v23.1/alter-range#configure-zone) statements on the same line no longer triggers an error. [#110337][#110337]
-- Removed a buggy TTL descriptor repair. Previously, upgrading from v22.2.x to 23.1.9 incorrectly removed [TTL storage parameters](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl#ttl-storage-parameters) from tables (visible via [`SHOW CREATE TABLE `](https://www.cockroachlabs.com/docs/v23.1/show-create)) while attempting to repair table descriptors. A node that attempts to run the TTL [job](https://www.cockroachlabs.com/docs/v23.1/show-jobs.html) could crash due to a panic caused by the missing TTL storage parameters. Clusters currently on v22.2.x should **not** be upgraded to v23.1.9, but should move directly to v23.1.10 or later. For more information, refer to [Technical Advisory 110363](../advisories/a110363.html). [#110500][#110500]
+- Executing two [`ALTER RANGE default CONFIGURE ZONE`]({% link v23.1/alter-range.md %}#configure-zone) statements on the same line no longer triggers an error. [#110337][#110337]
+- Removed a buggy TTL descriptor repair. Previously, upgrading from v22.2.x to 23.1.9 incorrectly removed [TTL storage parameters]({% link v23.1/row-level-ttl.md %}#ttl-storage-parameters) from tables (visible via [`SHOW CREATE TABLE `]({% link v23.1/show-create.md %})) while attempting to repair table descriptors. A node that attempts to run the TTL [job](https://www.cockroachlabs.com/docs/v23.1/show-jobs.html) could crash due to a panic caused by the missing TTL storage parameters. Clusters currently on v22.2.x should **not** be upgraded to v23.1.9, but should move directly to v23.1.10 or later. For more information, refer to [Technical Advisory 110363](../advisories/a110363.html). [#110500][#110500]
- Fixed a performance regression when disabling `sql.metrics.statement_details.enabled`, which caused execution stats to be collected for all queries instead of the default 1% of queries. [#109881][#109881]
- `cockroach debug pebble` commands now work correctly with encrypted stores which don't use the default `cockroach-data` path, and you no longer need to pass the `--store` option. [#110507][#110507]
-- The [**Database** pages](https://www.cockroachlabs.com/docs/cockroachcloud/databases-page) no longer displays `undefined` regions or outdated node information. [#110741][#110741]
+- The [**Database** pages]({% link cockroachcloud/databases-page.md %}) no longer displays `undefined` regions or outdated node information. [#110741][#110741]
- Fixed a bug where `RESET (ttl_expire_after)` could incorrectly remove `ttl_expiration_expression`. [#110746][#110746]
-- Fixed a bug where an [`ALTER TABLE ... ADD CONSTRAINT CHECK ...`](https://www.cockroachlabs.com/docs/v23.1/alter-table#add-constraint) statement with a user-defined function (UDF) in the `CHECK` could cause a validation error. [#110720][#110720]
-- Fixed a bug where `CREATE INDEX` for [partial indexes](https://www.cockroachlabs.com/docs/v23.1/partial-indexes) could fail with `ERROR: duplicate key value violates unique constraint` if concurrent inserts happened simultaneously. [#110584][#110584]
-- Fixed a bug where a [`CREATE TABLE`](https://www.cockroachlabs.com/docs/v23.1/create-table) command with an `IDENTITY` column did not properly propagate the type of the column into the sequence. [#111014][#111014]
+- Fixed a bug where an [`ALTER TABLE ... ADD CONSTRAINT CHECK ...`]({% link v23.1/alter-table.md %}#add-constraint) statement with a user-defined function (UDF) in the `CHECK` could cause a validation error. [#110720][#110720]
+- Fixed a bug where `CREATE INDEX` for [partial indexes]({% link v23.1/partial-indexes.md %}) could fail with `ERROR: duplicate key value violates unique constraint` if concurrent inserts happened simultaneously. [#110584][#110584]
+- Fixed a bug where a [`CREATE TABLE`]({% link v23.1/create-table.md %}) command with an `IDENTITY` column did not properly propagate the type of the column into the sequence. [#111014][#111014]
- Fixed a bug where the `format_type` built-in did not honor `typemod` information for array types, leading to incorrect output. [#110940][#110940]
- Fixed compaction behavior to prevent rapid sublevel growth when removing replicas from a store, such as during decommissioning. [#111141][#111141]
-- Fixed a bug that could occur when the [multiple active portals](https://www.cockroachlabs.com/docs/v23.1/postgresql-compatibility#multiple-active-portals) execution mode (Preview) was enabled to evaluate queries such as lookup joins. The bug could result in an internal error like `unexpected 40960 leftover bytes` if the portal was not fully consumed. [#110666][#110666]
+- Fixed a bug that could occur when the [multiple active portals]({% link v23.1/postgresql-compatibility.md %}#multiple-active-portals) execution mode (Preview) was enabled to evaluate queries such as lookup joins. The bug could result in an internal error like `unexpected 40960 leftover bytes` if the portal was not fully consumed. [#110666][#110666]
- External connection URLs now accept the scheme `azure-blob` for connections to Azure Blob Storage and the scheme `azure-kms` for connections to Azure KMS. For backward compatibility, schemes `azure` and `azure-storage` schemes continue to work for connections to Azure Blob Storage. [#111246][#111246]
- Fixed a bug where changing the setting `server.telemetry.hot_ranges_stats.interval` had no effect. [#111373][#111373]
-- Added a check for values before using `mean` on the DB Console [Plan Details page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page), fixing a crash. [#111505][#111505]
+- Added a check for values before using `mean` on the DB Console [Plan Details page]({% link v23.1/ui-statements-page.md %}), fixing a crash. [#111505][#111505]
- Fixed a bug where dependencies on sequences from tables would be reported with the wrong value for the `classid` column in the `pg_catalog.pg_depend` table. [#111600][#111600]
-- Fixed a bug where `atttypmod` in `pg_attribute` was not populated for [`TIMESTAMP`](https://www.cockroachlabs.com/docs/v23.1/timestamp) / [`INTERVAL`](https://www.cockroachlabs.com/docs/v23.1/interval) types, which meant that ORMs could not know the precision of these types properly. [#111727][#111727]
-- Fixed a bug in the DB Console [Transaction Insight Details](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) page , which showed contention details of other transactions. Now, CockroachDB will only surface contention details for the current transaction. [#111880][#111880]
+- Fixed a bug where `atttypmod` in `pg_attribute` was not populated for [`TIMESTAMP`]({% link v23.1/timestamp.md %}) / [`INTERVAL`]({% link v23.1/interval.md %}) types, which meant that ORMs could not know the precision of these types properly. [#111727][#111727]
+- Fixed a bug in the DB Console [Transaction Insight Details]({% link v23.1/ui-insights-page.md %}) page , which showed contention details of other transactions. Now, CockroachDB will only surface contention details for the current transaction. [#111880][#111880]
- Fixed a bug where `indoption` inside `pg_index` was not properly encoded. Clients were unable to decode it as `int2vector`. [#111957][#111957]
- RPC failures on writes now use the parallel commit protocol and execute in parallel to the commit operation. This change prevents incorrect retryable failures and `transaction unexpectedly committed` assertions by detecting when writes cannot be retried idempotently, instead returning an `AmbiguousResultError`. [#111876][#111876]
-- Fixed a bug that prevented the [optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) from honoring the `statement_timeout` session setting when generating constrained index scans for queries with large `IN` lists or `= ANY` predicates on multiple index key columns. This bug could cause an Out-of-Memory (OOM) condition on the node. [#112076][#112076]
-- Fixed a bug that caused internal errors during query optimization in rare cases. The bug has been present since version v2.1.11, but it is more likely to occur in version v21.2.0 and later, though it is still rare. The bug only presents when a query contains `min` and `max` [aggregate functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#aggregate-functions) [#112254][#112254]
+- Fixed a bug that prevented the [optimizer]({% link v23.1/cost-based-optimizer.md %}) from honoring the `statement_timeout` session setting when generating constrained index scans for queries with large `IN` lists or `= ANY` predicates on multiple index key columns. This bug could cause an Out-of-Memory (OOM) condition on the node. [#112076][#112076]
+- Fixed a bug that caused internal errors during query optimization in rare cases. The bug has been present since version v2.1.11, but it is more likely to occur in version v21.2.0 and later, though it is still rare. The bug only presents when a query contains `min` and `max` [aggregate functions]({% link v23.1/functions-and-operators.md %}#aggregate-functions) [#112254][#112254]
- Fixed a bug where a lookup or index join on a table with at least three column families could be evaluated incorrectly, leading to a "non-nullable column with no value" error or incorrect query results. The bug was introduced in v22.2. [#113107][#113107]
- Fixed a bug that could cause internal errors or panics while attempting to forecast statistics on a numeric column. [#113881][#113881]
diff --git a/src/current/_includes/releases/v23.1/v23.1.14.md b/src/current/_includes/releases/v23.1/v23.1.14.md
index 546e625a65b..8c0c98f97c0 100644
--- a/src/current/_includes/releases/v23.1/v23.1.14.md
+++ b/src/current/_includes/releases/v23.1/v23.1.14.md
@@ -6,18 +6,18 @@ Release Date: January 17, 2024
SQL language changes
-- CockroachDB now supports [importing into](https://www.cockroachlabs.com/docs/v23.1/import-into) a table that has columns typed as arrays of user-defined types (such as enums). Tables that use multiple user-defined types with the same name but different schemas are still unsupported. [#116361][#116361]
+- CockroachDB now supports [importing into]({% link v23.1/import-into.md %}) a table that has columns typed as arrays of user-defined types (such as enums). Tables that use multiple user-defined types with the same name but different schemas are still unsupported. [#116361][#116361]
- Added a new field, `StmtPosInTxn`, to the `CommonSQLExecDetails` (included in SQL audit logs, SQL execution logs, and telemetry events) to represent the statement's index (position) in the transaction. The first statement's `StmtPosInTxn` is `1`. [#116558][#116558]
Operational changes
-- Updated the [`changefeed.lagging_ranges_threshold`](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#settings) and [`changefeed.lagging_ranges_polling_interval`](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#settings) cluster settings to be public in v23.1. [#115803][#115803]
+- Updated the [`changefeed.lagging_ranges_threshold`]({% link v23.1/cluster-settings.md %}#settings) and [`changefeed.lagging_ranges_polling_interval`]({% link v23.1/cluster-settings.md %}#settings) cluster settings to be public in v23.1. [#115803][#115803]
DB Console changes
-- The [**Cluster Overview** page](https://www.cockroachlabs.com/docs/v23.1/ui-cluster-overview-page) now correctly renders the background color for email signups, fixing an issue where it was difficult to read the text. [#114546][#114546]
-- Updated the **CPU Time** label to **SQL CPU Time** on the [Overview page](https://www.cockroachlabs.com/docs/v23.1/ui-overview-dashboard) and clarified the tooltip. [#116448][#116448]
-- Fixed an issue where the following `AggHistogram`-powered metrics reported quantiles incorrectly in the [Overview page](https://www.cockroachlabs.com/docs/v23.1/ui-overview-dashboard). The list of affected metrics is:
+- The [**Cluster Overview** page]({% link v23.1/ui-cluster-overview-page.md %}) now correctly renders the background color for email signups, fixing an issue where it was difficult to read the text. [#114546][#114546]
+- Updated the **CPU Time** label to **SQL CPU Time** on the [Overview page]({% link v23.1/ui-overview-dashboard.md %}) and clarified the tooltip. [#116448][#116448]
+- Fixed an issue where the following `AggHistogram`-powered metrics reported quantiles incorrectly in the [Overview page]({% link v23.1/ui-overview-dashboard.md %}). The list of affected metrics is:
- `changefeed.message_size_hist`
- `changefeed.parallel_io_queue_nanos`
- `changefeed.sink_batch_hist_nanos`
@@ -36,20 +36,20 @@ Release Date: January 17, 2024
- Fixed a bug in in the TimeScale component's **Now** button behavior that could prevent charts from updating after a custom time range was selected.[#115513][#115513]
- Fixed a bug where an active replication report update could get stuck in a retry loop on clusters with over 10000 ranges, which would prevent a node from shutting down cleanly. [#114242][#114242]
- Fixed a nil pointer dereference bug in the error handling for `GetFiles`. [#114829][#114829]
-- Fixed a bug that prevented the **SQL Activity** page from showing internal statements when the `sql.stats.response.show_internal.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) was set to `true`. [#114819][#114819]
+- Fixed a bug that prevented the **SQL Activity** page from showing internal statements when the `sql.stats.response.show_internal.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) was set to `true`. [#114819][#114819]
- Fixed a bug that could cause a discrepancy between computed statistics and the stored value for statics when a delete was rolled back. [#113772][#113772]
- Fixed a bug introduced in v23.1 that could cause an internal error Previously, CockroachDB could encounter an internal error when using a prepared statement using the `text` format with a user-defined composite type. [#115063][#115063]
- Fixed a bug that would cause a [prepared statement](https://www.cockroachlabs.com/docs/v23.1/sql-grammar#prepare_stmt) to fail if it references an enum as well as a table that has undergone a schema change. [#115174][#115174]
- Fixed a bug that could cause finalization during a major-version upgrade to contend with descriptor lease renewals on a large cluster. Descriptor lease renewals now always have a lower priority than finalization. [#114672][#114672]
-- [Backups](https://www.cockroachlabs.com/docs/v23.1/backup) now evenly distribute their work across all replicas, including followers, regardless of leaseholder placement. [#115018][#115018]
+- [Backups]({% link v23.1/backup.md %}) now evenly distribute their work across all replicas, including followers, regardless of leaseholder placement. [#115018][#115018]
- Fixed a bug that could cause replica processing in store queues to get stuck if a the replica's ID has changed. [#115036][#115036]
-- Fixed an bug introduced in v22.2 that could lead to stuck queries or inaccurate results when using lookup [joins](https://www.cockroachlabs.com/docs/v23.1/joins) involving equality columns and multiple ranges. [#115581][#115581]
-- Fixed a bug in the declarative schema changer that could cause [`CREATE INDEX`](https://www.cockroachlabs.com/docs/v23.1/create-index) with expressions to fail on materialized [views](https://www.cockroachlabs.com/docs/v23.1/views). [#115596][#115596]
+- Fixed an bug introduced in v22.2 that could lead to stuck queries or inaccurate results when using lookup [joins]({% link v23.1/joins.md %}) involving equality columns and multiple ranges. [#115581][#115581]
+- Fixed a bug in the declarative schema changer that could cause [`CREATE INDEX`]({% link v23.1/create-index.md %}) with expressions to fail on materialized [views]({% link v23.1/views.md %}). [#115596][#115596]
- Fixed a bug that could cause an inaccorate "too few columns" error for a query that used `ANY {array}` syntax with a subquery. [#115591][#115591]
- Fixed a bug that could cause a "too few/many columns" errors for a query that used an `IN` or `NOT IN` clause with a non-trivial right operand, such as a subquery (rather than a constant tuple). [#115591][#115591]
-- Fixed a bug introduced in v22.2 that could cause errors or inaccurate results when performing a lookup or index [join](https://www.cockroachlabs.com/docs/v23.1/joins) on a table with three or more column families. [#115899][#115899]
+- Fixed a bug introduced in v22.2 that could cause errors or inaccurate results when performing a lookup or index [join]({% link v23.1/joins.md %}) on a table with three or more column families. [#115899][#115899]
- Fixed a bug that could cause an internal error or a panic while attempting to forecast statistics on a numeric column. [#115899][#115899]
-- Fixed a bug when issuing a [`BEGIN`](https://www.cockroachlabs.com/docs/v23.1/begin-transaction) statement where incorrect `Age` field could be logged in the statement log. This bug could also cause statements to incorrectly appear in the slow query log. [#115257][#115257]
+- Fixed a bug when issuing a [`BEGIN`]({% link v23.1/begin-transaction.md %}) statement where incorrect `Age` field could be logged in the statement log. This bug could also cause statements to incorrectly appear in the slow query log. [#115257][#115257]
- Fixed a bug in the SQL Statistics UI where the runtime was incorrectly calculated. This bug could cause recorded values to appear to exceed 100%. [#117497][#117497]
- Fixed a bug that could cause a `CREATE CHANGEFEED WITH {key_column}` statement to retry forever. [#117555][#117555]
diff --git a/src/current/_includes/releases/v23.1/v23.1.15.md b/src/current/_includes/releases/v23.1/v23.1.15.md
index 732fcea9b4b..98946611bf8 100644
--- a/src/current/_includes/releases/v23.1/v23.1.15.md
+++ b/src/current/_includes/releases/v23.1/v23.1.15.md
@@ -6,30 +6,30 @@ Release Date: February 20, 2024
Security updates
-- The [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) `session` cookie is now marked `HttpOnly` to prevent it from being read by any Javascript code and is marked `Secure` by the browser when the cluster operates in secure mode. [#119248][#119248]
+- The [DB Console]({% link v23.1/ui-overview.md %}) `session` cookie is now marked `HttpOnly` to prevent it from being read by any Javascript code and is marked `Secure` by the browser when the cluster operates in secure mode. [#119248][#119248]
Bug fixes
-- Fixed a bug where [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) that targeted schema-locked tables could fail due to an old high-water timestamp being incorrectly persisted. [#117960][#117960]
-- Fixed a bug where creating a [changefeed](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) that targeted tables with a `DECIMAL(n)` column (that is, zero-scale [`DECIMAL`](https://www.cockroachlabs.com/docs/v23.1/decimal) column), `format='avro'`, and `diff` would cause a panic. [#118893][#118893]
-- Fixed a bug that could cause a [`CREATE CHANGEFEED WITH {key_column}`](https://www.cockroachlabs.com/docs/v23.1/create-changefeed) statement to retry forever. [#116966][#116966]
-- Fixed a bug that prevented database [restore](https://www.cockroachlabs.com/docs/v23.1/restore) when the database contained a view or routine that referenced a user-defined type in the body string. For views, this bug was introduced in v20.2 when UDTs were introduced. For routines, this bug was introduced in v22.2 when UDFs were introduced. [#116903][#116903]
+- Fixed a bug where [changefeeds]({% link v23.1/change-data-capture-overview.md %}) that targeted schema-locked tables could fail due to an old high-water timestamp being incorrectly persisted. [#117960][#117960]
+- Fixed a bug where creating a [changefeed]({% link v23.1/change-data-capture-overview.md %}) that targeted tables with a `DECIMAL(n)` column (that is, zero-scale [`DECIMAL`]({% link v23.1/decimal.md %}) column), `format='avro'`, and `diff` would cause a panic. [#118893][#118893]
+- Fixed a bug that could cause a [`CREATE CHANGEFEED WITH {key_column}`]({% link v23.1/create-changefeed.md %}) statement to retry forever. [#116966][#116966]
+- Fixed a bug that prevented database [restore]({% link v23.1/restore.md %}) when the database contained a view or routine that referenced a user-defined type in the body string. For views, this bug was introduced in v20.2 when UDTs were introduced. For routines, this bug was introduced in v22.2 when UDFs were introduced. [#116903][#116903]
- Fixed a durability issue in the Raft log storage mechanism due to improper synchronization of filesystem metadata, potentially leading to the loss of specific write operations (`AddSSTable`), notably utilized by operations such as `RESTORE`. This vulnerability was exposed only under conditions of power failure or operating system crashes, potentially causing CockroachDB to enter a crash loop upon restart. In extreme scenarios, such as a simultaneous power outage or crash across multiple nodes, it could result in an irrecoverable quorum loss. [#117383][#117383]
- Fixed an issue in Raft log truncation that had the potential to cause crash loops and irretrievable quorum loss, especially in the rare but severe scenario where all replicas concurrently enter a crash loop. This issue emerged under conditions where the cluster was processing a bulk write operation (such as schema changes, imports, or restores), while a log truncation command was active, and the CockroachDB process experienced a crash. [#117299][#117299]
-- Fixed the total runtime value referenced in SQL stats, resolving the bug where the [Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) erroneously displayed percentages over 100%. [#117496][#117496]
-- Fixed an issue where the values for the current and past hour in the top Activity table were calculated incorrectly, causing a missing data issue in SQL stats and, consequently, on the [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page. [#118427][#118427]
+- Fixed the total runtime value referenced in SQL stats, resolving the bug where the [Console]({% link v23.1/ui-overview.md %}) erroneously displayed percentages over 100%. [#117496][#117496]
+- Fixed an issue where the values for the current and past hour in the top Activity table were calculated incorrectly, causing a missing data issue in SQL stats and, consequently, on the [SQL Activity]({% link v23.1/ui-overview.md %}#sql-activity) page. [#118427][#118427]
- Fixed a bug where CockroachDB would erroneously return an error if an empty search path parameter was encountered during search path setting. [#117556][#117556]
-- Fixed a bug in the [Row-Level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) job that would cause it to skip expired rows if the primary key of the table included columns of the collated string type. This bug was present since the initial release of row-level TTL in v22.2.0. [#117513][#117513]
-- Fixed a bug that could cause [`DELETE`](https://www.cockroachlabs.com/docs/v23.1/delete) queries sent by the [Row-Level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) job to use a secondary index rather than the primary index to find the rows to delete. This could lead to some `DELETE` operations taking a much longer time than they should. This bug was present since v22.2.0. [#118336][#118336]
-- Fixed a bug where concurrent [`GRANT`](https://www.cockroachlabs.com/docs/v23.1/grant) statements can cause deadlocks. [#117712][#117712]
-- Reduced the impact of bulk deletions ([`DROP TABLE`](https://www.cockroachlabs.com/docs/v23.1/drop-table), [`TRUNCATE`](https://www.cockroachlabs.com/docs/v23.1/truncate), or replica removals) on foreground traffic by altering storage engine compaction priorities. [#116560][#116560]
+- Fixed a bug in the [Row-Level TTL]({% link v23.1/row-level-ttl.md %}) job that would cause it to skip expired rows if the primary key of the table included columns of the collated string type. This bug was present since the initial release of row-level TTL in v22.2.0. [#117513][#117513]
+- Fixed a bug that could cause [`DELETE`]({% link v23.1/delete.md %}) queries sent by the [Row-Level TTL]({% link v23.1/row-level-ttl.md %}) job to use a secondary index rather than the primary index to find the rows to delete. This could lead to some `DELETE` operations taking a much longer time than they should. This bug was present since v22.2.0. [#118336][#118336]
+- Fixed a bug where concurrent [`GRANT`]({% link v23.1/grant.md %}) statements can cause deadlocks. [#117712][#117712]
+- Reduced the impact of bulk deletions ([`DROP TABLE`]({% link v23.1/drop-table.md %}), [`TRUNCATE`]({% link v23.1/truncate.md %}), or replica removals) on foreground traffic by altering storage engine compaction priorities. [#116560][#116560]
- Resolved an issue where DML operations would fail during the creation of a hash-sharded index, resulting in an error stating column `crdb_internal_val_shard_16` does not exist. This bug was present since v23.1.0. [#118238][#118238]
-- [`AUTO CREATE STATS`](https://www.cockroachlabs.com/docs/v23.1/show-jobs#show-automatic-jobs) jobs no longer lead to growth in an internal system table resulting in slower job-system related queries. [#118980][#118980]
-- [`ALTER PRIMARY KEY`](https://www.cockroachlabs.com/docs/v23.1/alter-table#alter-primary-key) no longer fail with an `non-nullable column with no value! Index scanned ..` error when validating recreated secondary indexes. [#118969][#118969]
-- Fixed a bug where CockroachDB could encounter an error `unable to encode table key: *tree.DTSQuery` when operating on columns of [`TSQuery`](https://www.cockroachlabs.com/docs/v23.1/tsquery) type in some contexts (e.g. when collecting table statistics or when performing a `DISTINCT` operation). The bug has been present since 23.1 when support for TSQuery type was added. [#118320][#118320]
+- [`AUTO CREATE STATS`]({% link v23.1/show-jobs.md %}#show-automatic-jobs) jobs no longer lead to growth in an internal system table resulting in slower job-system related queries. [#118980][#118980]
+- [`ALTER PRIMARY KEY`]({% link v23.1/alter-table.md %}#alter-primary-key) no longer fail with an `non-nullable column with no value! Index scanned ..` error when validating recreated secondary indexes. [#118969][#118969]
+- Fixed a bug where CockroachDB could encounter an error `unable to encode table key: *tree.DTSQuery` when operating on columns of [`TSQuery`]({% link v23.1/tsquery.md %}) type in some contexts (e.g. when collecting table statistics or when performing a `DISTINCT` operation). The bug has been present since 23.1 when support for TSQuery type was added. [#118320][#118320]
- Fixed a bug where in some cases CockroachDB could incorrectly evaluate queries that scanned an inverted index and had a `WHERE` filter in which two sides of the `AND` expression had "similar" expressions (e.g. `ARRAY['str1'] <@ col AND (ARRAY['str1'] && col OR ...)`). The bug has been present since pre-22.2 version. [#118359][#118359]
- CockroachDB now correctly logs the top 5 hot ranges per cluster instead of per node. [#118371][#118371]
-- Fixed a bug where a [changefeed](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) could omit events in rare cases, logging the error `cdc ux violation: detected timestamp ... that is less or equal to the local frontier`. This can happen if a [rangefeed](https://www.cockroachlabs.com/docs/v23.1/create-and-configure-changefeeds#enable-rangefeeds) runs on a follower replica that lags significantly behind the leaseholder, a transaction commits and removes its transaction record before its intent resolution is applied on the follower, the follower's closed timestamp has advanced past the transaction commit timestamp, and the rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began). This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the changefeed to drop these events entirely, never emitting them. [#119270][#119270]
+- Fixed a bug where a [changefeed]({% link v23.1/change-data-capture-overview.md %}) could omit events in rare cases, logging the error `cdc ux violation: detected timestamp ... that is less or equal to the local frontier`. This can happen if a [rangefeed]({% link v23.1/create-and-configure-changefeeds.md %}#enable-rangefeeds) runs on a follower replica that lags significantly behind the leaseholder, a transaction commits and removes its transaction record before its intent resolution is applied on the follower, the follower's closed timestamp has advanced past the transaction commit timestamp, and the rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began). This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the changefeed to drop these events entirely, never emitting them. [#119270][#119270]
diff --git a/src/current/_includes/releases/v23.1/v23.1.16.md b/src/current/_includes/releases/v23.1/v23.1.16.md
index f6040c4ed7a..68054969555 100644
--- a/src/current/_includes/releases/v23.1/v23.1.16.md
+++ b/src/current/_includes/releases/v23.1/v23.1.16.md
@@ -6,7 +6,7 @@ Release Date: February 27, 2024
Bug fixes
-- Fixed a bug where [rangefeed](https://www.cockroachlabs.com/docs/v23.1/use-changefeeds#enable-rangefeeds) resolved timestamps could get stuck, continually emitting the [log message](https://www.cockroachlabs.com/docs/v23.1/logging) `"pushing old intents failed: range barrier failed, range split"`, typically following a [range merge](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges). This bug was introduced in v23.1.15. [#119559][#119559]
+- Fixed a bug where [rangefeed]({% link v23.1/create-and-configure-changefeeds.md %}#enable-rangefeeds) resolved timestamps could get stuck, continually emitting the [log message]({% link v23.1/logging.md %}) `"pushing old intents failed: range barrier failed, range split"`, typically following a [range merge](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges). This bug was introduced in v23.1.15. [#119559][#119559]
Contributors
diff --git a/src/current/_includes/releases/v23.1/v23.1.17.md b/src/current/_includes/releases/v23.1/v23.1.17.md
index 9ff6f415e85..7749138fad7 100644
--- a/src/current/_includes/releases/v23.1/v23.1.17.md
+++ b/src/current/_includes/releases/v23.1/v23.1.17.md
@@ -6,19 +6,19 @@ Release Date: March 19, 2024
Security updates
-- A user with the [`VIEWACTIVITY` privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) can now request a statement bundle from the [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) in the DB Console or with the internal builtin function `crdb_internal.requests_statement_bundle`. [#119638][#119638]
-- Clusters using [Cluster Single Sign-on (SSO) with JSON web tokens (JWTs)](https://www.cockroachlabs.com/docs/v23.1/sso-sql) can now optionally fetch signing keys from configured issuers instead of configuring static signing keys for each issuer. When the new [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) `server.jwt_authentication.jwks_auto_fetch.enabled` is set to `true`, signing keys are automatically fetched from the issuer using metadata published in its OpenID configuration. In this case, static signing keys in `server.jwt_authentication.jwks` are ignored. When automatic fetching is enabled, there may be a slight increase in network latency for each JWT authentication request, proportional to the latency between the cluster and the issuer's endpoint. [#120063][#120063]
-- [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) cookies are marked `Secure` for the browser when the cluster is running in secure mode. [#119262][#119262]
-- The [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) `session` cookie is now marked `HttpOnly` to prevent it from being read by any Javascript code. [#119262][#119262]
+- A user with the [`VIEWACTIVITY` privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) can now request a statement bundle from the [**Statements** page]({% link v23.1/ui-statements-page.md %}) in the DB Console or with the internal builtin function `crdb_internal.requests_statement_bundle`. [#119638][#119638]
+- Clusters using [Cluster Single Sign-on (SSO) with JSON web tokens (JWTs)]({% link v23.1/sso-sql.md %}) can now optionally fetch signing keys from configured issuers instead of configuring static signing keys for each issuer. When the new [cluster setting]({% link v23.1/cluster-settings.md %}) `server.jwt_authentication.jwks_auto_fetch.enabled` is set to `true`, signing keys are automatically fetched from the issuer using metadata published in its OpenID configuration. In this case, static signing keys in `server.jwt_authentication.jwks` are ignored. When automatic fetching is enabled, there may be a slight increase in network latency for each JWT authentication request, proportional to the latency between the cluster and the issuer's endpoint. [#120063][#120063]
+- [DB Console]({% link v23.1/ui-overview.md %}) cookies are marked `Secure` for the browser when the cluster is running in secure mode. [#119262][#119262]
+- The [DB Console]({% link v23.1/ui-overview.md %}) `session` cookie is now marked `HttpOnly` to prevent it from being read by any Javascript code. [#119262][#119262]
SQL language changes
-- The new [cluster setting](https://cockroachlabs.com/docs/v23.1/cluster-settings) `server.max_open_transactions_per_gateway`, when set to a non-negative value, prevents users without the [`admin` role ](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#admin-role) from executing a query if more than this number of [transactions](https://www.cockroachlabs.com/docs/v23.1/transactions) are open on the current [gateway node](https://www.cockroachlabs.com/docs/v23.1/architecture/life-of-a-distributed-transaction#gateway). [#118949][#118949]
-- Added support for [index hinting](https://www.cockroachlabs.com/docs/v23.1/table-expressions#force-index-selection) with [`INSERT`](https://www.cockroachlabs.com/docs/v23.1/insert) and [`UPSERT`](https://www.cockroachlabs.com/docs/v23.1/upsert) statements. This allows `INSERT ... ON CONFLICT` and `UPSERT` queries to use index hints in the same way as [`UPDATE`](https://www.cockroachlabs.com/docs/v23.1/update) and [`DELETE`](https://www.cockroachlabs.com/docs/v23.1/delete) statements. [#119600][#119600]
+- The new [cluster setting](https://cockroachlabs.com/docs/v23.1/cluster-settings) `server.max_open_transactions_per_gateway`, when set to a non-negative value, prevents users without the [`admin` role ](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#admin-role) from executing a query if more than this number of [transactions]({% link v23.1/transactions.md %}) are open on the current [gateway node](https://www.cockroachlabs.com/docs/v23.1/architecture/life-of-a-distributed-transaction#gateway). [#118949][#118949]
+- Added support for [index hinting]({% link v23.1/table-expressions.md %}#force-index-selection) with [`INSERT`]({% link v23.1/insert.md %}) and [`UPSERT`]({% link v23.1/upsert.md %}) statements. This allows `INSERT ... ON CONFLICT` and `UPSERT` queries to use index hints in the same way as [`UPDATE`]({% link v23.1/update.md %}) and [`DELETE`]({% link v23.1/delete.md %}) statements. [#119600][#119600]
Operational changes
-- You can now pass the `--include-range-info` flag when [generating a diagnostic bundle](https://www.cockroachlabs.com/docs/v23.1/cockroach-debug-zip) to include problem ranges. [#119233][#119233]
+- You can now pass the `--include-range-info` flag when [generating a diagnostic bundle]({% link v23.1/cockroach-debug-zip.md %}) to include problem ranges. [#119233][#119233]
- In unredacted diagnostic bundles, two columns have been added to the `crdb_internal.transaction_contention_events` table:
- `waiting_stmt_query`: the query of the statement that is waiting to run.
- `blocking_txn_queries_unordered`: an unordered list of the blocking transaction's queries.
@@ -27,37 +27,37 @@ Release Date: March 19, 2024
DB Console changes
-- The [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) now always shows the entire selected period, instead of only the period that contains data. [#118811][#118811]
-- The [**Overload Dashboard**](https://www.cockroachlabs.com/docs/v23.1/ui-overload-dashboard) page now includes two additional graphs:
+- The [**Statements** page]({% link v23.1/ui-statements-page.md %}) now always shows the entire selected period, instead of only the period that contains data. [#118811][#118811]
+- The [**Overload Dashboard**]({% link v23.1/ui-overload-dashboard.md %}) page now includes two additional graphs:
- **Elastic CPU Utilization**: Shows the actual CPU used for elastic work compared with the configured limit.
- **Elastic CPU Exhausted Duration Per Second**: Shows how much time, in milliseconds, that elastic work has been subject to CPU exhaustion. [#118908][#118908]
Bug fixes
-- Fixed a bug where creating a [changefeed](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) that targeted tables with a zero-scale [`DECIMAL(n)`](https://www.cockroachlabs.com/docs/v23.1/decimal) column, `format='avro'`, and `diff` would cause a panic. [#118848][#118848]
+- Fixed a bug where creating a [changefeed]({% link v23.1/change-data-capture-overview.md %}) that targeted tables with a zero-scale [`DECIMAL(n)`]({% link v23.1/decimal.md %}) column, `format='avro'`, and `diff` would cause a panic. [#118848][#118848]
- Fixed a bug where a [changefeed](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview.html) could omit events in rare cases, logging the error `cdc ux violation: detected timestamp ... that is less or equal to the local frontier`. This could happen in the following scenario:
1. A [rangefeed](https://www.cockroachlabs.com/docs/v23.1/create-and-configure-changefeeds.html#enable-rangefeeds) runs on a follower [replica](https://www.cockroachlabs.com/docs/v23.1/architecture/glossary#cockroachdb-architecture-terms) that lags significantly behind the [leaseholder](https://www.cockroachlabs.com/docs/v23.1/architecture/glossary#cockroachdb-architecture-terms).
1. A transaction commits and removes its [transaction record](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#transaction-records) before its [intent](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#writing) resolution is applied on the follower.
1. The follower's [closed timestamp](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#closed-timestamps) has advanced past the transaction commit timestamp.
1. The rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began).
- 1. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the [changefeed](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview#how-does-an-enterprise-changefeed-work) to drop these events entirely, never emitting them.
+ 1. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the [changefeed]({% link v23.1/change-data-capture-overview.md %}) to drop these events entirely, never emitting them.
[#118415][#118415]
-- Fixed a bug introduced in v22.2 where queries issued by [TTL jobs](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl#view-scheduled-ttl-jobs) did not use optimal plans. [#118496][#118496]
+- Fixed a bug introduced in v22.2 where queries issued by [TTL jobs]({% link v23.1/row-level-ttl.md %}#view-scheduled-ttl-jobs) did not use optimal plans. [#118496][#118496]
- Fixed a bug introduced in v23.1.0 where a [decommissioning](https://www.cockroachlabs.com/docs/v23.1/node-shutdown?filters=decommission#decommission-the-node) replica that is part of a mis-replicated range could get stuck on a rebalance operation that was falsely determined to be unsafe. [#118437][#118437]
-- Fixed a bug introduced in v22.2 where adding multiple columns with [`UNIQUE` constraints](https://www.cockroachlabs.com/docs/v23.1/unique) in a single statement could result in the error `secondary index for backfill contains physical column not present in source primary index`. [#118137][#118137]
+- Fixed a bug introduced in v22.2 where adding multiple columns with [`UNIQUE` constraints]({% link v23.1/unique.md %}) in a single statement could result in the error `secondary index for backfill contains physical column not present in source primary index`. [#118137][#118137]
- Fixed a bug where an `unable to get CPU capacity` error could be logged every 10 seconds when running outside of a CPU `cgroup`. [#118670][#118670]
-- Fixed a bug where an [`AUTO CREATE STATS` job](https://www.cockroachlabs.com/docs/v23.1/show-jobs#show-automatic-jobs) could cause an internal system table to grow, and this could cause slow queries related to the job system. [#118944][#118944]
-- Fixed a bug that caused a confusing error when a sequence name allocated by [`SERIAL`](https://www.cockroachlabs.com/docs/v23.1/serial) conflicted with an existing type name. [#118948][#118948]
-- Fixed a bug where an [`ALTER PRIMARY KEY`](https://www.cockroachlabs.com/docs/v23.1/alter-table#alter-primary-key) query could fail with the error `non-nullable column {x} with no value! Index scanned ..` when validating a recreated [secondary index](https://www.cockroachlabs.com/docs/v23.1/indexes). [#118972][#118972]
+- Fixed a bug where an [`AUTO CREATE STATS` job]({% link v23.1/show-jobs.md %}#show-automatic-jobs) could cause an internal system table to grow, and this could cause slow queries related to the job system. [#118944][#118944]
+- Fixed a bug that caused a confusing error when a sequence name allocated by [`SERIAL`]({% link v23.1/serial.md %}) conflicted with an existing type name. [#118948][#118948]
+- Fixed a bug where an [`ALTER PRIMARY KEY`]({% link v23.1/alter-table.md %}#alter-primary-key) query could fail with the error `non-nullable column {x} with no value! Index scanned ..` when validating a recreated [secondary index]({% link v23.1/indexes.md %}). [#118972][#118972]
- Fixed a bug introduced in v23.1 that could cause the internal error `attempting to append refresh spans after the tracked timestamp has moved forward` to be logged in some cases when using virtual tables such as`crdb_internal.system_jobs`. [#119186][#119186]
- Fixed a bug in the `crdb_internal.leases` table where a deadlock in the leasing system could cause a node to become unavailable. [#119374][#119374]
-- Fixed a bug introduced in v23.1.15 where a [rangefeed](https://www.cockroachlabs.com/docs/v23.1/create-and-configure-changefeeds#enable-rangefeeds)-resolved timestamp could get stuck after a [range merge](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges) if the range cache thinks the barrier spans multiple ranges. The log message `pushing old intents failed: range barrier failed, range split` is constantly emitted. [#119543][#119543]
-- Fixed a rare panic that could happen during a [`pg_dump` import](https://www.cockroachlabs.com/docs/v23.1/import) that contains a subquery in one of its arguments, such as a function like `SELECT addgeometrycolumn(...)`. Now, attempting to import a `pg_dump` with a function that has a subquery in one of its arguments results in an error rather than a panic. [#118611][#118611]
-- Fixed a bug in the [webhook sink](https://www.cockroachlabs.com/docs/v23.1/changefeed-sinks#webhook-sink) where the `http` request body may not be initialized on retries, resulting in the error `http: ContentLength=... with Body length 0`. [#119495][#119495]
-- Fixed a bug where some files were not closed when inspecting backup metadata during [`BACKUP`](https://www.cockroachlabs.com/docs/v23.1/backup) and [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) operations. [#119634][#119634]
-- Fixed a bug that could cause internal errors to be logged when executing an [`EXPORT`](https://www.cockroachlabs.com/docs/v23.1/export) statement. [#119712][#119712]
-- Fixed a bug where a [schema change](https://www.cockroachlabs.com/docs/v23.1/online-schema-changes) with a large number of descriptors could perform a [full table scan](https://www.cockroachlabs.com/docs/v23.1/show-full-table-scans) on the `system.leases` table. [#119466][#119466]
+- Fixed a bug introduced in v23.1.15 where a [rangefeed]({% link v23.1/create-and-configure-changefeeds.md %}#enable-rangefeeds)-resolved timestamp could get stuck after a [range merge](https://www.cockroachlabs.com/docs/v23.1/architecture/distribution-layer#range-merges) if the range cache thinks the barrier spans multiple ranges. The log message `pushing old intents failed: range barrier failed, range split` is constantly emitted. [#119543][#119543]
+- Fixed a rare panic that could happen during a [`pg_dump` import]({% link v23.1/import.md %}) that contains a subquery in one of its arguments, such as a function like `SELECT addgeometrycolumn(...)`. Now, attempting to import a `pg_dump` with a function that has a subquery in one of its arguments results in an error rather than a panic. [#118611][#118611]
+- Fixed a bug in the [webhook sink]({% link v23.1/changefeed-sinks.md %}#webhook-sink) where the `http` request body may not be initialized on retries, resulting in the error `http: ContentLength=... with Body length 0`. [#119495][#119495]
+- Fixed a bug where some files were not closed when inspecting backup metadata during [`BACKUP`]({% link v23.1/backup.md %}) and [`RESTORE`]({% link v23.1/restore.md %}) operations. [#119634][#119634]
+- Fixed a bug that could cause internal errors to be logged when executing an [`EXPORT`]({% link v23.1/export.md %}) statement. [#119712][#119712]
+- Fixed a bug where a [schema change]({% link v23.1/online-schema-changes.md %}) with a large number of descriptors could perform a [full table scan]({% link v23.1/show-full-table-scans.md %}) on the `system.leases` table. [#119466][#119466]
- Fixed a bug introduced in v22.1.0 that could cause the `sql.txns.open.internal` and `sql.statements.active.internal` gauge metrics never to be updated, leading to an incorrect count of the number of transactions and statements executed by operations internal to CockroachDB. These metrics do not include operations executed by external SQL clients. [#119338][#119338]
- Fixed a bug introduced in v22.2.9 that could cause a slow memory leak that can accumulate when opening many new connections. [#120244][#120244]
diff --git a/src/current/_includes/releases/v23.1/v23.1.18.md b/src/current/_includes/releases/v23.1/v23.1.18.md
index 932db309005..22c8b3b49aa 100644
--- a/src/current/_includes/releases/v23.1/v23.1.18.md
+++ b/src/current/_includes/releases/v23.1/v23.1.18.md
@@ -6,30 +6,30 @@ Release Date: April 9, 2024
SQL language changes
-- Fixed an oversight where CockroachDB was allowing mutation statements (such as [`UPDATE`](https://www.cockroachlabs.com/docs/v23.1/update) or [`DELETE`](https://www.cockroachlabs.com/docs/v23.1/delete)) and locking statements (such as [`SELECT ... FOR UPDATE`](https://www.cockroachlabs.com/docs/v23.1/select-for-update)) in implicit single-statement [transactions](https://www.cockroachlabs.com/docs/v23.1/transactions) using [`AS OF SYSTEM TIME`](https://www.cockroachlabs.com/docs/v23.1/as-of-system-time). [#120159][#120159]
+- Fixed an oversight where CockroachDB was allowing mutation statements (such as [`UPDATE`]({% link v23.1/update.md %}) or [`DELETE`]({% link v23.1/delete.md %})) and locking statements (such as [`SELECT ... FOR UPDATE`]({% link v23.1/select-for-update.md %})) in implicit single-statement [transactions]({% link v23.1/transactions.md %}) using [`AS OF SYSTEM TIME`]({% link v23.1/as-of-system-time.md %}). [#120159][#120159]
Operational changes
-- The `admission.kv.bulk_only.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-admission-kv-bulk-only-enabled), when set to `true`, only skips store-level [admission control](https://www.cockroachlabs.com/docs/v23.1/admission-control) for normal priority work, and continues to subject the work to CPU admission control. [#119173][#119173]
+- The `admission.kv.bulk_only.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}), when set to `true`, only skips store-level [admission control]({% link v23.1/admission-control.md %}) for normal priority work, and continues to subject the work to CPU admission control. [#119173][#119173]
DB Console changes
-- Resolved an issue where clusters with multiple [stores](https://www.cockroachlabs.com/docs/v23.1/cockroach-start#store) per node could list inaccurate region/node information on the [Databases Page](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page). [#120234][#120234]
-- Fixed a bug where the [timeseries graphs shown on the **SQL Activity Statement Fingerprint** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#charts) in [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) were not rendering properly. This involved fixing a bug related to setting the time range of the charts. [#121783][#121783]
+- Resolved an issue where clusters with multiple [stores]({% link v23.1/cockroach-start.md %}#store) per node could list inaccurate region/node information on the [Databases Page]({% link v23.1/ui-databases-page.md %}). [#120234][#120234]
+- Fixed a bug where the [timeseries graphs shown on the **SQL Activity Statement Fingerprint** page]({% link v23.1/ui-statements-page.md %}#charts) in [DB Console]({% link v23.1/ui-overview.md %}) were not rendering properly. This involved fixing a bug related to setting the time range of the charts. [#121783][#121783]
Bug fixes
-- Previously, on long-running [sessions](https://www.cockroachlabs.com/docs/v23.1/show-sessions) that issue many (hundreds of thousands or more) [transactions](https://www.cockroachlabs.com/docs/v23.1/transactions), CockroachDB's internal memory accounting system, the limit for which is configured via the [`--max-sql-memory` flag](https://www.cockroachlabs.com/docs/v23.1/cockroach-start#general)), could leak. This bug, in turn, could result in the error message `"root: memory budget exceeded"` for other queries. The bug was present in v23.1.17 and is now fixed. [#121874][#121874]
-- Fix a bug where running [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) on certain [backups](https://www.cockroachlabs.com/docs/v23.1/backup-and-restore-overview) would open a very large number of connections to the [backup storage provider](https://www.cockroachlabs.com/docs/v23.1/use-cloud-storage). [#119925][#119925]
-- A user with the `VIEWACTIVITYREDACTED` [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#managing-privileges) can no longer see constants inside of queries that originate from other [users](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#roles) in the [`SHOW SESSIONS`](https://www.cockroachlabs.com/docs/v23.1/show-sessions) result. Previously, this redaction did not occur. [#119963][#119963]
-- Previously, the [`SHOW QUERIES`](https://www.cockroachlabs.com/docs/v23.1/show-statements#aliases) and [`SHOW STATEMENTS`](https://www.cockroachlabs.com/docs/v23.1/show-statements) required the user to have the `VIEWACTIVITY` or `VIEWACTIVITYREDACTED` [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#managing-privileges). However, a user should always be able to view their own queries, even without these privileges. This is now fixed. [#119963][#119963]
-- Fixed a bug in which it was possible to `SET transaction_read_only = false` during an [`AS OF SYSTEM TIME`](https://www.cockroachlabs.com/docs/v23.1/as-of-system-time) transaction. [#120159][#120159]
-- Fixed a slow memory leak that could accumulate when opening many new [connections](https://www.cockroachlabs.com/docs/v23.1/connection-pooling). The bug was present in v22.2.9+ and v23.1+. [#120242][#120242]
-- Users will no longer see [views](https://www.cockroachlabs.com/docs/v23.1/views) displayed on the [**Databases** page](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page) in [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview). Previously, views would be listed with no information, only displaying errors. [#120213][#120213]
+- Previously, on long-running [sessions]({% link v23.1/show-sessions.md %}) that issue many (hundreds of thousands or more) [transactions]({% link v23.1/transactions.md %}), CockroachDB's internal memory accounting system, the limit for which is configured via the [`--max-sql-memory` flag]({% link v23.1/cockroach-start.md %}#general)), could leak. This bug, in turn, could result in the error message `"root: memory budget exceeded"` for other queries. The bug was present in v23.1.17 and is now fixed. [#121874][#121874]
+- Fix a bug where running [`RESTORE`]({% link v23.1/restore.md %}) on certain [backups]({% link v23.1/backup-and-restore-overview.md %}) would open a very large number of connections to the [backup storage provider]({% link v23.1/use-cloud-storage.md %}). [#119925][#119925]
+- A user with the `VIEWACTIVITYREDACTED` [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#managing-privileges) can no longer see constants inside of queries that originate from other [users](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#roles) in the [`SHOW SESSIONS`]({% link v23.1/show-sessions.md %}) result. Previously, this redaction did not occur. [#119963][#119963]
+- Previously, the [`SHOW QUERIES`]({% link v23.1/show-statements.md %}#aliases) and [`SHOW STATEMENTS`]({% link v23.1/show-statements.md %}) required the user to have the `VIEWACTIVITY` or `VIEWACTIVITYREDACTED` [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#managing-privileges). However, a user should always be able to view their own queries, even without these privileges. This is now fixed. [#119963][#119963]
+- Fixed a bug in which it was possible to `SET transaction_read_only = false` during an [`AS OF SYSTEM TIME`]({% link v23.1/as-of-system-time.md %}) transaction. [#120159][#120159]
+- Fixed a slow memory leak that could accumulate when opening many new [connections]({% link v23.1/connection-pooling.md %}). The bug was present in v22.2.9+ and v23.1+. [#120242][#120242]
+- Users will no longer see [views]({% link v23.1/views.md %}) displayed on the [**Databases** page]({% link v23.1/ui-databases-page.md %}) in [DB Console]({% link v23.1/ui-overview.md %}). Previously, views would be listed with no information, only displaying errors. [#120213][#120213]
Performance improvements
-- Enabled the [admission control](https://www.cockroachlabs.com/docs/v23.1/admission-control) CPU limiter for [row-level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) to reduce latency impact from CPU-intensive scans issued as part of [row-level TTL jobs](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl#view-scheduled-ttl-jobs). [#120516][#120516]
+- Enabled the [admission control]({% link v23.1/admission-control.md %}) CPU limiter for [row-level TTL]({% link v23.1/row-level-ttl.md %}) to reduce latency impact from CPU-intensive scans issued as part of [row-level TTL jobs]({% link v23.1/row-level-ttl.md %}#view-scheduled-ttl-jobs). [#120516][#120516]
diff --git a/src/current/_includes/releases/v23.1/v23.1.2.md b/src/current/_includes/releases/v23.1/v23.1.2.md
index 595b8442645..584b917eb29 100644
--- a/src/current/_includes/releases/v23.1/v23.1.2.md
+++ b/src/current/_includes/releases/v23.1/v23.1.2.md
@@ -6,153 +6,153 @@ Release Date: May 30, 2023
Backward-incompatible changes
-- Schema names in the [`search_path`](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#search-path) session variable now respect case and must be delimited with double quotation marks. Previously, if a `search_path` was specified in the connection string parameters, it would be treated case insensitive by default. [#101493][#101493]
+- Schema names in the [`search_path`]({% link v23.1/sql-name-resolution.md %}#search-path) session variable now respect case and must be delimited with double quotation marks. Previously, if a `search_path` was specified in the connection string parameters, it would be treated case insensitive by default. [#101493][#101493]
[#101493][#101493]
General changes
-- Queries with invalid syntax are now logged at [the `INFO` level](https://www.cockroachlabs.com/docs/v23.1/logging#info) in the `SQL_EXEC` log channel. Previously, these were logged at the `ERROR` level. [#101094][#101094]
+- Queries with invalid syntax are now logged at [the `INFO` level]({% link v23.1/logging.md %}#info) in the `SQL_EXEC` log channel. Previously, these were logged at the `ERROR` level. [#101094][#101094]
-- [CDC queries](https://www.cockroachlabs.com/docs/v23.1/cdc-queries) now support wrapped envelope with diff (`envelope='wrapped', diff`). [#101392][#101392]
-- [Changefeeds using the `WITH confluent_schema_registry` option](https://www.cockroachlabs.com/docs/v23.1/stream-a-changefeed-to-a-confluent-cloud-kafka-cluster) will make fewer duplicate schema registrations. [#100844][#100844]
-- Added logic to set the cluster's multi-region system database's [survival goal](https://www.cockroachlabs.com/docs/v23.1/multiregion-overview#survival-goals) to the max non-system database's survival whenever an `ALTER DATABASE...SURVIVE...FAILURE` is issued. [#102379][#102379]
-- [Cluster SSO using JSON web tokens](https://www.cockroachlabs.com/docs/v23.1/sso-sql) (JWT) can now read SQL usernames from any JWT claims instead of requiring the subject claim to be used. The claim can be controlled by the `server.jwt_authentication.claim` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) with an empty string or "sub" equivalent to the previous behavior. [#103526][#103526]
+- [CDC queries]({% link v23.1/cdc-queries.md %}) now support wrapped envelope with diff (`envelope='wrapped', diff`). [#101392][#101392]
+- [Changefeeds using the `WITH confluent_schema_registry` option]({% link v23.1/stream-a-changefeed-to-a-confluent-cloud-kafka-cluster.md %}) will make fewer duplicate schema registrations. [#100844][#100844]
+- Added logic to set the cluster's multi-region system database's [survival goal]({% link v23.1/multiregion-overview.md %}#survival-goals) to the max non-system database's survival whenever an `ALTER DATABASE...SURVIVE...FAILURE` is issued. [#102379][#102379]
+- [Cluster SSO using JSON web tokens]({% link v23.1/sso-sql.md %}) (JWT) can now read SQL usernames from any JWT claims instead of requiring the subject claim to be used. The claim can be controlled by the `server.jwt_authentication.claim` [cluster setting]({% link v23.1/cluster-settings.md %}) with an empty string or "sub" equivalent to the previous behavior. [#103526][#103526]
SQL language changes
-- Added a new [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) `unbounded_parallel_scans`, which controls whether scans will be parallelized across [ranges](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-range) in more cases. Note that using this feature can lead to increased likelihood of [out-of-memory errors (OOMs)](https://www.cockroachlabs.com/docs/v23.1/cluster-setup-troubleshooting#out-of-memory-oom-crash), so it should be used with care (namely when you expect that the scan should read a "reasonable" number of rows - probably less than 10k). Also note that [queries with `LIMIT`s](https://www.cockroachlabs.com/docs/v23.1/limit-offset) aren't affected by this variable; cross-range parallelism of scans continue to be disabled for such queries. [#100948][#100948]
-- Statements of type [`SET ...`](https://www.cockroachlabs.com/docs/v23.1/set-vars) are not longer displayed on the [Insights page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page). [#101669][#101669]
+- Added a new [session variable]({% link v23.1/set-vars.md %}) `unbounded_parallel_scans`, which controls whether scans will be parallelized across [ranges](https://www.cockroachlabs.com/docs/v23.1/architecture/overview#architecture-range) in more cases. Note that using this feature can lead to increased likelihood of [out-of-memory errors (OOMs)]({% link v23.1/cluster-setup-troubleshooting.md %}#out-of-memory-oom-crash), so it should be used with care (namely when you expect that the scan should read a "reasonable" number of rows - probably less than 10k). Also note that [queries with `LIMIT`s]({% link v23.1/limit-offset.md %}) aren't affected by this variable; cross-range parallelism of scans continue to be disabled for such queries. [#100948][#100948]
+- Statements of type [`SET ...`]({% link v23.1/set-vars.md %}) are not longer displayed on the [Insights page]({% link v23.1/ui-insights-page.md %}). [#101669][#101669]
- Fixed [`crdb_internal.transaction_contention_events`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal#transaction_contention_events), so it generates even if an error occurs when getting the names. [#101870][#101870]
-- Added a new SQL activity updater job which updates the `system.transaction_activity` and `system.statement_activity` tables based on the [statistics](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-statistics) tables. [#101996][#101996]
-- Added two views to the [`crdb_internal catalog`](https://www.cockroachlabs.com/docs/v23.1/crdb-internal): `crdb_internal.statement_activity`, which surfaces data in the `persisted system.statement_activity` table and `crdb_internal.transaction_activity`, which surfaces the `system.transaction_activity` table. [#102002][#102002]
-- Tables with [Row-level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) settings can now have outbound [foreign keys](https://www.cockroachlabs.com/docs/v23.1/foreign-key). [#101874][#101874]
+- Added a new SQL activity updater job which updates the `system.transaction_activity` and `system.statement_activity` tables based on the [statistics]({% link v23.1/ui-statements-page.md %}#statement-statistics) tables. [#101996][#101996]
+- Added two views to the [`crdb_internal catalog`]({% link v23.1/crdb-internal.md %}): `crdb_internal.statement_activity`, which surfaces data in the `persisted system.statement_activity` table and `crdb_internal.transaction_activity`, which surfaces the `system.transaction_activity` table. [#102002][#102002]
+- Tables with [Row-level TTL]({% link v23.1/row-level-ttl.md %}) settings can now have outbound [foreign keys]({% link v23.1/foreign-key.md %}). [#101874][#101874]
- Span statistics are now unavailable on mixed-version clusters. [#101877][#101877]
-- Introduced the `to_char(date, format)` [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators), which converts a given date to a string using the given format string. [#102989][#102989]
-- Renamed an existing metric `changefeed.table_metadata_nanos` to `changefeed.schemafeed.table_metadata_nanos` and introduced a new metric `changefeed.schemafeed.table_history_scans`, which records the number of table history scans the [schema feed](https://www.cockroachlabs.com/docs/v23.1/changefeed-examples) performs. [#102977][#102977]
-- Changed the [`OID`](https://www.cockroachlabs.com/docs/v23.1/oid) generation for `pg_catalog`. For example `column`, `index` and `constraint` `OID`'s will have different values. `Relation`, `type` and `function` `OID`'s remain unchanged. [#103556][#103556]
-- Added a new [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) `optimizer_use_improved_computed_column_filters_derivation`, which defaults to `FALSE`. When `TRUE`, the optimizer will derive filters on computed columns in more cases. [#103412][#103412]
+- Introduced the `to_char(date, format)` [built-in function]({% link v23.1/functions-and-operators.md %}), which converts a given date to a string using the given format string. [#102989][#102989]
+- Renamed an existing metric `changefeed.table_metadata_nanos` to `changefeed.schemafeed.table_metadata_nanos` and introduced a new metric `changefeed.schemafeed.table_history_scans`, which records the number of table history scans the [schema feed]({% link v23.1/changefeed-examples.md %}) performs. [#102977][#102977]
+- Changed the [`OID`]({% link v23.1/oid.md %}) generation for `pg_catalog`. For example `column`, `index` and `constraint` `OID`'s will have different values. `Relation`, `type` and `function` `OID`'s remain unchanged. [#103556][#103556]
+- Added a new [session setting]({% link v23.1/set-vars.md %}) `optimizer_use_improved_computed_column_filters_derivation`, which defaults to `FALSE`. When `TRUE`, the optimizer will derive filters on computed columns in more cases. [#103412][#103412]
- `Crdb_internal.transaction_contention_events`, `crdb_internal.node_contention_events`, and `crdb_internal.cluster_locks` will now redact keys provided the user has [`VIEWACTIVITYREDACTED`](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization). `Crdb_internal.node_contention_events` can only be viewed if the user has any of `admin`, `VIEWACTIVITY` or `VIEWACTIVITYREDACTED`. [#103637][#103637]
Operational changes
-- Added the `rebalancing.replicas.cpunanospersecond` histogram [metric](https://www.cockroachlabs.com/docs/v23.1/metrics), which provides insight into the distribution of replica CPU usage within a store. [#100509][#100509]
-- Added the `rebalancing.replicas.queriespersecond` histogram [metric](https://www.cockroachlabs.com/docs/v23.1/metrics), which provides insight into the distribution of queries per replica within a store. [#100509][#100509]
+- Added the `rebalancing.replicas.cpunanospersecond` histogram [metric]({% link v23.1/metrics.md %}), which provides insight into the distribution of replica CPU usage within a store. [#100509][#100509]
+- Added the `rebalancing.replicas.queriespersecond` histogram [metric]({% link v23.1/metrics.md %}), which provides insight into the distribution of queries per replica within a store. [#100509][#100509]
- The amount of [replication](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer) traffic in flight from a single [Raft leader](https://www.cockroachlabs.com/docs/v23.1/architecture/reads-and-writes-overview#architecture-raft-leader) to a follower has been reduced from 256 MB to 32 MB. This reduces the chance of running out-of-memory during bulk write operations. This can be controlled via the environment variable `COCKROACH_RAFT_MAX_INFLIGHT_BYTES`. [#101507][#101507]
-- Added the [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) `leases.requests.latency`, which records a histogram of lease request latencies. [#100475][#100475]
+- Added the [metric]({% link v23.1/metrics.md %}) `leases.requests.latency`, which records a histogram of lease request latencies. [#100475][#100475]
- When local corruption of data is encountered by a background job in the [storage engine](https://www.cockroachlabs.com/docs/v23.1/architecture/storage-layer), a node will now exit immediately. [#102274][#102274]
-- When the [`--experimental-dns-srv`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start#networking) flag is enabled, the `crdb` node will always attempt to query SRV records of an address when dialing remote targets, and fall back to use the address verbatim if the SRV query fails. Previously, SRV queries were only attempted once when a node starts. [#102468][#102468]
+- When the [`--experimental-dns-srv`]({% link v23.1/cockroach-start.md %}#networking) flag is enabled, the `crdb` node will always attempt to query SRV records of an address when dialing remote targets, and fall back to use the address verbatim if the SRV query fails. Previously, SRV queries were only attempted once when a node starts. [#102468][#102468]
- The default Raft scheduler concurrency, controlled by `COCKROACH_SCHEDULER_CONCURRENCY` and defaulting to 8 per CPU core capped at 96, is now divided evenly across stores instead of applying individually per store. This avoids excessive Go scheduler pressure and memory usage on nodes with many stores. The common case of 1 store per node is not affected. [#103073][#103073]
-- Workload generators now export Go runtime metrics via [Prometheus](https://www.cockroachlabs.com/docs/v23.1/monitor-cockroachdb-with-prometheus) endpoint. [#102392][#102392]
-- [Multi-region](https://www.cockroachlabs.com/docs/v23.1/multiregion-overview) Serverless databases that are created without a primary region will now inherit regions from the Serverless cluster's regions. [#102627][#102627]
+- Workload generators now export Go runtime metrics via [Prometheus]({% link v23.1/monitor-cockroachdb-with-prometheus.md %}) endpoint. [#102392][#102392]
+- [Multi-region]({% link v23.1/multiregion-overview.md %}) Serverless databases that are created without a primary region will now inherit regions from the Serverless cluster's regions. [#102627][#102627]
Command-line changes
-- The [`cockroach debug zip`](https://www.cockroachlabs.com/docs/v23.1/cockroach-debug-zip) command now accepts an `--include-range-info` flag, which determines whether CockroachDB retrieves individual `nodes/*/ranges/*.json` files, which was previously done by default. For large clusters, this can dramatically reduce the size of the generated artifacts. This flag defaults to `FALSE`. [#102862][#102862]
-- [Workload](https://www.cockroachlabs.com/docs/v23.1/cockroach-workload) now jitters the teardown of connections to prevent a [thundering herd](https://wikipedia.org/wiki/Thundering_herd_problem) of queries impacting P99 latency results. [#102395][#102395]
-- Workload utility now has flags to tune the [connection pool](https://www.cockroachlabs.com/docs/v23.1/connection-pooling) used for testing. See `--conn-healthcheck-period`, `--min-conns`, and `--max-conn-*` flags for details. [#102395][#102395]
+- The [`cockroach debug zip`]({% link v23.1/cockroach-debug-zip.md %}) command now accepts an `--include-range-info` flag, which determines whether CockroachDB retrieves individual `nodes/*/ranges/*.json` files, which was previously done by default. For large clusters, this can dramatically reduce the size of the generated artifacts. This flag defaults to `FALSE`. [#102862][#102862]
+- [Workload]({% link v23.1/cockroach-workload.md %}) now jitters the teardown of connections to prevent a [thundering herd](https://wikipedia.org/wiki/Thundering_herd_problem) of queries impacting P99 latency results. [#102395][#102395]
+- Workload utility now has flags to tune the [connection pool]({% link v23.1/connection-pooling.md %}) used for testing. See `--conn-healthcheck-period`, `--min-conns`, and `--max-conn-*` flags for details. [#102395][#102395]
- Workload now supports every [PostgreSQL query mode](https://github.com/jackc/pgx/blob/fa5fbed497bc75acee05c1667a8760ce0d634cba/conn.go#L167-L182) available via the underlying `pgx` driver. [#102395][#102395]
- The `\connect` client-side command for the SQL shell (included in `cockroach sql`, `cockroach demo`, `cockroach-sql`) now recognizes the option `autocerts` as its last argument. When provided, `\c` will now try to discover a [Transport Layer Security (TLS)](https://www.cockroachlabs.com/docs/v23.1/security-reference/transport-layer-security) client certificate and key in the same directory(ies) as used by the previous connection URL. This feature makes it easier to switch usernames when TLS client/key files are available for both the previous and new username. [#103144][#103144]
DB Console changes
-- The `Application Name` column is now shown by default in the [Fingerprints Overview](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) pages. Statements and transactions fingerprints will be displayed per application on the Overview pages rather than grouped into a single fingerprint ID. [#101164][#101164]
-- When going from the [Fingerprints Overview](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) pages or the [Insight Details](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) pages to the Fingerprint Details page, the Details page will fetch data for the statement with the provided application name. For Overview pages, this is the application name of the selected row. For Insight details, this is the application of the execution that generated the insight. [#101164][#101164]
-- Updated the [Network Latency](https://www.cockroachlabs.com/docs/v23.1/ui-network-latency-page) side nav name and Network Diagnostics page title to Network. Updated the [Advanced Debugging](https://www.cockroachlabs.com/docs/v23.1/ui-debug-pages) page title to Advanced Debug. [#101758][#101758]
-- Added an option to select the trace rate for [Statement Diagnostics](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) collection. [#101759][#101759]
-- Added a time scale selector to the [Statement Diagnostics](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) page, making it possible to see bundles only from the selected period. [#101802][#101802]
-- Added draining node as its own value on the [DB Console Overview](https://www.cockroachlabs.com/docs/v23.1/ui-overview) page, instead of counting it as a dead node. [#101793][#101793]
-- Added the ability for users to view timestamps in [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview) in their preferred timezone via the cluster setting `ui.display_timezone`. Previously, only the timezones Coordinated Universal Time and America/New_York were supported. [#102195][#102195]
-- An alert on [DB Console Overview](https://www.cockroachlabs.com/docs/v23.1/ui-overview) page is shown when the cluster setting `cluster.preserve_downgrade_option` is set, and no longer waits 48 hours to show. [#102913][#102913]
-- Added [Transaction Insights](https://www.cockroachlabs.com/docs/cockroachcloud/insights-page) for Serverless. [#103363][#103363]
-- Added `_status/load` to the list of Raw Status Endpoints on the [Advanced Debug](https://www.cockroachlabs.com/docs/v23.1/ui-debug-pages) page. [#103420][#103420]
-- If a page crashed, a force refresh is no longer required to be able to see the other pages on [DB Console](https://www.cockroachlabs.com/docs/v23.1/ui-overview). [#103328][#103328]
-- The filter on the [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page is now working properly. Fixed the type on the JSON object from `stmtTyp` to `stmtType`. [#103411][#103411]
-- Added missing information on the [Index Details](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page#index-recommendations) page about latency information of most used fingerprints. [#103421][#103421]
+- The `Application Name` column is now shown by default in the [Fingerprints Overview]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) pages. Statements and transactions fingerprints will be displayed per application on the Overview pages rather than grouped into a single fingerprint ID. [#101164][#101164]
+- When going from the [Fingerprints Overview]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) pages or the [Insight Details]({% link v23.1/ui-insights-page.md %}) pages to the Fingerprint Details page, the Details page will fetch data for the statement with the provided application name. For Overview pages, this is the application name of the selected row. For Insight details, this is the application of the execution that generated the insight. [#101164][#101164]
+- Updated the [Network Latency]({% link v23.1/ui-network-latency-page.md %}) side nav name and Network Diagnostics page title to Network. Updated the [Advanced Debugging]({% link v23.1/ui-debug-pages.md %}) page title to Advanced Debug. [#101758][#101758]
+- Added an option to select the trace rate for [Statement Diagnostics]({% link v23.1/ui-statements-page.md %}#diagnostics) collection. [#101759][#101759]
+- Added a time scale selector to the [Statement Diagnostics]({% link v23.1/ui-statements-page.md %}#diagnostics) page, making it possible to see bundles only from the selected period. [#101802][#101802]
+- Added draining node as its own value on the [DB Console Overview]({% link v23.1/ui-overview.md %}) page, instead of counting it as a dead node. [#101793][#101793]
+- Added the ability for users to view timestamps in [DB Console]({% link v23.1/ui-overview.md %}) in their preferred timezone via the cluster setting `ui.display_timezone`. Previously, only the timezones Coordinated Universal Time and America/New_York were supported. [#102195][#102195]
+- An alert on [DB Console Overview]({% link v23.1/ui-overview.md %}) page is shown when the cluster setting `cluster.preserve_downgrade_option` is set, and no longer waits 48 hours to show. [#102913][#102913]
+- Added [Transaction Insights]({% link cockroachcloud/insights-page.md %}) for Serverless. [#103363][#103363]
+- Added `_status/load` to the list of Raw Status Endpoints on the [Advanced Debug]({% link v23.1/ui-debug-pages.md %}) page. [#103420][#103420]
+- If a page crashed, a force refresh is no longer required to be able to see the other pages on [DB Console]({% link v23.1/ui-overview.md %}). [#103328][#103328]
+- The filter on the [SQL Activity]({% link v23.1/ui-overview.md %}#sql-activity) page is now working properly. Fixed the type on the JSON object from `stmtTyp` to `stmtType`. [#103411][#103411]
+- Added missing information on the [Index Details]({% link v23.1/ui-databases-page.md %}#index-recommendations) page about latency information of most used fingerprints. [#103421][#103421]
Bug fixes
-- Fixed the `sql.mem.distsql.current` [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) so it would no longer double count the memory usage of remote DistSQL flows. [#100049][#100049]
-- Fixed a rare bug introduced prior to v22.1 where distributed plans could cause the graceful drain of a node to become stuck retrying forever during [node shutdown](https://www.cockroachlabs.com/docs/v23.1/node-shutdown). This bug led to errors like `drain details: distSQL execution flows:`, together with a non-zero number of flows that does not reduce over a long period of time. [#100841][#100841]
-- Fixed a bug that caused a [restore](https://www.cockroachlabs.com/docs/v23.1/restore) to fail occasionally due to incorrect schema ID resolution when restoring a backup with [user-defined schemas](https://www.cockroachlabs.com/docs/v23.1/schema-design-schema). [#101309][#101309]
-- Fixed a bug that caused suboptimal query plans to be generated by [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) when the table being queried contained infinite values, e.g., `'+Infinity'::DECIMAL`. This bug was present since v22.1 (and likely earlier). It could also be triggered in rare cases when [table statistics](https://www.cockroachlabs.com/docs/v23.1/show-statistics) forecasts created a forecasted bucket with an infinite value. [#101135][#101135]
-- Fixed a rare internal error in [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) that existed since before v22.1, which could occur while enforcing orderings between SQL operators. [#101173][#101173]
+- Fixed the `sql.mem.distsql.current` [metric]({% link v23.1/metrics.md %}) so it would no longer double count the memory usage of remote DistSQL flows. [#100049][#100049]
+- Fixed a rare bug introduced prior to v22.1 where distributed plans could cause the graceful drain of a node to become stuck retrying forever during [node shutdown]({% link v23.1/node-shutdown.md %}). This bug led to errors like `drain details: distSQL execution flows:`, together with a non-zero number of flows that does not reduce over a long period of time. [#100841][#100841]
+- Fixed a bug that caused a [restore]({% link v23.1/restore.md %}) to fail occasionally due to incorrect schema ID resolution when restoring a backup with [user-defined schemas]({% link v23.1/schema-design-schema.md %}). [#101309][#101309]
+- Fixed a bug that caused suboptimal query plans to be generated by [the optimizer]({% link v23.1/cost-based-optimizer.md %}) when the table being queried contained infinite values, e.g., `'+Infinity'::DECIMAL`. This bug was present since v22.1 (and likely earlier). It could also be triggered in rare cases when [table statistics]({% link v23.1/show-statistics.md %}) forecasts created a forecasted bucket with an infinite value. [#101135][#101135]
+- Fixed a rare internal error in [the optimizer]({% link v23.1/cost-based-optimizer.md %}) that existed since before v22.1, which could occur while enforcing orderings between SQL operators. [#101173][#101173]
- Fixed a bug so that `crdb_internal.deserialize_session` internal function works properly with prepared statements that have more param type hints than params. [#101367][#101367]
-- Fixed a bug that caused internal errors when executing [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) with empty bodies. This bug was only present in alpha pre-release versions of 23.1. [#101382][#101382]
-- The `search_path` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) now supports schema names that have commas in them. Also, fixed a bug in parsing a `search_path` with a quote in it when specified in the [connection string](https://www.cockroachlabs.com/docs/v23.1/connection-parameters). [#101493][#101493]
-- Fixed a bug that has existed since [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) were introduced that could cause a function call to resolve to the wrong function after changes to the [schema `search_path`](https://www.cockroachlabs.com/docs/v23.1/sql-name-resolution#current-schema). [#101491][#101491]
-- Fixed an internal error that could occur when the `enforce_home_region` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) is on and the input to the lookup join is a `SELECT` of scalar expressions (e.g., `1+1`). Also, [subqueries](https://www.cockroachlabs.com/docs/v23.1/subqueries) with no home region now error out with `enforce_home_region` set. [#101483][#101483]
-- Previously, CockroachDB alpha and beta versions of 23.1 would panic on [`cockroach start`](https://www.cockroachlabs.com/docs/v23.1/cockroach-start) command when the `GOMEMLIMIT` environment variable was set and the `--max-go-memory` flag wasn't specified. This is now fixed. [#101564][#101564]
+- Fixed a bug that caused internal errors when executing [user-defined functions]({% link v23.1/user-defined-functions.md %}) with empty bodies. This bug was only present in alpha pre-release versions of 23.1. [#101382][#101382]
+- The `search_path` [session variable]({% link v23.1/set-vars.md %}) now supports schema names that have commas in them. Also, fixed a bug in parsing a `search_path` with a quote in it when specified in the [connection string]({% link v23.1/connection-parameters.md %}). [#101493][#101493]
+- Fixed a bug that has existed since [user-defined functions]({% link v23.1/user-defined-functions.md %}) were introduced that could cause a function call to resolve to the wrong function after changes to the [schema `search_path`]({% link v23.1/sql-name-resolution.md %}#current-schema). [#101491][#101491]
+- Fixed an internal error that could occur when the `enforce_home_region` [session setting]({% link v23.1/set-vars.md %}) is on and the input to the lookup join is a `SELECT` of scalar expressions (e.g., `1+1`). Also, [subqueries]({% link v23.1/subqueries.md %}) with no home region now error out with `enforce_home_region` set. [#101483][#101483]
+- Previously, CockroachDB alpha and beta versions of 23.1 would panic on [`cockroach start`]({% link v23.1/cockroach-start.md %}) command when the `GOMEMLIMIT` environment variable was set and the `--max-go-memory` flag wasn't specified. This is now fixed. [#101564][#101564]
- Fixed a bug whereby some tables' physical disk space could not be calculated by [the storage engine](https://www.cockroachlabs.com/docs/v23.1/architecture/storage-layer). [#100939][#100939]
-- Fixed a bug that caused errors in test builds and potentially incorrect results in release builds when invoking a [user-defined function](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) with a subquery argument. This bug was only present in v23.1 alpha versions. [#101641][#101641]
-- Point [inserts](https://www.cockroachlabs.com/docs/v23.1/insert) and [updates](https://www.cockroachlabs.com/docs/v23.1/update) that write to a remote region of a table created with the [`REGIONAL BY ROW AS`](https://www.cockroachlabs.com/docs/v23.1/create-table#create-a-table-with-a-regional-by-row-locality-using-a-custom-region-column) clause will now error out.
-- Fixed a bug in the [built-in functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) `pg_get_indexdef` and `col_description` that could cause the functions to return errors if the user created tables named `pg_indexes` or `pg_attribute`. Or, if the user created a schema named `system` with a table named `comments`. This bug was only present in pre-release versions of v23.1. [#101688][#101688]
+- Fixed a bug that caused errors in test builds and potentially incorrect results in release builds when invoking a [user-defined function]({% link v23.1/user-defined-functions.md %}) with a subquery argument. This bug was only present in v23.1 alpha versions. [#101641][#101641]
+- Point [inserts]({% link v23.1/insert.md %}) and [updates]({% link v23.1/update.md %}) that write to a remote region of a table created with the [`REGIONAL BY ROW AS`]({% link v23.1/create-table.md %}#create-a-table-with-a-regional-by-row-locality-using-a-custom-region-column) clause will now error out.
+- Fixed a bug in the [built-in functions]({% link v23.1/functions-and-operators.md %}) `pg_get_indexdef` and `col_description` that could cause the functions to return errors if the user created tables named `pg_indexes` or `pg_attribute`. Or, if the user created a schema named `system` with a table named `comments`. This bug was only present in pre-release versions of v23.1. [#101688][#101688]
- The descriptions of `rebalancing.readbytespersecond` and `rebalancing.writebytespersecond` metrics now correctly reference bytes read and bytes written, respectively. [#101709][#101709]
-- Fixed a bug to ensure that the [list of fingerprints](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#statement-fingerprints-view) used per index is shown even when there is a max-size limit on the SQL API. [#101783][#101783]
-- Fixed a bug where, when CockroachDB failed to retrieve [contention information](https://www.cockroachlabs.com/docs/v23.1/performance-best-practices-overview#transaction-contention), the full [Insights](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) page would return an error. Now, the Insights page will load even when there is an issue with decoding contention information. [#101782][#101782]
-- Fixed a bug where a [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) operation with `skip_localities_check` could fail with errors if regions were missing on a cluster. [#101797][#101797]
-- Fixed a bug in [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) that could cause an internal error in rare cases for a query with [outer joins](https://www.cockroachlabs.com/docs/v23.1/joins#full-outer-joins) that could be simplified to non-outer joins and at least one semi-join. This bug was present since before v22.1. [#100670][#100670]
-- Fixed a bug where CockroachDB previously incorrectly evaluated [`EXPORT`](https://www.cockroachlabs.com/docs/v23.1/export) statements that had projections or rendering on top of the `EXPORT` (e.g. the [common table expression](https://www.cockroachlabs.com/docs/v23.1/common-table-expressions) `WITH cte AS (EXPORT INTO CSV 'nodelocal://1/export1/' FROM SELECT * FROM t) SELECT filename FROM cte;`). Such statements would result in panics or incorrect query results. Note that the exported data wasn't affected, only the presentation of the query result. This bug had been present since v22.1 or earlier. [#101805][#101805]
-- Fixed a bug in [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) introduced in v22.2.0 that could cause queries containing a [subquery](https://www.cockroachlabs.com/docs/v23.1/subqueries) with a lateral join, in which the right side of the lateral join was an [aliased data source](https://www.cockroachlabs.com/docs/v23.1/table-expressions#aliased-table-expressions), to return an internal error in some cases. For example, it could cause an error if the subquery was provided as an argument to an [aggregate function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators#aggregate-functions). [#101863][#101863]
+- Fixed a bug to ensure that the [list of fingerprints]({% link v23.1/ui-statements-page.md %}#statement-fingerprints-view) used per index is shown even when there is a max-size limit on the SQL API. [#101783][#101783]
+- Fixed a bug where, when CockroachDB failed to retrieve [contention information]({% link v23.1/performance-best-practices-overview.md %}#transaction-contention), the full [Insights]({% link v23.1/ui-insights-page.md %}) page would return an error. Now, the Insights page will load even when there is an issue with decoding contention information. [#101782][#101782]
+- Fixed a bug where a [`RESTORE`]({% link v23.1/restore.md %}) operation with `skip_localities_check` could fail with errors if regions were missing on a cluster. [#101797][#101797]
+- Fixed a bug in [the optimizer]({% link v23.1/cost-based-optimizer.md %}) that could cause an internal error in rare cases for a query with [outer joins]({% link v23.1/joins.md %}#full-outer-joins) that could be simplified to non-outer joins and at least one semi-join. This bug was present since before v22.1. [#100670][#100670]
+- Fixed a bug where CockroachDB previously incorrectly evaluated [`EXPORT`]({% link v23.1/export.md %}) statements that had projections or rendering on top of the `EXPORT` (e.g. the [common table expression]({% link v23.1/common-table-expressions.md %}) `WITH cte AS (EXPORT INTO CSV 'nodelocal://1/export1/' FROM SELECT * FROM t) SELECT filename FROM cte;`). Such statements would result in panics or incorrect query results. Note that the exported data wasn't affected, only the presentation of the query result. This bug had been present since v22.1 or earlier. [#101805][#101805]
+- Fixed a bug in [the optimizer]({% link v23.1/cost-based-optimizer.md %}) introduced in v22.2.0 that could cause queries containing a [subquery]({% link v23.1/subqueries.md %}) with a lateral join, in which the right side of the lateral join was an [aliased data source]({% link v23.1/table-expressions.md %}#aliased-table-expressions), to return an internal error in some cases. For example, it could cause an error if the subquery was provided as an argument to an [aggregate function]({% link v23.1/functions-and-operators.md %}#aggregate-functions). [#101863][#101863]
- Fixed handling of expressions in `IN` clauses such as `(c1, c2) IN (SELECT c3+1, c4+1 FROM ...)`. Previously, such query expressions would error out during type checking. [#102027][#102027]
-- Fixed a potential bug whereby a failed or cancelled [`IMPORT`](https://www.cockroachlabs.com/docs/v23.1/import) could leave some of the imported rows behind after it was cancelled, in the rare event that the writing processes were slow enough to continue writing after the cleanup process had started. [#101443][#101443]
-- Fixed a bug that could cause incorrect results for queries invoking `STRICT` [user-defined functions](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). This bug was only present in pre-release versions of 23.1. [#101950][#101950]
-- Fixed a bug where CockroachDB's [pgwire](https://www.cockroachlabs.com/docs/v23.1/postgresql-compatibility) implementation would incorrectly parse arrays if they were sent as placeholder arguments to a prepared statement, and the argument had spaces in between the array elements. [#101596][#101596]
-- Fixed a very rare bug that could cause keys to be unexpectedly deleted locally within a [store](https://www.cockroachlabs.com/docs/v23.1/cockroach-start#flags-store) by [replica rebalancing](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer) during a write heavy workload. [#102167][#102167]
-- Fixed a bug in the behavior of the `enforce_home_region` [session variable](https://www.cockroachlabs.com/docs/v23.1/set-vars) that may have allowed a hash join to be favored over a lookup join, or failed to error out remote accesses done by uniqueness checks for mutations on [`REGIONAL BY ROW` tables](https://www.cockroachlabs.com/docs/v23.1/regional-tables). Also, fixed static erroring of some locality-optimized lookup joins to now be handled dynamically during query execution. [#102207][#102207]
-- Fixed a bug introduced in testing releases of v23.1 where a node could crash when evaluating a [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) command when the schema had `INT2` or `INT4` type. [#102306][#102306]
-- Fixed a bug where a [backup](https://www.cockroachlabs.com/docs/v23.1/backup-and-restore-overview) with a key's revision history split across multiple [SST files](https://www.cockroachlabs.com/docs/v23.1/architecture/storage-layer#ssts) may not have correctly restored the proper revision of the key. [#102343][#102343]
-- Fixed a bug in testing releases of v23.1 where a user could be prevented from logging in or viewing or changing [`GRANT`s](https://www.cockroachlabs.com/docs/v23.1/grant) if the cluster had a long enough period of inactivity. [#102489][#102489]
-- Previously, CockroachDB could encounter a "command is too large" error when evaluating [`UPSERT`](https://www.cockroachlabs.com/docs/v23.1/upsert) statements such that the new values combined exceeded the size of the `kv.raft.command.max_size` cluster setting. This bug had been present since before v21.1 and initially all write operations ([`INSERT`](https://www.cockroachlabs.com/docs/v23.1/insert), [`UPDATE`](https://www.cockroachlabs.com/docs/v23.1/update), [`DELETE`](https://www.cockroachlabs.com/docs/v23.1/delete)) were affected; however, in v21.2 those three were fixed, but `UPSERT` was forgotten about. This is now fixed. [#102514][#102514]
-- Fixed a bug introduced in v22.1.19, v22.2.8, and pre-release versions of 23.1 that could cause queries to return spurious insufficient [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) errors. For the bug to occur, two databases would need to have duplicate tables each with a [foreign key](https://www.cockroachlabs.com/docs/v23.1/foreign-key) reference to another table. The error would then occur if the same SQL string was executed against both databases concurrently by users that have [privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) over only one of the tables. [#102626][#102626]
-- Fixed a bug where [`RENAME COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#rename-column) was incorrectly allowed and would modify these columns node-wide. [#102460][#102460]
+- Fixed a potential bug whereby a failed or cancelled [`IMPORT`]({% link v23.1/import.md %}) could leave some of the imported rows behind after it was cancelled, in the rare event that the writing processes were slow enough to continue writing after the cleanup process had started. [#101443][#101443]
+- Fixed a bug that could cause incorrect results for queries invoking `STRICT` [user-defined functions]({% link v23.1/user-defined-functions.md %}). This bug was only present in pre-release versions of 23.1. [#101950][#101950]
+- Fixed a bug where CockroachDB's [pgwire]({% link v23.1/postgresql-compatibility.md %}) implementation would incorrectly parse arrays if they were sent as placeholder arguments to a prepared statement, and the argument had spaces in between the array elements. [#101596][#101596]
+- Fixed a very rare bug that could cause keys to be unexpectedly deleted locally within a [store]({% link v23.1/cockroach-start.md %}#flags-store) by [replica rebalancing](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer) during a write heavy workload. [#102167][#102167]
+- Fixed a bug in the behavior of the `enforce_home_region` [session variable]({% link v23.1/set-vars.md %}) that may have allowed a hash join to be favored over a lookup join, or failed to error out remote accesses done by uniqueness checks for mutations on [`REGIONAL BY ROW` tables]({% link v23.1/regional-tables.md %}). Also, fixed static erroring of some locality-optimized lookup joins to now be handled dynamically during query execution. [#102207][#102207]
+- Fixed a bug introduced in testing releases of v23.1 where a node could crash when evaluating a [`COPY`]({% link v23.1/copy-from.md %}) command when the schema had `INT2` or `INT4` type. [#102306][#102306]
+- Fixed a bug where a [backup]({% link v23.1/backup-and-restore-overview.md %}) with a key's revision history split across multiple [SST files](https://www.cockroachlabs.com/docs/v23.1/architecture/storage-layer#ssts) may not have correctly restored the proper revision of the key. [#102343][#102343]
+- Fixed a bug in testing releases of v23.1 where a user could be prevented from logging in or viewing or changing [`GRANT`s]({% link v23.1/grant.md %}) if the cluster had a long enough period of inactivity. [#102489][#102489]
+- Previously, CockroachDB could encounter a "command is too large" error when evaluating [`UPSERT`]({% link v23.1/upsert.md %}) statements such that the new values combined exceeded the size of the `kv.raft.command.max_size` cluster setting. This bug had been present since before v21.1 and initially all write operations ([`INSERT`]({% link v23.1/insert.md %}), [`UPDATE`]({% link v23.1/update.md %}), [`DELETE`]({% link v23.1/delete.md %})) were affected; however, in v21.2 those three were fixed, but `UPSERT` was forgotten about. This is now fixed. [#102514][#102514]
+- Fixed a bug introduced in v22.1.19, v22.2.8, and pre-release versions of 23.1 that could cause queries to return spurious insufficient [privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) errors. For the bug to occur, two databases would need to have duplicate tables each with a [foreign key]({% link v23.1/foreign-key.md %}) reference to another table. The error would then occur if the same SQL string was executed against both databases concurrently by users that have [privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization) over only one of the tables. [#102626][#102626]
+- Fixed a bug where [`RENAME COLUMN`]({% link v23.1/alter-table.md %}#rename-column) was incorrectly allowed and would modify these columns node-wide. [#102460][#102460]
- Fixed a bug where the internal `node` pseudo-role was not viewable through introspection of `pg_catalog` tables. [#102662][#102662]
-- Fixed a bug where [`COPY ... TO`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statements would always fail when used in a prepared statement. CockroachDB now matches the pgwire handling of prepared `COPY ... TO` statements. [#102663][#102663]
-- Fixed a bug where the [`ALTER DEFAULT PRIVILEGES ... GRANT USAGE ON SEQUENCES`](https://www.cockroachlabs.com/docs/v23.1/alter-default-privileges) statement would fail because the sequence object was mapped to an incorrect internal privilege object. [#102724][#102724]
-- Fixed a minor bug that caused an internal error for some queries with nested [subqueries](https://www.cockroachlabs.com/docs/v23.1/subqueries) instead of the more appropriate "could not decorrelate subquery" error. This bug was only present in pre-release alpha and beta versions of 23.1. [#102384][#102384]
-- Fixed a bug that allowed values to be inserted into an [`ARRAY`](https://www.cockroachlabs.com/docs/v23.1/array)-type column that did not conform to the inner-type of the array. For example, it was possible to insert `ARRAY['foo']` into a column of type `CHAR(1)[]`. This could cause incorrect results when querying the table. The insert now errors, which is expected. This bug was present since v21.1. [#102807][#102807]
-- Fixed an issue where running `SHOW HISTOGRAM` to see the histogram for an [`ENUM`](https://www.cockroachlabs.com/docs/v23.1/enum)-type column could cause a panic and crash the cockroach process. This issue has existed since v20.2.0. [#102828][#102828]
-- Fixed the behavior of [user-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) to return its results as a row instead of a tuple when UDFs are called in a query as a data source. This is now compatible with PostgreSQL behavior. [#102188][#102188]
+- Fixed a bug where [`COPY ... TO`]({% link v23.1/copy-from.md %}) statements would always fail when used in a prepared statement. CockroachDB now matches the pgwire handling of prepared `COPY ... TO` statements. [#102663][#102663]
+- Fixed a bug where the [`ALTER DEFAULT PRIVILEGES ... GRANT USAGE ON SEQUENCES`]({% link v23.1/alter-default-privileges.md %}) statement would fail because the sequence object was mapped to an incorrect internal privilege object. [#102724][#102724]
+- Fixed a minor bug that caused an internal error for some queries with nested [subqueries]({% link v23.1/subqueries.md %}) instead of the more appropriate "could not decorrelate subquery" error. This bug was only present in pre-release alpha and beta versions of 23.1. [#102384][#102384]
+- Fixed a bug that allowed values to be inserted into an [`ARRAY`]({% link v23.1/array.md %})-type column that did not conform to the inner-type of the array. For example, it was possible to insert `ARRAY['foo']` into a column of type `CHAR(1)[]`. This could cause incorrect results when querying the table. The insert now errors, which is expected. This bug was present since v21.1. [#102807][#102807]
+- Fixed an issue where running `SHOW HISTOGRAM` to see the histogram for an [`ENUM`]({% link v23.1/enum.md %})-type column could cause a panic and crash the cockroach process. This issue has existed since v20.2.0. [#102828][#102828]
+- Fixed the behavior of [user-defined functions (UDFs)]({% link v23.1/user-defined-functions.md %}) to return its results as a row instead of a tuple when UDFs are called in a query as a data source. This is now compatible with PostgreSQL behavior. [#102188][#102188]
- Fixed a bug in [closed timestamp](https://www.cockroachlabs.com/docs/v23.1/architecture/transaction-layer#closed-timestamps) updates within its side-transport. Previously, during asymmetric partitions, a node that transfers a lease away, and misses a liveness heartbeat, could then erroneously update the closed timestamp during the stasis period of its liveness. This could lead to closed timestamp invariant violation, and node crashes; in extreme cases, this could lead to inconsistencies in read-only queries. [#102601][#102601]
-- Fixed a bug where [Row-level TTL](https://www.cockroachlabs.com/docs/v23.1/row-level-ttl) jobs would incorrectly process a table that spanned multiple ranges in rare cases. This bug had been present since v22.2.0. You were affected by this bug if you saw the error message `"error decoding EncDatum of ...: did not find terminator ... in buffer ..."`. [#102881][#102881]
-- The `Retry.Max` field of the [`webhook_sink_config`](https://www.cockroachlabs.com/docs/v23.1/changefeed-sinks#webhook-sink) option for changefeeds was not correctly defined in the docs. The existing docs mention that it is "The maximum amount of time the sink will retry a single HTTP request to send a batch", but this is incorrect. It actually represents the maximum number of retries which will be attempted when sending a batch in an HTTP request fails. This is now fixed to correctly capture its behavior. Also, fixed a bug where the retry time would wait for 4 seconds, regardless of `Retry.Max`. With this change, the new maximum retry time is 30 seconds. The initial backoff will keep doubling every time a retry occurs until the maximum of 30 seconds is reached. E.g. If `Retry.Max = 4` and the initial backoff is 10 seconds, at most 4 retries will be performed with the backoff times 10, 20, 30, 30 seconds respectively. [#102958][#102958]
-- Stopped using a `NULL` value for `pg_constraint.conparentid`. Now the value is hard-coded to `0`, since CockroachDB does not support constraints on [partitions](https://www.cockroachlabs.com/docs/v23.1/partitioning). [#103234][#103234]
-- Fixed a bug where [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) in v23.1.0 and beta versions would incorrectly encode data with multiple column families. The data must be dropped and re-imported to be encoded correctly. [#103355][#103355]
-- Optimized over-head of [`pg_catalog.pg_description`](https://www.cockroachlabs.com/docs/v23.1/pg-catalog) and [`pg_catalog.pg_shdescription`](https://www.cockroachlabs.com/docs/v23.1/pg-catalog), which can lead to performance regression relative to v22.2 [#103331][#103331]
-- Timeseries [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) counts will now show cumulative counts for a histogram rather than a windowed count. A `-sum` timeseries is also exported to keep track of the cumulative sum of all samples in the histogram. [#103444][#103444]
-- Fixed a bug where CockroachDB could produce incorrect results when evaluating queries with [`ORDER BY`](https://www.cockroachlabs.com/docs/v23.1/order-by) clause in rare circumstances. In particular, some rows could be duplicated if all of the following conditions were met:
+- Fixed a bug where [Row-level TTL]({% link v23.1/row-level-ttl.md %}) jobs would incorrectly process a table that spanned multiple ranges in rare cases. This bug had been present since v22.2.0. You were affected by this bug if you saw the error message `"error decoding EncDatum of ...: did not find terminator ... in buffer ..."`. [#102881][#102881]
+- The `Retry.Max` field of the [`webhook_sink_config`]({% link v23.1/changefeed-sinks.md %}#webhook-sink) option for changefeeds was not correctly defined in the docs. The existing docs mention that it is "The maximum amount of time the sink will retry a single HTTP request to send a batch", but this is incorrect. It actually represents the maximum number of retries which will be attempted when sending a batch in an HTTP request fails. This is now fixed to correctly capture its behavior. Also, fixed a bug where the retry time would wait for 4 seconds, regardless of `Retry.Max`. With this change, the new maximum retry time is 30 seconds. The initial backoff will keep doubling every time a retry occurs until the maximum of 30 seconds is reached. E.g. If `Retry.Max = 4` and the initial backoff is 10 seconds, at most 4 retries will be performed with the backoff times 10, 20, 30, 30 seconds respectively. [#102958][#102958]
+- Stopped using a `NULL` value for `pg_constraint.conparentid`. Now the value is hard-coded to `0`, since CockroachDB does not support constraints on [partitions]({% link v23.1/partitioning.md %}). [#103234][#103234]
+- Fixed a bug where [`COPY`]({% link v23.1/copy-from.md %}) in v23.1.0 and beta versions would incorrectly encode data with multiple column families. The data must be dropped and re-imported to be encoded correctly. [#103355][#103355]
+- Optimized over-head of [`pg_catalog.pg_description`]({% link v23.1/pg-catalog.md %}) and [`pg_catalog.pg_shdescription`]({% link v23.1/pg-catalog.md %}), which can lead to performance regression relative to v22.2 [#103331][#103331]
+- Timeseries [metric]({% link v23.1/metrics.md %}) counts will now show cumulative counts for a histogram rather than a windowed count. A `-sum` timeseries is also exported to keep track of the cumulative sum of all samples in the histogram. [#103444][#103444]
+- Fixed a bug where CockroachDB could produce incorrect results when evaluating queries with [`ORDER BY`]({% link v23.1/order-by.md %}) clause in rare circumstances. In particular, some rows could be duplicated if all of the following conditions were met:
1. The query had a `LIMIT` clause.
1. The `SORT` operation had to spill to disk (meaning that `LIMIT` number of rows used up non-trivial amounts of memory, e.g. the rows were "wide").
1. The `ORDER BY` clause contained multiple columns **and** the ordering on the prefix of those columns was already provided by the index.
The bug has been present since at least v22.1. [#102790][#102790]
-- Fixed a bug where CockroachDB could previously encounter a nil pointer crash when populating data for [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page in some rare cases. The bug was present in v22.2.9 and v23.1.1 releases. [#103521][#103521]
+- Fixed a bug where CockroachDB could previously encounter a nil pointer crash when populating data for [SQL Activity]({% link v23.1/ui-overview.md %}#sql-activity) page in some rare cases. The bug was present in v22.2.9 and v23.1.1 releases. [#103521][#103521]
- Fixed calls to undefined objects. [#103520][#103520]
- Fixed a bug where `0` with `exponents < -6` would display as `0E(exponent)` instead of printing all `0`s, e.g. `0E-7` should be `0.0000000`. [#103640][#103640]
-- Fixed a bug that could prevent [`RESTORE`](https://www.cockroachlabs.com/docs/v23.1/restore) from working if the backup had a refresh materialized view mutation in it. [#103233][#103233]
-- In earlier patch releases of v23.1, it was possible for [backups](https://www.cockroachlabs.com/docs/v23.1/backup-and-restore-overview) to be excessively slow, slower than they were in earlier releases. It was also possible for them to fail with errors of the following form: `operation "Export Request for span ..." timed out after 5m0.001s`. At least one of the reasons for this behavior is now addressed. This problem also affected v22.2 clusters if using a hidden-by-default, default-as-disabled `admission.elastic_cpu.enabled` cluster setting. [#103626][#103626]
-- Fixed a crash/panic that could occur if placeholder arguments were used with the `with_min_timestamp(to_timestamp($1))` [functions](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators). [#103630][#103630]
-- Fixed a panic that could occur if a [`COPY TO`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statement had a subquery that was logged with redaction markers. [#103689][#103689]
-- Fixed a bug where [`SET PRIMARY REGION`](https://www.cockroachlabs.com/docs/v23.1/alter-database#set-primary-region) and [`SET SECONDARY REGION`](https://www.cockroachlabs.com/docs/v23.1/alter-database#set-secondary-region) did not validate transactionally, which could prevent cleaning up removed regions after a [restore](https://www.cockroachlabs.com/docs/v23.1/restore). [#103631][#103631]
-- [`DROP ROLE`](https://www.cockroachlabs.com/docs/v23.1/drop-role) now correctly returns a 2BP01 error when the given role has been granted privileges on a schema. [#103546][#103546]
+- Fixed a bug that could prevent [`RESTORE`]({% link v23.1/restore.md %}) from working if the backup had a refresh materialized view mutation in it. [#103233][#103233]
+- In earlier patch releases of v23.1, it was possible for [backups]({% link v23.1/backup-and-restore-overview.md %}) to be excessively slow, slower than they were in earlier releases. It was also possible for them to fail with errors of the following form: `operation "Export Request for span ..." timed out after 5m0.001s`. At least one of the reasons for this behavior is now addressed. This problem also affected v22.2 clusters if using a hidden-by-default, default-as-disabled `admission.elastic_cpu.enabled` cluster setting. [#103626][#103626]
+- Fixed a crash/panic that could occur if placeholder arguments were used with the `with_min_timestamp(to_timestamp($1))` [functions]({% link v23.1/functions-and-operators.md %}). [#103630][#103630]
+- Fixed a panic that could occur if a [`COPY TO`]({% link v23.1/copy-from.md %}) statement had a subquery that was logged with redaction markers. [#103689][#103689]
+- Fixed a bug where [`SET PRIMARY REGION`]({% link v23.1/alter-database.md %}#set-primary-region) and [`SET SECONDARY REGION`]({% link v23.1/alter-database.md %}#set-secondary-region) did not validate transactionally, which could prevent cleaning up removed regions after a [restore]({% link v23.1/restore.md %}). [#103631][#103631]
+- [`DROP ROLE`]({% link v23.1/drop-role.md %}) now correctly returns a 2BP01 error when the given role has been granted privileges on a schema. [#103546][#103546]
- Fixed a bug where, under high CPU load, HTTP requests to certain API endpoints such as the `health` endpoint would start failing and then never succeed again until the node was restarted. This bug was introduced in v23.1. [#103775][#103775]
-- When the option `WITH TABLES` or `WITH INDEXES` is passed to [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges), the per-object start/end key columns now properly refers to the part of the object included inside the range identified by the current row. Previously, they could incorrectly point to keys outside of the current range's boundaries. This bug had been introduced in v23.1. [#103777][#103777]
-- Fixed a bug in `VALUES` clauses containing a call to a record-returning [UDF](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) that could manifest as an internal error in some queries. [#103639][#103639]
-- Fixed a bug with choosing optimal plan where [prepared statements](https://www.cockroachlabs.com/docs/v23.1/savepoint#savepoints-and-prepared-statements) using placeholders in recursive CTEs sometimes did not re-optimize correctly after plugging in the parameters. [#99823][#99823]
-- Fixed a bug where `kv` was read when fetching a qualified name of a leased [UDF](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions). [#103089][#103089]
+- When the option `WITH TABLES` or `WITH INDEXES` is passed to [`SHOW RANGES`]({% link v23.1/show-ranges.md %}), the per-object start/end key columns now properly refers to the part of the object included inside the range identified by the current row. Previously, they could incorrectly point to keys outside of the current range's boundaries. This bug had been introduced in v23.1. [#103777][#103777]
+- Fixed a bug in `VALUES` clauses containing a call to a record-returning [UDF]({% link v23.1/user-defined-functions.md %}) that could manifest as an internal error in some queries. [#103639][#103639]
+- Fixed a bug with choosing optimal plan where [prepared statements]({% link v23.1/savepoint.md %}#savepoints-and-prepared-statements) using placeholders in recursive CTEs sometimes did not re-optimize correctly after plugging in the parameters. [#99823][#99823]
+- Fixed a bug where `kv` was read when fetching a qualified name of a leased [UDF]({% link v23.1/user-defined-functions.md %}). [#103089][#103089]
Performance improvements
-- Added an opt-in pacing mechanism to [rangefeed](https://www.cockroachlabs.com/docs/v23.1/create-and-configure-changefeeds#enable-rangefeeds) closed timestamp notifications. Pacing is controlled by the `kv.rangefeed.closed_timestamp_smear_interval` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), which defaults to `kv.rangefeed.closed_timestamp_refresh_interval`. Lowering the smear interval makes the rangefeed closed timestamp delivery less spikey, which ultimately reduces its impact on foreground SQL latencies. [#99946][#99946]
-- Queries that have [subqueries](https://www.cockroachlabs.com/docs/v23.1/subqueries) in equality expressions are now more efficiently planned by [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) when `optimizer_hoist_uncorrelated_equality_subqueries` is set to `true`. [#101753][#101753]
-- [SQL Activity](https://www.cockroachlabs.com/docs/v23.1/ui-sql-dashboard) dashboards now default to using a table optimized with the top data for the most used cases. Else, they use persisted data if available, and in-memory data otherwise. [#102309][#102309]
-- Statistics on the `system.jobs` table are now automatically collected, which will enable [the optimizer](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) to produce better query plans for internal queries that access the `system.jobs` table. This may result in better performance of the system. [#102637][#102637]
-- Improved [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) to decrease the commit-to-emit latency (i.e. The difference between an event's MVCC timestamp and the time it is ready to emit to a downstream sink). Previously, it is determined by a non-documented cluster setting (`changefeed.experimental_poll_interval`) which defaults to `1s`. To enable this performance improvement, users should "lock" the watched table with [`ALTER TABLE SET (schema_locked =t);`](https://www.cockroachlabs.com/docs/v23.1/alter-table#set-storage-parameter), which would disallow schema changes on ``. If a schema change statement is attempted on a locked table, CockroachDB will reject it and return an error. The user could lock the table either before creating a changefeed or, when a changefeed is running, CockroachDB will be able to detect that and enable this performance improvement automatically. If the user is running a changefeed on a locked table but wishes to perform schema changes to the table, they need to explicitly unlock the table first with [`ALTER TABLE RESET schema_locked`](https://www.cockroachlabs.com/docs/v23.1/alter-table#reset-storage-parameter). After the schema change completes, the user can lock the table again to re-gain this performance improvement. The changefeed job itself does not need to be modified in any way by the user (e.g. the user does not need to pause the job when locking/unlocking a table). This change is a "pure" optimization in that if the table is not locked, everything should still work the way it used to. [#102977][#102977]
+- Added an opt-in pacing mechanism to [rangefeed]({% link v23.1/create-and-configure-changefeeds.md %}#enable-rangefeeds) closed timestamp notifications. Pacing is controlled by the `kv.rangefeed.closed_timestamp_smear_interval` [cluster setting]({% link v23.1/cluster-settings.md %}), which defaults to `kv.rangefeed.closed_timestamp_refresh_interval`. Lowering the smear interval makes the rangefeed closed timestamp delivery less spikey, which ultimately reduces its impact on foreground SQL latencies. [#99946][#99946]
+- Queries that have [subqueries]({% link v23.1/subqueries.md %}) in equality expressions are now more efficiently planned by [the optimizer]({% link v23.1/cost-based-optimizer.md %}) when `optimizer_hoist_uncorrelated_equality_subqueries` is set to `true`. [#101753][#101753]
+- [SQL Activity]({% link v23.1/ui-sql-dashboard.md %}) dashboards now default to using a table optimized with the top data for the most used cases. Else, they use persisted data if available, and in-memory data otherwise. [#102309][#102309]
+- Statistics on the `system.jobs` table are now automatically collected, which will enable [the optimizer]({% link v23.1/cost-based-optimizer.md %}) to produce better query plans for internal queries that access the `system.jobs` table. This may result in better performance of the system. [#102637][#102637]
+- Improved [changefeeds]({% link v23.1/change-data-capture-overview.md %}) to decrease the commit-to-emit latency (i.e. The difference between an event's MVCC timestamp and the time it is ready to emit to a downstream sink). Previously, it is determined by a non-documented cluster setting (`changefeed.experimental_poll_interval`) which defaults to `1s`. To enable this performance improvement, users should "lock" the watched table with [`ALTER TABLE SET (schema_locked =t);`]({% link v23.1/alter-table.md %}#set-storage-parameter), which would disallow schema changes on ``. If a schema change statement is attempted on a locked table, CockroachDB will reject it and return an error. The user could lock the table either before creating a changefeed or, when a changefeed is running, CockroachDB will be able to detect that and enable this performance improvement automatically. If the user is running a changefeed on a locked table but wishes to perform schema changes to the table, they need to explicitly unlock the table first with [`ALTER TABLE RESET schema_locked`]({% link v23.1/alter-table.md %}#reset-storage-parameter). After the schema change completes, the user can lock the table again to re-gain this performance improvement. The changefeed job itself does not need to be modified in any way by the user (e.g. the user does not need to pause the job when locking/unlocking a table). This change is a "pure" optimization in that if the table is not locked, everything should still work the way it used to. [#102977][#102977]
- Improved performance when joining with the `pg_description` table. [#103331][#103331]
-- Added concurrency to speed up the phase of the [restore](https://www.cockroachlabs.com/docs/v23.1/restore) that ingests backed up table statisitcs. [#102694][#102694]
-- Added support for constrained scans using computed columns which are part of an [index](https://www.cockroachlabs.com/docs/v23.1/indexes) when there is an `IN` list or `OR`'ed predicate on the columns that appear in the computed column expression. [#103412][#103412]
+- Added concurrency to speed up the phase of the [restore]({% link v23.1/restore.md %}) that ingests backed up table statisitcs. [#102694][#102694]
+- Added support for constrained scans using computed columns which are part of an [index]({% link v23.1/indexes.md %}) when there is an `IN` list or `OR`'ed predicate on the columns that appear in the computed column expression. [#103412][#103412]
- Added two new statistics which are useful for tracking the efficiency of [snapshot transfers](https://www.cockroachlabs.com/docs/v23.1/architecture/replication-layer#snapshots). Some snapshots will always fail due to system level "races", but the goal is to keep it as low as possible.
- `range.snapshots.recv-failed` - The number of snapshots sent attempts that are initiated but not accepted by the recipient.
- `range.snapshots.recv-unusable` - The number of snapshots that were fully transmitted but not used. [#101837][#101837]
diff --git a/src/current/_includes/releases/v23.1/v23.1.25.md b/src/current/_includes/releases/v23.1/v23.1.25.md
new file mode 100644
index 00000000000..3505aa58cee
--- /dev/null
+++ b/src/current/_includes/releases/v23.1/v23.1.25.md
@@ -0,0 +1,80 @@
+## v23.1.25
+
+Release Date: August 15, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
Security updates
+
+- Secrets are now sanitized from URLs before being written to unredacted [logs]({% link v23.1/configure-logs.md %}) when used in the following SQL statements:
+ - [`BACKUP`]({% link v23.1/backup.md %})
+ - [`RESTORE`]({% link v23.1/restore.md %})
+ - [`CREATE SCHEDULE FOR BACKUP`]({% link v23.1/create-schedule-for-backup.md %})
+ - [`ALTER BACKUP SCHEDULE`]({% link v23.1/alter-backup-schedule.md %})
+ - [`ALTER BACKUP`]({% link v23.1/alter-backup.md %})
+ - [`SHOW BACKUP`]({% link v23.1/show-backup.md %})
+ - [`CREATE CHANGEFEED`]({% link v23.1/create-changefeed.md %})
+ - [`CREATE SCHEDULE FOR CHANGEFEED`]({% link v23.1/create-schedule-for-changefeed.md %})
+ - [`ALTER CHANGEFEED SET {sink}`]({% link v23.1/alter-changefeed.md %})
+ - [`IMPORT`]({% link v23.1/import.md %})
+ - [`EXPORT`]({% link v23.1/export.md %})
+ - [`CREATE EXTERNAL CONNECTION`]({% link v23.1/create-external-connection.md %})
+ - [`COPY`]({% link v23.1/copy-from.md %})
+
+ [#127537][#127537]
+- The cluster setting [`server.jwt_authentication.issuers`]({% link v23.1/sso-sql.md %}#cluster-settings) can now take multiple values to support various kinds of providers and their mapped JWKS URIs. This can be set to one of the following values:
+ - Simple string that Go can parse as a valid issuer URL: `'https://accounts.google.com'`.
+ - String that can be parsed as a valid JSON array of issuer URLs list: `['example.com/adfs','https://accounts.google.com']`.
+ - String that can be parsed as a valid JSON and deserialized into a map of issuer URLs to corresponding JWKS URIs. In the third case, CockroachDB will override the JWKS URI present in the issuer's well-known endpoint: `'{ "issuer_jwks_map": { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", "example.com/adfs": "https://example.com/adfs/discovery/keys" } }'`.
+
+ When `issuer_jwks_map` is set, CockroachDB directly uses the JWKS URI to get the key set. In all other cases where [`server.jwt_authentication.jwks_auto_fetch.enabled`]({% link v23.1/sso-sql.md %}#cluster-settings) is set CockroachDB obtains the JWKS URI first from the issuer's well-known endpoint and then uses this endpoint. [#128751][#128751]
+
+
SQL language changes
+
+- Added the `sql.auth.grant_option_inheritance.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}#setting-sql-auth-grant-option-inheritance-enabled). The default value is `true`, which results in behavior that matches the existing behavior of CockroachDB. When set to `false`, the [`GRANT OPTION`]({% link v23.1/grant.md %}) is not inherited via role membership, which will prevent the descendant roles from being able to grant the privilege to others. The privilege itself is still inherited via role membership. [#126862][#126862]
+- Added the `sql.auth.grant_option_for_owner.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}#setting-sql-auth-grant-option-for-owner-enabled). The default value is `true`, which results in behavior that matches the existing behavior of CockroachDB. When set to `false`, then the [`GRANT OPTION`]({% link v23.1/grant.md %}) is not implcitly given to the owner of an object. The object owner still implicitly has all privileges on the object, just not the ability to grant them to other users. [#127005][#127005]
+
+
DB Console changes
+
+- The [Database]({% link v23.1/ui-databases-page.md %}) details and Table details pages in the [DB Console]({% link v23.1/ui-overview.md %}) now display the correct `"stats last created"` value. [#126415][#126415]
+- The [Database]({% link v23.1/ui-databases-page.md %}) and Tables pages in the [DB Console]({% link v23.1/ui-overview.md %}) will show a loading state while loading information for databases and tables including size and [range]({% link v23.1/architecture/glossary.md %}#architecture-range) counts. [#127699][#127699]
+- In the [Database]({% link v23.1/ui-databases-page.md %}) details page, the table name will no longer appear with quotes around the schema and table name. [#127763][#127763]
+- [`ALTER ROLE`]({% link v23.1/alter-role.md %}) events in the [DB Console]({% link v23.1/ui-overview.md %}) event log now render correctly when the event does not contain any role options. [#126563][#126563]
+- Fixed a bug where the [Databases]({% link v24.1/ui-databases-page.md %}) page crashed if the range information was not available. [#127090][#127090]
+
+
Bug fixes
+
+- Fixed a bug in which the [`DISCARD`]({% link v23.1/alter-table.md %}) statement was disallowed with [`default_transaction_read_only = on`]({% link v23.1/session-variables.md %}). [#127549][#127549]
+- Fixed a bug where [`ALTER DATABASE ... DROP REGION`]({% link v23.1/alter-database.md %}#drop-region) could fail if any tables under the given database have [indexes on expressions]({% link v23.1/expression-indexes.md %}). [#126600][#126600]
+- Fixed a bug when [restoring]({% link v23.1/restore.md %}) a database with a [composite type]({% link v23.1/create-type.md %}#create-a-composite-data-type). [#126847][#126847]
+- Fixed a bug when inputting [`public` role]({% link v23.1/security-reference/authorization.md %}#default-roles) as user name for [built-in compatibility functions]({% link v23.1/functions-and-operators.md %}#compatibility-functions), such as `has_database_privilege` and `has_schema_privilege`. [#126853][#126853]
+- Fixed a bug where CockroachDB could incorrectly evaluate an [`IS NOT NULL`]({% link v23.1/null-handling.md %}#nulls-and-simple-comparisons) filter if it was applied to non-`NULL` tuples that had `NULL` elements, such as `(1, NULL)` or `(NULL, NULL)`. This bug has existed since v20.2. [#126942][#126942]
+- Fixed a bug where [`CREATE TABLE`]({% link v23.1/create-table.md %}) with [index expressions]({% link v23.1/expression-indexes.md %}) could hit undefined column errors on [transaction retries]({% link v23.1/transaction-retry-error-reference.md %}). [#126200][#126200]
+- Fixed a bug that caused a memory leak when executing SQL statements with comments, for example, `SELECT /* comment */ 1;`. Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the [SQL session]({% link v24.2/show-sessions.md %}). This bug has been present since v23.1. [#127757][#127757]
+- Fixed a bug where [`CREATE INDEX IF NOT EXISTS`]({% link v23.1/create-index.md %}) would not correctly short-circuit if the given index already existed. [#128239][#128239]
+- Fixed a bug in syntax validation, in which the `DESCENDING` clause was not allowed for non-terminal columns of an [inverted index]({% link v23.1/inverted-indexes.md %}). Only the last column of an inverted index should be prevented from being `DESCENDING`. This is now properly checked. [#128239][#128239]
+- Fixed a bug where an [index]({% link v23.1/indexes.md %}) could store a column in the primary index if that column had a mixed-case name. [#128239][#128239]
+- Fixed a memory leak that could occur when specifying a non-existent virtual cluster name in the connection string. [#128110][#128110]
+- Setting or dropping a default value on a [computed column]({% link v23.1/computed-columns.md %}) is now blocked, even for `NULL` defaults. Previously, setting or dropping a default value on a computed column was a no-op. [#128468][#128468]
+
+[#126200]: https://github.com/cockroachdb/cockroach/pull/126200
+[#126415]: https://github.com/cockroachdb/cockroach/pull/126415
+[#126563]: https://github.com/cockroachdb/cockroach/pull/126563
+[#126600]: https://github.com/cockroachdb/cockroach/pull/126600
+[#126847]: https://github.com/cockroachdb/cockroach/pull/126847
+[#126853]: https://github.com/cockroachdb/cockroach/pull/126853
+[#126862]: https://github.com/cockroachdb/cockroach/pull/126862
+[#126942]: https://github.com/cockroachdb/cockroach/pull/126942
+[#127005]: https://github.com/cockroachdb/cockroach/pull/127005
+[#127090]: https://github.com/cockroachdb/cockroach/pull/127090
+[#127537]: https://github.com/cockroachdb/cockroach/pull/127537
+[#127549]: https://github.com/cockroachdb/cockroach/pull/127549
+[#127606]: https://github.com/cockroachdb/cockroach/pull/127606
+[#127699]: https://github.com/cockroachdb/cockroach/pull/127699
+[#127757]: https://github.com/cockroachdb/cockroach/pull/127757
+[#127763]: https://github.com/cockroachdb/cockroach/pull/127763
+[#128110]: https://github.com/cockroachdb/cockroach/pull/128110
+[#128239]: https://github.com/cockroachdb/cockroach/pull/128239
+[#128468]: https://github.com/cockroachdb/cockroach/pull/128468
+[#128586]: https://github.com/cockroachdb/cockroach/pull/128586
+[#128751]: https://github.com/cockroachdb/cockroach/pull/128751
diff --git a/src/current/_includes/releases/v23.1/v23.1.26.md b/src/current/_includes/releases/v23.1/v23.1.26.md
new file mode 100644
index 00000000000..b027c8fa013
--- /dev/null
+++ b/src/current/_includes/releases/v23.1/v23.1.26.md
@@ -0,0 +1,41 @@
+## v23.1.26
+
+Release Date: September 12, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
Security updates
+
+- For clusters using [Cluster SSO using JSON Web Tokens (JWTs)]({% link v23.1/sso-sql.md %}), the [cluster setting]({% link v23.1/cluster-settings.md %}) `server.jwt_authentication.issuers` can now take multiple values to support various kinds of providers and their mapped JWKS URI. You can set it to one of the following values, which are parsed by Go:
+ 1. A string that contains a single valid issuer URI. Example: `https://accounts.google.com`
+ 1. A string that contains a JSON array of valid issuer URIs. Example: `['example.com/adfs','https://accounts.google.com']`
+ 1. A string that contains a JSON map of valid issuer URIs to corresponding JWKS URIs and deserialized into a map of issuer URLs to corresponding JWKS URIs. A JSON map overrides the JWKS URI published in the issuer's `well-known/` endpoint. Example: `'{ "issuer_jwks_map": { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", "example.com/adfs": "https://example.com/adfs/discovery/keys" } }'`
+
+ When `issuer_jwks_map` is set, the key set is fetched from the JWKS URI directly. Otherwise, when `JWKSAutoFetchEnabled` is set, the JWKS URI is fetched from the issuer's `well-known/` endpoint. [#128669][#128669]
+
+
Operational changes
+
+- New [structured logging events]({% link v23.1/logging.md %}) in the `OPS` channel report broken connections and related transactions during node shutdown.
+ - `node_shutdown_connection_timeout`: Logged if there are still open client connections after the timeout defined by `server.shutdown.connections.timeout` expires.
+ - `node_shutdown_transaction_timeout`: Logged if there are still open transactions on those open client connections after the timeout defined by `server.shutdown.transactions.timeout` expires. [#128709][#128709]
+
+
Bug fixes
+
+- Fixed a bug introduced in v23.1 in which output of [`EXPLAIN (OPT, REDACT)`]({% link v23.1/explain.md %}) of the following `CREATE` statements was not redacted:
+ - `EXPLAIN (OPT, REDACT) CREATE TABLE`
+ - `EXPLAIN (OPT, REDACT) CREATE VIEW`
+ - `EXPLAIN (OPT, REDACT) CREATE FUNCTION`
+
+ [#128487][#128487]
+
+- Fixed a bug where incorrect values could be produced for virtual [computed columns]({% link v23.1/computed-columns.md %}) in rare cases when the virtual column expression's type did not match the type of the virtual column. [#129008][#129008]
+- Fixed a bug where errors like `ERROR: column 'crdb_internal_idx_expr' does not exist` could be logged when accessing a table with an [expression index]({% link v23.1/expression-indexes.md %}) where the expression evaluates to an `ENUM` type. Example: `CREATE INDEX ON t ((col::an_enum))` [#129091][#129091]
+- Fixed a bug introduced in v23.1 where a [user-defined function's]({% link v23.1/user-defined-functions.md %}) return type's parameters could not be named when dropping a user-defined function or procedure. [#115906][#115906]
+- Fixed a slow-building memory leak when a cluster uses [GSSAPI Kerberos authentication]({% link v23.1/gssapi_authentication.md %}). [#130320][#130320]
+
+[#115906]: https://github.com/cockroachdb/cockroach/pull/115906
+[#128487]: https://github.com/cockroachdb/cockroach/pull/128487
+[#128669]: https://github.com/cockroachdb/cockroach/pull/128669
+[#128709]: https://github.com/cockroachdb/cockroach/pull/128709
+[#129008]: https://github.com/cockroachdb/cockroach/pull/129008
+[#129091]: https://github.com/cockroachdb/cockroach/pull/129091
+[#130320]: https://github.com/cockroachdb/cockroach/pull/130320
diff --git a/src/current/_includes/releases/v23.1/v23.1.3.md b/src/current/_includes/releases/v23.1/v23.1.3.md
index 2fa09a04c6c..df36281864e 100644
--- a/src/current/_includes/releases/v23.1/v23.1.3.md
+++ b/src/current/_includes/releases/v23.1/v23.1.3.md
@@ -3,19 +3,19 @@
Release Date: June 13, 2023
{{site.data.alerts.callout_danger}}
-A [bug](https://github.com/cockroachdb/cockroach/issues/104798) was discovered in a change included in v23.1.3 (this release). This bug can affect clusters upgrading to v23.1.3 from [v22.2.x]({% link releases/v22.2.md %}). In an affected cluster, jobs that were running during the upgrade could hang or fail to run after the upgrade is finalized. Users upgrading from v22.2.x are advised to use [v23.1.2](#v23-1-2) to upgrade, or to set the [`cluster.preserve_downgrade_option`](https://www.cockroachlabs.com/docs/v23.1/upgrade-cockroach-version#step-3-decide-how-the-upgrade-will-be-finalized) cluster setting to delay finalization of the upgrade until they can upgrade to v23.1.4.
+A [bug](https://github.com/cockroachdb/cockroach/issues/104798) was discovered in a change included in v23.1.3 (this release). This bug can affect clusters upgrading to v23.1.3 from [v22.2.x]({% link releases/v22.2.md %}). In an affected cluster, jobs that were running during the upgrade could hang or fail to run after the upgrade is finalized. Users upgrading from v22.2.x are advised to use [v23.1.2](#v23-1-2) to upgrade, or to set the [`cluster.preserve_downgrade_option`]({% link v23.1/upgrade-cockroach-version.md %}#step-3-decide-how-the-upgrade-will-be-finalized) cluster setting to delay finalization of the upgrade until they can upgrade to v23.1.4.
{{site.data.alerts.end}}
{% include releases/new-release-downloads-docker-image.md release=include.release %}
Security updates
-- The new `server.client_cert_expiration_cache.capacity` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) allows you to configure the minimum time until a user's set of client certificates will expire. When `server.client_cert_expiration_cache.capacity` is set to a non-zero value, the new metric `security.certificate.expiration.client` tracks the number of client certificates that have expired. [#104165][#104165]
+- The new `server.client_cert_expiration_cache.capacity` [cluster setting]({% link v23.1/cluster-settings.md %}) allows you to configure the minimum time until a user's set of client certificates will expire. When `server.client_cert_expiration_cache.capacity` is set to a non-zero value, the new metric `security.certificate.expiration.client` tracks the number of client certificates that have expired. [#104165][#104165]
-- Role-based audit logging is now an {{ site.data.products.enterprise }} feature. Only {{ site.data.products.enterprise }} users will be able to configure role-based audit logging using the `sql.log.user_audit` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). [#104453][#104453]
-- The new `sql.log.user_audit` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) enables role-based auditing. When the setting is enabled, you can set an audit logging configuration using a table-like syntax. Each row in the configuration represents an _audit setting_ in the configuration. An audit setting is comprised of the following columns: `USER/ROLE` and `STATEMENT_FILTER`:
+- Role-based audit logging is now an {{ site.data.products.enterprise }} feature. Only {{ site.data.products.enterprise }} users will be able to configure role-based audit logging using the `sql.log.user_audit` [cluster setting]({% link v23.1/cluster-settings.md %}). [#104453][#104453]
+- The new `sql.log.user_audit` [cluster setting]({% link v23.1/cluster-settings.md %}) enables role-based auditing. When the setting is enabled, you can set an audit logging configuration using a table-like syntax. Each row in the configuration represents an _audit setting_ in the configuration. An audit setting is comprised of the following columns: `USER/ROLE` and `STATEMENT_FILTER`:
~~~sql
SET CLUSTER SETTING sql.log.user_audit = '
@@ -26,70 +26,70 @@ A [bug](https://github.com/cockroachdb/cockroach/issues/104798) was discovered i
~~~
[#104179][#104179]
-- Introduced the `sql.log.user_audit.reduced_config.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings). When enabled, this cluster setting computes a "reduced" [audit configuration](https://www.cockroachlabs.com/docs/v23.1/eventlog#role_based_audit_event) based on the user's current role memberships and the current value for the `sql.log.user_audit` cluster setting. The "reduced" audit configuration is computed at the **first SQL event emit by the user, after the setting is enabled**. When the cluster setting is enabled, CockroachDB can compute the audit configuration once at session start, which provides around a 5% increase in throughput. However, changes to the audit configuration (user role memberships or cluster setting configuration) are not reflected within a session. A new session should be started to reflect the configuration changes in auditing behavior. [#104372][#104372]
+- Introduced the `sql.log.user_audit.reduced_config.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}). When enabled, this cluster setting computes a "reduced" [audit configuration](https://www.cockroachlabs.com/docs/v23.1/eventlog#role_based_audit_event) based on the user's current role memberships and the current value for the `sql.log.user_audit` cluster setting. The "reduced" audit configuration is computed at the **first SQL event emit by the user, after the setting is enabled**. When the cluster setting is enabled, CockroachDB can compute the audit configuration once at session start, which provides around a 5% increase in throughput. However, changes to the audit configuration (user role memberships or cluster setting configuration) are not reflected within a session. A new session should be started to reflect the configuration changes in auditing behavior. [#104372][#104372]
SQL language changes
-- When the `sql.trace.stmt.enable_threshold` or `sql.trace.txn.enable_threshold` [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) is enabled, the logging output is now emitted on the [`SQL_EXEC` channel](https://www.cockroachlabs.com/docs/v23.1/logging#sql_exec). Previously, this was emitted to the [`DEV` channel](https://www.cockroachlabs.com/docs/v23.1/logging#dev). [#104047][#104047]
-- [`SHOW GRANTS`](https://www.cockroachlabs.com/docs/v23.1/show-grants) now lists privileges inherited by role membership. `SHOW GRANTS ON ROLE` statements no longer require any privileges and also lists implicit grantees. [#104587][#104587]
+- When the `sql.trace.stmt.enable_threshold` or `sql.trace.txn.enable_threshold` [cluster settings]({% link v23.1/cluster-settings.md %}) is enabled, the logging output is now emitted on the [`SQL_EXEC` channel](https://www.cockroachlabs.com/docs/v23.1/logging#sql_exec). Previously, this was emitted to the [`DEV` channel]({% link v23.1/logging.md %}#dev). [#104047][#104047]
+- [`SHOW GRANTS`]({% link v23.1/show-grants.md %}) now lists privileges inherited by role membership. `SHOW GRANTS ON ROLE` statements no longer require any privileges and also lists implicit grantees. [#104587][#104587]
Operational changes
-- The new [metric](https://www.cockroachlabs.com/docs/v23.1/metrics) `leases.liveness` shows the number of [liveness range](https://www.cockroachlabs.com/docs/v23.1/configure-replication-zones#create-a-replication-zone-for-a-system-range) leases per node to track the liveness range leaseholder. [#104076][#104076]
-- The new a gauge metric `sql.conns_waiting_to_hash` counts the number of connection attempts that are being limited due to the number of concurrent password hashing operations. This behavior has been present since v21.2 to [prevent password hashing from increasing CPU load](https://www.cockroachlabs.com/docs/v23.1/query-behavior-troubleshooting#high-client-cpu-load-connection-pool-exhaustion-or-increased-connection-latency-when-scram-password-based-authentication-is-enabled). The metric is expected to be `0`, or close to `0`, in a healthy setup. If the metric is consistently high and connection latencies are high, then an operator should do one or more of the following:
- - Ensure applications using the cluster have properly configured [connection pools](https://www.cockroachlabs.com/docs/v23.1/connection-pooling).
+- The new [metric]({% link v23.1/metrics.md %}) `leases.liveness` shows the number of [liveness range]({% link v23.1/configure-replication-zones.md %}#create-a-replication-zone-for-a-system-range) leases per node to track the liveness range leaseholder. [#104076][#104076]
+- The new a gauge metric `sql.conns_waiting_to_hash` counts the number of connection attempts that are being limited due to the number of concurrent password hashing operations. This behavior has been present since v21.2 to [prevent password hashing from increasing CPU load]({% link v23.1/query-behavior-troubleshooting.md %}#high-client-cpu-load-connection-pool-exhaustion-or-increased-connection-latency-when-scram-password-based-authentication-is-enabled). The metric is expected to be `0`, or close to `0`, in a healthy setup. If the metric is consistently high and connection latencies are high, then an operator should do one or more of the following:
+ - Ensure applications using the cluster have properly configured [connection pools]({% link v23.1/connection-pooling.md %}).
- Add more vCPU or more nodes to the cluster.
- - Increase the password hashing concurrency using the `COCKROACH_MAX_PW_HASH_COMPUTE_CONCURRENCY` [environment variable](https://www.cockroachlabs.com/docs/v23.1/cockroach-commands#environment-variables). [#104388][#104388]
+ - Increase the password hashing concurrency using the `COCKROACH_MAX_PW_HASH_COMPUTE_CONCURRENCY` [environment variable]({% link v23.1/cockroach-commands.md %}#environment-variables). [#104388][#104388]
DB Console changes
-- Added merge queue failure and merge queue processing time metrics to the [**Queue Processing Failures**](https://www.cockroachlabs.com/docs/v23.1/ui-queues-dashboard#queue-processing-failures) and [**Queue Processing Times**](https://www.cockroachlabs.com/docs/v23.1/ui-queues-dashboard#queue-processing-times) graphs respectively. [#104034][#104034]
-- Removed the **Circuit Breaker Tripped Events** graph from the [**Replication**](https://www.cockroachlabs.com/docs/v23.1/ui-replication-dashboard) dashboard. [#104038][#104038]
-- Added **Completed time** to [**Jobs**](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page) and [**Job details**](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page#job-details) pages, and updated the time format on those pages to include seconds and milliseconds. [#104063][#104063]
-- Added a **Created SQL Connections** chart on the [**SQL**](https://www.cockroachlabs.com/docs/v23.1/ui-sql-dashboard) dashboard under **Metrics**. [#104072][#104072]
-- Added **Ranges in Catchup Mode** and **Rangefeed Catchup Scans Duration** charts to the [**Changefeeds**](https://www.cockroachlabs.com/docs/v23.1/ui-cdc-dashboard) dashboard. [#104122][#104122]
-- The sort setting on the [**Hot Ranges**](https://www.cockroachlabs.com/docs/v23.1/ui-hot-ranges-page) page is now persisted across page reloads and navigation. [#104112][#104112]
-- The [**Databases**](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page) page now supports a large number of tables for a single database. If more than 40 tables are present in a database, the sort on the page will be disabled; however, it is still possible to filter by table name. [#103854][#103854]
+- Added merge queue failure and merge queue processing time metrics to the [**Queue Processing Failures**]({% link v23.1/ui-queues-dashboard.md %}#queue-processing-failures) and [**Queue Processing Times**]({% link v23.1/ui-queues-dashboard.md %}#queue-processing-times) graphs respectively. [#104034][#104034]
+- Removed the **Circuit Breaker Tripped Events** graph from the [**Replication**]({% link v23.1/ui-replication-dashboard.md %}) dashboard. [#104038][#104038]
+- Added **Completed time** to [**Jobs**]({% link v23.1/ui-jobs-page.md %}) and [**Job details**]({% link v23.1/ui-jobs-page.md %}#job-details) pages, and updated the time format on those pages to include seconds and milliseconds. [#104063][#104063]
+- Added a **Created SQL Connections** chart on the [**SQL**]({% link v23.1/ui-sql-dashboard.md %}) dashboard under **Metrics**. [#104072][#104072]
+- Added **Ranges in Catchup Mode** and **Rangefeed Catchup Scans Duration** charts to the [**Changefeeds**]({% link v23.1/ui-cdc-dashboard.md %}) dashboard. [#104122][#104122]
+- The sort setting on the [**Hot Ranges**]({% link v23.1/ui-hot-ranges-page.md %}) page is now persisted across page reloads and navigation. [#104112][#104112]
+- The [**Databases**]({% link v23.1/ui-databases-page.md %}) page now supports a large number of tables for a single database. If more than 40 tables are present in a database, the sort on the page will be disabled; however, it is still possible to filter by table name. [#103854][#103854]
- On the **Statement Details** page, renamed the "Idle Latency" metric to "Client Wait Time" and separated it into its own chart. [#103915][#103915]
-- Added more search criteria options on the [**SQL Activity**](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page:
+- Added more search criteria options on the [**SQL Activity**]({% link v23.1/ui-overview.md %}#sql-activity) page:
- For the **Top** dropdown: `1000`, `5000`, and `10000`.
- For the **By** dropdown on the **Statements** tab: Last Execution Time, Max Latency, Max Memory, Min Latency, Network, P50 Latency, P90 Latency, Retries, and Rows Processed.
- For the **By** dropdown on the **Transactions** tab: Max Memory, Network, Retries, and Rows Processed. [#104054][#104054]
-- Added a new link to the **Range Status** page on the [**Replication**](https://www.cockroachlabs.com/docs/v23.1/ui-replication-dashboard) dashboard that opens the **Enqueue Ranges** page with the node ID already completed. [#104100][#104100]
+- Added a new link to the **Range Status** page on the [**Replication**]({% link v23.1/ui-replication-dashboard.md %}) dashboard that opens the **Enqueue Ranges** page with the node ID already completed. [#104100][#104100]
- The DB Console will no longer show `DROP INDEX` recommendations for unique indexes. [#104287][#104287]
-- On the **Transactions** tab of the [**SQL Activity**](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page, the **Status** will be `Idle` if the executing transaction is not currently executing a statement. Previously, the status would be `Executing`. [#103925][#103925]
-- Fixed the job that updates the `statement_activity` and `transaction_activity` tables on the [**SQL Activity**](https://www.cockroachlabs.com/docs/v23.1/ui-overview#sql-activity) page. The table size is now constrained when there are a lot of unique queries. This fix helps to prevent slowing down the **SQL Activity** page. [#104340][#104340]
+- On the **Transactions** tab of the [**SQL Activity**]({% link v23.1/ui-overview.md %}#sql-activity) page, the **Status** will be `Idle` if the executing transaction is not currently executing a statement. Previously, the status would be `Executing`. [#103925][#103925]
+- Fixed the job that updates the `statement_activity` and `transaction_activity` tables on the [**SQL Activity**]({% link v23.1/ui-overview.md %}#sql-activity) page. The table size is now constrained when there are a lot of unique queries. This fix helps to prevent slowing down the **SQL Activity** page. [#104340][#104340]
Bug fixes
-- Fixed a panic that could occur while a [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) statement is logged for telemetry purposes. [#103848][#103848]
+- Fixed a panic that could occur while a [`COPY`]({% link v23.1/copy-from.md %}) statement is logged for telemetry purposes. [#103848][#103848]
- Fixed a bug where disk space used by deleted and [garbage collected](https://www.cockroachlabs.com/docs/v23.1/architecture/storage-layer#garbage-collection) data would not be reclaimed in a timely manner, especially when a store has low-write workload. [#103865][#103865]
- Fixed a problem that could lead to erroneously refused lease transfers, causing the following error message: `refusing to transfer lease to [...] because target may need a Raft snapshot: replica in StateProbe`. [#103849][#103849]
-- Fixed a bug where [`COPY`](https://www.cockroachlabs.com/docs/v23.1/copy-from) in v23.1.0 and beta versions would incorrectly encode data with multiple [column families](https://www.cockroachlabs.com/docs/v23.1/column-families). The data must be dropped and re-imported to be encoded correctly. [#103393][#103393]
-- Fixed a bug where running a [`debug` command](https://www.cockroachlabs.com/docs/v23.1/cockroach-commands#commands) that manipulates a store (e.g., `debug compact`) without first terminating the node using the store, could result in corruption of the node's store if encryption-at-rest was enabled. [#102877][#102877]
-- Fixed a bug where [`SHOW DEFAULT PRIVILEGES`](https://www.cockroachlabs.com/docs/v23.1/show-default-privileges) did not work correctly if the database name or schema name being inspected had upper-case or special characters. [#103952][#103952]
-- Fixed a bug that could cause queries with [joins](https://www.cockroachlabs.com/docs/v23.1/joins) or [subqueries](https://www.cockroachlabs.com/docs/v23.1/subqueries) to omit rows where column values are `NULL` in very rare cases. This bug was present since v20.2. [#103803][#103803]
+- Fixed a bug where [`COPY`]({% link v23.1/copy-from.md %}) in v23.1.0 and beta versions would incorrectly encode data with multiple [column families]({% link v23.1/column-families.md %}). The data must be dropped and re-imported to be encoded correctly. [#103393][#103393]
+- Fixed a bug where running a [`debug` command]({% link v23.1/cockroach-commands.md %}#commands) that manipulates a store (e.g., `debug compact`) without first terminating the node using the store, could result in corruption of the node's store if encryption-at-rest was enabled. [#102877][#102877]
+- Fixed a bug where [`SHOW DEFAULT PRIVILEGES`]({% link v23.1/show-default-privileges.md %}) did not work correctly if the database name or schema name being inspected had upper-case or special characters. [#103952][#103952]
+- Fixed a bug that could cause queries with [joins]({% link v23.1/joins.md %}) or [subqueries]({% link v23.1/subqueries.md %}) to omit rows where column values are `NULL` in very rare cases. This bug was present since v20.2. [#103803][#103803]
- Fixed a bug that could cause goroutines to hang during [SCRAM authentication](https://www.cockroachlabs.com/docs/v23.1/security-reference/scram-authentication). [#104197][#104197]
- The `sys.cpu.combined.percent-normalized` metric now uses `GOMAXPROCS`, if lower than the number of CPU shares when calculating CPU utilization. [#104191][#104191]
- The warning message about a missing `--advertise-addr` flag is no longer displayed when the flag is specified on server start. [#104227][#104227]
-- Fixed a rare bug where stale multi-column table [statistics](https://www.cockroachlabs.com/docs/v23.1/cost-based-optimizer) could cause table statistics forecasts to be inaccurate, leading to un-optimal query plans. [#104229][#104229]
+- Fixed a rare bug where stale multi-column table [statistics]({% link v23.1/cost-based-optimizer.md %}) could cause table statistics forecasts to be inaccurate, leading to un-optimal query plans. [#104229][#104229]
- Fixed a bug in v23.1.0 where the `node_id` field would be omitted from logs. The `node_id` value has now been restored to the logs. [#103798][#103798]
-- Fixed a bug where the collection of `KV bytes read` and `KV gRPC calls` execution statistics during [`EXPLAIN ANALYZE`](https://www.cockroachlabs.com/docs/v23.1/explain-analyze) could be incorrect (it would remain at zero) in some cases. The bug was introduced in the v23.1.0 release. [#104194][#104194]
-- Fixed an incorrect results bug in v22.2.10 and v23.1.2 and above when the `optimizer_use_improved_computed_column_filters_derivation` [session setting](https://www.cockroachlabs.com/docs/v23.1/set-vars) is `true`. Predicates on [computed columns](https://www.cockroachlabs.com/docs/v23.1/computed-columns) are derived when an ORed predicate on a column in the computed column expression is present. [#104276][#104276]
-- The [`keyvisualizer` job](https://www.cockroachlabs.com/docs/v23.1/ui-key-visualizer) no longer panics if an error is encountered while cleaning up stale samples. Instead, if the job encounters an error, the job will try again later. [#104374][#104374]
+- Fixed a bug where the collection of `KV bytes read` and `KV gRPC calls` execution statistics during [`EXPLAIN ANALYZE`]({% link v23.1/explain-analyze.md %}) could be incorrect (it would remain at zero) in some cases. The bug was introduced in the v23.1.0 release. [#104194][#104194]
+- Fixed an incorrect results bug in v22.2.10 and v23.1.2 and above when the `optimizer_use_improved_computed_column_filters_derivation` [session setting]({% link v23.1/set-vars.md %}) is `true`. Predicates on [computed columns]({% link v23.1/computed-columns.md %}) are derived when an ORed predicate on a column in the computed column expression is present. [#104276][#104276]
+- The [`keyvisualizer` job]({% link v23.1/ui-key-visualizer.md %}) no longer panics if an error is encountered while cleaning up stale samples. Instead, if the job encounters an error, the job will try again later. [#104374][#104374]
- Fixed a bug where it was possible for a SQL row to be split across two ranges. When this occurred, SQL queries could return unexpected errors. The real keys are now inspected rather than just request keys to determine load-based split points. [#103876][#103876]
-- Fixed a bug which could cause a panic when a [`CREATE FUNCTION`](https://www.cockroachlabs.com/docs/v23.1/create-function) statement used the [`setval()` built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators). [#104297][#104297]
-- Fixed a rare race condition that could allow large [restore](https://www.cockroachlabs.com/docs/v23.1/restore) jobs to fail with an `unable to find store` error. [#100955][#100955]
-- Fixed a bug where CockroachDB would not ignore the messages that it should, if there was an error while in the [PostgreSQL extended protocol](https://www.cockroachlabs.com/docs/v23.1/postgresql-compatibility). [#104459][#104459]
-- Fixed a bug in which some [Google Cloud Platform](https://www.cockroachlabs.com/docs/v23.1/use-cloud-storage)-related errors would be returned with an uninformative error. [#104065][#104065]
+- Fixed a bug which could cause a panic when a [`CREATE FUNCTION`]({% link v23.1/create-function.md %}) statement used the [`setval()` built-in function]({% link v23.1/functions-and-operators.md %}). [#104297][#104297]
+- Fixed a rare race condition that could allow large [restore]({% link v23.1/restore.md %}) jobs to fail with an `unable to find store` error. [#100955][#100955]
+- Fixed a bug where CockroachDB would not ignore the messages that it should, if there was an error while in the [PostgreSQL extended protocol]({% link v23.1/postgresql-compatibility.md %}). [#104459][#104459]
+- Fixed a bug in which some [Google Cloud Platform]({% link v23.1/use-cloud-storage.md %})-related errors would be returned with an uninformative error. [#104065][#104065]
- Fixed a bug where in rare cases a panic could occur during shutdown in relation to the SQL activity computation. This bug was introduced in v23.1.0. [#104515][#104515]
-- The backfill of `system.job_info` upgrade migration that runs during upgrades from v22.2 now processes rows in batches to avoid cases where it could become stuck due to [contention](https://www.cockroachlabs.com/docs/v23.1/performance-best-practices-overview#transaction-contention) and transaction retries. [#104574][#104574]
-- Fixes a bug in which [`SHOW BACKUP`](https://www.cockroachlabs.com/docs/v23.1/show-backup) would fail to show a [locality-aware backup](https://www.cockroachlabs.com/docs/v23.1/take-and-restore-locality-aware-backups) that contained [incremental backups](https://www.cockroachlabs.com/docs/v23.1/take-full-and-incremental-backups). [#103761][#103761]
+- The backfill of `system.job_info` upgrade migration that runs during upgrades from v22.2 now processes rows in batches to avoid cases where it could become stuck due to [contention]({% link v23.1/performance-best-practices-overview.md %}#transaction-contention) and transaction retries. [#104574][#104574]
+- Fixes a bug in which [`SHOW BACKUP`]({% link v23.1/show-backup.md %}) would fail to show a [locality-aware backup]({% link v23.1/take-and-restore-locality-aware-backups.md %}) that contained [incremental backups]({% link v23.1/take-full-and-incremental-backups.md %}). [#103761][#103761]
Performance improvements
-- If [`transaction_rows_read_err`](https://www.cockroachlabs.com/docs/v23.1/transactions#limit-the-number-of-rows-written-or-read-in-a-transaction) is set to a non-zero value, CockroachDB now ensures that any single scan never reads more than `transaction_rows_read_err` + 1 rows. This prevents transactions that would error due to the `transaction_rows_read_err` setting from causing a large performance overhead due to large scans. [#104364][#104364]
+- If [`transaction_rows_read_err`]({% link v23.1/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction) is set to a non-zero value, CockroachDB now ensures that any single scan never reads more than `transaction_rows_read_err` + 1 rows. This prevents transactions that would error due to the `transaction_rows_read_err` setting from causing a large performance overhead due to large scans. [#104364][#104364]
- Improved the efficiency of the an internal job that during upgrades deleted descriptors of dropped functions. Previously, the job would check every single ID until the max descriptor ID, which was particularly inefficient when this was large. Now, the job only queries the upper bound ID of each batch. [#104590][#104590]
Contributors
diff --git a/src/current/_includes/releases/v23.1/v23.1.4.md b/src/current/_includes/releases/v23.1/v23.1.4.md
index 5aec9530091..9f528b9918d 100644
--- a/src/current/_includes/releases/v23.1/v23.1.4.md
+++ b/src/current/_includes/releases/v23.1/v23.1.4.md
@@ -6,35 +6,35 @@ Release Date: June 20, 2023
Security updates
-- The new [`sql.auth.createrole_allows_grant_role_membership.enabled`](https://www.cockroachlabs.com/docs/v23.1/cluster-settings#setting-sql-auth-createrole-allows-grant-role-membership-enabled) cluster setting allows a user with the [`CREATEROLE` role option](https://www.cockroachlabs.com/docs/v23.1/create-user#role-options) to grant and revoke non-admin roles. This cluster setting defaults to `false`, but is expected to become the default behavior in the future. [#104445][#104445]
+- The new [`sql.auth.createrole_allows_grant_role_membership.enabled`]({% link v23.1/cluster-settings.md %}#setting-sql-auth-createrole-allows-grant-role-membership-enabled) cluster setting allows a user with the [`CREATEROLE` role option]({% link v23.1/create-user.md %}#role-options) to grant and revoke non-admin roles. This cluster setting defaults to `false`, but is expected to become the default behavior in the future. [#104445][#104445]
-- Fixed an initialization race condition in [changefeed schema feeds](https://www.cockroachlabs.com/docs/v23.1/changefeed-examples) that could cause a node to crash with a null pointer exception. [#104934][#104934]
+- Fixed an initialization race condition in [changefeed schema feeds]({% link v23.1/changefeed-examples.md %}) that could cause a node to crash with a null pointer exception. [#104934][#104934]
SQL language changes
-- Users with [`MODIFYSQLCLUSTERSETTING`](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) can now view only `sql.defaults` [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) instead of all cluster settings. [#104542][#104542]
+- Users with [`MODIFYSQLCLUSTERSETTING`](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) can now view only `sql.defaults` [cluster settings]({% link v23.1/cluster-settings.md %}) instead of all cluster settings. [#104542][#104542]
Operational changes
-- The [`debug.zip`](https://www.cockroachlabs.com/docs/v23.1/cockroach-debug-zip) archive now contains the files formerly located at `nodes/*/ranges/*.json` in one file per node, `nodes/*/ranges.json`. [#104248][#104248]
-- The `http-defaults` and `http-servers` sections of the [log config](https://www.cockroachlabs.com/docs/v23.1/configure-logs) will now accept a `headers` field containing a map of key-value string pairs which will comprise custom HTTP headers appended to every request. Additionally, a `compression` value can now be set to `gzip` or `none` to select a compression method for the HTTP request body. By default, `gzip` is selected. Previous functionality did not compress by default. [#104814][#104814]
+- The [`debug.zip`]({% link v23.1/cockroach-debug-zip.md %}) archive now contains the files formerly located at `nodes/*/ranges/*.json` in one file per node, `nodes/*/ranges.json`. [#104248][#104248]
+- The `http-defaults` and `http-servers` sections of the [log config]({% link v23.1/configure-logs.md %}) will now accept a `headers` field containing a map of key-value string pairs which will comprise custom HTTP headers appended to every request. Additionally, a `compression` value can now be set to `gzip` or `none` to select a compression method for the HTTP request body. By default, `gzip` is selected. Previous functionality did not compress by default. [#104814][#104814]
Command-line changes
-- The new log config option [`buffering`](https://www.cockroachlabs.com/docs/v23.1/configure-logs#log-buffering-for-network-sinks) allows you to [format buffer output as JSON arrays](https://www.cockroachlabs.com/docs/v23.1/configure-logs#file-logging-format). This is useful for APIs that consume JSON arrays, such as the Datadog logs API. [#104790][#104790]
+- The new log config option [`buffering`]({% link v23.1/configure-logs.md %}#log-buffering-for-network-sinks) allows you to [format buffer output as JSON arrays]({% link v23.1/configure-logs.md %}#file-logging-format). This is useful for APIs that consume JSON arrays, such as the Datadog logs API. [#104790][#104790]
DB Console changes
- The DB Console overview page now displays a warning when all nodes are running on a new version but the cluster upgrade has not been finalized. [#104874][#104874]
-- The histogram window merge calculation now interpolates quantile values more accurately, and [**Metrics** charts](https://www.cockroachlabs.com/docs/v23.1/ui-overview#metrics) in the DB Console are smoother and more accurate. [#104815][#104815]
+- The histogram window merge calculation now interpolates quantile values more accurately, and [**Metrics** charts]({% link v23.1/ui-overview.md %}#metrics) in the DB Console are smoother and more accurate. [#104815][#104815]
Bug fixes
-- Fixed a bug where a transaction retry could miss job rows during the backfill of the [**Jobs** table](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page#jobs-table). [#104757][#104757]
-- Fixed a bug where admin or root user privileges were erroneously required to use [`SHOW SYSTEM GRANTS`](https://www.cockroachlabs.com/docs/v23.1/show-system-grants). [#104732][#104732]
-- Fixed a bug that prevented display of the column selector on the [**Jobs** page](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page). [#104738][#104738]
+- Fixed a bug where a transaction retry could miss job rows during the backfill of the [**Jobs** table]({% link v23.1/ui-jobs-page.md %}#jobs-table). [#104757][#104757]
+- Fixed a bug where admin or root user privileges were erroneously required to use [`SHOW SYSTEM GRANTS`]({% link v23.1/show-system-grants.md %}). [#104732][#104732]
+- Fixed a bug that prevented display of the column selector on the [**Jobs** page]({% link v23.1/ui-jobs-page.md %}). [#104738][#104738]
- Fixed a bug where an invalid split could crash and prevent restarts of nodes that hold a replica for the right-hand side. [#104850][#104850]
- Fixed the `debug recover make-plan` command to ignore partial range metadata when the metadata can't be fully read, and instead rely solely on replica info from storage to produce the recovery plan. [#104774][#104774]
- Fixed a metric bug that could cause volumes such as RAID logical volumes to be counted twice.[#104806][#104806]
diff --git a/src/current/_includes/releases/v23.1/v23.1.5.md b/src/current/_includes/releases/v23.1/v23.1.5.md
index 96e04fed756..8837c13f352 100644
--- a/src/current/_includes/releases/v23.1/v23.1.5.md
+++ b/src/current/_includes/releases/v23.1/v23.1.5.md
@@ -10,23 +10,23 @@ Release Date: July 5, 2023
-- Added new [cluster settings](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) in the `server.oidc_authentication.generate_cluster_sso_token` namespace that support using OIDC to generate a [JWT auth token for cluster SSO](https://www.cockroachlabs.com/docs/v23.1/sso-sql). [#105643][#105643]
+- Added new [cluster settings]({% link v23.1/cluster-settings.md %}) in the `server.oidc_authentication.generate_cluster_sso_token` namespace that support using OIDC to generate a [JWT auth token for cluster SSO]({% link v23.1/sso-sql.md %}). [#105643][#105643]
SQL language changes
-- Improved the inline documentation and error messages related to [`SHOW RANGES`](https://www.cockroachlabs.com/docs/v23.1/show-ranges). [#105278][#105278]
-- Inbound [foreign keys](https://www.cockroachlabs.com/docs/v23.1/foreign-key) on TTL tables are now allowed. [#105341][#105341]
-- Added the columns `default_value` and `origin` ( with the values `default`, `override`, `external-override`) to the [`SHOW CLUSTER SETTING`](https://www.cockroachlabs.com/docs/v23.1/show-cluster-setting) command. [#105452][#105452]
-- Added the `VIEWACTIVITY` and `VIEWACTIVITYREDACTED` [system privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) for the `crdb_internal.cluster_queries` and `crdb_internal.node_queries` [tables](https://www.cockroachlabs.com/docs/v23.1/crdb-internal). [#105467][#105467]
-- Fixed the error message to be more understandable when attempting to create [UDFs](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) under a virtual or temporary schema. [#105627][#105627]
+- Improved the inline documentation and error messages related to [`SHOW RANGES`]({% link v23.1/show-ranges.md %}). [#105278][#105278]
+- Inbound [foreign keys]({% link v23.1/foreign-key.md %}) on TTL tables are now allowed. [#105341][#105341]
+- Added the columns `default_value` and `origin` ( with the values `default`, `override`, `external-override`) to the [`SHOW CLUSTER SETTING`]({% link v23.1/show-cluster-setting.md %}) command. [#105452][#105452]
+- Added the `VIEWACTIVITY` and `VIEWACTIVITYREDACTED` [system privileges](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges) for the `crdb_internal.cluster_queries` and `crdb_internal.node_queries` [tables]({% link v23.1/crdb-internal.md %}). [#105467][#105467]
+- Fixed the error message to be more understandable when attempting to create [UDFs]({% link v23.1/user-defined-functions.md %}) under a virtual or temporary schema. [#105627][#105627]
Command-line changes
-- Running [`cockroch node decommission `](https://www.cockroachlabs.com/docs/v23.1/cockroach-node#node-decommission) for a node that has already been decommissioned will now exit with code 0, as had been the case in CockroachDB versions prior to v23.1.0. [#103933][#103933]
+- Running [`cockroch node decommission `]({% link v23.1/cockroach-node.md %}#node-decommission) for a node that has already been decommissioned will now exit with code 0, as had been the case in CockroachDB versions prior to v23.1.0. [#103933][#103933]
DB Console changes
-- The [**Range Report** page](https://www.cockroachlabs.com/docs/v23.1/ui-hot-ranges-page#range-report) (route `/reports/range/:rangeID`) shows the **Hot Ranges** menu item as highlighted in the left-side menu. The back button in the **Range Report** page redirects back to the **Hot Ranges** page. [#104980][#104980]
+- The [**Range Report** page]({% link v23.1/ui-hot-ranges-page.md %}#range-report) (route `/reports/range/:rangeID`) shows the **Hot Ranges** menu item as highlighted in the left-side menu. The back button in the **Range Report** page redirects back to the **Hot Ranges** page. [#104980][#104980]
- Added description to the tooltip for the `Idle` status only for the Active Transactions view. Excluded `Idle` status filter option for the Active Statements view. [#105062][#105062]
Bug fixes
@@ -35,24 +35,24 @@ Release Date: July 5, 2023
- Fixed a crash when using `DurationToNumber` with empty duration object on SQL Activity tables. [#105152][#105152]
- `SpanStats` is no longer subject to stale information, and should be considered authoritative. [#105000][#105000]
- Fixed a bug in MuxRangefeed implementation that may cause MuxRangefeed to become stuck if enough ranges encountered certain error concurrently. [#105186][#105186]
-- [`SHOW CHANGEFEED JOBS`](https://www.cockroachlabs.com/docs/v23.1/show-jobs) no longer fails on v22.2 and v23.1 mixed-version clusters. [#105008][#105008]
-- [`GRANT SYSTEM ALL ...`](https://www.cockroachlabs.com/docs/v23.1/grant) no longer causes the grantee to be unable to log in. This was due to a bug where `ALL` would include the `NOSQLLOGIN` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges). Since `NOSQLLOGIN` is the only "negative" privilege, it is now excluded from the `ALL` shorthand, and must be granted explicitly in order to restrict logins. [#105080][#105080]
-- CockroachDB previously could encounter `zero transaction timestamp in EvalContext` when evaluating the [`COPY FROM`](https://www.cockroachlabs.com/docs/v23.1/copy-from) command. The bug was introduced in v23.1.0 and is now fixed. [#105295][#105295]
+- [`SHOW CHANGEFEED JOBS`]({% link v23.1/show-jobs.md %}) no longer fails on v22.2 and v23.1 mixed-version clusters. [#105008][#105008]
+- [`GRANT SYSTEM ALL ...`]({% link v23.1/grant.md %}) no longer causes the grantee to be unable to log in. This was due to a bug where `ALL` would include the `NOSQLLOGIN` [system privilege](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#supported-privileges). Since `NOSQLLOGIN` is the only "negative" privilege, it is now excluded from the `ALL` shorthand, and must be granted explicitly in order to restrict logins. [#105080][#105080]
+- CockroachDB previously could encounter `zero transaction timestamp in EvalContext` when evaluating the [`COPY FROM`]({% link v23.1/copy-from.md %}) command. The bug was introduced in v23.1.0 and is now fixed. [#105295][#105295]
- Fixed the data fetching for the **Database** and **Table Details** pages. Prior to this change, some databases/tables could be permanently stuck in a loading state, causing their corresponding page to permanently show a spinner. This change fixes the data fetching for these pages to ensure all databases and tables are loaded correctly. [#105315][#105315]
-- Fixed a bug where [`INSERT .. ON CONFLICT .. DO UPDATE`](https://www.cockroachlabs.com/docs/v23.1/insert) queries incorrectly resulted in an "ambiguous column" error. The bug only presented if the target table had a computed column with an expression referencing a column with a `DEFAULT` value. [#105025][#105025]
+- Fixed a bug where [`INSERT .. ON CONFLICT .. DO UPDATE`]({% link v23.1/insert.md %}) queries incorrectly resulted in an "ambiguous column" error. The bug only presented if the target table had a computed column with an expression referencing a column with a `DEFAULT` value. [#105025][#105025]
- On the **SQL Statistics** pages, a transaction query is now available as long as the statement fingerprints associated with the transaction also exist in the payload. [#105318][#105318]
-- Previously, CockroachDB would crash when evaluating [`CREATE TABLE .. AS or CREATE MATERIALIZED VIEW .. AS`](https://www.cockroachlabs.com/docs/v23.1/create-table) statements when the `AS` clause selected data from `crdb_internal.cluster_statement_statistics` or `crdb_internal.cluster_transaction_statistics` virtual tables. The bug has been present since at least v22.1 and is now fixed. [#105325][#105325]
+- Previously, CockroachDB would crash when evaluating [`CREATE TABLE .. AS or CREATE MATERIALIZED VIEW .. AS`]({% link v23.1/create-table.md %}) statements when the `AS` clause selected data from `crdb_internal.cluster_statement_statistics` or `crdb_internal.cluster_transaction_statistics` virtual tables. The bug has been present since at least v22.1 and is now fixed. [#105325][#105325]
- Fixed a source of mutex contention within the storage engine that could increase tail latencies on high-CPU, high-throughput deployments. [#105361][#105361]
- Fixed a bug where nodes could terminate with the following message: `server startup failed: cockroach server exited with error: ‹migration-job-find-already-completed›: key range id:X is unavailable: ‹failed to send RPC: no replica node information available via gossip for rX›`. [#104246][#104246]
- Previously, cross-database type references were allowed through `CREATE TABLE...AS` statements if the source table was from another database and any of its columns was of a user-defined type. This introduced a bug where the source table could be dropped and the type could not be found for the CTAS table. This commit disallows such CTAS as a fix. [#105621][#105621]
- CockroachDB can now automatically delete statistics for dropped tables from `system.table_statistics` table. However, out of caution, this mechanism is disabled by default on v23.1 releases. [#105479][#105479]
- Fixed a race condition that can occur when multiple SQL servers are created simultaneously, causing simultaneous writes to an unprotected global variable used to configure a CCL audit logging feature. [#105725][#105725]
-- Previously, referencing a user-defined type in the body of a [user-defined function](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) would result in an error at the time of creating the function. This is now fixed. [#105617][#105617]
-- CockroachDB now returns an error during [UDF](https://www.cockroachlabs.com/docs/v23.1/user-defined-functions) creation if an input argument has type `RECORD`. [#105735][#105735]
+- Previously, referencing a user-defined type in the body of a [user-defined function]({% link v23.1/user-defined-functions.md %}) would result in an error at the time of creating the function. This is now fixed. [#105617][#105617]
+- CockroachDB now returns an error during [UDF]({% link v23.1/user-defined-functions.md %}) creation if an input argument has type `RECORD`. [#105735][#105735]
Performance improvements
-- If the `sql.optimizer.uniqueness_checks_for_gen_random_uuid.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings) is disabled, the optimizer can now eliminate uniqueness checks for `STRING` and `BYTES` columns when the value is set to `gen_random_uuid()` (with an implicit or explicit cast to `STRING` or `BYTES`). If you still want the checks, you can set `sql.optimizer.uniqueness_checks_for_gen_random_uuid.enabled` to `true` (the default is `false`). [#105446][#105446]
+- If the `sql.optimizer.uniqueness_checks_for_gen_random_uuid.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}) is disabled, the optimizer can now eliminate uniqueness checks for `STRING` and `BYTES` columns when the value is set to `gen_random_uuid()` (with an implicit or explicit cast to `STRING` or `BYTES`). If you still want the checks, you can set `sql.optimizer.uniqueness_checks_for_gen_random_uuid.enabled` to `true` (the default is `false`). [#105446][#105446]
diff --git a/src/current/_includes/releases/v23.1/v23.1.6.md b/src/current/_includes/releases/v23.1/v23.1.6.md
index 18fd56abd79..56c000b932a 100644
--- a/src/current/_includes/releases/v23.1/v23.1.6.md
+++ b/src/current/_includes/releases/v23.1/v23.1.6.md
@@ -6,9 +6,9 @@ Release Date: July 24, 2023
Bug fixes
-- Fixed a bug in v23.1.5 where [debug zips](https://www.cockroachlabs.com/docs/v23.1/cockroach-debug-zip) were empty in the `crdb_internal.cluster_settings.txt` file. Debug zips now properly show the information from `cluster_settings`. [#107105][#107105]
-- Fixed a bug where some primary indexes would incorrectly be treated internally as secondary indexes, which could cause schema change operations to fail. The bug could occur if [`ALTER PRIMARY KEY`](https://www.cockroachlabs.com/docs/v23.1/alter-table#alter-primary-key) was used on v21.1 or earlier, and the cluster was upgraded. [#106426][#106426]
-- Extended the `cockroach debug doctor` to detect [indexes](https://www.cockroachlabs.com/docs/v23.1/indexes) which could potentially lose data by being dropped when a column is stored inside them and added a check inside [`DROP INDEX`](https://www.cockroachlabs.com/docs/v23.1/drop-index) to prevent dropping indexes with this problem to avoid data loss. [#106863][#106863]
+- Fixed a bug in v23.1.5 where [debug zips]({% link v23.1/cockroach-debug-zip.md %}) were empty in the `crdb_internal.cluster_settings.txt` file. Debug zips now properly show the information from `cluster_settings`. [#107105][#107105]
+- Fixed a bug where some primary indexes would incorrectly be treated internally as secondary indexes, which could cause schema change operations to fail. The bug could occur if [`ALTER PRIMARY KEY`]({% link v23.1/alter-table.md %}#alter-primary-key) was used on v21.1 or earlier, and the cluster was upgraded. [#106426][#106426]
+- Extended the `cockroach debug doctor` to detect [indexes]({% link v23.1/indexes.md %}) which could potentially lose data by being dropped when a column is stored inside them and added a check inside [`DROP INDEX`]({% link v23.1/drop-index.md %}) to prevent dropping indexes with this problem to avoid data loss. [#106863][#106863]
diff --git a/src/current/_includes/releases/v23.1/v23.1.7.md b/src/current/_includes/releases/v23.1/v23.1.7.md
index 9784e30fdb6..116c3b86d81 100644
--- a/src/current/_includes/releases/v23.1/v23.1.7.md
+++ b/src/current/_includes/releases/v23.1/v23.1.7.md
@@ -7,28 +7,28 @@ Release Date: July 31, 2023
SQL language changes
-- Added the `crdb_internal.reset_activity_tables` [built-in function](https://www.cockroachlabs.com/docs/v23.1/functions-and-operators) to allow users to reset the statistics in the `system.{statement|transaction}_activity` tables. Users require the [`admin` role](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#admin-role) to use this built-in function. [#106129][#106129]
-- Added the `sql.telemetry.query_sampling.internal.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.1/cluster-settings), which is `false` by default. If set to `true`, internal app queries will be reported to [telemetry](https://www.cockroachlabs.com/docs/v23.1/logging#telemetry) when query sampling to telemetry is [enabled](https://www.cockroachlabs.com/docs/v23.1/configure-logs). [#107182][#107182]
+- Added the `crdb_internal.reset_activity_tables` [built-in function]({% link v23.1/functions-and-operators.md %}) to allow users to reset the statistics in the `system.{statement|transaction}_activity` tables. Users require the [`admin` role](https://www.cockroachlabs.com/docs/v23.1/security-reference/authorization#admin-role) to use this built-in function. [#106129][#106129]
+- Added the `sql.telemetry.query_sampling.internal.enabled` [cluster setting]({% link v23.1/cluster-settings.md %}), which is `false` by default. If set to `true`, internal app queries will be reported to [telemetry]({% link v23.1/logging.md %}#telemetry) when query sampling to telemetry is [enabled]({% link v23.1/configure-logs.md %}). [#107182][#107182]
DB Console changes
-- Added a timescale label to the [**Diagnostics** tab](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) of the [**Statement Details** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page). The time window for the statement diagnostics is now displayed. [#107082][#107082]
-- Increased the timeout duration for loading the [**Hot Ranges** page](https://www.cockroachlabs.com/docs/v23.1/ui-hot-ranges-page) to 30 minutes. [#107497][#107497]
+- Added a timescale label to the [**Diagnostics** tab]({% link v23.1/ui-statements-page.md %}#diagnostics) of the [**Statement Details** page]({% link v23.1/ui-statements-page.md %}). The time window for the statement diagnostics is now displayed. [#107082][#107082]
+- Increased the timeout duration for loading the [**Hot Ranges** page]({% link v23.1/ui-hot-ranges-page.md %}) to 30 minutes. [#107497][#107497]
Bug fixes
-- The **Regions/Nodes** column on the [**Database** and **Database Details** pages](https://www.cockroachlabs.com/docs/v23.1/ui-databases-page) will now render properly. This column displays for clusters with more than 1 node. [#105824][#105824]
-- Fixed a bug where the [**Job Details** page](https://www.cockroachlabs.com/docs/v23.1/ui-jobs-page#job-details) would flicker between the job details and a loading animation while a job is still executing. [#106153][#106153]
-- Fixed a bug where the [**Key Visualizer** page](https://www.cockroachlabs.com/docs/v23.1/ui-key-visualizer) would crash due to an invalid conversion to `int` error. [#106357][#106357]
-- Fixed a bug that caused an infinite re-render on the [**Key Visualizer** page](https://www.cockroachlabs.com/docs/v23.1/ui-key-visualizer) when a custom time period was selected. [#106430][#106430]
-- Fixed a bug on the **SQL Activity**, [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) where the database filter would not return results even when statements existed for the selected database. This is now fixed so that selecting a database filter from the filters menu on the [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) will function as expected. [#106434][#106434]
-- Fixed a bug where the [**Metrics** page](https://www.cockroachlabs.com/docs/v23.1/ui-overview-dashboard) was not updating automatically on rolling window options. [#106766][#106766]
-- Fixed a bug where [statement diagnostics](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page#diagnostics) on the [**Statements** page](https://www.cockroachlabs.com/docs/v23.1/ui-statements-page) were not always showing. This is now fixed with statement diagnostics displaying for the correct time period. [#106766][#106766]
-- Fixed a bug where the **Sort** dropdown on the [**Network Latency** page](https://www.cockroachlabs.com/docs/v23.1/ui-network-latency-page) would not persist the selected value because a page reload was triggered. [#107213][#107213]
-- Fixed a bug where the index recommendation on the [**Insights** page](https://www.cockroachlabs.com/docs/v23.1/ui-insights-page) would use the fully qualified table name to create an index name, which would cause an error due to the invalid syntax. Indexes can now be created directly from the DB Console without encountering this error. [#107218][#107218]
-- Fixed a bug where [changefeeds](https://www.cockroachlabs.com/docs/v23.1/change-data-capture-overview) would fail when upgrading to version [v23.1.5](#v23-1-5) because the job record did not have a `clusterID` field set. [#106399][#106399]
-- Fixed a bug where `UPDATE`, `UPSERT`, `DELETE` statements running concurrently with [`ALTER TABLE..ADD COLUMN`](https://www.cockroachlabs.com/docs/v23.1/alter-table#add-column) of a virtual computed column on the same table would fail. [#107403][#107403]
-- Fixed a bug where [SQL statistics compaction jobs](https://www.cockroachlabs.com/docs/v23.1/show-jobs#show-automatic-jobs) would fail. This is now fixed by reducing the contention on the `system.statement_statistics` table. [#107573][#107573]
+- The **Regions/Nodes** column on the [**Database** and **Database Details** pages]({% link v23.1/ui-databases-page.md %}) will now render properly. This column displays for clusters with more than 1 node. [#105824][#105824]
+- Fixed a bug where the [**Job Details** page]({% link v23.1/ui-jobs-page.md %}#job-details) would flicker between the job details and a loading animation while a job is still executing. [#106153][#106153]
+- Fixed a bug where the [**Key Visualizer** page]({% link v23.1/ui-key-visualizer.md %}) would crash due to an invalid conversion to `int` error. [#106357][#106357]
+- Fixed a bug that caused an infinite re-render on the [**Key Visualizer** page]({% link v23.1/ui-key-visualizer.md %}) when a custom time period was selected. [#106430][#106430]
+- Fixed a bug on the **SQL Activity**, [**Statements** page]({% link v23.1/ui-statements-page.md %}) where the database filter would not return results even when statements existed for the selected database. This is now fixed so that selecting a database filter from the filters menu on the [**Statements** page]({% link v23.1/ui-statements-page.md %}) will function as expected. [#106434][#106434]
+- Fixed a bug where the [**Metrics** page]({% link v23.1/ui-overview-dashboard.md %}) was not updating automatically on rolling window options. [#106766][#106766]
+- Fixed a bug where [statement diagnostics]({% link v23.1/ui-statements-page.md %}#diagnostics) on the [**Statements** page]({% link v23.1/ui-statements-page.md %}) were not always showing. This is now fixed with statement diagnostics displaying for the correct time period. [#106766][#106766]
+- Fixed a bug where the **Sort** dropdown on the [**Network Latency** page]({% link v23.1/ui-network-latency-page.md %}) would not persist the selected value because a page reload was triggered. [#107213][#107213]
+- Fixed a bug where the index recommendation on the [**Insights** page]({% link v23.1/ui-insights-page.md %}) would use the fully qualified table name to create an index name, which would cause an error due to the invalid syntax. Indexes can now be created directly from the DB Console without encountering this error. [#107218][#107218]
+- Fixed a bug where [changefeeds]({% link v23.1/change-data-capture-overview.md %}) would fail when upgrading to version [v23.1.5](#v23-1-5) because the job record did not have a `clusterID` field set. [#106399][#106399]
+- Fixed a bug where `UPDATE`, `UPSERT`, `DELETE` statements running concurrently with [`ALTER TABLE..ADD COLUMN`]({% link v23.1/alter-table.md %}#add-column) of a virtual computed column on the same table would fail. [#107403][#107403]
+- Fixed a bug where [SQL statistics compaction jobs]({% link v23.1/show-jobs.md %}#show-automatic-jobs) would fail. This is now fixed by reducing the contention on the `system.statement_statistics` table. [#107573][#107573]
- Fixed a bug where running a [changefeed]({% link v23.2/change-data-capture-overview.md %}) that targets a table with a user-defined type column and with the [`envelope` option]({% link v23.2/create-changefeed.md %}#envelope) set to any value other than `wrapped` would cause a node panic due to a nil dereference. [#119746][119746]
diff --git a/src/current/_includes/releases/v23.1/v23.1.8.md b/src/current/_includes/releases/v23.1/v23.1.8.md
index 43b294d26a2..9bb4f784fdd 100644
--- a/src/current/_includes/releases/v23.1/v23.1.8.md
+++ b/src/current/_includes/releases/v23.1/v23.1.8.md
@@ -15,7 +15,7 @@ Release Date: August 7, 2023
azure_client_secret: {MY_CLIENT_SECRET}
~~~
- Set the environment variable `COCKROACH_AZURE_APPLICATION_CREDENTIALS_FILE` to the path of the file. The implicit authentication method first attempts to authenticate using credentials in the file before attempting to authenticate using any other credentials specified in the [`DefaultAzureCredential` class](https://learn.microsoft.com/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet), such as environment variables and Managed Identity. These credentials can also be used for [encrypted backups](https://www.cockroachlabs.com/docs/v23.1/take-and-restore-encrypted-backups#use-key-management-service). [#106688][#106688]
+ Set the environment variable `COCKROACH_AZURE_APPLICATION_CREDENTIALS_FILE` to the path of the file. The implicit authentication method first attempts to authenticate using credentials in the file before attempting to authenticate using any other credentials specified in the [`DefaultAzureCredential` class](https://learn.microsoft.com/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet), such as environment variables and Managed Identity. These credentials can also be used for [encrypted backups]({% link v23.1/take-and-restore-encrypted-backups.md %}#use-key-management-service). [#106688][#106688]
Bug fixes
diff --git a/src/current/_includes/releases/v23.2/v23.2.0-alpha.1.md b/src/current/_includes/releases/v23.2/v23.2.0-alpha.1.md
index 63ba4aaf471..87bbee420db 100644
--- a/src/current/_includes/releases/v23.2/v23.2.0-alpha.1.md
+++ b/src/current/_includes/releases/v23.2/v23.2.0-alpha.1.md
@@ -191,7 +191,7 @@ Release Date: September 26, 2023
- There is now a `CREATEDB` system privilege, which is analogous to the existing `CREATEDB` role option, but can also be inherited by role membership. [#110220][#110220]
- There is now a `CONTROLJOB` system privilege, which is analogous to the existing `CONTROLJOB` role option, but can also be inherited by role membership. [#110220][#110220]
- The `persistedsqlstats` table maximum size check is now done once an hour instead of every 10 minutes. This reduces the risk of serialization errors on the statistics tables. [#110173][#110173]
-- The new [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) `sql.txn.read_committed_syntax.enabled`, controls whether transactions run under `READ COMMITTED` or `SERIALIZABLE` isolation. It defaults to `false`. When set to `true`, the following statements will configure transactions to run under `READ COMMITTED` isolation:
+- The new [cluster setting]({% link v23.2/cluster-settings.md %}) `sql.txn.read_committed_syntax.enabled`, controls whether transactions run under `READ COMMITTED` or `SERIALIZABLE` isolation. It defaults to `false`. When set to `true`, the following statements will configure transactions to run under `READ COMMITTED` isolation:
- `BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED`
- `SET TRANSACTION ISOLATION LEVEL READ COMMITTED`
@@ -200,7 +200,7 @@ Release Date: September 26, 2023
[#110624][#110624]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) `sql.metrics.statement_details.gateway_node.enabled` now defaults to false, to reduce the number of rows generated in SQL Statistics pages. [#107788][#107788]
+- The [cluster setting]({% link v23.2/cluster-settings.md %}) `sql.metrics.statement_details.gateway_node.enabled` now defaults to false, to reduce the number of rows generated in SQL Statistics pages. [#107788][#107788]
- The default value for the [`ttl_job_cron`](https://cockroachlabs.com/docs/v23.2/row-level-ttl) table storage parameter is now `@daily` rather than `@hourly`. This parameter controls the default recurrence of the row-level TTL job. As part of this change, the output of the `SHOW CREATE TABLE` statements now include the `ttl_cron_job` parameter only if it is explicitly set. [#110623][#110623]
Operational changes
diff --git a/src/current/_includes/releases/v23.2/v23.2.0-alpha.2.md b/src/current/_includes/releases/v23.2/v23.2.0-alpha.2.md
index bdc5629c8b9..67f37ef82b7 100644
--- a/src/current/_includes/releases/v23.2/v23.2.0-alpha.2.md
+++ b/src/current/_includes/releases/v23.2/v23.2.0-alpha.2.md
@@ -6,7 +6,7 @@ Release Date: October 2, 2023
Security updates
-- The `SIGHUP` signal now clears the cached expiration times for [client certificates](https://www.cockroachlabs.com/docs/v23.2/cockroach-cert#how-security-certificates-work) that are reported by the `security.certificate.expiration.client` metric. [#110726][#110726]
+- The `SIGHUP` signal now clears the cached expiration times for [client certificates]({% link v23.2/cockroach-cert.md %}#how-security-certificates-work) that are reported by the `security.certificate.expiration.client` metric. [#110726][#110726]
General changes
@@ -14,8 +14,8 @@ Release Date: October 2, 2023
SQL language changes
-- The `discard` [log message](https://www.cockroachlabs.com/docs/v23.2/logging-overview) is now limited to once per minute by default. The message now includes both the number of transactions and the number of statements that were discarded. [#110805][#110805]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) `kv.rangefeed.enabled` no longer controls access to `RANGEFEED SQL` commands. Instead, use `feature.changefeed.enabled`. [#110676][#110676]
+- The `discard` [log message]({% link v23.2/logging-overview.md %}) is now limited to once per minute by default. The message now includes both the number of transactions and the number of statements that were discarded. [#110805][#110805]
+- The [cluster setting]({% link v23.2/cluster-settings.md %}) `kv.rangefeed.enabled` no longer controls access to `RANGEFEED SQL` commands. Instead, use `feature.changefeed.enabled`. [#110676][#110676]
- SQL commands that were previously limited to the `admin` [system privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#supported-privileges) can now be used by users with the `VIEWCLUSTERMETADATA` or `REPAIRCLUSTERMETADATA` system privilege, depending on whether the operation is read-only or modifies state. [#110084][#110084]
- Added a `last_error` column to the `cluster_execution_insights`, `node_execution_insights`, `cluster_txn_execution_insights`, and `node_txn_execution_insights` tables. These columns contain error messages for failed executions. [#110565][#110565]
- The new backup option `updates_cluster_monitoring_metrics` tracks the timestamp of the last backup failure due to a KMS error. This option is disabled by default. [#104634][#104634]
@@ -50,11 +50,11 @@ Release Date: October 2, 2023
DB Console changes
- The legend is now always displayed on charts in DB Console Metrics pages. In addition, when you select an item from the legend that represents a single line in the chart, that line is selected in the chart. [#110809][#110809]
-- When collecting a [statement bundle](https://www.cockroachlabs.com/docs/v23.2/cockroach-statement-diag), you can now filter by a specific [plan gist](https://www.cockroachlabs.com/docs/v23.2/ui-statements-page#explain-plans) or collect diagnostics for all plan gists. [#110931][#110931]
-- [Statement](https://www.cockroachlabs.com/docs/v23.2/ui-statements-page) and [Transaction](https://www.cockroachlabs.com/docs/v23.2/ui-transactions-page) detail pages now include an **Error Message** row. Users with the `VIEWACTIVITY` [system privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#supported-privileges) can view the full error message, and users with the `VIEWACTIVTYREDACTED` system privilege can view the redacted error message. If a user has both privileges, `VIEWACTIVITYTREDACTED`` takes precedence. [#110849][#110849]
-- A new dashboard in the [SQL Dashboard page](https://www.cockroachlabs.com/docs/v23.2/ui-sql-dashboard) tracks how often distributed queries with errors were rerun using the "rerun as local" mechanism, as well as how often those reruns failed. the number of times distributed queries that resulted in errors were rerun as local as well as when those reruns failed. The "rerun as local" mechanism is new in v23.2 and is enabled by default. For more information, contact your Cockroach Labs account representative. [#110619][#110619]
+- When collecting a [statement bundle]({% link v23.2/cockroach-statement-diag.md %}), you can now filter by a specific [plan gist]({% link v23.2/ui-statements-page.md %}#explain-plans) or collect diagnostics for all plan gists. [#110931][#110931]
+- [Statement]({% link v23.2/ui-statements-page.md %}) and [Transaction]({% link v23.2/ui-transactions-page.md %}) detail pages now include an **Error Message** row. Users with the `VIEWACTIVITY` [system privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#supported-privileges) can view the full error message, and users with the `VIEWACTIVTYREDACTED` system privilege can view the redacted error message. If a user has both privileges, `VIEWACTIVITYTREDACTED`` takes precedence. [#110849][#110849]
+- A new dashboard in the [SQL Dashboard page]({% link v23.2/ui-sql-dashboard.md %}) tracks how often distributed queries with errors were rerun using the "rerun as local" mechanism, as well as how often those reruns failed. the number of times distributed queries that resulted in errors were rerun as local as well as when those reruns failed. The "rerun as local" mechanism is new in v23.2 and is enabled by default. For more information, contact your Cockroach Labs account representative. [#110619][#110619]
- The DB Console [Insights page](https://cockroachlabs.com/docs/v23.2/ui-insights-page) now shows the error message when a transaction fails at the `COMMIT` stage. [#110898][#110898]
-- The [Overload Dashboard page](https://www.cockroachlabs.com/docs/v23.2/ui-overload-dashboard) now includes the following graphs to monitor [admission control](https://www.cockroachlabs.com/docs/v23.2/admission-control.html):
+- The [Overload Dashboard page]({% link v23.2/ui-overload-dashboard.md %}) now includes the following graphs to monitor [admission control](https://www.cockroachlabs.com/docs/v23.2/admission-control.html):
- **IO Overload** - Charts normalized metric based on admission control target thresholds. Replaces **LSM L0 Health** graph which used raw metrics.
- **KV Admission Slots Exhausted** - Replaces **KV Admission Slots** graph.
- **Flow Tokens Wait Time: 75th percentile** - Use to monitor the new replication admission control feature.
@@ -65,10 +65,10 @@ Release Date: October 2, 2023
Bug fixes
- Fixed a race condition in the [Replica lifecycle](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer) that could result in a failed SQL request when the request could have been successfully retried. [#110806][#110806]
-- Fixed a bug where a [`CREATE TABLE`](https://www.cockroachlabs.com/docs/v23.2/create-table) command with an `IDENTITY` column did not properly propagate the type of the column into the sequence. [#110621][#110621]
+- Fixed a bug where a [`CREATE TABLE`]({% link v23.2/create-table.md %}) command with an `IDENTITY` column did not properly propagate the type of the column into the sequence. [#110621][#110621]
- Fixed a panic when decoding a gist in a foreign database that does not contain a table referred to by the gist. [#110966][#110966]
- A synthetic `dropped` column have been added to the `pg_attribute` table. This column tracks the attribution numbers for dropped attributions, to work around issues with ORMs that are not designed to handle gaps in attribution numbering in the `pg_attribute` table. [#111019][#111019]
-- Fixed a rare internal error in the `unnest` and `information_schema._pg_expandarray` [built-in functions](https://www.cockroachlabs.com/docs/v23.2/functions-and-operators) where passed string arguments could be cast to an array. [#110956][#110956]
+- Fixed a rare internal error in the `unnest` and `information_schema._pg_expandarray` [built-in functions]({% link v23.2/functions-and-operators.md %}) where passed string arguments could be cast to an array. [#110956][#110956]
- External connection URLs now accept the scheme `azure-blob` for connections to Azure Blob Storage and the scheme `azure-kms` for connections to Azure KMS. For backward compatibility, schemes `azure` and `azure-storage` schemes continue to work for connections to Azure Blob Storage. [#111217][#111217]
- Fixed a bug where vectorized `COPY FROM` could produce a plan with more than one RenderNodes, when only zero or one should be allowed. This could result in multiple render nodes in a table with a hash sharded primary key. [#111284][#111284]
- Fixed a bug in DB Console's Statement Diagnostic page that could cause the page to crash if the response was larger than 50 KB. The page now keeps pulling results until no maximum size errors are encountered. [#111128][#111128]
diff --git a/src/current/_includes/releases/v23.2/v23.2.0-beta.2.md b/src/current/_includes/releases/v23.2/v23.2.0-beta.2.md
index 2eb5033f704..a73679e6a57 100644
--- a/src/current/_includes/releases/v23.2/v23.2.0-beta.2.md
+++ b/src/current/_includes/releases/v23.2/v23.2.0-beta.2.md
@@ -18,7 +18,7 @@ Release Date: December 5, 2023
DB Console changes
-- In the [Changeeds dashboard](https://www.cockroachlabs.com/docs/v23.2/ui-cdc-dashboard), the **Max Checkpoint Latency** chart title now refers to "Lag" rather than "Latency", to better reflect the intention of the underlying metric, which measures how recently the changefeed was last checkpointed. [#115003][#115003]
+- In the [Changeeds dashboard]({% link v23.2/ui-cdc-dashboard.md %}), the **Max Checkpoint Latency** chart title now refers to "Lag" rather than "Latency", to better reflect the intention of the underlying metric, which measures how recently the changefeed was last checkpointed. [#115003][#115003]
- Times on the X-Axis of bar charts in **Statement details** pages are now correctly formatted in UTC. [#115220][#115220]
- In the **SQL Activity** **Transaction Details** page, you can now view a transaction fingerprint ID across multiple applications by specifying the application name in the `appNames` URL `GET` parameter using a comma-separated encoded string of transaction fingerprint IDs. [#115204][#115204]
diff --git a/src/current/_includes/releases/v23.2/v23.2.0.md b/src/current/_includes/releases/v23.2/v23.2.0.md
index c4a60255be8..d33a889facd 100644
--- a/src/current/_includes/releases/v23.2/v23.2.0.md
+++ b/src/current/_includes/releases/v23.2/v23.2.0.md
@@ -370,7 +370,7 @@ The following changes should be reviewed prior to upgrading. Default cluster set
[#110624][#110624]
- The `sql.txn.read_committed_syntax.enabled` [cluster setting](../v23.2/cluster-settings.html) was renamed to [`sql.txn.read_committed_isolation.enabled`](../v23.2/cluster-settings.html#setting-sql-txn-read-committed-isolation-enabled). [#113833][#113833]
- Users who have the [`CREATEROLE` role option]({% link v23.2/grant.md %}) can now grant and revoke role membership in any non-admin role. This change also removes the [`sql.auth.createrole_allows_grant_role_membership.enabled` cluster setting]({% link v23.2/cluster-settings.md %}), which was added in v23.1. In v23.2, the cluster setting is effectively always true. [#104376][#104376]
-- The [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) `sql.metrics.statement_details.gateway_node.enabled` now defaults to false to reduce the number of rows generated in SQL Statistics pages. [#107788][#107788]
+- The [cluster setting]({% link v23.2/cluster-settings.md %}) `sql.metrics.statement_details.gateway_node.enabled` now defaults to false to reduce the number of rows generated in SQL Statistics pages. [#107788][#107788]
- The [cluster setting]({% link v23.2/cluster-settings.md %}) `kv.rangefeed.enabled` no longer controls access to `RANGEFEED SQL` commands. Instead, use `feature.changefeed.enabled`. [#110676][#110676]
- The [cluster settings]({% link v23.2/cluster-settings.md %}) related to [physical cluster replication](../v23.2/physical-cluster-replication-overview.html) have been renamed for consistency. For example, `bulkio.stream_ingestion.minimum_flush_interval` is now named `physical_replication.consumer.minimum_flush_interval`. [#111197][#111197]
- CockroachDB now periodically dumps the state of its internal memory accounting system into the `heap_profiler/` directory when a heap profile is taken. To disable this behavior, set the `diagnostics.memory_monitoring_dumps.enabled` [cluster setting]({% link v23.2/cluster-settings.md %}) to `false`. [#114998][#114998]
@@ -384,7 +384,7 @@ The following changes should be reviewed prior to upgrading. Default cluster set
Known limitations
-For information about new and unresolved limitations in CockroachDB v23.2, with suggested workarounds where applicable, see [Known Limitations](https://www.cockroachlabs.com/docs/v23.2/known-limitations).
+For information about new and unresolved limitations in CockroachDB v23.2, with suggested workarounds where applicable, see [Known Limitations]({% link v23.2/known-limitations.md %}).
Additional resources
@@ -394,11 +394,11 @@ Cockroach University | [Introduction to Distributed SQL and CockroachDB](https:/
Cockroach University | [Practical First Steps with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+practical-first-steps-with-crdb+self-paced/about) | This course will give you the tools you need to get started with CockroachDB. During the course, you will learn how to spin up a cluster, use the Admin UI to monitor cluster activity, and use SQL shell to solve a set of hands-on exercises.
Cockroach University | [Enterprise Application Development with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+client-side-txn-handling+self-paced/about) | This course is the first in a series designed to equip you with best practices for mastering application-level (client-side) transaction management in CockroachDB. We'll dive deep on common differences between CockroachDB and legacy SQL databases and help you sidestep challenges you might encounter when migrating to CockroachDB from Oracle, PostgreSQL, and MySQL.
Cockroach University | [Building a Highly Resilient Multi-region Database using CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-resilience-in-multi-region+self-paced/about) | This course is part of a series introducing solutions to running low-latency, highly resilient applications for data-intensive workloads on CockroachDB. In this course we focus on surviving large-scale infrastructure failures like losing an entire cloud region without losing data during recovery. We’ll show you how to use CockroachDB survival goals in a multi-region cluster to implement a highly resilient database that survives node or network failures across multiple regions with zero data loss.
-Docs | [Migration Overview](https://www.cockroachlabs.com/docs/v23.2/migration-overview) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
+Docs | [Migration Overview]({% link v23.2/migration-overview.md %}) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
Docs | [Architecture Overview](https://www.cockroachlabs.com/docs/v23.2/architecture/overview) | This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.
-Docs | [SQL Feature Support](https://www.cockroachlabs.com/docs/v23.2/sql-feature-support) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
-Docs | [Change Data Capture Overview](https://www.cockroachlabs.com/docs/v23.2/change-data-capture-overview) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
-Docs | [Backup Architecture](https://www.cockroachlabs.com/docs/v23.2/backup-architecture) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
+Docs | [SQL Feature Support]({% link v23.2/sql-feature-support.md %}) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
+Docs | [Change Data Capture Overview]({% link v23.2/change-data-capture-overview.md %}) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
+Docs | [Backup Architecture]({% link v23.2/backup-architecture.md %}) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
[#102961]: https://github.com/cockroachdb/cockroach/pull/102961
[#104265]: https://github.com/cockroachdb/cockroach/pull/104265
diff --git a/src/current/_includes/releases/v23.2/v23.2.1.md b/src/current/_includes/releases/v23.2/v23.2.1.md
index 929ae6c47c9..56fde673c61 100644
--- a/src/current/_includes/releases/v23.2/v23.2.1.md
+++ b/src/current/_includes/releases/v23.2/v23.2.1.md
@@ -6,12 +6,12 @@ Release Date: February 20, 2024
Security updates
-- Introduced the `server.redact_sensitive_settings.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings), which is false by default. If set to `true`, then the values of the following settings will be redacted when accessed through `SHOW` commands or other introspection interfaces. In the future, any other sensitive cluster settings that are added will be redacted as well. Users who have the `MODIFYCLUSTERSETTING` [privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#managing-privileges) can always view the unredacted settings. [#117729][#117729]
+- Introduced the `server.redact_sensitive_settings.enabled` [cluster setting]({% link v23.2/cluster-settings.md %}), which is false by default. If set to `true`, then the values of the following settings will be redacted when accessed through `SHOW` commands or other introspection interfaces. In the future, any other sensitive cluster settings that are added will be redacted as well. Users who have the `MODIFYCLUSTERSETTING` [privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#managing-privileges) can always view the unredacted settings. [#117729][#117729]
- `server.oidc_authentication.client_id`
- `server.oidc_authentication.client_secret`
-- If the `server.redact_sensitive_settings.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) is set to `true`, then the `MANAGEVIRTUALCLUSTER` [privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#managing-privileges) is required to view the values of the per-virtual-cluster overrides for sensitive cluster settings. [#117729][#117729]
-- The [DB Console](https://www.cockroachlabs.com/docs/v23.2/ui-overview) `session` cookie is now marked `HttpOnly` to prevent it from being read by any JavaScript code. [#119249][#119249]
-- [DB Console](https://www.cockroachlabs.com/docs/v23.2/ui-overview) cookies are marked `Secure` for the browser when the cluster is running in secure mode. [#119249][#119249]
+- If the `server.redact_sensitive_settings.enabled` [cluster setting]({% link v23.2/cluster-settings.md %}) is set to `true`, then the `MANAGEVIRTUALCLUSTER` [privilege](https://www.cockroachlabs.com/docs/v23.2/security-reference/authorization#managing-privileges) is required to view the values of the per-virtual-cluster overrides for sensitive cluster settings. [#117729][#117729]
+- The [DB Console]({% link v23.2/ui-overview.md %}) `session` cookie is now marked `HttpOnly` to prevent it from being read by any JavaScript code. [#119249][#119249]
+- [DB Console]({% link v23.2/ui-overview.md %}) cookies are marked `Secure` for the browser when the cluster is running in secure mode. [#119249][#119249]
General changes
@@ -19,53 +19,53 @@ Release Date: February 20, 2024
-- Added a new [SQL function](https://www.cockroachlabs.com/docs/v23.2/functions-and-operators) `fips_ready`, which can be used to verify the [FIPS](https://www.cockroachlabs.com/docs/v23.2/fips) readiness of the [gateway node](https://www.cockroachlabs.com/docs/v23.2/architecture/life-of-a-distributed-transaction#gateway). [#115202][#115202]
-- [Physical Cluster Replication (PCR)](https://www.cockroachlabs.com/docs/v23.2/physical-cluster-replication-overview) now retries for approximately 3 minutes before failing. This is increased from 20 µs. [#116402][#116402]
-- Fixed a bug where [changefeeds](https://www.cockroachlabs.com/docs/v23.2/create-and-configure-changefeeds) that targeted schema-locked tables could fail due to a very old highwater timestamp being incorrectly persisted. [#117961][#117961]
-- Fixed a bug where creating a [changefeed](https://www.cockroachlabs.com/docs/v23.2/create-and-configure-changefeeds) that targeted tables with a [`DECIMAL(n)`](https://www.cockroachlabs.com/docs/v23.2/decimal) column (i.e., zero-scale `DECIMAL` column), `format='avro'`, and `diff` would cause a panic. [#118895][#118895]
+- Added a new [SQL function]({% link v23.2/functions-and-operators.md %}) `fips_ready`, which can be used to verify the [FIPS]({% link v23.2/fips.md %}) readiness of the [gateway node](https://www.cockroachlabs.com/docs/v23.2/architecture/life-of-a-distributed-transaction#gateway). [#115202][#115202]
+- [Physical Cluster Replication (PCR)]({% link v23.2/physical-cluster-replication-overview.md %}) now retries for approximately 3 minutes before failing. This is increased from 20 µs. [#116402][#116402]
+- Fixed a bug where [changefeeds]({% link v23.2/create-and-configure-changefeeds.md %}) that targeted schema-locked tables could fail due to a very old highwater timestamp being incorrectly persisted. [#117961][#117961]
+- Fixed a bug where creating a [changefeed]({% link v23.2/create-and-configure-changefeeds.md %}) that targeted tables with a [`DECIMAL(n)`]({% link v23.2/decimal.md %}) column (i.e., zero-scale `DECIMAL` column), `format='avro'`, and `diff` would cause a panic. [#118895][#118895]
SQL language changes
-- Added the `sql.ttl.default_select_rate_limit` [cluster setting](https://www.cockroachlabs.com/docs/v23.2/cluster-settings) and the `ttl_select_rate_limit` table [storage parameter](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl#ttl-storage-parameters) to set the [TTL](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl) select rate limit. This sets the number of records per table per second per node that can be selected by the [TTL job](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl#view-scheduled-ttl-jobs). [#115801][#115801]
-- Fixed a bug in [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) where altering the name of a [sequence](https://www.cockroachlabs.com/docs/v23.2/create-sequence) or [user-defined type (UDT)](https://www.cockroachlabs.com/docs/v23.2/create-type) that was used in a PL/pgSQL [function](https://www.cockroachlabs.com/docs/v23.2/user-defined-functions) or [procedure](https://www.cockroachlabs.com/docs/v23.2/stored-procedures) could break them. This bug was only present in v23.2 alpha and beta releases. [#116419][#116419]
-- Added support for [`IMPORT INTO`](https://www.cockroachlabs.com/docs/v23.2/import-into) on a table that has columns typed as [arrays](https://www.cockroachlabs.com/docs/v23.2/array) of [user-defined types](https://www.cockroachlabs.com/docs/v23.2/create-type) (like [enums](https://www.cockroachlabs.com/docs/v23.2/enum)). Tables that use multiple user-defined types with the same name but different [schemas](https://www.cockroachlabs.com/docs/v23.2/create-schema) are still unsupported. [#116359][#116359]
-- The new [`SELECT FOR UPDATE`](https://www.cockroachlabs.com/docs/v23.2/select-for-update) implementation used under [Read Committed isolation](https://www.cockroachlabs.com/docs/v23.2/read-committed) (and under [Serializable isolation](https://www.cockroachlabs.com/docs/v23.2/demo-serializable) when the `optimizer_use_lock_op_for_serializable` [session variable](https://www.cockroachlabs.com/docs/v23.2/session-variables) is `true`) now locks all [column families](https://www.cockroachlabs.com/docs/v23.2/column-families) instead of only the first column family. [#116826][#116826]
-- Fixed a bug where [`SELECT FOR UPDATE`](https://www.cockroachlabs.com/docs/v23.2/select-for-update) under [Read Committed isolation](https://www.cockroachlabs.com/docs/v23.2/read-committed) on multi-column-family tables was not locking [column families](https://www.cockroachlabs.com/docs/v23.2/column-families) containing only key columns. [#116826][#116826]
-- It is now possible to run [`CALL`](https://www.cockroachlabs.com/docs/v23.2/call) statements with [`EXPLAIN`](https://www.cockroachlabs.com/docs/v23.2/explain). The `EXPLAIN (OPT)` variant will show the body of the procedure, while other variants will only show the procedure name and arguments. [#116274][#116274]
-- [`EXPLAIN`](https://www.cockroachlabs.com/docs/v23.2/explain) output now contains detailed information about the plans for `CASCADE` actions. [#117719][#117719]
+- Added the `sql.ttl.default_select_rate_limit` [cluster setting]({% link v23.2/cluster-settings.md %}) and the `ttl_select_rate_limit` table [storage parameter]({% link v23.2/row-level-ttl.md %}#ttl-storage-parameters) to set the [TTL]({% link v23.2/row-level-ttl.md %}) select rate limit. This sets the number of records per table per second per node that can be selected by the [TTL job]({% link v23.2/row-level-ttl.md %}#view-scheduled-ttl-jobs). [#115801][#115801]
+- Fixed a bug in [PL/pgSQL]({% link v23.2/plpgsql.md %}) where altering the name of a [sequence]({% link v23.2/create-sequence.md %}) or [user-defined type (UDT)]({% link v23.2/create-type.md %}) that was used in a PL/pgSQL [function]({% link v23.2/user-defined-functions.md %}) or [procedure]({% link v23.2/stored-procedures.md %}) could break them. This bug was only present in v23.2 alpha and beta releases. [#116419][#116419]
+- Added support for [`IMPORT INTO`]({% link v23.2/import-into.md %}) on a table that has columns typed as [arrays]({% link v23.2/array.md %}) of [user-defined types]({% link v23.2/create-type.md %}) (like [enums]({% link v23.2/enum.md %})). Tables that use multiple user-defined types with the same name but different [schemas]({% link v23.2/create-schema.md %}) are still unsupported. [#116359][#116359]
+- The new [`SELECT FOR UPDATE`]({% link v23.2/select-for-update.md %}) implementation used under [Read Committed isolation]({% link v23.2/read-committed.md %}) (and under [Serializable isolation]({% link v23.2/demo-serializable.md %}) when the `optimizer_use_lock_op_for_serializable` [session variable]({% link v23.2/session-variables.md %}) is `true`) now locks all [column families]({% link v23.2/column-families.md %}) instead of only the first column family. [#116826][#116826]
+- Fixed a bug where [`SELECT FOR UPDATE`]({% link v23.2/select-for-update.md %}) under [Read Committed isolation]({% link v23.2/read-committed.md %}) on multi-column-family tables was not locking [column families]({% link v23.2/column-families.md %}) containing only key columns. [#116826][#116826]
+- It is now possible to run [`CALL`]({% link v23.2/call.md %}) statements with [`EXPLAIN`]({% link v23.2/explain.md %}). The `EXPLAIN (OPT)` variant will show the body of the procedure, while other variants will only show the procedure name and arguments. [#116274][#116274]
+- [`EXPLAIN`]({% link v23.2/explain.md %}) output now contains detailed information about the plans for `CASCADE` actions. [#117719][#117719]
Operational changes
-- Per-node [hot ranges](https://www.cockroachlabs.com/docs/v23.2/ui-hot-ranges-page) logging now logs the top 5 hot ranges on the local node instead of the top 5 hot ranges cluster-wide. [#118334][#118334]
+- Per-node [hot ranges]({% link v23.2/ui-hot-ranges-page.md %}) logging now logs the top 5 hot ranges on the local node instead of the top 5 hot ranges cluster-wide. [#118334][#118334]
Command-line changes
-- Added a new command `cockroach debug enterprise-check-fips`, which diagnoses errors in [FIPS](https://www.cockroachlabs.com/docs/v23.2/fips) deployments. [#115202][#115202]
-- The new flag `--enterprise-require-fips-ready` can be added to any [`cockroach` command](https://www.cockroachlabs.com/docs/v23.2/cockroach-commands) to prevent startup if certain prerequisites for [FIPS](https://www.cockroachlabs.com/docs/v23.2/fips) compliance are not met. [#115202][#115202]
-- [`cockroach workload`](https://www.cockroachlabs.com/docs/v23.2/cockroach-workload) commands now appropriately invoke `.Close` in the case of an error. [#116487][#116487]
+- Added a new command `cockroach debug enterprise-check-fips`, which diagnoses errors in [FIPS]({% link v23.2/fips.md %}) deployments. [#115202][#115202]
+- The new flag `--enterprise-require-fips-ready` can be added to any [`cockroach` command]({% link v23.2/cockroach-commands.md %}) to prevent startup if certain prerequisites for [FIPS]({% link v23.2/fips.md %}) compliance are not met. [#115202][#115202]
+- [`cockroach workload`]({% link v23.2/cockroach-workload.md %}) commands now appropriately invoke `.Close` in the case of an error. [#116487][#116487]
DB Console changes
-- Updated the "CPU Time" label on the [Runtime Dashboard](https://www.cockroachlabs.com/docs/v23.2/ui-runtime-dashboard) to "SQL CPU Time" and added clarifications to its tooltip. [#116449][#116449]
-- [Statement bundles](https://www.cockroachlabs.com/docs/v23.2/ui-statements-page#diagnostics) are now enabled for Serverless clusters. [#117529][#117529]
-- The [Networking Dashboard](https://www.cockroachlabs.com/docs/v23.2/ui-networking-dashboard) is enhanced with charts that visualize number of packets received, number of receiving packets with error, number of receiving packets that got dropped, number of packets sent, number of sending packets with error, and number of sending packets that got dropped. [#116712][#116712]
-- The [Explain Plans](https://www.cockroachlabs.com/docs/v23.2/ui-statements-page#explain-plans) tab is now shown for the [Statements](https://www.cockroachlabs.com/docs/v23.2/ui-statements-page) and [Insights](https://www.cockroachlabs.com/docs/v23.2/ui-insights-page) pages, for Serverless clusters. [#118169][#118169]
+- Updated the "CPU Time" label on the [Runtime Dashboard]({% link v23.2/ui-runtime-dashboard.md %}) to "SQL CPU Time" and added clarifications to its tooltip. [#116449][#116449]
+- [Statement bundles]({% link v23.2/ui-statements-page.md %}#diagnostics) are now enabled for Serverless clusters. [#117529][#117529]
+- The [Networking Dashboard]({% link v23.2/ui-networking-dashboard.md %}) is enhanced with charts that visualize number of packets received, number of receiving packets with error, number of receiving packets that got dropped, number of packets sent, number of sending packets with error, and number of sending packets that got dropped. [#116712][#116712]
+- The [Explain Plans]({% link v23.2/ui-statements-page.md %}#explain-plans) tab is now shown for the [Statements]({% link v23.2/ui-statements-page.md %}) and [Insights]({% link v23.2/ui-insights-page.md %}) pages, for Serverless clusters. [#118169][#118169]
Bug fixes
-- Fixed a durability bug in [Raft log](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) storage, caused by incorrect syncing of filesystem metadata. Previously, it was possible to lose writes of a particular kind (`AddSSTable`) that were used by e.g. [`RESTORE`](https://www.cockroachlabs.com/docs/v23.2/restore). This loss was possible only under power-off or operating system crash conditions. Under such conditions, CockroachDB could enter a crash loop on node restart. In the worst case of a coordinated power-off/crash across multiple nodes this could lead to an unrecoverable loss of [Raft quorum](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft). [#115709][#115709]
-- Fixed a bug where large [jobs](https://www.cockroachlabs.com/docs/v23.2/show-jobs) running with execution locality (such as some [changefeeds](https://www.cockroachlabs.com/docs/v23.2/changefeeds-in-multi-region-deployments#run-a-changefeed-job-by-locality)) could result in the [gateway](https://www.cockroachlabs.com/docs/v23.2/architecture/life-of-a-distributed-transaction#gateway) node being assigned most of the work, causing performance degradation and cluster instability. [#115388][#115388]
-- Fixed a bug that caused node crashes and panics when running [`INSERT`](https://www.cockroachlabs.com/docs/v23.2/insert) queries on [`REGIONAL BY ROW` tables with `UNIQUE` constraints or indexes](https://www.cockroachlabs.com/docs/v23.2/alter-table#add-a-unique-index-to-a-regional-by-row-table). The bug was only present in v23.2.0-beta.1. [#115668][#115668]
-- Fixed a bug that existed only in v23.2 alpha and beta versions that could have caused side effects to happen out of order for [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) routines in rare cases. [#115839][#115839]
-- Fixed a bug that existed since v23.1 that prevented naming [user-defined type (UDT)](https://www.cockroachlabs.com/docs/v23.2/create-type) parameters when dropping a [user-defined function](https://www.cockroachlabs.com/docs/v23.2/user-defined-functions) (or procedure). [#115904][#115904]
-- Fixed a bug where [scheduled jobs](https://www.cockroachlabs.com/docs/v23.2/show-schedules) using [external storage providers](https://www.cockroachlabs.com/docs/v23.2/create-external-connection) could fail shortly after node startup. [#115693][#115693]
-- Locking tables (e.g., with [`SELECT FOR UPDATE`](https://www.cockroachlabs.com/docs/v23.2/select-for-update)) on the null-extended side of [outer joins](https://www.cockroachlabs.com/docs/v23.2/joins) (e.g., the right side of a `LEFT JOIN`) is now disallowed and returns an error. This improves compatibility with PostgreSQL and prevents ambiguity in [locking semantics](https://www.cockroachlabs.com/docs/v23.2/architecture/transaction-layer#concurrency-control). This bug has existed since locking with `FOR UPDATE` was introduced. [#115878][#115878]
-- Fixed a display bug in the [DB Console](https://www.cockroachlabs.com/docs/v23.2/ui-overview) where because not all types of [schema changes](https://www.cockroachlabs.com/docs/v23.2/online-schema-changes) are setting the value for the mutation ID, the value of the ID could previously show as "with ID undefined" on the [Events panel](https://www.cockroachlabs.com/docs/v23.2/ui-overview-dashboard#events-panel). Now, the notification omits the undefined value (the rest of the event notification is still displayed). [#116518][#116518]
-- Fixed the formatting for [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) routines, which could prevent creating a routine with [loop labels](https://www.cockroachlabs.com/docs/v23.2/create-procedure#create-a-stored-procedure-that-uses-a-while-loop), and could prevent some expressions from being [redacted](https://www.cockroachlabs.com/docs/v23.2/configure-logs#redact-logs) correctly. The bug only existed in v23.2 alpha and beta releases. [#116713][#116713]
-- Fixed a bug that would cause a syntax error during [redaction](https://www.cockroachlabs.com/docs/v23.2/configure-logs#redact-logs) of a [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) routine. The bug existed only in v23.2 alpha and beta releases. [#116713][#116713]
-- Fixed a bug that would cause syntax errors when attempting to [`RESTORE`](https://www.cockroachlabs.com/docs/v23.2/restore) a database with [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) [user-defined functions (UDFs)](https://www.cockroachlabs.com/docs/v23.2/user-defined-functions) or [stored procedures](https://www.cockroachlabs.com/docs/v23.2/stored-procedures). This bug only affected v23.2 alpha and beta releases. [#116713][#116713]
-- [`UPDATE`](https://www.cockroachlabs.com/docs/v23.2/update), [`UPSERT`](https://www.cockroachlabs.com/docs/v23.2/upsert), and [`INSERT ON CONFLICT`](https://www.cockroachlabs.com/docs/v23.2/insert#on-conflict-clause) queries are now disallowed under [Read Committed isolation](https://www.cockroachlabs.com/docs/v23.2/read-committed) when the table contains a [check constraint](https://www.cockroachlabs.com/docs/v23.2/check) involving a [column family](https://www.cockroachlabs.com/docs/v23.2/column-families) that is updated, and the check constraint also involves a column family that is **not** updated, but **is** read. This is a temporary fix to prevent possible violation of the check constraint, and the restriction will be lifted in the future. [#116428][#116428]
-- Previously, all `AggHistogram`-powered metrics were not reporting quantiles properly in the [DB Console](https://www.cockroachlabs.com/docs/v23.2/ui-overview). This patch fixes the histograms so that the quantiles in DB Console are reported correctly. these histograms were only broken in the [DB Console metrics dashboards](https://www.cockroachlabs.com/docs/v23.2/ui-overview-dashboard), but were **not** broken in the [Prometheus-compatible endpoint](https://www.cockroachlabs.com/docs/v23.2/monitoring-and-alerting#prometheus-endpoint), `/_status/vars`. The list of affected metrics is shown below. [#114506][#114506]
+- Fixed a durability bug in [Raft log](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) storage, caused by incorrect syncing of filesystem metadata. Previously, it was possible to lose writes of a particular kind (`AddSSTable`) that were used by e.g. [`RESTORE`]({% link v23.2/restore.md %}). This loss was possible only under power-off or operating system crash conditions. Under such conditions, CockroachDB could enter a crash loop on node restart. In the worst case of a coordinated power-off/crash across multiple nodes this could lead to an unrecoverable loss of [Raft quorum](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft). [#115709][#115709]
+- Fixed a bug where large [jobs]({% link v23.2/show-jobs.md %}) running with execution locality (such as some [changefeeds]({% link v23.2/changefeeds-in-multi-region-deployments.md %}#run-a-changefeed-job-by-locality)) could result in the [gateway](https://www.cockroachlabs.com/docs/v23.2/architecture/life-of-a-distributed-transaction#gateway) node being assigned most of the work, causing performance degradation and cluster instability. [#115388][#115388]
+- Fixed a bug that caused node crashes and panics when running [`INSERT`]({% link v23.2/insert.md %}) queries on [`REGIONAL BY ROW` tables with `UNIQUE` constraints or indexes]({% link v23.2/alter-table.md %}#add-a-unique-index-to-a-regional-by-row-table). The bug was only present in v23.2.0-beta.1. [#115668][#115668]
+- Fixed a bug that existed only in v23.2 alpha and beta versions that could have caused side effects to happen out of order for [PL/pgSQL]({% link v23.2/plpgsql.md %}) routines in rare cases. [#115839][#115839]
+- Fixed a bug that existed since v23.1 that prevented naming [user-defined type (UDT)]({% link v23.2/create-type.md %}) parameters when dropping a [user-defined function]({% link v23.2/user-defined-functions.md %}) (or procedure). [#115904][#115904]
+- Fixed a bug where [scheduled jobs]({% link v23.2/show-schedules.md %}) using [external storage providers]({% link v23.2/create-external-connection.md %}) could fail shortly after node startup. [#115693][#115693]
+- Locking tables (e.g., with [`SELECT FOR UPDATE`]({% link v23.2/select-for-update.md %})) on the null-extended side of [outer joins]({% link v23.2/joins.md %}) (e.g., the right side of a `LEFT JOIN`) is now disallowed and returns an error. This improves compatibility with PostgreSQL and prevents ambiguity in [locking semantics](https://www.cockroachlabs.com/docs/v23.2/architecture/transaction-layer#concurrency-control). This bug has existed since locking with `FOR UPDATE` was introduced. [#115878][#115878]
+- Fixed a display bug in the [DB Console]({% link v23.2/ui-overview.md %}) where because not all types of [schema changes]({% link v23.2/online-schema-changes.md %}) are setting the value for the mutation ID, the value of the ID could previously show as "with ID undefined" on the [Events panel]({% link v23.2/ui-overview-dashboard.md %}#events-panel). Now, the notification omits the undefined value (the rest of the event notification is still displayed). [#116518][#116518]
+- Fixed the formatting for [PL/pgSQL]({% link v23.2/plpgsql.md %}) routines, which could prevent creating a routine with [loop labels]({% link v23.2/create-procedure.md %}#create-a-stored-procedure-that-uses-a-while-loop), and could prevent some expressions from being [redacted]({% link v23.2/configure-logs.md %}#redact-logs) correctly. The bug only existed in v23.2 alpha and beta releases. [#116713][#116713]
+- Fixed a bug that would cause a syntax error during [redaction]({% link v23.2/configure-logs.md %}#redact-logs) of a [PL/pgSQL]({% link v23.2/plpgsql.md %}) routine. The bug existed only in v23.2 alpha and beta releases. [#116713][#116713]
+- Fixed a bug that would cause syntax errors when attempting to [`RESTORE`]({% link v23.2/restore.md %}) a database with [PL/pgSQL]({% link v23.2/plpgsql.md %}) [user-defined functions (UDFs)]({% link v23.2/user-defined-functions.md %}) or [stored procedures]({% link v23.2/stored-procedures.md %}). This bug only affected v23.2 alpha and beta releases. [#116713][#116713]
+- [`UPDATE`]({% link v23.2/update.md %}), [`UPSERT`]({% link v23.2/upsert.md %}), and [`INSERT ON CONFLICT`]({% link v23.2/insert.md %}#on-conflict-clause) queries are now disallowed under [Read Committed isolation]({% link v23.2/read-committed.md %}) when the table contains a [check constraint]({% link v23.2/check.md %}) involving a [column family]({% link v23.2/column-families.md %}) that is updated, and the check constraint also involves a column family that is **not** updated, but **is** read. This is a temporary fix to prevent possible violation of the check constraint, and the restriction will be lifted in the future. [#116428][#116428]
+- Previously, all `AggHistogram`-powered metrics were not reporting quantiles properly in the [DB Console]({% link v23.2/ui-overview.md %}). This patch fixes the histograms so that the quantiles in DB Console are reported correctly. these histograms were only broken in the [DB Console metrics dashboards]({% link v23.2/ui-overview-dashboard.md %}), but were **not** broken in the [Prometheus-compatible endpoint]({% link v23.2/monitoring-and-alerting.md %}#prometheus-endpoint), `/_status/vars`. The list of affected metrics is shown below. [#114506][#114506]
- `changefeed.message_size_hist`
- `changefeed.parallel_io_queue_nanos`
- `changefeed.sink_batch_hist_nanos`
@@ -75,30 +75,30 @@ Release Date: February 20, 2024
- `jobs.row_level_ttl.span_total_duration`
- `jobs.row_level_ttl.select_duration`
- `jobs.row_level_ttl.delete_duration`
-- Fixed a bug introduced in v23.2 that caused internal errors and panics when certain SQL queries were run with automatic [index recommendation](https://www.cockroachlabs.com/docs/v23.2/ui-databases-page#index-recommendations) collection enabled. [#117453][#117453]
-- [Standard indexes](https://www.cockroachlabs.com/docs/v23.2/indexes) and [inverted indexes](https://www.cockroachlabs.com/docs/v23.2/inverted-indexes) may no longer be created on [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) `REFCURSOR[]`s columns. `REFCURSOR` columns themselves are not indexable. [#116071][#116071]
-- Fixed a bug that prevented database [`RESTORE`](https://www.cockroachlabs.com/docs/v23.2/restore) when the database contained a [view](https://www.cockroachlabs.com/docs/v23.2/views) or [routine](https://www.cockroachlabs.com/docs/v23.2/create-procedure) that referenced a [user-defined type (UDT)](https://www.cockroachlabs.com/docs/v23.2/create-type) in the body string. For views, this bug was introduced in v20.2, when [user-defined types (UDTs)](https://www.cockroachlabs.com/docs/v23.2/create-type) were introduced. For routines, this bug was introduced in v22.2, when user-defined functions (UDFs) were introduced. [#116841][#116841]
-- Fixed a bug that could cause a function resolution error when attempting to use a [builtin function](https://www.cockroachlabs.com/docs/v23.2/functions-and-operators) like `now()` as a formatting argument to a [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) `RAISE` statement. [#116825][#116825]
-- Fixed a bug where CDC custom key columns did not function correctly with [CDC queries](https://www.cockroachlabs.com/docs/v23.2/create-and-configure-changefeeds). For example, `CREATE CHANGEFEED WITH key_column=..., unordered AS SELECT * FROM table` now works correctly instead of retrying forever. Note that some functionalities with CDC custom keys are not fully supported, see [#115267][#115267] for more details. [#116967][#116967]
-- Fixed a bug in [Raft log](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) truncation that could lead to crash loops, and unrecoverable loss of [quorum](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) in the unlikely worst case that all [replicas](https://www.cockroachlabs.com/docs/v23.2/architecture/overview#architecture-replica) enter this crash loop. The bug manifested when a few things coincided: The cluster was running a bulk write workload (e.g., [schema change](https://www.cockroachlabs.com/docs/v23.2/online-schema-changes), [import](https://www.cockroachlabs.com/docs/v23.2/copy), [`RESTORE`](https://www.cockroachlabs.com/docs/v23.2/restore)); a log truncation command was running; and the process crashed at an unfortunate moment (e.g., the process was killed, or killed itself for reasons like detecting a [disk stall](https://www.cockroachlabs.com/docs/v23.2/cluster-setup-troubleshooting#disk-stalls)). [#116574][#116574]
-- Fixed the value used for the total runtime on SQL statistics. This was using the wrong value previously, causing the [SQL Activity](https://www.cockroachlabs.com/docs/v23.2/ui-overview#sql-activity) page to display values with more than 100%. [#117426][#117426]
-- Fixed a bug where trying to set an empty `search_path` [session variable](https://www.cockroachlabs.com/docs/v23.2/session-variables) resulted in an error. [#117557][#117557]
-- It is now possible to assign to the parameter of a [PL/pgSQL](https://www.cockroachlabs.com/docs/v23.2/plpgsql) [routine](https://www.cockroachlabs.com/docs/v23.2/create-procedure). Previously, attempts to do this would result in a "variable not found" error at routine creation time. In addition, variable shadowing is now explicitly disabled, where previously it would cause an internal error. These bugs existed in the v23.2.0 release and the v23.2 pre-release versions. [#117715][#117715]
-- Fixed a bug in the [row-level TTL](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl) [job](https://www.cockroachlabs.com/docs/v23.2/show-schedules) that would cause it to skip expired rows if the [primary key](https://www.cockroachlabs.com/docs/v23.2/primary-key) of the table included columns of the [collated string](https://www.cockroachlabs.com/docs/v23.2/collate) type. This bug was present since the initial release of row-level TTL in v22.2.0. [#117512][#117512]
-- Fixed a bug where concurrent [`GRANT`](https://www.cockroachlabs.com/docs/v23.2/grant) statements can cause deadlocks. [#117713][#117713]
-- CockroachDB can now transparently retry more retryable errors when performing a non-atomic [`COPY`](https://www.cockroachlabs.com/docs/v23.2/copy-from) command. [#117895][#117895]
-- Fixed a bug that caused [DML statements](https://www.cockroachlabs.com/docs/v23.2/performance-best-practices-overview#dml-best-practices) to fail while a [hash-sharded index](https://www.cockroachlabs.com/docs/v23.2/hash-sharded-indexes) was being created. The symptom of this bug was an error like `column "crdb_internal_val_shard_16" does not exist`. This bug was present since v23.1.0. [#118215][#118215]
-- Previously, CockroachDB could encounter the error `unable to encode table key: *tree.DTSQuery` when operating on columns with the internal `TSQuery` type in some contexts (e.g., when collecting [table statistics](https://www.cockroachlabs.com/docs/v23.2/cost-based-optimizer#table-statistics) or when performing a [`DISTINCT` operation](https://www.cockroachlabs.com/docs/v23.2/select-clause#eliminate-duplicate-rows)). This is now fixed. The bug had been present since v23.1 when support for the internal `TSQuery` type was added. [#118321][#118321]
-- Previously, in some cases CockroachDB could incorrectly evaluate queries that scanned an [inverted index](https://www.cockroachlabs.com/docs/v23.2/inverted-indexes) and had a [`WHERE` filter](https://www.cockroachlabs.com/docs/v23.2/select-clause#where-clause) in which two sides of the `AND` expression had "similar" expressions (e.g., `ARRAY['str1'] <@ col AND (ARRAY['str1'] && col OR ...)`); this is now fixed. The bug had been present since prior to v22.2. [#118360][#118360]
-- Fixed a bug that could cause [`DELETE`](https://www.cockroachlabs.com/docs/v23.2/delete) queries sent by the [row-level TTL](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl) [job](https://www.cockroachlabs.com/docs/v23.2/show-schedules) to use a [secondary index](https://www.cockroachlabs.com/docs/v23.2/indexes) rather than the [primary index](https://www.cockroachlabs.com/docs/v23.2/primary-key) to find the rows to delete. This could lead to some `DELETE` operations taking a much longer time than they should. This bug was present since v22.2.0. [#118337][#118337]
-- Fixed an issue with missing data on SQL statistics, and consequently missing data on the [SQL Activity page](https://www.cockroachlabs.com/docs/v23.2/ui-overview#sql-activity), by properly recalculating the value from the current and past hour on the top activity table. [#118378][#118378]
-- Internal queries issued by the [row-level TTL](https://www.cockroachlabs.com/docs/v23.2/row-level-ttl) [jobs](https://www.cockroachlabs.com/docs/v23.2/show-schedules) should now use optimal plans. The bug has been present since at least v22.2. [#118494][#118494]
+- Fixed a bug introduced in v23.2 that caused internal errors and panics when certain SQL queries were run with automatic [index recommendation]({% link v23.2/ui-databases-page.md %}#index-recommendations) collection enabled. [#117453][#117453]
+- [Standard indexes]({% link v23.2/indexes.md %}) and [inverted indexes]({% link v23.2/inverted-indexes.md %}) may no longer be created on [PL/pgSQL]({% link v23.2/plpgsql.md %}) `REFCURSOR[]`s columns. `REFCURSOR` columns themselves are not indexable. [#116071][#116071]
+- Fixed a bug that prevented database [`RESTORE`]({% link v23.2/restore.md %}) when the database contained a [view]({% link v23.2/views.md %}) or [routine]({% link v23.2/create-procedure.md %}) that referenced a [user-defined type (UDT)]({% link v23.2/create-type.md %}) in the body string. For views, this bug was introduced in v20.2, when [user-defined types (UDTs)]({% link v23.2/create-type.md %}) were introduced. For routines, this bug was introduced in v22.2, when user-defined functions (UDFs) were introduced. [#116841][#116841]
+- Fixed a bug that could cause a function resolution error when attempting to use a [builtin function]({% link v23.2/functions-and-operators.md %}) like `now()` as a formatting argument to a [PL/pgSQL]({% link v23.2/plpgsql.md %}) `RAISE` statement. [#116825][#116825]
+- Fixed a bug where CDC custom key columns did not function correctly with [CDC queries]({% link v23.2/create-and-configure-changefeeds.md %}). For example, `CREATE CHANGEFEED WITH key_column=..., unordered AS SELECT * FROM table` now works correctly instead of retrying forever. Note that some functionalities with CDC custom keys are not fully supported, see [#115267][#115267] for more details. [#116967][#116967]
+- Fixed a bug in [Raft log](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) truncation that could lead to crash loops, and unrecoverable loss of [quorum](https://www.cockroachlabs.com/docs/v23.2/architecture/replication-layer#raft) in the unlikely worst case that all [replicas](https://www.cockroachlabs.com/docs/v23.2/architecture/overview#architecture-replica) enter this crash loop. The bug manifested when a few things coincided: The cluster was running a bulk write workload (e.g., [schema change]({% link v23.2/online-schema-changes.md %}), [import]({% link v23.2/copy-from.md %}), [`RESTORE`]({% link v23.2/restore.md %})); a log truncation command was running; and the process crashed at an unfortunate moment (e.g., the process was killed, or killed itself for reasons like detecting a [disk stall]({% link v23.2/cluster-setup-troubleshooting.md %}#disk-stalls)). [#116574][#116574]
+- Fixed the value used for the total runtime on SQL statistics. This was using the wrong value previously, causing the [SQL Activity]({% link v23.2/ui-overview.md %}#sql-activity) page to display values with more than 100%. [#117426][#117426]
+- Fixed a bug where trying to set an empty `search_path` [session variable]({% link v23.2/session-variables.md %}) resulted in an error. [#117557][#117557]
+- It is now possible to assign to the parameter of a [PL/pgSQL]({% link v23.2/plpgsql.md %}) [routine]({% link v23.2/create-procedure.md %}). Previously, attempts to do this would result in a "variable not found" error at routine creation time. In addition, variable shadowing is now explicitly disabled, where previously it would cause an internal error. These bugs existed in the v23.2.0 release and the v23.2 pre-release versions. [#117715][#117715]
+- Fixed a bug in the [row-level TTL]({% link v23.2/row-level-ttl.md %}) [job]({% link v23.2/show-schedules.md %}) that would cause it to skip expired rows if the [primary key]({% link v23.2/primary-key.md %}) of the table included columns of the [collated string]({% link v23.2/collate.md %}) type. This bug was present since the initial release of row-level TTL in v22.2.0. [#117512][#117512]
+- Fixed a bug where concurrent [`GRANT`]({% link v23.2/grant.md %}) statements can cause deadlocks. [#117713][#117713]
+- CockroachDB can now transparently retry more retryable errors when performing a non-atomic [`COPY`]({% link v23.2/copy-from.md %}) command. [#117895][#117895]
+- Fixed a bug that caused [DML statements]({% link v23.2/performance-best-practices-overview.md %}#dml-best-practices) to fail while a [hash-sharded index]({% link v23.2/hash-sharded-indexes.md %}) was being created. The symptom of this bug was an error like `column "crdb_internal_val_shard_16" does not exist`. This bug was present since v23.1.0. [#118215][#118215]
+- Previously, CockroachDB could encounter the error `unable to encode table key: *tree.DTSQuery` when operating on columns with the internal `TSQuery` type in some contexts (e.g., when collecting [table statistics]({% link v23.2/cost-based-optimizer.md %}#table-statistics) or when performing a [`DISTINCT` operation]({% link v23.2/select-clause.md %}#eliminate-duplicate-rows)). This is now fixed. The bug had been present since v23.1 when support for the internal `TSQuery` type was added. [#118321][#118321]
+- Previously, in some cases CockroachDB could incorrectly evaluate queries that scanned an [inverted index]({% link v23.2/inverted-indexes.md %}) and had a [`WHERE` filter]({% link v23.2/select-clause.md %}#where-clause) in which two sides of the `AND` expression had "similar" expressions (e.g., `ARRAY['str1'] <@ col AND (ARRAY['str1'] && col OR ...)`); this is now fixed. The bug had been present since prior to v22.2. [#118360][#118360]
+- Fixed a bug that could cause [`DELETE`]({% link v23.2/delete.md %}) queries sent by the [row-level TTL]({% link v23.2/row-level-ttl.md %}) [job]({% link v23.2/show-schedules.md %}) to use a [secondary index]({% link v23.2/indexes.md %}) rather than the [primary index]({% link v23.2/primary-key.md %}) to find the rows to delete. This could lead to some `DELETE` operations taking a much longer time than they should. This bug was present since v22.2.0. [#118337][#118337]
+- Fixed an issue with missing data on SQL statistics, and consequently missing data on the [SQL Activity page]({% link v23.2/ui-overview.md %}#sql-activity), by properly recalculating the value from the current and past hour on the top activity table. [#118378][#118378]
+- Internal queries issued by the [row-level TTL]({% link v23.2/row-level-ttl.md %}) [jobs]({% link v23.2/show-schedules.md %}) should now use optimal plans. The bug has been present since at least v22.2. [#118494][#118494]
- Fixed a bug where a [changefeed](https://www.cockroachlabs.com/docs/v23.2/change-data-capture-overview.html) could omit events in rare cases, logging the error `cdc ux violation: detected timestamp ... that is less or equal to the local frontier`. This could happen in the following scenario:
1. A [rangefeed](https://www.cockroachlabs.com/docs/v23.2/create-and-configure-changefeeds.html#enable-rangefeeds) runs on a follower [replica](https://www.cockroachlabs.com/docs/v23.2/architecture/glossary#cockroachdb-architecture-terms) that lags significantly behind the [leaseholder](https://www.cockroachlabs.com/docs/v23.2/architecture/glossary#cockroachdb-architecture-terms).
1. A transaction commits and removes its [transaction record](https://www.cockroachlabs.com/docs/v23.2/architecture/transaction-layer#transaction-records) before its [intent](https://www.cockroachlabs.com/docs/v23.2/architecture/transaction-layer#writing) resolution is applied on the follower.
1. The follower's [closed timestamp](https://www.cockroachlabs.com/docs/v23.2/architecture/transaction-layer#closed-timestamps) has advanced past the transaction commit timestamp.
1. The rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began).
- 1. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the [changefeed](https://www.cockroachlabs.com/docs/v23.2/change-data-capture-overview#how-does-an-enterprise-changefeed-work) to drop these events entirely, never emitting them. [#118981][#118981]
+ 1. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the [changefeed]({% link v23.2/change-data-capture-overview.md %}) to drop these events entirely, never emitting them. [#118981][#118981]
diff --git a/src/current/_includes/releases/v23.2/v23.2.10.md b/src/current/_includes/releases/v23.2/v23.2.10.md
new file mode 100644
index 00000000000..9985f63dd23
--- /dev/null
+++ b/src/current/_includes/releases/v23.2/v23.2.10.md
@@ -0,0 +1,90 @@
+## v23.2.10
+
+Release Date: August 29, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
Security updates
+
+- URLs in the following SQL statements are now sanitized of any secrets, such as keys or passwords, before being written to [unredacted logs]({% link v23.2/configure-logs.md %}#redact-logs):
+ - [`ALTER BACKUP SCHEDULE`]({% link v23.2/alter-backup-schedule.md %})
+ - [`ALTER BACKUP`]({% link v23.2/alter-backup.md %})
+ - [`ALTER CHANGEFEED SET sink`]({% link v23.2/alter-changefeed.md %}#set-options-on-a-changefeed)
+ - [`BACKUP`]({% link v23.2/backup.md %})
+ - [`COPY`]({% link v23.2/copy-from.md %})
+ - [`CREATE CHANGEFEED`]({% link v23.2/create-changefeed.md %})
+ - [`CREATE EXTERNAL CONNECTION`]({% link v23.2/create-external-connection.md %})
+ - [`CREATE SCHEDULE FOR BACKUP`]({% link v23.2/create-schedule-for-backup.md %})
+ - [`CREATE SCHEDULE FOR CHANGEFEED`]({% link v23.2/create-schedule-for-changefeed.md %})
+ - [`EXPORT`]({% link v23.2/export.md %})
+ - [`IMPORT INTO`]({% link v23.2/import-into.md %})
+ - [`RESTORE`]({% link v23.2/restore.md %})
+ - [`SHOW BACKUPS`]({% link v23.2/show-backup.md %})
+ - [`SHOW BACKUP`]({% link v23.2/show-backup.md %}) [#127509][#127509]
+
+
+
+- Added a new [Kafka sink]({% link v23.2/changefeed-sinks.md %}#kafka) utilizing the `franz-go` library and our own `batching_sink` behind a [cluster setting]({% link v23.2/cluster-settings.md %}) (`changefeed.new_kafka_sink_enabled`, disabled by default). [#128048][#128048]
+- The v2 Kafka and Google Cloud Pub/Sub [changefeed sinks]({% link v23.2/changefeed-sinks.md %}) now display notices indicating the topics they will emit to. [#128459][#128459]
+
+
SQL language changes
+
+- Added the [`sql.auth.grant_option_for_owner.enabled` cluster setting]({% link v23.2/cluster-settings.md %}#setting-sql-auth-grant-option-for-owner-enabled). The default value is `true`, which results in behavior that matches the existing behavior of CockroachDB. When set to `false`, then the `GRANT OPTION` is not implcitly given to the owner of an object. The object owner still implicitly has all privileges on the object, just not the ability to grant them to other users. [#126958][#126958]
+- Fixed a bug where the `DISCARD` statement was disallowed when the [`default_transaction_read_only`]({% link v23.2/session-variables.md %}#default-transaction-read-only) session setting was set to `on`. [#127548][#127548]
+
+
DB Console changes
+
+- The [**Databases** and **Tables** pages]({% link v23.2/ui-databases-page.md %}) in the DB Console now show a loading state while loading information for databases and tables, including size and range counts. [#127709][#127709]
+- On the [**Databases** page]({% link v23.2/ui-databases-page.md %}) in the DB Console, table names will no longer appear with quotes around the schema and table name. [#127765][#127765]
+
+
Bug fixes
+
+- Fixed a bug causing gateway nodes to crash while executing [`INSERT`]({% link v23.2/insert.md %}) statements in [`REGIONAL BY ROW`]({% link v23.2/table-localities.md %}#regional-by-row-tables) tables. This bug had been present since v23.2. [#127276][#127276]
+- Fixed a bug where [dropping `ENUM` values]({% link v23.2/alter-type.md %}#drop-a-value-in-a-user-defined-type) that were referenced by [index expressions]({% link v23.2/expression-indexes.md %}) could fail with an error. [#127453][#127453]
+- Fixed a bug that caused a memory leak when executing SQL statements with comments, e.g., [`SELECT /* comment */ 1;`]({% link v23.2/select-clause.md %}). Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the SQL session. This bug had been present since v23.1. [#127758][#127758]
+- Fixed a memory leak that could occur when specifying a non-existent [virtual cluster]({% link v23.2/cluster-virtualization-overview.md %}) name in the connection string. [#128104][#128104]
+- Fixed a bug where [`CREATE INDEX IF NOT EXISTS`]({% link v23.2/create-index.md %}) would not correctly short-circuit if the given index already existed. [#128312][#128312]
+- Fixed a bug in overly eager syntax validation, which did not allow the `DESCENDING` clause for non-terminal columns of an [inverted index]({% link v23.2/inverted-indexes.md %}). Only the last column of an inverted index should be prevented from being `DESCENDING`, and this is now properly checked. [#128312][#128312]
+- Fixed a bug where an [index]({% link v23.2/indexes.md %}) could store a column in the primary index if that column had a mixed-case name. [#128312][#128312]
+- Fixed small memory leaks that would occur during [changefeed creation]({% link v23.2/create-changefeed.md %}). [#128048][#128048]
+- Setting or dropping a default value on a [computed column]({% link v23.2/computed-columns.md %}) is now blocked -- even for null defaults. Previously, setting or dropping a default value on a computed column was a no-op; now there will be an error message. [#128467][#128467]
+- Fixed a bug that could cause spurious user permission errors when multiple databases shared a common schema with a routine referencing a table. The bug had existed since [user-defined functions]({% link v23.2/user-defined-functions.md %}) were introduced in v22.2. [#126413][#126413]
+- Fixed a bug where a hash-sharded constraint could not be created if it referred to columns that had a backslash in the name. [#128676][#128676]
+- Fixed a bug where `TYPEDESC SCHEMA CHANGE` jobs could end up retrying forever if the descriptor targeted by them was already dropped. [#128461][#128461]
+- Fixed a bug in which the output of [`EXPLAIN (OPT, REDACT)`]({% link v23.2/explain.md %}) for various `CREATE` statements was not redacted. This bug had existed since [`EXPLAIN (REDACT)`]({% link v23.2/explain.md %}#parameters) was introduced in v23.1 and affects the following statements:
+ - `EXPLAIN (OPT, REDACT) CREATE TABLE`
+ - `EXPLAIN (OPT, REDACT) CREATE VIEW`
+ - `EXPLAIN (OPT, REDACT) CREATE FUNCTION` [#128488][#128488]
+
+
+
+
Contributors
+
+This release includes 80 merged PRs by 28 authors.
+
+
+
+- Internally issued queries that are not initiated within a [SQL session]({% link v23.2/show-sessions.md %}) no longer respect a [statement timeout]({% link v23.2/session-variables.md %}#statement-timeout). This includes: background [jobs]({% link v23.2/show-jobs.md %}), queries issued by the [DB Console]({% link v23.2/ui-overview.md %}) that perform introspection, and the [Cloud SQL shell]({% link cockroachcloud/sql-shell.md %}). [#130525][#130525]
+- Fixed a rare bug where a [lease transfer]({% link v23.2/architecture/replication-layer.md %}#leases) could lead to a `side-transport update saw closed timestamp regression` panic. The bug could occur when a node was [overloaded]({% link v23.2/ui-overload-dashboard.md %}) and failing to heartbeat its [node liveness]({% link v23.2/cluster-setup-troubleshooting.md %}#node-liveness-issues) record. [#130523][#130523]
+- Resolved a concerning [log]({% link v23.2/logging-overview.md %}) message: `expiration of liveness record ... is not greater than expiration of the previous lease ... after liveness heartbeat`. This message is no longer possible. [#130523][#130523]
+
+[#130523]: https://github.com/cockroachdb/cockroach/pull/130523
+[#130525]: https://github.com/cockroachdb/cockroach/pull/130525
\ No newline at end of file
diff --git a/src/current/_includes/releases/v23.2/v23.2.2.md b/src/current/_includes/releases/v23.2/v23.2.2.md
index 59485e3d30f..b4ebca52c21 100644
--- a/src/current/_includes/releases/v23.2/v23.2.2.md
+++ b/src/current/_includes/releases/v23.2/v23.2.2.md
@@ -6,7 +6,7 @@ Release Date: February 27, 2024
Bug fixes
-- Fixed a bug where [rangefeed](https://www.cockroachlabs.com/docs/v23.2/create-and-configure-changefeeds#enable-rangefeeds) resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a [range merge](https://www.cockroachlabs.com/docs/v23.2/architecture/distribution-layer#range-merges). This bug was introduced in v23.2.1. [#119558][#119558]
+- Fixed a bug where [rangefeed]({% link v23.2/create-and-configure-changefeeds.md %}#enable-rangefeeds) resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a [range merge](https://www.cockroachlabs.com/docs/v23.2/architecture/distribution-layer#range-merges). This bug was introduced in v23.2.1. [#119558][#119558]
diff --git a/src/current/_includes/releases/v23.2/v23.2.9.md b/src/current/_includes/releases/v23.2/v23.2.9.md
new file mode 100644
index 00000000000..e6df91ec36e
--- /dev/null
+++ b/src/current/_includes/releases/v23.2/v23.2.9.md
@@ -0,0 +1,75 @@
+## v23.2.9
+
+Release Date: August 1, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
SQL language changes
+
+- [`EXPLAIN ANALYZE`]({% link v23.2/explain-analyze.md %}) statements are now supported when executed via Cloud Console [SQL shell]({% link cockroachcloud/sql-shell.md %}). [#125562][#125562]
+- Added the [`sql.auth.grant_option_inheritance.enabled` cluster setting]({% link v23.2/cluster-settings.md %}#setting-sql-auth-grant-option-inheritance-enabled). The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with [`WITH GRANT OPTION`]({% link v23.2/grant.md %}) can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership. [#126298][#126298]
+
+
Operational changes
+
+- `crdb_internal.cluster_execution_insights.txt` and `crdb_internal.cluster_txn_execution_insights.txt` have been removed from the [debug zip]({% link v23.2/cockroach-debug-zip.md %}). These files contained cluster-wide insights for statements and transactions. Users can still rely on the [per-node execution]({% link v23.2/cockroach-debug-zip.md %}#files) insights in `crdb_internal.node_execution_insights.txt` and `crdb_internal.node_txn_execution_insights.txt`. [#125804][#125804]
+- Some debugging-only information about physical plans is no longer collected in the `system.job_info` table for [changefeeds]({% link v23.2/change-data-capture-overview.md %}), because it has the potential to grow very large. [#126097][#126097]
+- For the [TELEMETRY channel]({% link v23.2/logging.md %}#telemetry), TCL [`sampled_query`]({% link v23.2/eventlog.md %}#sampled_query) events will now be sampled at the rate specified by the setting [`sql.telemetry.query_sampling.max_event_frequency`]({% link v23.2/cluster-settings.md %}#setting-sql-telemetry-query-sampling-max-event-frequency), which is already used to limit the rate of sampling DML statements. [#126728][#126728]
+
+
Bug fixes
+
+- Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating [`INSERT`s]({% link v23.2/insert.md %}) into [`REGIONAL BY ROW`]({% link v23.2/alter-table.md %}#set-the-table-locality-to-regional-by-row) tables where the source was a [`VALUES`]({% link v23.2/selection-queries.md %}#values-clause) clause with a single row and at least one boolean expression. [#125504][#125504] [#126839][#126839]
+- Fixed a bug where a [`DROP ROLE`]({% link v23.2/drop-role.md %}) or [`DROP USER`]({% link v23.2/drop-user.md %}) command could leave references behind inside types, which could prevent subsequent [`SHOW GRANTS`]({% link v23.2/show-grants.md %}) commands from working. [#125806][#125806]
+- Fixed a bug that could lead to descriptors having privileges to roles that no longer exist. Added an automated clean up for [dropped roles]({% link v23.2/drop-role.md %}) inside descriptors. [#125806][#125806]
+- Fixed a bug where a change to a [user-defined type (UDT)]({% link v23.2/create-type.md %}) could cause queries against tables using that type to fail with an error message like: `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could occur either directly from an [`ALTER TYPE`]({% link v23.2/alter-type.md %}) statement or indirectly from an [`ALTER DATABASE ... ADD REGION`]({% link v23.2/alter-database.md %}#add-region) or [`ALTER DATABASE ... DROP REGION`]({% link v23.2/alter-database.md %}#drop-region) statement, which implicitly modifies the `crdb_internal_region` UDT. This bug had existed since UDTs were introduced in v20.2. [#125806][#125806]
+- Fixed a bug in which constant `LIKE` patterns containing certain sequences of backslashes did not become constrained scans. This bug has been present since v21.1.13 when support for building constrained scans from `LIKE` patterns containing backslashes was added. [#125538][#125538]
+- Fixed a bug introduced in alpha versions of v23.1 where calling a routine could result in an unexpected `function ... does not exist` error. The bug is triggered when the routine is called twice using the exact same SQL query, and either: (a) the routine has polymorphic arguments, or: (b) between the two calls, the routine is replaced by a routine with the same name and different parameters. [#123518][#123518]
+- Fixed the statistics estimation code in the [optimizer]({% link v23.2/cost-based-optimizer.md %}) so it does not use the empty histograms produced if [histogram collection]({% link v23.2/cost-based-optimizer.md %}#control-histogram-collection) has been disabled during stats collection due to excessive memory utilization. Now the optimizer will rely on distinct counts instead of the empty histograms and should produce better plans as a result. This bug has existed since v22.1. [#126156][#126156]
+- Fixed a bug in [`cockroach debug tsdump`]({% link v23.2/cockroach-debug-tsdump.md %}) where the command fails when a custom SQL port is used and the [`--format=raw`]({% link v23.2/cockroach-debug-tsdump.md %}#flags) flag is provided. [#126184][#126184]
+- Fixed a bug where a [user-defined function (UDF)]({% link v23.2/user-defined-functions.md %}) that shared a name with a [built-in function]({% link v23.2/functions-and-operators.md %}#built-in-functions) would not be resolved, even if the UDF had higher precedence according to the [`search_path`]({% link v23.2/sql-name-resolution.md %}#search-path) variable. [#126295][#126295]
+- Fixed a bug that caused [background jobs]({% link v23.2/show-jobs.md %}) to incorrectly respect a statement timeout. [#126819][#126819]
+- Fixed a bug where [`ALTER DATABASE ... DROP REGION`]({% link v23.2/alter-database.md %}#drop-region) could fail if any tables under the given database have [indexes on expressions]({% link v23.2/expression-indexes.md %}). [#126598][#126598]
+- Fixed a bug when [restoring]({% link v23.2/restore.md %}) a database with a [composite type]({% link v23.2/create-type.md %}#create-a-composite-data-type). [#126841][#126841]
+- Fixed a bug when inputting `public` role as user name for [built-in compatibility functions]({% link v24.2/functions-and-operators.md %}#compatibility-functions), such as `has_database_privilege` and `has_schema_privilege`. [#126852][#126852]
+- Fixed a bug where the [Database page]({% link v23.2/ui-databases-page.md %}) could crash if range information is not available. [#127091][#127091]
+- Fixed a bug where CockroachDB could incorrectly evaluate an [`IS NOT NULL`]({% link v23.2/null-handling.md %}#nulls-and-simple-comparisons) filter if it was applied to non-`NULL` tuples that had `NULL` elements, such as `(1, NULL)` or `(NULL, NULL)`. This bug has existed since v20.2. [#126937][#126937]
+- In the [DB Console event log]({% link v23.2/ui-overview-dashboard.md %}#events-panel), [`ALTER ROLE`]({% link v23.2/alter-role.md %}) events now display correctly even when no [role options]({% link v23.2/alter-role.md %}#role-options) are included in the `ALTER ROLE` statement. [#126565][#126565]
+- Fixed a bug where [`CREATE TABLE`]({% link v23.2/create-table.md %}) with [index expressions]({% link v23.2/expression-indexes.md %}) could hit undefined column errors on [transaction retries]({% link v23.2/transactions.md %}#transaction-retries). [#126201][#126201]
+
+
Performance improvements
+
+- [Schema changes]({% link v23.2/online-schema-changes.md %}) that cause a data backfill, such as adding a non-nullable column or changing the primary key, will now split and scatter the temporary indexes used to perform the change. This reduces the chance of causing a write hotspot that can slow down foreground traffic. [#126691][#126691]
+
+
+
+
Contributors
+
+This release includes 100 merged PRs by 33 authors.
+
+
-- [`AS OF SYSTEM TIME`]({% link v23.2/as-of-system-time.md %}) queries can no longer use a timestamp followed by a question mark to signify a future-time value. This was an undocumented syntax. [#116830][#116830]
+- [`AS OF SYSTEM TIME`]({% link v24.1/as-of-system-time.md %}) queries can no longer use a timestamp followed by a question mark to signify a future-time value. This was an undocumented syntax. [#116830][#116830]
-- [`ALTER CHANGEFEED`]({% link v23.2/alter-changefeed.md %}) no longer removes a [CDC query]({% link v23.2/cdc-queries.md %}) when modifying changefeed properties. [#116498][#116498]
-- `changefeed.balance_range_distribution.enable` is now deprecated. Instead, use the new [cluster setting]({% link v23.2/cluster-settings.md %}) `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enable=true`. It does not require `initial_scan='only'`, which was required by the old setting. [#115166][#115166]
-- CDC queries now correctly handle the [`changefeed_creation_timestamp`]({% link v23.2/cdc-queries.md %}#cdc-query-function-support) function. [#117520][#117520]
-- The new syntax `ALTER VIRTUAL CLUSTER virtual-cluster START REPLICATION OF virtual-cluster ON physical-cluster` can now be used to reconfigure virtual clusters previously serving as sources for [physical cluster replication]({% link v23.2/physical-cluster-replication-overview.md %}) to become standbys to a promoted standby. This reverses the direction of replication while maximizing data reuse. [#117656][#117656]
-- [`BACKUP`]({% link v23.2/backup.md %})s now load range information that is used to avoid a spike in metadata lookups when backups begin. [#116520][#116520]
-- Clusters created to run [physical cluster replication]({% link v23.2/physical-cluster-replication-overview.md %}) no longer automatically disable the [`spanconfig.range_coalescing.system.enabled`]({% link v23.2/cluster-settings.md %}#setting-spanconfig-storage-coalesce-adjacent-enabled) and [`spanconfig.range_coalescing.application.enabled`]({% link v23.2/cluster-settings.md %}#setting-spanconfig-tenant-coalesce-adjacent-enabled) cluster settings. Users who started using physical cluster replication on v23.1 or v23.2 may wish to manually reset these settings. [#119221][#119221]
+- [`ALTER CHANGEFEED`]({% link v24.1/alter-changefeed.md %}) no longer removes a [CDC query]({% link v24.1/cdc-queries.md %}) when modifying changefeed properties. [#116498][#116498]
+- `changefeed.balance_range_distribution.enable` is now deprecated. Instead, use the new [cluster setting]({% link v24.1/cluster-settings.md %}) `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enable=true`. It does not require `initial_scan='only'`, which was required by the old setting. [#115166][#115166]
+- CDC queries now correctly handle the [`changefeed_creation_timestamp`]({% link v24.1/cdc-queries.md %}#cdc-query-function-support) function. [#117520][#117520]
+- The new syntax `ALTER VIRTUAL CLUSTER virtual-cluster START REPLICATION OF virtual-cluster ON physical-cluster` can now be used to reconfigure virtual clusters previously serving as sources for [physical cluster replication]({% link v24.1/physical-cluster-replication-overview.md %}) to become standbys to a promoted standby. This reverses the direction of replication while maximizing data reuse. [#117656][#117656]
+- [`BACKUP`]({% link v24.1/backup.md %})s now load range information that is used to avoid a spike in metadata lookups when backups begin. [#116520][#116520]
+- Clusters created to run [physical cluster replication]({% link v24.1/physical-cluster-replication-overview.md %}) no longer automatically disable the [`spanconfig.range_coalescing.system.enabled`]({% link v24.1/cluster-settings.md %}#setting-spanconfig-storage-coalesce-adjacent-enabled) and [`spanconfig.range_coalescing.application.enabled`]({% link v24.1/cluster-settings.md %}#setting-spanconfig-tenant-coalesce-adjacent-enabled) cluster settings. Users who started using physical cluster replication on v23.1 or v23.2 may wish to manually reset these settings. [#119221][#119221]
- Physical cluster replication is now always enabled, and the `physical_replication.enabled` cluster setting has been removed. [#119149][#119149]
SQL language changes
-- [`ALTER BACKUP SCHEDULE ... EXECUTE IMMEDIATELY`]({% link v23.2/alter-backup-schedule.md %}) can now be used to set the next scheduled execution of the backup schedule to the current time. [#112118][#112118]
-- Fixed the [**SQL Activity**]({% link v23.2/ui-sql-dashboard.md %}) update job to avoid conflicts on update, reduced the amount of data cached to just what the overview page requires, and fixed the correctess of the top queries. [#112350][#112350]
+- [`ALTER BACKUP SCHEDULE ... EXECUTE IMMEDIATELY`]({% link v24.1/alter-backup-schedule.md %}) can now be used to set the next scheduled execution of the backup schedule to the current time. [#112118][#112118]
+- Fixed the [**SQL Activity**]({% link v24.1/ui-sql-dashboard.md %}) update job to avoid conflicts on update, reduced the amount of data cached to just what the overview page requires, and fixed the correctess of the top queries. [#112350][#112350]
- Previously, user-defined composite types were not populated in two `pg_catalog` tables: `pg_class` (whose row entries pertain to the type) and `pg_attribute` (whose row entries pertain to the "columns" of the type). This PostgreSQL-incompatible behavior is now fixed by populating the tables with user-defined composite types. In addition, the `typrelid` column in the `pg_type` table has the proper `oid` for composite types. [#111179][#111179]
-- The newly added [built-in function]({% link v23.2/functions-and-operators.md %}#array-functions) `jsonb_array_to_string_array` no longer removes `NULL` objects. It now includes them in the resulting array. [#112975][#112975]
-- Changed the display for RU estimates shown in [`EXPLAIN ANALYZE`]({% link v23.2/explain-analyze.md %}) from integer to float. This will prevent small estimates from being rounded to zero, which makes the estimate less confusing for cheap queries. [#111986][#111986]
-- The `information_schema._pg_char_octet_length` [built-in function]({% link v23.2/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
-- The `pg_encoding_max_length` [built-in function]({% link v23.2/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
-- The `information_schema._pg_datetime_precision` [built-in function]({% link v23.2/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
-- The `information_schema._pg_interval_type` [built-in function]({% link v23.2/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
-- `information_schema.user_defined_types` is now populated with information about [user-defined types]({% link v23.2/create-type.md %}), and `information_schema.attributes` is now populated with information about the attributes of [composite data types]({% link v23.2/create-type.md %}#create-a-composite-data-type). [#111401][#111401]
-- The [cost-based optimizer]({% link v23.2/cost-based-optimizer.md %}) will no longer generate a constrained scan that only uses filters from a [check]({% link v23.2/check.md %}) constraint. This prevents cases where a constrained scan actually scans the entire table because the constraints aren't selective. [#114332][#114332]
+- The newly added [built-in function]({% link v24.1/functions-and-operators.md %}#array-functions) `jsonb_array_to_string_array` no longer removes `NULL` objects. It now includes them in the resulting array. [#112975][#112975]
+- Changed the display for RU estimates shown in [`EXPLAIN ANALYZE`]({% link v24.1/explain-analyze.md %}) from integer to float. This will prevent small estimates from being rounded to zero, which makes the estimate less confusing for cheap queries. [#111986][#111986]
+- The `information_schema._pg_char_octet_length` [built-in function]({% link v24.1/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
+- The `pg_encoding_max_length` [built-in function]({% link v24.1/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
+- The `information_schema._pg_datetime_precision` [built-in function]({% link v24.1/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
+- The `information_schema._pg_interval_type` [built-in function]({% link v24.1/functions-and-operators.md %}) is now supported, which improves compatibility with PostgreSQL. [#111401][#111401]
+- `information_schema.user_defined_types` is now populated with information about [user-defined types]({% link v24.1/create-type.md %}), and `information_schema.attributes` is now populated with information about the attributes of [composite data types]({% link v24.1/create-type.md %}#create-a-composite-data-type). [#111401][#111401]
+- The [cost-based optimizer]({% link v24.1/cost-based-optimizer.md %}) will no longer generate a constrained scan that only uses filters from a [check]({% link v24.1/check.md %}) constraint. This prevents cases where a constrained scan actually scans the entire table because the constraints aren't selective. [#114332][#114332]
- Reads rolled back by savepoints are now refreshable, matching the PostgreSQL behavior and avoiding potential serializability violations. [#111424][#111424]
-- Implemented the postgis `ST_TileEnvelope` [built-in function]({% link v23.2/functions-and-operators.md %}). [#112971][#112971]
-- Added support for a third argument in the `array_position` [built-in function]({% link v23.2/functions-and-operators.md %}). If provided, it gives the index from which to begin searching in the array. [#112161][#112161]
-- Added the `bit_count` [built-in function]({% link v23.2/functions-and-operators.md %}) for [`BIT`]({% link v23.2/bit.md %}) and [`BYTES`]({% link v23.2/bytes.md %}) types. [#115273][#115273]
+- Implemented the postgis `ST_TileEnvelope` [built-in function]({% link v24.1/functions-and-operators.md %}). [#112971][#112971]
+- Added support for a third argument in the `array_position` [built-in function]({% link v24.1/functions-and-operators.md %}). If provided, it gives the index from which to begin searching in the array. [#112161][#112161]
+- Added the `bit_count` [built-in function]({% link v24.1/functions-and-operators.md %}) for [`BIT`]({% link v24.1/bit.md %}) and [`BYTES`]({% link v24.1/bytes.md %}) types. [#115273][#115273]
- Added a `pg_backend_pid` column to `crdb_internal.node_sessions` and `crdb_internal.cluster_sessions`. This value corresponds to the numerical ID returned from `pg_backend_pid`. [#116673][#116673]
-- Column type changes now require an explicit cast when automatic casting is not possible. This aligns with PostgreSQL's behavior. Previously, certain type conversions, such as [`BOOL`]({% link v23.2/bool.md %}) to [`INT`]({% link v23.2/int.md %}), were allowed without an explicit cast. [#115442][#115442]
-- Added a new [session setting]({% link v23.2/session-variables.md %}), `optimizer_merge_joins_enabled` that, when true, instructs the [cost-based optimizer]({% link v23.2/cost-based-optimizer.md %}) to explore query plans with merge joins. The setting defaults to `true`. [#116410][#116410]
-- CockroachDB now supports parsing queries like [`SELECT FROM t`]({% link v23.2/selection-queries.md %}) that only produce the row count and do not output any columns. [#116835][#116835]
-- Added the `metaphone` [built-in function]({% link v23.2/functions-and-operators.md %}), which converts a string to its Metaphone code. [#110950][#110950]
-- The new `EXPIRATION WINDOW` option for [`ALTER VIRTUAL CLUSTER`]({% link v23.2/alter-virtual-cluster.md %}) allows the user to override the default producer job expiration window of 24 hours. For example, `ALTER VIRTUAL CLUSTER appTenant SET REPLICATION EXPIRATION WINDOW ='100ms'`. The producer job expiration window determines how long the producer job stays alive without a heartbeat from the consumer job. [#117776][#117776]
-- The [`SKIP LOCKED`]({% link v23.2/select-for-update.md %}#wait-policies) clause is now allowed with `SELECT ... FOR SHARE`. [#117560][#117560]
-- Added configurable [cluster settings]({% link v23.2/cluster-settings.md %}) for total TCP keep alive probes (`server.sql_tcp_keep_alive.count`) and TCP probe intervals (`server.sql_tcp_keep_alive.interval`) for SQL connections. Removed the `COCKROACH_SQL_TCP_KEEP_ALIVE` environment variable subsuming it. [#115833][#115833]
-- Removed the `sql.trace.session_eventlog.enabled` cluster setting and the associated event log tracing. The information in these traces is still available in the [`DEV` log channel]({% link v23.2/logging-overview.md %}#logging-channels) by enabling `--vmodule=conn_executor=2` with [`cockroach start`]({% link v23.2/cockroach-start.md %}). [#117928][#117928]
-- The `array_agg` [aggregate function]({% link v23.2/functions-and-operators.md %}#aggregate-functions) can now support arrays as the input. Note that CockroachDB does not yet fully support nested arrays, and `array_agg` does not support nested arrays as inputs. [#117838][#117838]
-- An execution statistic that measures "client time" is now included in `plan.txt` files of [statement diagnostics bundles]({% link v23.2/cockroach-statement-diag.md %}). Client time tracks how long the query execution was blocked on the client receiving the PGWire protocol messages. Note that when obtained via [`EXPLAIN ANALYZE (DEBUG)`]({% link v23.2/explain-analyze.md %}#debug-option), client time does not make sense because in this variant the output rows are discarded and not communicated to the client. [#117591][#117591]
-- Added the `trace_id` column to the response of the [`SHOW SESSIONS`]({% link v23.2/show-sessions.md %}) command. [#118002][#118002]
+- Column type changes now require an explicit cast when automatic casting is not possible. This aligns with PostgreSQL's behavior. Previously, certain type conversions, such as [`BOOL`]({% link v24.1/bool.md %}) to [`INT`]({% link v24.1/int.md %}), were allowed without an explicit cast. [#115442][#115442]
+- Added a new [session setting]({% link v24.1/session-variables.md %}), `optimizer_merge_joins_enabled` that, when true, instructs the [cost-based optimizer]({% link v24.1/cost-based-optimizer.md %}) to explore query plans with merge joins. The setting defaults to `true`. [#116410][#116410]
+- CockroachDB now supports parsing queries like [`SELECT FROM t`]({% link v24.1/selection-queries.md %}) that only produce the row count and do not output any columns. [#116835][#116835]
+- Added the `metaphone` [built-in function]({% link v24.1/functions-and-operators.md %}), which converts a string to its Metaphone code. [#110950][#110950]
+- The new `EXPIRATION WINDOW` option for [`ALTER VIRTUAL CLUSTER`]({% link v24.1/alter-virtual-cluster.md %}) allows the user to override the default producer job expiration window of 24 hours. For example, `ALTER VIRTUAL CLUSTER appTenant SET REPLICATION EXPIRATION WINDOW ='100ms'`. The producer job expiration window determines how long the producer job stays alive without a heartbeat from the consumer job. [#117776][#117776]
+- The [`SKIP LOCKED`]({% link v24.1/select-for-update.md %}#wait-policies) clause is now allowed with `SELECT ... FOR SHARE`. [#117560][#117560]
+- Added configurable [cluster settings]({% link v24.1/cluster-settings.md %}) for total TCP keep alive probes (`server.sql_tcp_keep_alive.count`) and TCP probe intervals (`server.sql_tcp_keep_alive.interval`) for SQL connections. Removed the `COCKROACH_SQL_TCP_KEEP_ALIVE` environment variable subsuming it. [#115833][#115833]
+- Removed the `sql.trace.session_eventlog.enabled` cluster setting and the associated event log tracing. The information in these traces is still available in the [`DEV` log channel]({% link v24.1/logging-overview.md %}#logging-channels) by enabling `--vmodule=conn_executor=2` with [`cockroach start`]({% link v24.1/cockroach-start.md %}). [#117928][#117928]
+- The `array_agg` [aggregate function]({% link v24.1/functions-and-operators.md %}#aggregate-functions) can now support arrays as the input. Note that CockroachDB does not yet fully support nested arrays, and `array_agg` does not support nested arrays as inputs. [#117838][#117838]
+- An execution statistic that measures "client time" is now included in `plan.txt` files of [statement diagnostics bundles]({% link v24.1/cockroach-statement-diag.md %}). Client time tracks how long the query execution was blocked on the client receiving the PGWire protocol messages. Note that when obtained via [`EXPLAIN ANALYZE (DEBUG)`]({% link v24.1/explain-analyze.md %}#debug-option), client time does not make sense because in this variant the output rows are discarded and not communicated to the client. [#117591][#117591]
+- Added the `trace_id` column to the response of the [`SHOW SESSIONS`]({% link v24.1/show-sessions.md %}) command. [#118002][#118002]
- Added support for the `ENCODING` option of `COPY`, as long as the encoding of `'utf8'` is specified. [#118010][#118010]
-- Added the `SHOW VARIABLES FOR ROLE` command, which allows the database administrator to easily view the default values for [session variables]({% link v23.2/session-variables.md %}) applied to a given user. [#117875][#117875]
-- The `sql.txn.read_committed_isolation.enabled` [cluster setting]({% link v23.2/cluster-settings.md %}) is now `true` by default. This means that any syntax and settings that configure the [`READ COMMITTED`]({% link v23.2/read-committed.md %}) isolation level will now cause the transaction to use that isolation level, rather than automatically upgrading the transaction to `SERIALIZABLE`. [#118479][#118479]
-- Added a new [cluster setting]({% link v23.2/cluster-settings.md %}), `sql.stats.virtual_computed_columns.enabled`, which when set enables collection of table statistics on [`VIRTUAL` computed columns]({% link v23.2/computed-columns.md %}). [#118241][#118241]
-- Added the `autocommit_before_ddl` [session variable]({% link v23.2/session-variables.md %}). When set to `true`, any schema change statement that is sent during an explicit transaction will cause the transaction to commit before executing the schema change. [#118440][#118440]
-- [`CREATE SEQUENCE`]({% link v23.2/create-sequence.md %}) is now enabled by default in the declarative schema changer. [#117793][#117793]
-- [PL/pgSQL]({% link v23.2/plpgsql.md %}) now supports nested blocks, with the following limitations: variable shadowing is disallowed, and exception handlers cannot be used in a routine with nested blocks. [#117710][#117710]
-- The [cluster setting]({% link v23.2/cluster-settings.md %}) `sql.index_recommendation.drop_unused_duration` is now public. [#118676][#118676]
-- It is now possible to hint to the [cost-based optimizer]({% link v23.2/cost-based-optimizer.md %}) that it should plan a straight join by using the syntax `... INNER STRAIGHT JOIN ...`. If the hint is provided, the optimizer will now fix the join order as given in the query, even if it estimates that a different plan using join reordering would have a lower cost. [#116013][#116013]
+- Added the `SHOW VARIABLES FOR ROLE` command, which allows the database administrator to easily view the default values for [session variables]({% link v24.1/session-variables.md %}) applied to a given user. [#117875][#117875]
+- The `sql.txn.read_committed_isolation.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) is now `true` by default. This means that any syntax and settings that configure the [`READ COMMITTED`]({% link v24.1/read-committed.md %}) isolation level will now cause the transaction to use that isolation level, rather than automatically upgrading the transaction to `SERIALIZABLE`. [#118479][#118479]
+- Added a new [cluster setting]({% link v24.1/cluster-settings.md %}), `sql.stats.virtual_computed_columns.enabled`, which when set enables collection of table statistics on [`VIRTUAL` computed columns]({% link v24.1/computed-columns.md %}). [#118241][#118241]
+- Added the `autocommit_before_ddl` [session variable]({% link v24.1/session-variables.md %}). When set to `true`, any schema change statement that is sent during an explicit transaction will cause the transaction to commit before executing the schema change. [#118440][#118440]
+- [`CREATE SEQUENCE`]({% link v24.1/create-sequence.md %}) is now enabled by default in the declarative schema changer. [#117793][#117793]
+- [PL/pgSQL]({% link v24.1/plpgsql.md %}) now supports nested blocks, with the following limitations: variable shadowing is disallowed, and exception handlers cannot be used in a routine with nested blocks. [#117710][#117710]
+- The [cluster setting]({% link v24.1/cluster-settings.md %}) `sql.index_recommendation.drop_unused_duration` is now public. [#118676][#118676]
+- It is now possible to hint to the [cost-based optimizer]({% link v24.1/cost-based-optimizer.md %}) that it should plan a straight join by using the syntax `... INNER STRAIGHT JOIN ...`. If the hint is provided, the optimizer will now fix the join order as given in the query, even if it estimates that a different plan using join reordering would have a lower cost. [#116013][#116013]
- Add column `goroutine_id` to the response of the `SHOW SESSIONS` command. [#118644][#118644]
-- Introduced a new [session setting]({% link v23.2/session-variables.md %}), `close_cursors_at_commit`, which causes a cursor to remain open even after its calling transaction commits. Note that transaction rollback still closes any cursor created in that transaction. [#117910][#117910]
-- Added the `server.max_open_transactions_per_gateway` [cluster setting]({% link v23.2/cluster-settings.md %}). When set to a non-negative value, non-`admin` users cannot execute a query if the number of transactions open on the current gateway node is already at the configured limit. [#118781][#118781]
-- Added the `setseed` [built-in function]({% link v23.2/functions-and-operators.md %}). It sets the seed for the random generator used by the `random` built-in function. [#119042][#119042]
-- `OUT` and `INOUT` parameter classes are now supported in [user-defined functions]({% link v23.2/user-defined-functions.md %}). [#118610][#118610]
-- Out-of-process SQL servers will now start exporting a new `sql.aggregated_livebytes` [metric]({% link v23.2/metrics.md %}). This metric gets updated once every 60 seconds by default, and its update interval can be configured via the `tenant_global_metrics_exporter_interval` [cluster setting]({% link v23.2/cluster-settings.md %}). [#119140][#119140]
-- Added support for index hints with [`INSERT`]({% link v23.2/insert.md %}) and [`UPSERT`]({% link v23.2/upsert.md %}) statements. This allows `INSERT ... ON CONFLICT` and `UPSERT` queries to use index hints in the same way they are already supported for [`UPDATE`]({% link v23.2/update.md %}) and [`DELETE`]({% link v23.2/delete.md %}) statements. [#119104][#119104]
-- Added a new [`ttl_disable_changefeed_replication`]({% link v24.1/row-level-ttl.md %}#filter-changefeeds-for-tables-using-row-level-ttl) table storage parameter that can be used to disable changefeed replication for [row-level TTL]({% link v23.2/row-level-ttl.md %}) on a per-table basis. [#119611][#119611]
+- Introduced a new [session setting]({% link v24.1/session-variables.md %}), `close_cursors_at_commit`, which causes a cursor to remain open even after its calling transaction commits. Note that transaction rollback still closes any cursor created in that transaction. [#117910][#117910]
+- Added the `server.max_open_transactions_per_gateway` [cluster setting]({% link v24.1/cluster-settings.md %}). When set to a non-negative value, non-`admin` users cannot execute a query if the number of transactions open on the current gateway node is already at the configured limit. [#118781][#118781]
+- Added the `setseed` [built-in function]({% link v24.1/functions-and-operators.md %}). It sets the seed for the random generator used by the `random` built-in function. [#119042][#119042]
+- `OUT` and `INOUT` parameter classes are now supported in [user-defined functions]({% link v24.1/user-defined-functions.md %}). [#118610][#118610]
+- Out-of-process SQL servers will now start exporting a new `sql.aggregated_livebytes` [metric]({% link v24.1/metrics.md %}). This metric gets updated once every 60 seconds by default, and its update interval can be configured via the `tenant_global_metrics_exporter_interval` [cluster setting]({% link v24.1/cluster-settings.md %}). [#119140][#119140]
+- Added support for index hints with [`INSERT`]({% link v24.1/insert.md %}) and [`UPSERT`]({% link v24.1/upsert.md %}) statements. This allows `INSERT ... ON CONFLICT` and `UPSERT` queries to use index hints in the same way they are already supported for [`UPDATE`]({% link v24.1/update.md %}) and [`DELETE`]({% link v24.1/delete.md %}) statements. [#119104][#119104]
+- Added a new [`ttl_disable_changefeed_replication`]({% link v24.1/row-level-ttl.md %}#filter-changefeeds-for-tables-using-row-level-ttl) table storage parameter that can be used to disable changefeed replication for [row-level TTL]({% link v24.1/row-level-ttl.md %}) on a per-table basis. [#119611][#119611]
Operational changes
-- The internal versions that are reported during [cluster upgrades]({% link v23.2/upgrade-cockroach-version.md %}) have been renamed for clarity. For example, `23.2-8` is now named `23.2-upgrading-to-24.1-step-008`. [#115223][#115223]
-- Introduced a new cluster setting, `server.jwt_authentication.jwks_auto_fetch.enabled`, enabling automatic fetching of [JSON Web Key Sets (JWKS)]({% link v23.2/sso-sql.md %}) from an issuer's remote endpoint. This prevents an administrator's need to update the JWKS specified in `server.jwt_authentication.jwks` - whether manually or by custom script - when the identity provider's keys rotate. That direct specification of JWKS remains the default, as the new cluster setting defaults to `false`. [#117054][#117054]
+- The internal versions that are reported during [cluster upgrades]({% link v24.1/upgrade-cockroach-version.md %}) have been renamed for clarity. For example, `23.2-8` is now named `23.2-upgrading-to-24.1-step-008`. [#115223][#115223]
+- Introduced a new cluster setting, `server.jwt_authentication.jwks_auto_fetch.enabled`, enabling automatic fetching of [JSON Web Key Sets (JWKS)]({% link v24.1/sso-sql.md %}) from an issuer's remote endpoint. This prevents an administrator's need to update the JWKS specified in `server.jwt_authentication.jwks` - whether manually or by custom script - when the identity provider's keys rotate. That direct specification of JWKS remains the default, as the new cluster setting defaults to `false`. [#117054][#117054]
- Updated the error message logged in the case of stalled disks to use the appropriate term "disk stall", matching the term used in metrics and dashboards. This was previously "file write stall". [#114746][#114746]
-- Introduced the `changefeed.emitted_batch_sizes` histogram metric that measures the batch sizes used when emitting data to [sinks]({% link v23.2/changefeed-sinks.md %}). This metric supports [metrics labels]({% link v23.2/monitor-and-debug-changefeeds.md %}#using-changefeed-metrics-labels). [#115537][#115537]
-- Introduced metrics `log_fluent_sink_conn_attempts`, `log_fluent_sink_write_attempts`, and `log_fluent_sink_write_errors` to enable more precise tracking of connection and write operations when [logging to Fluentd-compatible network collectors]({% link v23.2/configure-logs.md %}#output-to-fluentd-compatible-network-collectors). [#116699][#116699]
-- The [cluster setting]({% link v23.2/cluster-settings.md %}) `sql.contention.record_serialization_conflicts.enabled` is now `on` by default. This means any [`40001` errors]({% link v23.2/transaction-retry-error-reference.md %}) that are returned containing conflicting transaction information will be recorded by the contention registry. [#116664][#116664]
-- Removed the `kv.rangefeed.scheduler.enabled` [cluster setting]({% link v23.2/cluster-settings.md %}) because the [rangefeed]({% link v23.2/create-and-configure-changefeeds.md %}#enable-rangefeeds) scheduler is now unconditionally enabled. [#114410][#114410]
-- Removed the `kv.rangefeed.catchup_scan_concurrency` [cluster setting]({% link v23.2/cluster-settings.md %}). Catchup scans are throttled via [`kv.rangefeed.concurrent_catchup_iterators`]({% link v23.2/advanced-changefeed-configuration.md %}) on a per-node basis. [#114408][#114408]
-- Removed the [`changefeed.mux_rangefeed.enabled`]({% link v23.2/advanced-changefeed-configuration.md %}#mux-rangefeeds) cluster setting because the functionality is enabled by default. [#114408][#114408]
-- The gossip status [Advanced Debug page]({% link v23.2/ui-debug-pages.md %}) now includes information about the server's high water timestamps for every other node it knows about in the gossip cluster. [#117011][#117011]
+- Introduced the `changefeed.emitted_batch_sizes` histogram metric that measures the batch sizes used when emitting data to [sinks]({% link v24.1/changefeed-sinks.md %}). This metric supports [metrics labels]({% link v24.1/monitor-and-debug-changefeeds.md %}#using-changefeed-metrics-labels). [#115537][#115537]
+- Introduced metrics `log_fluent_sink_conn_attempts`, `log_fluent_sink_write_attempts`, and `log_fluent_sink_write_errors` to enable more precise tracking of connection and write operations when [logging to Fluentd-compatible network collectors]({% link v24.1/configure-logs.md %}#output-to-fluentd-compatible-network-collectors). [#116699][#116699]
+- The [cluster setting]({% link v24.1/cluster-settings.md %}) `sql.contention.record_serialization_conflicts.enabled` is now `on` by default. This means any [`40001` errors]({% link v24.1/transaction-retry-error-reference.md %}) that are returned containing conflicting transaction information will be recorded by the contention registry. [#116664][#116664]
+- Removed the `kv.rangefeed.scheduler.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) because the [rangefeed]({% link v24.1/create-and-configure-changefeeds.md %}#enable-rangefeeds) scheduler is now unconditionally enabled. [#114410][#114410]
+- Removed the `kv.rangefeed.catchup_scan_concurrency` [cluster setting]({% link v24.1/cluster-settings.md %}). Catchup scans are throttled via [`kv.rangefeed.concurrent_catchup_iterators`]({% link v24.1/advanced-changefeed-configuration.md %}) on a per-node basis. [#114408][#114408]
+- Removed the [`changefeed.mux_rangefeed.enabled`]({% link v24.1/advanced-changefeed-configuration.md %}#mux-rangefeeds) cluster setting because the functionality is enabled by default. [#114408][#114408]
+- The gossip status [Advanced Debug page]({% link v24.1/ui-debug-pages.md %}) now includes information about the server's high water timestamps for every other node it knows about in the gossip cluster. [#117011][#117011]
- Removed the `cockroach_rangefeed_rpc_initial_window_size` environment variable. The rangefeed connection now uses the same window size as other RPC connections. [#117545][#117545]
-- [Events]({% link v23.2/eventlog.md %}#miscellaneous-sql-events) for [cluster setting]({% link v23.2/cluster-settings.md %}) changes are now emitted to the `OPS` channel rather than the `DEV` channel. [#117923][#117923]
-- The new environment variable `cockroach_rpc_use_default_connection_class` enables operators to switch back to the prior default behavior of sending most network/RPC workloads, except system traffic, through a single RPC/TCP connection, in case the environment does not tolerate multiple TCP connections. v24.1 defaults to using multiple connections, each dedicated to a particular types of traffic, specifically for [Raft]({% link v23.2/architecture/replication-layer.md %}#raft) or [rangefeed]({% link v23.2/change-data-capture-overview.md %}) data. For more information, see additional release notes that reference this variable name. [#117810][#117810]
-- In unredacted [debug zips]({% link v23.2/cockroach-debug-zip.md %}), the `crdb_internal.transaction_contention_events` table file has two new columns:
+- [Events]({% link v24.1/eventlog.md %}#miscellaneous-sql-events) for [cluster setting]({% link v24.1/cluster-settings.md %}) changes are now emitted to the `OPS` channel rather than the `DEV` channel. [#117923][#117923]
+- The new environment variable `cockroach_rpc_use_default_connection_class` enables operators to switch back to the prior default behavior of sending most network/RPC workloads, except system traffic, through a single RPC/TCP connection, in case the environment does not tolerate multiple TCP connections. v24.1 defaults to using multiple connections, each dedicated to a particular types of traffic, specifically for [Raft]({% link v24.1/architecture/replication-layer.md %}#raft) or [rangefeed]({% link v24.1/change-data-capture-overview.md %}) data. For more information, see additional release notes that reference this variable name. [#117810][#117810]
+- In unredacted [debug zips]({% link v24.1/cockroach-debug-zip.md %}), the `crdb_internal.transaction_contention_events` table file has two new columns:
- `waiting_stmt_query`: the query of the waiting statement.
- `blocking_txn_queries_unordered`: the unordered list of the blocking transaction's queries. [#118478][#118478]
-- Transaction replay protection state is now passed between the outgoing and incoming [leaseholder]({% link v23.2/architecture/replication-layer.md %}#leases) for a range during a [lease transfer]({% link v23.2/architecture/replication-layer.md %}#epoch-based-leases-table-data). This avoids cases where lease transfers can cause transactions to throw `TransactionAbortedError(ABORT_REASON_NEW_LEASE_PREVENTS_TXN)` errors. [#118300][#118300]
-- CockroachDB will now automatically generate [CPU profiles]({% link v23.2/automatic-cpu-profiler.md %}) if there is an increase in CPU utilization. This can help inform investigations into possible issues. [#118850][#118850]
-- Expanded the [`--include-range-info`]({% link v23.2/cockroach-debug-zip.md %}) flag to include problem ranges. This flag still defaults to `true`. [#119205][#119205]
+- Transaction replay protection state is now passed between the outgoing and incoming [leaseholder]({% link v24.1/architecture/replication-layer.md %}#leases) for a range during a [lease transfer]({% link v24.1/architecture/replication-layer.md %}#epoch-based-leases-table-data). This avoids cases where lease transfers can cause transactions to throw `TransactionAbortedError(ABORT_REASON_NEW_LEASE_PREVENTS_TXN)` errors. [#118300][#118300]
+- CockroachDB will now automatically generate [CPU profiles]({% link v24.1/automatic-cpu-profiler.md %}) if there is an increase in CPU utilization. This can help inform investigations into possible issues. [#118850][#118850]
+- Expanded the [`--include-range-info`]({% link v24.1/cockroach-debug-zip.md %}) flag to include problem ranges. This flag still defaults to `true`. [#119205][#119205]
Command-line changes
-- [Debug zips]({% link v23.2/cockroach-debug-zip.md %}) no longer include redundant `hex_` columns for system table `BYTES` columns. [#112033][#112033]
-- Added the `--follower-read-percent` flag, which determines the percent (0-100) of read operations that are follower reads, to the [`cockroach workload kv run`]({% link v23.2/cockroach-workload.md %}) command. [#113094][#113094]
+- [Debug zips]({% link v24.1/cockroach-debug-zip.md %}) no longer include redundant `hex_` columns for system table `BYTES` columns. [#112033][#112033]
+- Added the `--follower-read-percent` flag, which determines the percent (0-100) of read operations that are follower reads, to the [`cockroach workload kv run`]({% link v24.1/cockroach-workload.md %}) command. [#113094][#113094]
- The workload `schemachange` now writes a `.otlp.ndjson.gz` archive containing OTLP trace bundles for debugging purposes. [#114770][#114770]
-- [`cockroach debug tsdump`]({% link v23.2/cockroach-debug-tsdump.md %}) creates a `tsdump.yaml` file. The `tsdump` raw format automatically creates the YAML file in the default location `/tmp/tsdump.yaml`. Added a new flag `--yaml` that allows users to specify the path to create `tsdump.yaml` instead of using the default location. For example, `cockroach debug tsdump --host : \ --format raw --yaml=/some_path/tsdump.yaml > /some_path/tsdump.gob`. [#114046][#114046]
+- [`cockroach debug tsdump`]({% link v24.1/cockroach-debug-tsdump.md %}) creates a `tsdump.yaml` file. The `tsdump` raw format automatically creates the YAML file in the default location `/tmp/tsdump.yaml`. Added a new flag `--yaml` that allows users to specify the path to create `tsdump.yaml` instead of using the default location. For example, `cockroach debug tsdump --host : \ --format raw --yaml=/some_path/tsdump.yaml > /some_path/tsdump.gob`. [#114046][#114046]
- Removed the `cockroach connect` command functionality. This was [deprecated]({% link releases/v23.2.md %}#v23-2-0-deprecations) in CockroachDB v23.2. [#113893][#113893]
-- Changed the SQL shell help URL to point to [`cockroach-sql`]({% link v23.2/cockroach-sql-binary.md %}). [#118960][#118960]
-- Added a new `encode-uri` utility to make generating connection strings for use with [Physical Cluster Replication]({% link v23.2/physical-cluster-replication-overview.md %}) easier. [#119528][#119528]
+- Changed the SQL shell help URL to point to [`cockroach-sql`]({% link v24.1/cockroach-sql-binary.md %}). [#118960][#118960]
+- Added a new `encode-uri` utility to make generating connection strings for use with [Physical Cluster Replication]({% link v24.1/physical-cluster-replication-overview.md %}) easier. [#119528][#119528]
DB Console changes
-- Store initialization now logs progress every 10 seconds showing the current and total number of [replicas]({% link v23.2/architecture/replication-layer.md %}) initialized. [#115760][#115760]
-- Introduced a new **Lease Preferences** graph on the [Replication dashboard]({% link v23.2/ui-replication-dashboard.md %}). The **Lease Preferences** graph will indicate when the current [leaseholder]({% link v23.2/architecture/replication-layer.md %}#leases) is not the first lease preference and where the current leaseholder satisfies no applied lease preference. [#116709][#116709]
-- Updated the [Statement Details page]({% link v23.2/ui-statements-page.md %}) to always show the entire selected period, instead of just the period that had data. [#118680][#118680]
+- Store initialization now logs progress every 10 seconds showing the current and total number of [replicas]({% link v24.1/architecture/replication-layer.md %}) initialized. [#115760][#115760]
+- Introduced a new **Lease Preferences** graph on the [Replication dashboard]({% link v24.1/ui-replication-dashboard.md %}). The **Lease Preferences** graph will indicate when the current [leaseholder]({% link v24.1/architecture/replication-layer.md %}#leases) is not the first lease preference and where the current leaseholder satisfies no applied lease preference. [#116709][#116709]
+- Updated the [Statement Details page]({% link v24.1/ui-statements-page.md %}) to always show the entire selected period, instead of just the period that had data. [#118680][#118680]
- Error messages displayed upon failure to load DB Console views now include information about the HTTP response status code, if one is present. [#118782][#118782]
-- The **Full Table/Index Scans** chart in the [SQL Metrics dashboard]({% link v23.2/ui-sql-dashboard.md %}) now shows the non-negative derivative of the number of full scans tracked. [#118787][#118787]
-- The [Overload dashboard]({% link v23.2/ui-overload-dashboard.md %}) now includes two additional graphs:
+- The **Full Table/Index Scans** chart in the [SQL Metrics dashboard]({% link v24.1/ui-sql-dashboard.md %}) now shows the non-negative derivative of the number of full scans tracked. [#118787][#118787]
+- The [Overload dashboard]({% link v24.1/ui-overload-dashboard.md %}) now includes two additional graphs:
- **Elastic CPU Utilization**: displays the CPU utilization by elastic work, compared to the limit set for elastic work.
- **Elastic CPU Exhausted Duration Per Second**: displays the duration of CPU exhaustion by elastic work, in microseconds. [#118763][#118763]
-- The `txn.restarts.writetooold` metric in the **Transaction Restarts** graph under the [SQL Dashboard]({% link v23.2/ui-sql-dashboard.md %}) now includes all restarts previously categorized as `txn.restarts.writetoooldmulti`. The former is a now a superset of the latter. The `txn.restarts.writetoooldmulti` metric will be removed in a future release. [#119411][#119411]
+- The `txn.restarts.writetooold` metric in the **Transaction Restarts** graph under the [SQL Dashboard]({% link v24.1/ui-sql-dashboard.md %}) now includes all restarts previously categorized as `txn.restarts.writetoooldmulti`. The former is a now a superset of the latter. The `txn.restarts.writetoooldmulti` metric will be removed in a future release. [#119411][#119411]
Bug fixes
- Fixed a bug that could cause an internal error during distributed execution for an expression like `CASE` that requires its inputs to be the same type with all `NULL` inputs. [#108892][#108892]
-- Fixed `NULL` input handling for the geospatial [built-ins]({% link v23.2/functions-and-operators.md %}) `st_pointfromgeohash` and `st_geomfromgeohash`. [#113781][#113781]
-- The geospatial `st_makeenvelope` [built-in]({% link v23.2/functions-and-operators.md %}) now correctly supports `xmin` or `ymin` to be greater than `xmax` or `ymax`, respectively. [#113781][#113781]
-- Fixed a bug that could cause v23.1 nodes in clusters that had not [finalized the v23.1 version upgrade]({% link v23.2/upgrade-cockroach-version.md %}#step-3-decide-how-the-upgrade-will-be-finalized) to use excessive CPU retrying expected errors related to the incomplete upgrade state. [#113864][#113864]
-- [Debug zip]({% link v23.2/cockroach-debug-zip.md %}) now does not fail on corrupted log files. [#113722][#113722]
-- Placeholder arguments can now be used in [`SET TRANSACTION`]({% link v23.2/set-transaction.md %}) statements. [#113689][#113689]
-- Previously, when the session variable `use_declarative_schema_changer` was set to `off`, [`ALTER PRIMARY KEY`]({% link v23.2/alter-table.md %}#alter-primary-key) would delete any comments associated with the old primary index and old primary key constraint. This is inconsistent with the behavior of `use_declarative_schema_changer=on`, which is the default setting, where those comments would be carried over to the new primary index. Furthermore, the old behavior also caused a bug that could prevent command `SHOW CREATE t` from working. [#114354][#114354]
-- Previously, when the session variable was set to `use_declarative_schema_changer=off` and there was an attempt to [`ALTER PRIMARY KEY`]({% link v23.2/alter-table.md %}#alter-primary-key) on a table that has unique secondary indexes on new primary key columns, the unique secondary index would still incorrectly have old primary key columns as its `keySuffixColumn` after the `ALTER PRIMARY KEY`. This was problematic because a subsequent dropping of the old primary key columns would unexpectedly drop those unique secondary indexes as well, even without `CASCADE`. [#114622][#114622]
-- [`ALTER BACKUP SCHEDULE`]({% link v23.2/alter-backup-schedule.md %}) can now be used to set `updates_cluster_last_backup_time_metric` without providing an explicit value, matching the behavior of the option when specified during [`CREATE SCHEDULE FOR BACKUP`]({% link v23.2/create-schedule-for-backup.md %}). [#113523][#113523]
-- Previously, if a table had [secondary indexes]({% link v23.2/schema-design-indexes.md %}) that stored certain columns (`col`) using the [`STORING`]({% link v23.2/indexes.md %}#storing-columns) clause, followed by an [`ALTER PRIMARY KEY`]({% link v23.2/alter-table.md %}#alter-primary-key) to `col`, an incorrect secondary index would persist. The secondary index would continue to have the `STORING` clause, despite the column being part of the primary key and the fact that CockroachDB does not permit secondary indexes to store any primary key columns. Now, after the `ALTER PRIMARY KEY`, the `STORING` clause is dropped on those secondary indexes. [#115214][#115214]
-- Fixed a bug that caused uploads to [object-locked buckets]({% link v23.2/use-cloud-storage.md %}) to fail because of the absence of an `MD5` hash. [#115713][#115713]
-- [`ALTER PRIMARY KEY`]({% link v23.2/alter-table.md %}#alter-primary-key) now preserves the name of the original primary index when the session variable is `use_declarative_schema_changer=off`. [#115338][#115338]
-- Fixed a bug where the [`unique-without-index-not-valid` constraint]({% link v23.2/unique.md %}) added to a table would cause the `create_statement` from `SHOW CREATE t` to not be executable and error with `unique constraint cannot be NOT VALID`. [#115354][#115354]
-- Fixed a bug where an empty [full backup]({% link v23.2/take-full-and-incremental-backups.md %}) followed by non-empty incremental backups taken inside an application tenant might not allow a [restore]({% link v23.2/restore.md %}) due to the use of an incorrect SQL codec. [#116316][#116316]
-- Fixed a bug in the [row-level TTL]({% link v23.2/row-level-ttl.md %}) job that would cause it to skip expired rows if the primary key of the table included columns of the collated `STRING` or `DECIMAL` type. [#116988][#116988]
-- Incorrectly labeled [PL/pgSQL]({% link v23.2/plpgsql.md %}) blocks now return an expected syntax error. [#117608][#117608]
-- [`CREATE EXTERNAL CONNECTION IF NOT EXISTS`]({% link v23.2/create-external-connection.md %}) no longer returns an error if the connection already exists. [#117312][#117312]
-- CockroachDB now correctly uses the histograms on columns of collated [`STRING`]({% link v23.2/string.md %}) type. The bug has been present since before v22.1. [#117714][#117714]
-- Improved an interaction during range [lease transfers]({% link v23.2/architecture/replication-layer.md %}#epoch-based-leases-table-data) that could cause `RETRY_ASYNC_WRITE_FAILURE` errors to be returned to clients. [#117840][#117840]
-- Backfilling tables for [`CREATE TABLE AS`]({% link v23.2/create-table-as.md %}) or [`CREATE MATERIALIZED VIEW`]({% link v23.2/create-view.md %}) could get into a retry loop if data was deleted and those jobs took longer than the GC TTL. [#117877][#117877]
-- [Decommissioning replicas]({% link v23.2/node-shutdown.md %}) that are part of a mis-replicated range will no longer get stuck on a rebalance operation that was falsely determined to be unsafe. [#117900][#117900]
-- A memory leak within the insights system was found to occur when [`sql.metrics.transaction_details.enabled`]({% link v23.2/cluster-settings.md %}) was disabled, while leaving `sql.metrics.statement_details.enabled` enabled. This patch fixes the memory leak by preventing the collection of further statement and transaction insights when `sql.metrics.transaction_details.enabled` is disabled. [#117709][#117709]
+- Fixed `NULL` input handling for the geospatial [built-ins]({% link v24.1/functions-and-operators.md %}) `st_pointfromgeohash` and `st_geomfromgeohash`. [#113781][#113781]
+- The geospatial `st_makeenvelope` [built-in]({% link v24.1/functions-and-operators.md %}) now correctly supports `xmin` or `ymin` to be greater than `xmax` or `ymax`, respectively. [#113781][#113781]
+- Fixed a bug that could cause v23.1 nodes in clusters that had not [finalized the v23.1 version upgrade]({% link v24.1/upgrade-cockroach-version.md %}#step-3-decide-how-the-upgrade-will-be-finalized) to use excessive CPU retrying expected errors related to the incomplete upgrade state. [#113864][#113864]
+- [Debug zip]({% link v24.1/cockroach-debug-zip.md %}) now does not fail on corrupted log files. [#113722][#113722]
+- Placeholder arguments can now be used in [`SET TRANSACTION`]({% link v24.1/set-transaction.md %}) statements. [#113689][#113689]
+- Previously, when the session variable `use_declarative_schema_changer` was set to `off`, [`ALTER PRIMARY KEY`]({% link v24.1/alter-table.md %}#alter-primary-key) would delete any comments associated with the old primary index and old primary key constraint. This is inconsistent with the behavior of `use_declarative_schema_changer=on`, which is the default setting, where those comments would be carried over to the new primary index. Furthermore, the old behavior also caused a bug that could prevent command `SHOW CREATE t` from working. [#114354][#114354]
+- Previously, when the session variable was set to `use_declarative_schema_changer=off` and there was an attempt to [`ALTER PRIMARY KEY`]({% link v24.1/alter-table.md %}#alter-primary-key) on a table that has unique secondary indexes on new primary key columns, the unique secondary index would still incorrectly have old primary key columns as its `keySuffixColumn` after the `ALTER PRIMARY KEY`. This was problematic because a subsequent dropping of the old primary key columns would unexpectedly drop those unique secondary indexes as well, even without `CASCADE`. [#114622][#114622]
+- [`ALTER BACKUP SCHEDULE`]({% link v24.1/alter-backup-schedule.md %}) can now be used to set `updates_cluster_last_backup_time_metric` without providing an explicit value, matching the behavior of the option when specified during [`CREATE SCHEDULE FOR BACKUP`]({% link v24.1/create-schedule-for-backup.md %}). [#113523][#113523]
+- Previously, if a table had [secondary indexes]({% link v24.1/schema-design-indexes.md %}) that stored certain columns (`col`) using the [`STORING`]({% link v24.1/indexes.md %}#storing-columns) clause, followed by an [`ALTER PRIMARY KEY`]({% link v24.1/alter-table.md %}#alter-primary-key) to `col`, an incorrect secondary index would persist. The secondary index would continue to have the `STORING` clause, despite the column being part of the primary key and the fact that CockroachDB does not permit secondary indexes to store any primary key columns. Now, after the `ALTER PRIMARY KEY`, the `STORING` clause is dropped on those secondary indexes. [#115214][#115214]
+- Fixed a bug that caused uploads to [object-locked buckets]({% link v24.1/use-cloud-storage.md %}) to fail because of the absence of an `MD5` hash. [#115713][#115713]
+- [`ALTER PRIMARY KEY`]({% link v24.1/alter-table.md %}#alter-primary-key) now preserves the name of the original primary index when the session variable is `use_declarative_schema_changer=off`. [#115338][#115338]
+- Fixed a bug where the [`unique-without-index-not-valid` constraint]({% link v24.1/unique.md %}) added to a table would cause the `create_statement` from `SHOW CREATE t` to not be executable and error with `unique constraint cannot be NOT VALID`. [#115354][#115354]
+- Fixed a bug where an empty [full backup]({% link v24.1/take-full-and-incremental-backups.md %}) followed by non-empty incremental backups taken inside an application tenant might not allow a [restore]({% link v24.1/restore.md %}) due to the use of an incorrect SQL codec. [#116316][#116316]
+- Fixed a bug in the [row-level TTL]({% link v24.1/row-level-ttl.md %}) job that would cause it to skip expired rows if the primary key of the table included columns of the collated `STRING` or `DECIMAL` type. [#116988][#116988]
+- Incorrectly labeled [PL/pgSQL]({% link v24.1/plpgsql.md %}) blocks now return an expected syntax error. [#117608][#117608]
+- [`CREATE EXTERNAL CONNECTION IF NOT EXISTS`]({% link v24.1/create-external-connection.md %}) no longer returns an error if the connection already exists. [#117312][#117312]
+- CockroachDB now correctly uses the histograms on columns of collated [`STRING`]({% link v24.1/string.md %}) type. The bug has been present since before v22.1. [#117714][#117714]
+- Improved an interaction during range [lease transfers]({% link v24.1/architecture/replication-layer.md %}#epoch-based-leases-table-data) that could cause `RETRY_ASYNC_WRITE_FAILURE` errors to be returned to clients. [#117840][#117840]
+- Backfilling tables for [`CREATE TABLE AS`]({% link v24.1/create-table-as.md %}) or [`CREATE MATERIALIZED VIEW`]({% link v24.1/create-view.md %}) could get into a retry loop if data was deleted and those jobs took longer than the GC TTL. [#117877][#117877]
+- [Decommissioning replicas]({% link v24.1/node-shutdown.md %}) that are part of a mis-replicated range will no longer get stuck on a rebalance operation that was falsely determined to be unsafe. [#117900][#117900]
+- A memory leak within the insights system was found to occur when [`sql.metrics.transaction_details.enabled`]({% link v24.1/cluster-settings.md %}) was disabled, while leaving `sql.metrics.statement_details.enabled` enabled. This patch fixes the memory leak by preventing the collection of further statement and transaction insights when `sql.metrics.transaction_details.enabled` is disabled. [#117709][#117709]
- Fixed a rare panic that could happen during a `pg_dump` import that contains a function that has a subquery in one of its arguments, like `SELECT addgeometrycolumn(...)`. Now, attempting to import a `pg_dump` with such a function results in an expected error. [#118569][#118569]
-- [`AUTO CREATE STATS`]({% link v23.2/show-jobs.md %}#show-automatic-jobs) jobs could previously lead to growth in an internal system table resulting in slower job-system related queries. [#118589][#118589]
+- [`AUTO CREATE STATS`]({% link v24.1/show-jobs.md %}#show-automatic-jobs) jobs could previously lead to growth in an internal system table resulting in slower job-system related queries. [#118589][#118589]
- Fixed an issue in CockroachDB where, if operating on a Linux system outside of a CPU cgroup, the system would repeatedly log the error `unable to get CPU capacity` at 10-second intervals. [#118657][#118657]
-- Fixed a bug where casts of [floats]({% link v23.2/float.md %}) to [integers]({% link v23.2/int.md %}) simply truncated the decimal portion. These casts now match the PostgreSQL behavior of rounding to the nearest integer, and in cases of a value halfway between two integers, rounding to the nearest even number. This aligns with the "round half to even" rule or "bankers' rounding", offering greater overall precision across a group of such cast operations. [#117798][#117798]
-- Fixed a bug where statements like `ADD COLUMN j INT, ADD UNIQUE WITHOUT INDEX (j)`, which [add new columns]({% link v23.2/alter-table.md %}#add-column) with unique constraints without creating associated indexes, would fail with an internal error. [#118291][#118291]
-- Previously, [altering]({% link v23.2/alter-table.md %}) from a [`REGIONAL BY ROW`]({% link v23.2/regional-tables.md %}#regional-by-row-tables) table to a [`REGIONAL BY TABLE`]({% link v23.2/regional-tables.md %}#regional-tables) table could cause leaseholders to never move to the database's primary region. This is now fixed. [#118001][#118001]
-- Users with the [VIEWACTIVITY]({% link v23.2/security-reference/authorization.md %}#supported-privileges) privilege can now request statement bundles using `crdb_internal.request_statement_bundle` or through the DB Console [SQL Activity]({% link v23.2/security-reference/authorization.md %}#supported-privileges) page. [#118760][#118760]
-- Fixed an internal error with a message like: `LeafTxn ... incompatible with locking request` that occurs when performing an update under [`READ COMMITTED` isolation]({% link v23.2/read-committed.md %}) which cascades to a table with multiple other foreign keys. [#118722][#118722]
-- Fixed a bug where [`ALTER PRIMARY KEY`]({% link v23.2/alter-table.md %}#alter-primary-key) could fail with an error `non-nullable column with no value! Index scanned ..` when validating recreated [secondary indexes]({% link v23.2/schema-design-indexes.md %}). [#118843][#118843]
-- Fixed a bug where a sequence name allocated by [`SERIAL`]({% link v23.2/serial.md %}) that conflicted with an existing type name would cause an error. [#118861][#118861]
-- Fixed a bug where [`COMMENT ON`]({% link v23.2/comment-on.md %}) statements could fail with an "unexpected value" error if multiple `COMMENT` statements were running concurrently. [#119007][#119007]
+- Fixed a bug where casts of [floats]({% link v24.1/float.md %}) to [integers]({% link v24.1/int.md %}) simply truncated the decimal portion. These casts now match the PostgreSQL behavior of rounding to the nearest integer, and in cases of a value halfway between two integers, rounding to the nearest even number. This aligns with the "round half to even" rule or "bankers' rounding", offering greater overall precision across a group of such cast operations. [#117798][#117798]
+- Fixed a bug where statements like `ADD COLUMN j INT, ADD UNIQUE WITHOUT INDEX (j)`, which [add new columns]({% link v24.1/alter-table.md %}#add-column) with unique constraints without creating associated indexes, would fail with an internal error. [#118291][#118291]
+- Previously, [altering]({% link v24.1/alter-table.md %}) from a [`REGIONAL BY ROW`]({% link v24.1/regional-tables.md %}#regional-by-row-tables) table to a [`REGIONAL BY TABLE`]({% link v24.1/regional-tables.md %}#regional-tables) table could cause leaseholders to never move to the database's primary region. This is now fixed. [#118001][#118001]
+- Users with the [VIEWACTIVITY]({% link v24.1/security-reference/authorization.md %}#supported-privileges) privilege can now request statement bundles using `crdb_internal.request_statement_bundle` or through the DB Console [SQL Activity]({% link v24.1/security-reference/authorization.md %}#supported-privileges) page. [#118760][#118760]
+- Fixed an internal error with a message like: `LeafTxn ... incompatible with locking request` that occurs when performing an update under [`READ COMMITTED` isolation]({% link v24.1/read-committed.md %}) which cascades to a table with multiple other foreign keys. [#118722][#118722]
+- Fixed a bug where [`ALTER PRIMARY KEY`]({% link v24.1/alter-table.md %}#alter-primary-key) could fail with an error `non-nullable column with no value! Index scanned ..` when validating recreated [secondary indexes]({% link v24.1/schema-design-indexes.md %}). [#118843][#118843]
+- Fixed a bug where a sequence name allocated by [`SERIAL`]({% link v24.1/serial.md %}) that conflicted with an existing type name would cause an error. [#118861][#118861]
+- Fixed a bug where [`COMMENT ON`]({% link v24.1/comment-on.md %}) statements could fail with an "unexpected value" error if multiple `COMMENT` statements were running concurrently. [#119007][#119007]
- Previously, in certain cases, using virtual tables such as `crdb_internal.system_jobs` could result in the internal error `attempting to append refresh spans after the tracked timestamp has moved forward`. This is now fixed. The bug was introduced in CockroachDB v23.1. [#119176][#119176]
- Fixed a bug where operations on the `crdb_internal.leases` table could cause a node to become unavailable due to a deadlock in the leasing subsystem. [#119305][#119305]
-- If an individual [replica]({% link v23.2/architecture/replication-layer.md %})'s circuit breaker had tripped but the range was otherwise functional, for example, because the replica was partially partitioned away from the [leaseholder]({% link v23.2/architecture/replication-layer.md %}#leases), it was possible for a gateway to persistently error when contacting this replica instead of retrying against a functional leaseholder elsewhere. The [gateway]({% link v23.2/architecture/life-of-a-distributed-transaction.md %}#gateway) will now retry such errors against other replicas once. [#118737][#118737]
-- Fixed a bug in changefeed [webhook sinks]({% link v23.2/changefeed-sinks.md %}#webhook-sink) where the HTTP request body may not be initialized on retries, resulting in the error `http: ContentLength=... with Body length 0`. [#119326][#119326]
-- Fixed a bug where rangefeed resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a [range merge]({% link v23.2/architecture/distribution-layer.md %}#range-merges). [#119512][#119512]
+- If an individual [replica]({% link v24.1/architecture/replication-layer.md %})'s circuit breaker had tripped but the range was otherwise functional, for example, because the replica was partially partitioned away from the [leaseholder]({% link v24.1/architecture/replication-layer.md %}#leases), it was possible for a gateway to persistently error when contacting this replica instead of retrying against a functional leaseholder elsewhere. The [gateway]({% link v24.1/architecture/life-of-a-distributed-transaction.md %}#gateway) will now retry such errors against other replicas once. [#118737][#118737]
+- Fixed a bug in changefeed [webhook sinks]({% link v24.1/changefeed-sinks.md %}#webhook-sink) where the HTTP request body may not be initialized on retries, resulting in the error `http: ContentLength=... with Body length 0`. [#119326][#119326]
+- Fixed a bug where rangefeed resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a [range merge]({% link v24.1/architecture/distribution-layer.md %}#range-merges). [#119512][#119512]
- Fixed a condition where some files were not closed when inspecting backup metadata during BACKUP and RESTORE. Epic: none. [#119625][#119625]
-- Fixed a bug where some backup metadata files opened during [`RESTORE`]({% link v23.2/restore.md %}) were not closed. [#119625][#119625]
-- Fixed a bug that caused internal errors when executing an [`EXPORT`]({% link v23.2/export.md %}) statement where the query involved sorting by columns not explicitly included in the output, due to hidden columns in the input expression. [#119538][#119538]
-- Fixed a bug where a warning about the need to refresh data would remain displayed on the Active Executions view of the [Statements]({% link v23.2/ui-statements-page.md %}#active-executions-view) and [Transactions]({% link v23.2/ui-transactions-page.md %}#active-executions-view) pages despite enabling **Auto Refresh**. [#118675][#118675]
+- Fixed a bug where some backup metadata files opened during [`RESTORE`]({% link v24.1/restore.md %}) were not closed. [#119625][#119625]
+- Fixed a bug that caused internal errors when executing an [`EXPORT`]({% link v24.1/export.md %}) statement where the query involved sorting by columns not explicitly included in the output, due to hidden columns in the input expression. [#119538][#119538]
+- Fixed a bug where a warning about the need to refresh data would remain displayed on the Active Executions view of the [Statements]({% link v24.1/ui-statements-page.md %}#active-executions-view) and [Transactions]({% link v24.1/ui-transactions-page.md %}#active-executions-view) pages despite enabling **Auto Refresh**. [#118675][#118675]
Performance improvements
-- [Follower reads]({% link v23.2/follower-reads.md %}) for multi-region tables now default to prioritizing replicas in the same [locality]({% link v23.2/table-localities.md %}), when available, with node latency as a tie breaker. Previously, latency was the primary criteria. This can improve the performance and predictability of follower reads. [#112993][#112993]
+- [Follower reads]({% link v24.1/follower-reads.md %}) for multi-region tables now default to prioritizing replicas in the same [locality]({% link v24.1/table-localities.md %}), when available, with node latency as a tie breaker. Previously, latency was the primary criteria. This can improve the performance and predictability of follower reads. [#112993][#112993]
- During node startup, stores are now loaded in parallel by default, reducing start times for nodes with many stores. [#115285][#115285]
-- Improved the efficiency and performance of [encryption at rest]({% link v23.2/security-reference/encryption.md %}#encryption-at-rest). [#115454][#115454]
-- Rangefeeds, the infrastructure used for [changefeeds]({% link v23.2/change-data-capture-overview.md %}), now use a more efficient engine that reduces the number of goroutines and the associated Go scheduler pressure and latency. [#114410][#114410]
-- Rangefeeds, the infrastructure used for [changefeeds]({% link v23.2/change-data-capture-overview.md %}), now use a more efficient multiplexing protocol. [#114408][#114408]
-- The [cost-based optimizer]({% link v23.2/cost-based-optimizer.md %}) now generates constrained scans on indexes containing boolean, computed expressions. [#114798][#114798]
-- A separate RPC connection class is now used for most [Raft]({% link v23.2/architecture/replication-layer.md %}#raft) traffic. This improves isolation and reduces interference with foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic under high-load conditions. The new `COCKROACH_RAFT_USE_DEFAULT_CONNECTION_CLASS` environment variable can be set to use the default connection class instead (the previous behavior). [#117385][#117385]
-- Rangefeed traffic (typically for [changefeeds]({% link v23.2/change-data-capture-overview.md %})) is now separated into its own RPC connection class. This improves isolation and reduces interference with the foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic. The new `COCKROACH_RANGEFEED_USE_DEFAULT_CONNECTION_CLASS` environment variable can be set to use the default connection class, the previous default choice for rangefeeds. [#117730][#117730]
-- The initial scan traffic for [changefeeds]({% link v23.2/change-data-capture-overview.md %}#stream-row-level-changes-with-changefeeds), which can be significant, now uses a different RPC/TCP connection than the foreground SQL/KV traffic. This reduces interference between workloads, and reduces chances of head-of-line blocking issues. [#117810][#117810]
-- [`kafka_sink_config`]({% link v23.2/changefeed-sinks.md %}#kafka-sink-configuration) now supports specifying different client IDs for each changefeed, enabling users to define distinct Kafka quota configurations for each. For example, `CREATE CHANGEFEED FOR ... WITH kafka_sink_config='{"ClientID": "clientID1"}'` [#118643][#118643]
+- Improved the efficiency and performance of [encryption at rest]({% link v24.1/security-reference/encryption.md %}#encryption-at-rest). [#115454][#115454]
+- Rangefeeds, the infrastructure used for [changefeeds]({% link v24.1/change-data-capture-overview.md %}), now use a more efficient engine that reduces the number of goroutines and the associated Go scheduler pressure and latency. [#114410][#114410]
+- Rangefeeds, the infrastructure used for [changefeeds]({% link v24.1/change-data-capture-overview.md %}), now use a more efficient multiplexing protocol. [#114408][#114408]
+- The [cost-based optimizer]({% link v24.1/cost-based-optimizer.md %}) now generates constrained scans on indexes containing boolean, computed expressions. [#114798][#114798]
+- A separate RPC connection class is now used for most [Raft]({% link v24.1/architecture/replication-layer.md %}#raft) traffic. This improves isolation and reduces interference with foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic under high-load conditions. The new `COCKROACH_RAFT_USE_DEFAULT_CONNECTION_CLASS` environment variable can be set to use the default connection class instead (the previous behavior). [#117385][#117385]
+- Rangefeed traffic (typically for [changefeeds]({% link v24.1/change-data-capture-overview.md %})) is now separated into its own RPC connection class. This improves isolation and reduces interference with the foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic. The new `COCKROACH_RANGEFEED_USE_DEFAULT_CONNECTION_CLASS` environment variable can be set to use the default connection class, the previous default choice for rangefeeds. [#117730][#117730]
+- The initial scan traffic for [changefeeds]({% link v24.1/change-data-capture-overview.md %}#stream-row-level-changes-with-changefeeds), which can be significant, now uses a different RPC/TCP connection than the foreground SQL/KV traffic. This reduces interference between workloads, and reduces chances of head-of-line blocking issues. [#117810][#117810]
+- [`kafka_sink_config`]({% link v24.1/changefeed-sinks.md %}#kafka-sink-configuration) now supports specifying different client IDs for each changefeed, enabling users to define distinct Kafka quota configurations for each. For example, `CREATE CHANGEFEED FOR ... WITH kafka_sink_config='{"ClientID": "clientID1"}'` [#118643][#118643]
- Added the `changefeed.kafka_throttling_hist_nanos` metric, enhancing visibility into throttling times when CockroachDB operations exceed Kafka's quota limits. [#117693][#117693]
-- The [cost-based optimizer]({% link v23.2/cost-based-optimizer.md %}) now generates more efficient query plans for queries with comparisons of [timestamp]({% link v23.2/timestamp.md %}) and [interval]({% link v23.2/interval.md %}) columns, for example, `timestamp_col - '1 day'::INTERVAL > now()`. [#118307][#118307]
-- Statements from internal executors (use of SQL queries by the cluster itself) now correctly display when filtering by application name `$ internal` on the Statements page in [SQL Activity]({% link v23.2/ui-overview.md %}#sql-activity). Such statements are hidden when `$ internal` is not specified. [#114498][#114498]
+- The [cost-based optimizer]({% link v24.1/cost-based-optimizer.md %}) now generates more efficient query plans for queries with comparisons of [timestamp]({% link v24.1/timestamp.md %}) and [interval]({% link v24.1/interval.md %}) columns, for example, `timestamp_col - '1 day'::INTERVAL > now()`. [#118307][#118307]
+- Statements from internal executors (use of SQL queries by the cluster itself) now correctly display when filtering by application name `$ internal` on the Statements page in [SQL Activity]({% link v24.1/ui-overview.md %}#sql-activity). Such statements are hidden when `$ internal` is not specified. [#114498][#114498]
diff --git a/src/current/_includes/releases/v24.1/v24.1.0-alpha.5.md b/src/current/_includes/releases/v24.1/v24.1.0-alpha.5.md
index 7198b6c13a7..a16f0a3f67e 100644
--- a/src/current/_includes/releases/v24.1/v24.1.0-alpha.5.md
+++ b/src/current/_includes/releases/v24.1/v24.1.0-alpha.5.md
@@ -6,7 +6,7 @@ Release Date: April 1, 2024
-- [Changefeeds]({% link v24.1/change-data-capture-overview.md %}) now default to evenly distributing their work across all replicas, including followers, regardless of leaseholder placement. To disable this behavior, set the [cluster setting]({% link v24.1/cluster-settings.md %}) `changefeed.random_replica_selection.enabled ` to `false`. If disabled, changefeed planning reverts to its previous behavior for distributing work. [#120077][#120077]
+- [Changefeeds]({% link v24.1/change-data-capture-overview.md %}) now default to evenly distributing their work across all replicas, including followers, regardless of leaseholder placement. On upgrade to v24.1, running changefeed jobs will be restarted automatically as part of the upgrade process and will default to distributing work across replicas. To disable this behavior, set the [cluster setting]({% link v24.1/cluster-settings.md %}) `changefeed.random_replica_selection.enabled ` to `false`. If disabled, changefeed planning reverts to its previous behavior for distributing work. [#120077][#120077]
- When [physical cluster replication]({% link v24.1/physical-cluster-replication-overview.md %}) is enabled, the output of the `SHOW VIRTUAL CLUSTER ... WITH REPLICATION STATUS` command now displays replication lag. [#120782][#120782]
- When [physical cluster replication]({% link v24.1/physical-cluster-replication-overview.md %}) is enabled, the output of the `SHOW VIRTUAL CLUSTER WITH REPLICATION STATUS to 1` command has changed:
- The output no longer displays `replication_job_id` or `service_mode` return fields.
diff --git a/src/current/_includes/releases/v24.1/v24.1.0.md b/src/current/_includes/releases/v24.1/v24.1.0.md
index a714df0b529..37287450941 100644
--- a/src/current/_includes/releases/v24.1/v24.1.0.md
+++ b/src/current/_includes/releases/v24.1/v24.1.0.md
@@ -476,7 +476,7 @@ Before [upgrading to CockroachDB v24.1]({% link v24.1/upgrade-cockroach-version.
- [`AS OF SYSTEM TIME`]({% link v24.1/as-of-system-time.md %}) queries can no longer use a timestamp followed by a question mark to signify a future-time value. This was an undocumented syntax. [#116830](https://github.com/cockroachdb/cockroach/pull/116830)
- The [`READ COMMITTED`]({% link v24.1/read-committed.md %}) isolation level now requires the cluster to have a valid [enterprise license](https://cockroachlabs.com/docs/v24.1/licensing-faqs#obtain-a-license). Otherwise, transactions which are configured to run as `READ COMMITTED` will be upgraded to [`SERIALIZABLE`]({% link v24.1/demo-serializable.md %}), as described in the next note. [#120154](https://github.com/cockroachdb/cockroach/pull/120154)
-- The `sql.txn.read_committed_isolation.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) is now `true` by default. As a result for enterprise users, [`READ COMMITTED`]({% link v24.1/read-committed.md %}) transactions are **not** automatically upgraded to [`SERIALIZABLE`]({% link v24.1/demo-serializable.md %}), and will run as `READ COMMITTED` by default. On v23.2, refer to the [Upgrades of SQL Transaction Isolation Level](https://www.cockroachlabs.com/docs/v24.1/ui-sql-dashboard#upgrades-of-sql-transaction-isolation-level) graph in the DB Console to check whether any transaction is being upgraded from a weaker isolation level to `SERIALIZABLE`, and could therefore run differently on v24.1. [#118479](https://github.com/cockroachdb/cockroach/pull/118479)
+- The `sql.txn.read_committed_isolation.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) is now `true` by default. As a result for enterprise users, [`READ COMMITTED`]({% link v24.1/read-committed.md %}) transactions are **not** automatically upgraded to [`SERIALIZABLE`]({% link v24.1/demo-serializable.md %}), and will run as `READ COMMITTED` by default. On v23.2, refer to the [Upgrades of SQL Transaction Isolation Level]({% link v24.1/ui-sql-dashboard.md %}#upgrades-of-sql-transaction-isolation-level) graph in the DB Console to check whether any transaction is being upgraded from a weaker isolation level to `SERIALIZABLE`, and could therefore run differently on v24.1. [#118479](https://github.com/cockroachdb/cockroach/pull/118479)
Key Cluster Setting Changes
@@ -484,14 +484,14 @@ The following changes should be reviewed prior to upgrading. Default cluster set
- `sql.txn.read_committed_isolation.enabled` is now `true` by default. When set to `true`, transactions use the `READ COMMITTED` isolation level if specified by `BEGIN`/`SET` commands.
- If the cluster setting is `false`, as was the default in v23.2, such `READ COMMITTED` transactions will instead run as `SERIALIZABLE`.
- - To check whether any transactions are being upgraded to `SERIALIZABLE`, see the [**Upgrades of SQL Transaction Isolation Level**](https://www.cockroachlabs.com/docs/v24.1/ui-sql-dashboard#upgrades-of-sql-transaction-isolation-level) graph in the DB Console."
+ - To check whether any transactions are being upgraded to `SERIALIZABLE`, see the [**Upgrades of SQL Transaction Isolation Level**]({% link v24.1/ui-sql-dashboard.md %}#upgrades-of-sql-transaction-isolation-level) graph in the DB Console."
- The `changefeed.balance_range_distribution.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) is now deprecated. Instead, use the new cluster setting `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enabled=true`. It does not require `initial_scan='only'`, which was required by the old setting. [#115166][#115166]
- Added the [cluster setting]({% link v24.1/cluster-settings.md %}) `security.client_cert.subject_required.enabled` which enforces a mandatory requirement for the client certificate's role subject to be set. The subject can be defined through either the subject role option or by specifying the `root-cert-distinguished-name` and `node-cert-distinguished-name` properties. This setting applies to both RPC access and login via authCert. [#122368][#122368]
- The [cluster setting]({% link v24.1/cluster-settings.md %}) `sql.contention.record_serialization_conflicts.enabled` is now `on` by default. As a result, any [`40001` error]({% link v24.1/transaction-retry-error-reference.md %}) that contains conflicting transaction information will be recorded by the contention registry, improving the ability to troubleshoot. For more information, refer to the [Insights page]({% link v24.1/ui-insights-page.md %}) documentation. [#116664][#116664]
- The new [cluster setting]({% link v24.1/cluster-settings.md %}) `storage.sstable.compression_algorithm` configures the compression algorithm used when compressing sstable blocks. Supported values are: "snappy" and "zstd" [snappy = `1`, zstd = `2`]. Changing the default of snappy to zstd can result in substantial performance improvement, however, the effects this change may be highly dependent on the workload and data, so experimentation is recommended before enabling zstd in production environments.
- The new setting `storage.wal_failover.unhealthy_op_threshold` allows you to set the latency threshold at which a WAL (Write-Ahead Logging) write is considered unhealthy. When exceeded, the node will attempt to write WAL entries to a secondary store's volume. For more information, refer to [#120509][#120509]
- The new `server.max_open_transactions_per_gateway` [cluster setting]({% link v24.1/cluster-settings.md %}), when set to a non-negative value, allows only admin users to execute a query if the number of open transactions on the current gateway node is already at the configured limit. [#118781][#118781]
-- The new `server.redact_sensitive_settings.enabled` [cluster setting](https://www.cockroachlabs.com/docs/v24.1/cluster-settings) (`false` by default), when set to `true`, redacts the values of the following settings in the output of `SHOW` commands or other introspection interfaces. In the future, newly-added sensitive cluster settings will be redacted as well. Users with the `MODIFYCLUSTERSETTING` [privilege](https://www.cockroachlabs.com/docs/v24.1/security-reference/authorization#managing-privileges) can always view the unredacted settings. [#117729][#117729]
+- The new `server.redact_sensitive_settings.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) (`false` by default), when set to `true`, redacts the values of the following settings in the output of `SHOW` commands or other introspection interfaces. In the future, newly-added sensitive cluster settings will be redacted as well. Users with the `MODIFYCLUSTERSETTING` [privilege](https://www.cockroachlabs.com/docs/v24.1/security-reference/authorization#managing-privileges) can always view the unredacted settings. [#117729][#117729]
- The new boolean changefeed option [`ignore_disable_changefeed_replication`](../v24.1/create-changefeed.html#ignore-disable-changefeed-replication), when set to `true`, prevents the changefeed from filtering events even if CDC filtering is configured via the `disable_changefeed_replication` [session variable](../v24.1/session-variables.html), `sql.ttl.changefeed_replication.disabled` [cluster setting](../v24.1/cluster-settings.html), or the `ttl_disable_changefeed_replication` [table storage parameter](../v24.1/alter-table.html#table-storage-parameters). [#120255][#120255]
- The provisioned-rate field, if specified,
should no longer accept a disk-name or an optional bandwidth field. To
@@ -510,7 +510,7 @@ setting `kvadmission.store.provisioned_bandwidth` will be used. When set to a no
Known limitations
-For information about new and unresolved limitations in CockroachDB v24.1, with suggested workarounds where applicable, refer to [Known Limitations](https://www.cockroachlabs.com/docs/v24.1/known-limitations).
+For information about new and unresolved limitations in CockroachDB v24.1, with suggested workarounds where applicable, refer to [Known Limitations]({% link v24.1/known-limitations.md %}).
Additional resources
@@ -520,11 +520,11 @@ Cockroach University | [Introduction to Distributed SQL and CockroachDB](https:/
Cockroach University | [Practical First Steps with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+practical-first-steps-with-crdb+self-paced/about) | This course will give you the tools you need to get started with CockroachDB. During the course, you will learn how to spin up a cluster, use the Admin UI to monitor cluster activity, and use SQL shell to solve a set of hands-on exercises.
Cockroach University | [Enterprise Application Development with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+client-side-txn-handling+self-paced/about) | This course is the first in a series designed to equip you with best practices for mastering application-level (client-side) transaction management in CockroachDB. We'll dive deep on common differences between CockroachDB and legacy SQL databases and help you sidestep challenges you might encounter when migrating to CockroachDB from Oracle, PostgreSQL, and MySQL.
Cockroach University | [Building a Highly Resilient Multi-region Database using CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-resilience-in-multi-region+self-paced/about) | This course is part of a series introducing solutions to running low-latency, highly resilient applications for data-intensive workloads on CockroachDB. In this course we focus on surviving large-scale infrastructure failures like losing an entire cloud region without losing data during recovery. We’ll show you how to use CockroachDB survival goals in a multi-region cluster to implement a highly resilient database that survives node or network failures across multiple regions with zero data loss.
-Docs | [Migration Overview](https://www.cockroachlabs.com/docs/v24.1/migration-overview) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
+Docs | [Migration Overview]({% link v24.1/migration-overview.md %}) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
Docs | [Architecture Overview](https://www.cockroachlabs.com/docs/v24.1/architecture/overview) | This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.
-Docs | [SQL Feature Support](https://www.cockroachlabs.com/docs/v24.1/sql-feature-support) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
-Docs | [Change Data Capture Overview](https://www.cockroachlabs.com/docs/v24.1/change-data-capture-overview) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
-Docs | [Backup Architecture](https://www.cockroachlabs.com/docs/v24.1/backup-architecture) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
+Docs | [SQL Feature Support]({% link v24.1/sql-feature-support.md %}) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
+Docs | [Change Data Capture Overview]({% link v24.1/change-data-capture-overview.md %}) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
+Docs | [Backup Architecture]({% link v24.1/backup-architecture.md %}) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
[#115166]: https://github.com/cockroachdb/cockroach/pull/115166
[#113893]: https://github.com/cockroachdb/cockroach/pull/113893
diff --git a/src/current/_includes/releases/v24.1/v24.1.2.md b/src/current/_includes/releases/v24.1/v24.1.2.md
index 04b3c38e08b..aafc4e3c177 100644
--- a/src/current/_includes/releases/v24.1/v24.1.2.md
+++ b/src/current/_includes/releases/v24.1/v24.1.2.md
@@ -6,7 +6,7 @@ Release Date: July 2, 2024
-- Added error messages for unsupported Apache Pulsar [changefeed](https://www.cockroachlabs.com/docs/v24.1/create-changefeed) sink parameters, e.g. `topic_prefix is not yet supported`. [#124666][#124666]
+- Added error messages for unsupported Apache Pulsar [changefeed]({% link v24.1/create-changefeed.md %}) sink parameters, e.g. `topic_prefix is not yet supported`. [#124666][#124666]
- Fixed a bug that was present since v22.2 where [changefeeds]({% link v24.1/change-data-capture-overview.md %}) with long-running [initial scans]({% link v24.1/create-changefeed.md %}#initial-scan) might incorrectly restore checkpoint job progress and drop events during [changefeed restarts]({% link v24.1/changefeed-messages.md %}#duplicate-messages) due to transient errors or node restarts. The bug was most likely to occur in clusters with the following contributing factors:
- The `changefeed.shutdown_checkpoint.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) was enabled.
- The cluster settings `changefeed.frontier_checkpoint_frequency` and `low changefeed.frontier_highwater_lag_checkpoint_threshold` were set low, which resulted in the initial scan taking many multiples of the configured frequency to complete.
@@ -16,28 +16,28 @@ Release Date: July 2, 2024
Operational changes
-- Improved [disk usage metric reporting](https://www.cockroachlabs.com/docs/v24.1/ui-cluster-overview-page#capacity-metrics) over volumes that dynamically change their size over the life of the `cockroach` process. [#125050][#125050]
-- The default values for the following [cluster settings](https://www.cockroachlabs.com/docs/v24.1/cluster-settings) were updated from `100000` to `7500`. These settings control the maximum number of [fingerprints](https://www.cockroachlabs.com/docs/v24.1/ui-statements-page#sql-statement-fingerprints) (distinct combinations of statements and [transactions](https://www.cockroachlabs.com/docs/v24.1/transactions)) CockroachDB can store in memory, with stats being flushed on a `10m` [interval](https://www.cockroachlabs.com/docs/v24.1/interval) by default. You can increase these settings if your workload produces more unique fingerprints than this amount within the flush interval, and you notice that SQL stats are missing. [cockroachdb/cockroach#125554][#125554]
- - [`sql.metrics.max_mem_stmt_fingerprints`](https://www.cockroachlabs.com/docs/v24.1/cluster-settings#setting-sql-metrics-max-mem-stmt-fingerprints)
- - [`sql.metrics.max_mem_txn_fingerprints`](https://www.cockroachlabs.com/docs/v24.1/cluster-settings#setting-sql-metrics-max-mem-txn-fingerprints)
+- Improved [disk usage metric reporting]({% link v24.1/ui-cluster-overview-page.md %}#capacity-metrics) over volumes that dynamically change their size over the life of the `cockroach` process. [#125050][#125050]
+- The default values for the following [cluster settings]({% link v24.1/cluster-settings.md %}) were updated from `100000` to `7500`. These settings control the maximum number of [fingerprints]({% link v24.1/ui-statements-page.md %}#sql-statement-fingerprints) (distinct combinations of statements and [transactions]({% link v24.1/transactions.md %})) CockroachDB can store in memory, with stats being flushed on a `10m` [interval]({% link v24.1/interval.md %}) by default. You can increase these settings if your workload produces more unique fingerprints than this amount within the flush interval, and you notice that SQL stats are missing. [cockroachdb/cockroach#125554][#125554]
+ - [`sql.metrics.max_mem_stmt_fingerprints`]({% link v24.1/cluster-settings.md %}#setting-sql-metrics-max-mem-stmt-fingerprints)
+ - [`sql.metrics.max_mem_txn_fingerprints`]({% link v24.1/cluster-settings.md %}#setting-sql-metrics-max-mem-txn-fingerprints)
DB Console changes
-- The favicon now renders properly for [DB Console](https://www.cockroachlabs.com/docs/v24.1/ui-overview), along with other image files. [#122706][#122706]
+- The favicon now renders properly for [DB Console]({% link v24.1/ui-overview.md %}), along with other image files. [#122706][#122706]
Bug fixes
-- [`SHOW TYPES`](https://www.cockroachlabs.com/docs/v24.1/show-types) now includes [user-defined composite types](https://www.cockroachlabs.com/docs/v24.1/create-type#create-a-composite-data-type). It had omitted those types ever since composite types were added in v23.1. [#124817][#124817]
-- Fixed a crash introduced in v24.1.0-beta.2 that could occur when planning [statistics](https://www.cockroachlabs.com/docs/v24.1/cost-based-optimizer#table-statistics) collection on a table with a [virtual computed column](https://www.cockroachlabs.com/docs/v24.1/computed-columns) using a [user-defined type](https://www.cockroachlabs.com/docs/v24.1/create-type) when the [cluster setting](https://www.cockroachlabs.com/docs/v24.1/cluster-settings#setting-sql-stats-virtual-computed-columns-enabled) `sql.stats.virtual_computed_columns.enabled` (introduced in v24.1.0-alpha.1) was set to `true`. [#124996][#124996]
-- Fixed handling in the [declarative schema changer](https://www.cockroachlabs.com/docs/v24.1/online-schema-changes#declarative-schema-changer) when columns are included in the `STORING()` clause of a [`CREATE INDEX`](https://www.cockroachlabs.com/docs/v24.1/create-index) statement. CockroachDB now checks if the column is virtual up-front, and properly detects when a column is already handled by an existing [`INDEX`](https://www.cockroachlabs.com/docs/v24.1/indexes) when the column name has UTF-8 characters. [#125153][#125153]
-- Fixed a bug where a change to a [user-defined type](https://www.cockroachlabs.com/docs/v24.1/create-type) could cause queries against tables using that type to fail with an error message like: `"histogram.go:694: span must be fully contained in the bucket"`. The change to the user-defined type could come directly from an [`ALTER TYPE`](https://www.cockroachlabs.com/docs/v24.1/alter-type) statement, or indirectly from an [`ALTER DATABASE ... ADD REGION`](https://www.cockroachlabs.com/docs/v24.1/alter-database#add-region) or [`DROP REGION`](https://www.cockroachlabs.com/docs/v24.1/alter-database#drop-region) statement (which implicitly changes the `crdb_internal_region` type). This bug had existed since UDTs were introduced in v20.2. [#124810][#124810]
-- Fixed a bug where [telemetry logs](https://www.cockroachlabs.com/docs/v24.1/logging#telemetry) had the same [statement fingerprint](https://www.cockroachlabs.com/docs/v24.1/ui-statements-page#sql-statement-fingerprints) ID for different SQL statements. [#125000][#125000]
-- Fixed an issue where [adding a column](https://www.cockroachlabs.com/docs/v24.1/alter-table#add-column) with a default value of an empty [array](https://www.cockroachlabs.com/docs/v24.1/array) would not succeed. [#125325][#125325]
-- [`ALTER TABLE ... ADD CONSTRAINT UNIQUE`](https://www.cockroachlabs.com/docs/v24.1/alter-table) will now fail with a well-formed error message and code `42601` if a statement tries to add a [unique constraint](https://www.cockroachlabs.com/docs/v24.1/unique) on an expression. [#125417][#125417]
-- Fixed a bug where the [`public` schema](https://www.cockroachlabs.com/docs/v24.1/schema-design-overview#schemas) would be created with the wrong owner. Previously the [`admin` role](https://www.cockroachlabs.com/docs/v24.1/security-reference/authorization#roles) would own the `public` schema. Now, the database owner is also the owner of the `public` schema. The owner can be altered after the schema is created. [#125533][#125533]
-- Fixed a bug in v24.1, v23.2, and v23.1 where using the `changefeed.aggregator.flush_jitter` [cluster setting](https://www.cockroachlabs.com/docs/v24.1/cluster-settings#setting-changefeed-aggregator-flush-jitter) with the [`min_checkpoint_frequency`](https://www.cockroachlabs.com/docs/v24.1/create-changefeed#min-checkpoint-frequency) option set to `0` could cause panics. [#125459][#125459]
+- [`SHOW TYPES`]({% link v24.1/show-types.md %}) now includes [user-defined composite types]({% link v24.1/create-type.md %}#create-a-composite-data-type). It had omitted those types ever since composite types were added in v23.1. [#124817][#124817]
+- Fixed a crash introduced in v24.1.0-beta.2 that could occur when planning [statistics]({% link v24.1/cost-based-optimizer.md %}#table-statistics) collection on a table with a [virtual computed column]({% link v24.1/computed-columns.md %}) using a [user-defined type]({% link v24.1/create-type.md %}) when the [cluster setting]({% link v24.1/cluster-settings.md %}#setting-sql-stats-virtual-computed-columns-enabled) `sql.stats.virtual_computed_columns.enabled` (introduced in v24.1.0-alpha.1) was set to `true`. [#124996][#124996]
+- Fixed handling in the [declarative schema changer]({% link v24.1/online-schema-changes.md %}#declarative-schema-changer) when columns are included in the `STORING()` clause of a [`CREATE INDEX`]({% link v24.1/create-index.md %}) statement. CockroachDB now checks if the column is virtual up-front, and properly detects when a column is already handled by an existing [`INDEX`]({% link v24.1/indexes.md %}) when the column name has UTF-8 characters. [#125153][#125153]
+- Fixed a bug where a change to a [user-defined type]({% link v24.1/create-type.md %}) could cause queries against tables using that type to fail with an error message like: `"histogram.go:694: span must be fully contained in the bucket"`. The change to the user-defined type could come directly from an [`ALTER TYPE`]({% link v24.1/alter-type.md %}) statement, or indirectly from an [`ALTER DATABASE ... ADD REGION`]({% link v24.1/alter-database.md %}#add-region) or [`DROP REGION`]({% link v24.1/alter-database.md %}#drop-region) statement (which implicitly changes the `crdb_internal_region` type). This bug had existed since UDTs were introduced in v20.2. [#124810][#124810]
+- Fixed a bug where [telemetry logs]({% link v24.1/logging.md %}#telemetry) had the same [statement fingerprint]({% link v24.1/ui-statements-page.md %}#sql-statement-fingerprints) ID for different SQL statements. [#125000][#125000]
+- Fixed an issue where [adding a column]({% link v24.1/alter-table.md %}#add-column) with a default value of an empty [array]({% link v24.1/array.md %}) would not succeed. [#125325][#125325]
+- [`ALTER TABLE ... ADD CONSTRAINT UNIQUE`]({% link v24.1/alter-table.md %}) will now fail with a well-formed error message and code `42601` if a statement tries to add a [unique constraint]({% link v24.1/unique.md %}) on an expression. [#125417][#125417]
+- Fixed a bug where the [`public` schema]({% link v24.1/schema-design-overview.md %}#schemas) would be created with the wrong owner. Previously the [`admin` role](https://www.cockroachlabs.com/docs/v24.1/security-reference/authorization#roles) would own the `public` schema. Now, the database owner is also the owner of the `public` schema. The owner can be altered after the schema is created. [#125533][#125533]
+- Fixed a bug in v24.1, v23.2, and v23.1 where using the `changefeed.aggregator.flush_jitter` [cluster setting]({% link v24.1/cluster-settings.md %}#setting-changefeed-aggregator-flush-jitter) with the [`min_checkpoint_frequency`]({% link v24.1/create-changefeed.md %}#min-checkpoint-frequency) option set to `0` could cause panics. [#125459][#125459]
- The log message `"expiration of liveness record ... is not greater than expiration of the previous lease ... after liveness heartbeat"` is no longer generated. [#125449][#125449]
-- Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating [`INSERT`s](https://www.cockroachlabs.com/docs/v24.1/insert) into [`REGIONAL BY ROW`](https://www.cockroachlabs.com/docs/v24.1/set-locality#set-the-table-locality-to-regional-by-row) tables where the source was a `VALUES` clause with a single row and at least one boolean expression. [#126209][#126209]
+- Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating [`INSERT`s]({% link v24.1/insert.md %}) into [`REGIONAL BY ROW`]({% link v24.1/table-localities.md %}#regional-by-row-tables) tables where the source was a `VALUES` clause with a single row and at least one boolean expression. [#126209][#126209]
Performance improvements
@@ -46,7 +46,7 @@ Release Date: July 2, 2024
Miscellaneous
-- A [changefeed](https://www.cockroachlabs.com/docs/v24.1/create-changefeed) optimization to reduce duplicates during aggregator restarts has been disabled due to poor performance. [#124996][#124996]
+- A [changefeed]({% link v24.1/create-changefeed.md %}) optimization to reduce duplicates during aggregator restarts has been disabled due to poor performance. [#124996][#124996]
diff --git a/src/current/_includes/releases/v24.1/v24.1.3.md b/src/current/_includes/releases/v24.1/v24.1.3.md
new file mode 100644
index 00000000000..d1a442252cd
--- /dev/null
+++ b/src/current/_includes/releases/v24.1/v24.1.3.md
@@ -0,0 +1,71 @@
+## v24.1.3
+
+Release Date: August 1, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
SQL language changes
+
+- [`EXPLAIN ANALYZE`]({% link v23.2/explain-analyze.md %}) statements are now supported when executed via Cloud Console [SQL shell]({% link cockroachcloud/sql-shell.md %}). [#125563][#125563]
+- Added the [`sql.auth.grant_option_inheritance.enabled` cluster setting]({% link v24.1/cluster-settings.md %}#setting-sql-auth-grant-option-inheritance-enabled). The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with [`WITH GRANT OPTION`]({% link v24.1/grant.md %}) can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership. [#126300][#126300]
+
+
Operational changes
+
+- `crdb_internal.cluster_execution_insights.txt` and `crdb_internal.cluster_txn_execution_insights.txt` have been removed from the [debug zip]({% link v24.1/cockroach-debug-zip.md %}). These files contained cluster-wide insights for statements and transactions. Users can still rely on the [per-node execution]({% link v24.1/cockroach-debug-zip.md %}#files) insights in `crdb_internal.node_execution_insights.txt` and `crdb_internal.node_txn_execution_insights.txt`. [#125807][#125807]
+- For the [TELEMETRY logging channel]({% link v24.1/logging.md %}#telemetry), TCL `sampled_query` events will now be sampled at the rate specified by the setting [`sql.telemetry.query_sampling.max_event_frequency`]({% link v24.1/cluster-settings.md %}#setting-sql-telemetry-query-sampling-max-event-frequency), which is already used to limit the rate of sampling DML statements. [#126729][#126729]
+
+
Bug fixes
+
+- Fixed a bug where collection of [debug information]({% link v24.1/cockroach-debug-zip.md %}) for very long-running [jobs]({% link v24.1/show-jobs.md %}) could use excessive space in the `job_info` system table and cause some interactions with the jobs system to become slow. [#126122][#126122]
+- Fixed a bug where a change to a [user-defined type (UDT)]({% link v24.1/create-type.md %}) could cause queries against tables using that type to fail with an error: `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could come directly from an [`ALTER TYPE`]({% link v24.1/alter-type.md %}) statement, or indirectly from an [`ALTER DATABASE ADD REGION`]({% link v24.1/alter-database.md %}#add-region) or [`DROP REGION`]({% link v24.1/alter-database.md %}#drop-region) statement (which implicitly change the [`crdb_internal_region`]({% link v24.1/alter-table.md %}#set-the-table-locality-to-regional-by-row) type). This bug has existed since UDTs were introduced in v20.2. [#125800][#125800]
+- Fixed a bug in which constant [`LIKE`]({% link v24.1/sql-feature-support.md %}#scalar-expressions-and-boolean-formulas) patterns containing certain sequences of backslashes did not become constrained scans. This bug has been present since v21.1.13 when support for building constrained scans from `LIKE` patterns containing backslashes was added. [#125539][#125539]
+- Fixed the statistics estimation code in the [optimizer]({% link v24.1/cost-based-optimizer.md %}) so it does not use the empty histograms produced if [histogram collection]({% link v24.1/cost-based-optimizer.md %}#control-histogram-collection) has been disabled during stats collection due to excessive memory utilization. Now the optimizer will rely on distinct counts instead of the empty histograms and should produce better plans as a result. This bug has existed since CockroachDB v22.1. [#126153][#126153]
+- Fixed a bug where [`CREATE TABLE`]({% link v24.1/create-table.md %}) statements with [index expressions]({% link v24.1/expression-indexes.md %}) could hit undefined column errors on [transaction retries]({% link v24.1/transactions.md %}#transaction-retries). [#125967][#125967]
+- Fixed a bug where CockroachDB would hit an internal error when evaluating [`INSERT`s]({% link v24.1/insert.md %}) into [`REGIONAL BY ROW`]({% link v24.1/table-localities.md %}#regional-by-row-tables) tables where the source is a [`VALUES` clause]({% link v24.1/selection-queries.md %}#values-clause) with a single row and at least one boolean expression. The bug was introduced in v23.2.0. [#125505][#125505]
+- Fixed a bug in [`cockroach debug tsdump`]({% link v24.1/cockroach-debug-tsdump.md %}) where the command fails when a custom SQL port is used and the [`--format=raw`]({% link v24.1/cockroach-debug-tsdump.md %}#flags) flag is provided. [#125980][#125980]
+- Fixed a bug where a [user-defined function (UDF)]({% link v24.1/user-defined-functions.md %}) that shared a name with a [built-in function]({% link v24.1/functions-and-operators.md %}#built-in-functions) would not be resolved, even if the UDF had higher precedence according to the [`search_path`]({% link v24.1/sql-name-resolution.md %}#search-path) variable. [#126296][#126296]
+- Fixed a bug that caused [background jobs]({% link v24.1/show-jobs.md %}) to incorrectly respect a statement timeout. [#126820][#126820]
+- Fixed a bug where [`ALTER DATABASE ... DROP REGION`]({% link v24.1/alter-database.md %}#drop-region) could fail if any tables under the given database have [indexes on expressions]({% link v24.1/expression-indexes.md %}). [#126599][#126599]
+- Fixed a PostgreSQL incompatibility bug when inputting `public` as user name for [built-in functions]({% link v24.1/functions-and-operators.md %}) such as `has_database_privilege` and `has_schema_privilege`. [#126851][#126851]
+- Fixed a bug when [restoring]({% link v24.1/restore.md %}) a database with a [composite type]({% link v24.1/create-type.md %}#create-a-composite-data-type). [#126428][#126428]
+- Fixed a bug where the [Databases]({% link v24.1/ui-databases-page.md %}) page crashed if the range information was not available. [#127092][#127092]
+- Fixed a bug where CockroachDB could incorrectly evaluate an [`IS NOT NULL`]({% link v24.1/null-handling.md %}#nulls-and-simple-comparisons) filter if it was applied to non-`NULL` tuples that had `NULL` elements, such as `(1, NULL)` or `(NULL, NULL)`. This bug has existed since v20.2. [#126938][#126938]
+- The `sql_sequence_cached_node` value of the [`serial_normalization` setting]({% link v24.1/serial.md %}#modes-of-operation) was not correctly formatted. This could lead to errors while connecting to CockroachDB if the default value of `serial_normalization` was set to `serial_normalization`. The formatting bug was fixed, which also fixes the errors when connecting. [#127675][#127675]
+
+
Performance improvements
+
+- Starting a `cockroach` process will no longer flush buffered [logs]({% link v24.1/logging-overview.md %}) to configured [logging sinks]({% link v24.1/configure-logs.md %}#configure-log-sinks) unless the process is running under `systemd`, where cockroach runs with the `NOTIFY_SOCKET` environment variable. [#126305][#126305]
+- [Schema changes]({% link v24.1/online-schema-changes.md %}) that cause a data backfill, such as adding a non-nullable column or changing the primary key, will now split and scatter the temporary indexes used to perform the change. This reduces the chance of causing a [write hotspot]({% link v24.1/performance-best-practices-overview.md %}#hot-spots) that can slow down foreground traffic. [#126684][#126684]
+
+
+
+
Contributors
+
+This release includes 122 merged PRs by 39 authors.
+
+
+
+- URLs in the following SQL statements are now sanitized of any secrets before being written to [unredacted logs]({% link v24.1/configure-logs.md %}#redact-logs). [#127506][#127506]
+ - [`ALTER BACKUP SCHEDULE`]({% link v24.1/alter-backup-schedule.md %})
+ - [`ALTER BACKUP`]({% link v24.1/alter-backup.md %})
+ - [`ALTER CHANGEFEED SET sink`]({% link v24.1/alter-changefeed.md %}#set-options-on-a-changefeed)
+ - [`BACKUP`]({% link v24.1/backup.md %})
+ - [`COPY`]({% link v24.1/copy-from.md %})
+ - [`CREATE CHANGEFEED`]({% link v24.1/create-changefeed.md %})
+ - [`CREATE EXTERNAL CONNECTION`]({% link v24.1/create-external-connection.md %})
+ - [`CREATE SCHEDULE FOR BACKUP`]({% link v24.1/create-schedule-for-backup.md %})
+ - [`CREATE SCHEDULE FOR CHANGEFEED`]({% link v24.1/create-schedule-for-changefeed.md %})
+ - [`EXPORT`]({% link v24.1/export.md %})
+ - [`IMPORT INTO`]({% link v24.1/import-into.md %})
+ - [`RESTORE`]({% link v24.1/restore.md %})
+ - [`SHOW BACKUPS`]({% link v24.1/show-backup.md %})
+ - [`SHOW BACKUP`]({% link v24.1/show-backup.md %})
+
+
+
+- Added a new Kafka [changefeed sink]({% link v24.1/changefeed-sinks.md %}) that uses the [`franz-go` library](https://github.com/twmb/franz-go) and CockroachDB's `batching_sink` implementation. The new Kafka sink can be enabled with the `changefeed.new_kafka_sink_enabled` [cluster setting]({% link v24.1/cluster-settings.md %}), which is disabled by default. [#128018][#128018]
+- The new Kafka sink, enabled with [`changefeed.new_kafka_sink_enabled`]({% link v24.1/cluster-settings.md %}), as well as the Google Cloud Pub/Sub sink, now display notices indicating the topics that a changefeed will emit to. [#128333][#128333]
+
+
SQL language changes
+
+- Added a new `sql.auth.grant_option_for_owner.enabled` [cluster setting]({% link v24.1/cluster-settings.md %}) to prevent the [`GRANT OPTION`]({% link v24.1/show-grants.md %}#privilege-grants) from being given to the owner of an object by default. The cluster setting defaults to `true`, retaining the existing behavior; when it is set to `false`, the `GRANT OPTION` is not implicitly given to an object's owner. The owner will still have all privileges on an object except the ability to grant privileges to other users. [#126959][#126959]
+
+
Command-line changes
+
+- A `--locality-file` flag is now available on the [`cockroach start`]({% link v24.1/cockroach-start.md %}) and [`cockroach start-single-node`]({% link v24.1/cockroach-start-single-node.md %}) commands. This allows specifying node [locality]({% link v24.1/cockroach-start.md %}#locality) (typically a `region` value) as a file, rather than by using the [`--locality` flag]({% link v24.1/cockroach-start.md %}#locality). [#127475][#127475]
+
+
DB Console changes
+
+- The [**Databases** and **Tables** pages]({% link v24.1/ui-databases-page.md %}) in the DB Console now show a loading state while loading information for databases and tables, including size and range counts. [#127748][#127748]
+- On the [**Databases** page]({% link v24.1/ui-databases-page.md %}) in the DB Console, table names will no longer appear with quotes around the schema and table name. [#127766][#127766]
+
+
Bug fixes
+
+- Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating [`INSERT`s]({% link v24.1/insert.md %}) into [`REGIONAL BY ROW`]({% link v24.1/alter-table.md %}#set-the-table-locality-to-regional-by-row) tables where the source was a [`VALUES`]({% link v24.1/selection-queries.md %}#values-clause) clause with a single row and at least one Boolean expression. [#127277][#127277]
+- Fixed a bug in which the [`DISCARD`]({% link v24.1/alter-table.md %}) statement was disallowed when the [session setting]({% link v24.1/session-variables.md %}#default-transaction-read-only) `default_transaction_read_only` was set to `on`. [#127363][#127363]
+- In the [DB Console event log]({% link v24.1/ui-overview-dashboard.md %}#events-panel), [`ALTER ROLE`]({% link v24.1/alter-role.md %}) events now display correctly even when no [role options]({% link v24.1/alter-role.md %}#role-options) are included in the `ALTER ROLE` statement. [#126568][#126568]
+- Fixed a formatting issue with the `sql_sequence_cached_node` value of the [`serial_normalization` session setting]({% link v24.1/session-variables.md %}). This could lead to an error connecting to CockroachDB if this value was set as the default for `serial_normalization` via the cluster setting [`sql.defaults.serial_normalization`]({% link v24.1/cluster-settings.md %}#setting-sql-defaults-serial-normalization). [#127673][#127673]
+- Fixed a bug where [dropping `ENUM` values]({% link v24.1/alter-type.md %}#drop-a-value-in-a-user-defined-type) that were referenced by [index expressions]({% link v24.1/expression-indexes.md %}) could fail with an error. [#127454][#127454]
+- Fixed a bug that caused a memory leak when executing SQL statements with [comments]({% link v24.1/comment-on.md %}), for example, `SELECT /* comment */ 1;`. Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the [SQL session]({% link v24.1/show-sessions.md %}). This bug had been present since v23.1. [#127759][#127759]
+- Fixed a bug where [schema changes]({% link v24.1/online-schema-changes.md %}) could hang if the lease rangefeed stopped receiving updates. [#127487][#127487]
+- Fixed small memory leaks that would occur during [changefeed]({% link v24.1/change-data-capture-overview.md %}) creation. [#128018][#128018]
+- Fixed a memory leak that could occur when specifying a non-existent [virtual cluster]({% link v24.1/cluster-virtualization-overview.md %}) name in the connection string. [#128106][#128106]
+- Fixed a bug where [`CREATE INDEX IF NOT EXISTS`]({% link v24.1/create-index.md %}) would not correctly short-circuit if the given index already existed. [#128311][#128311]
+- Fixed a bug in syntax validation, in which the `DESCENDING` clause was not allowed for non-terminal columns of an [inverted index]({% link v24.1/inverted-indexes.md %}). Only the last column of an inverted index should be prevented from being `DESCENDING`. This is now properly checked. [#128311][#128311]
+- Fixed a bug where an [index]({% link v24.1/indexes.md %}) could store a column in the primary index if that column had a mixed-case name. [#128311][#128311]
+- Setting or dropping a default value on a [computed column]({% link v24.1/computed-columns.md %}) is now blocked, even for `NULL` defaults. Previously, setting or dropping a default value on a computed column was a no-op. [#128466][#128466]
+- Fixed a bug that could cause spurious user permission errors when multiple databases shared a common schema with a routine referencing a table. The bug had existed since v22.2 when [user-defined functions (UDFs)]({% link v24.1/user-defined-functions.md %}) were introduced. [#126412][#126412]
+- Fixed a bug where [`debug zip`]({% link v24.1/cockroach-debug-zip.md %}) would return an error while fetching unstructured/malformed logs. [#128605][#128605]
+- Fixed a bug where a hash-sharded [constraint]({% link v24.1/constraints.md %}) could not be created if it referred to columns that had a backslash in the name. [#128521][#128521]
+- Fixed a bug in which the output of [`EXPLAIN (OPT, REDACT)`]({% link v24.1/explain.md %}) for various `CREATE` statements was not redacted. This bug had existed since [`EXPLAIN (REDACT)`]({% link v24.1/explain.md %}#parameters) was introduced in v23.1 and affects the following statements:
+ - `EXPLAIN (OPT, REDACT) CREATE TABLE`
+ - `EXPLAIN (OPT, REDACT) CREATE VIEW`
+ - `EXPLAIN (OPT, REDACT) CREATE FUNCTION` [#128489][#128489]
+
+[#126412]: https://github.com/cockroachdb/cockroach/pull/126412
+[#126568]: https://github.com/cockroachdb/cockroach/pull/126568
+[#126959]: https://github.com/cockroachdb/cockroach/pull/126959
+[#127277]: https://github.com/cockroachdb/cockroach/pull/127277
+[#127363]: https://github.com/cockroachdb/cockroach/pull/127363
+[#127390]: https://github.com/cockroachdb/cockroach/pull/127390
+[#127454]: https://github.com/cockroachdb/cockroach/pull/127454
+[#127475]: https://github.com/cockroachdb/cockroach/pull/127475
+[#127487]: https://github.com/cockroachdb/cockroach/pull/127487
+[#127506]: https://github.com/cockroachdb/cockroach/pull/127506
+[#127637]: https://github.com/cockroachdb/cockroach/pull/127637
+[#127673]: https://github.com/cockroachdb/cockroach/pull/127673
+[#127748]: https://github.com/cockroachdb/cockroach/pull/127748
+[#127759]: https://github.com/cockroachdb/cockroach/pull/127759
+[#127766]: https://github.com/cockroachdb/cockroach/pull/127766
+[#128018]: https://github.com/cockroachdb/cockroach/pull/128018
+[#128106]: https://github.com/cockroachdb/cockroach/pull/128106
+[#128185]: https://github.com/cockroachdb/cockroach/pull/128185
+[#128189]: https://github.com/cockroachdb/cockroach/pull/128189
+[#128311]: https://github.com/cockroachdb/cockroach/pull/128311
+[#128324]: https://github.com/cockroachdb/cockroach/pull/128324
+[#128333]: https://github.com/cockroachdb/cockroach/pull/128333
+[#128348]: https://github.com/cockroachdb/cockroach/pull/128348
+[#128466]: https://github.com/cockroachdb/cockroach/pull/128466
+[#128489]: https://github.com/cockroachdb/cockroach/pull/128489
+[#128521]: https://github.com/cockroachdb/cockroach/pull/128521
+[#128605]: https://github.com/cockroachdb/cockroach/pull/128605
+[#128625]: https://github.com/cockroachdb/cockroach/pull/128625
+[170656f4a]: https://github.com/cockroachdb/cockroach/commit/170656f4a
+[3b9f14556]: https://github.com/cockroachdb/cockroach/commit/3b9f14556
+[633a858c9]: https://github.com/cockroachdb/cockroach/commit/633a858c9
+[656dc596e]: https://github.com/cockroachdb/cockroach/commit/656dc596e
+[b5560ebc1]: https://github.com/cockroachdb/cockroach/commit/b5560ebc1
+[d0337dc3d]: https://github.com/cockroachdb/cockroach/commit/d0337dc3d
+[eefaac961]: https://github.com/cockroachdb/cockroach/commit/eefaac961
+[f04d25e57]: https://github.com/cockroachdb/cockroach/commit/f04d25e57
diff --git a/src/current/_includes/releases/v24.2/feature-detail-key.html b/src/current/_includes/releases/v24.2/feature-detail-key.html
new file mode 100644
index 00000000000..3f8cccf7a37
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-detail-key.html
@@ -0,0 +1,25 @@
+
+
+
+
Feature detail key
+
+
+
+
+
★
+
Features marked "All★" were recently made available in the CockroachDB Cloud platform. They are available for all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.
+
+
+
★★
+
Features marked "All★★" were recently made available via tools maintained outside of the CockroachDB binary. They are available to use with all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.
+
+
+
{% include icon-yes.html %}
+
Feature is available for this deployment method of CockroachDB as specified in the icon’s column: CockroachDB Self-Hosted, CockroachDB Dedicated, or CockroachDB Serverless.
+
+
+
{% include icon-no.html %}
+
Feature is not available for this deployment method of CockroachDB as specified in the icon’s column: CockroachDB Self-Hosted, CockroachDB Dedicated, or CockroachDB Serverless.
+
+
+
diff --git a/src/current/_includes/releases/v24.2/feature-highlights-change-data-capture.html b/src/current/_includes/releases/v24.2/feature-highlights-change-data-capture.html
new file mode 100644
index 00000000000..7f96335c063
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-highlights-change-data-capture.html
@@ -0,0 +1,29 @@
+
+ Changefeed users can distinguish between JSON NULL values and SQL NULL values in changefeed messages, by using the
+ encode_json_value_null_as_object option with CREATE CHANGEFEED. This enables a consumer to distinguish an unset value from a null JSON token.
+
+
+
24.2
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
diff --git a/src/current/_includes/releases/v24.2/feature-highlights-migrations.html b/src/current/_includes/releases/v24.2/feature-highlights-migrations.html
new file mode 100644
index 00000000000..7df377498f3
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-highlights-migrations.html
@@ -0,0 +1,44 @@
+
+
+
+
Feature
+
Availability
+
+
+
Ver.
+
Self-Hosted
+
Dedicated
+
Serverless
+
+
+
+
+
+
MOLT tooling is now available as a Docker container
+
+ Users can now deploy CockroachDB's MOLT Fetch and Verify tools using a multi-platform Docker image that supports both linux/amd64 and linux/arm64 architectures. For installation details, refer to MOLT Releases.
+
+
+
All★★
+
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
+
+ MOLT Fetch transformation rules
+
+
+ Column exclusion, computed columns, and partitioned tables are now supported in table migrations with MOLT Fetch. They are supported via a new transformations framework that allows the user to specify a JSON file with instructions on how MOLT Fetch should treat certain schemas, tables, or underlying columns.
+
+
+
All★★
+
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
diff --git a/src/current/_includes/releases/v24.2/feature-highlights-observability.html b/src/current/_includes/releases/v24.2/feature-highlights-observability.html
new file mode 100644
index 00000000000..0843206ca6b
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-highlights-observability.html
@@ -0,0 +1,41 @@
+
+
+
+
Feature
+
Availability
+
+
+
Ver.
+
Self-Hosted
+
Dedicated
+
Serverless
+
+
+
+
+
+
CockroachDB Dedicated clusters on Azure now integrate with Azure Monitor for metrics and logs (limited access)
+
+ Exporting logs to Azure Monitor Logs and exporting metrics to Azure Monitor Metrics and Prometheus-compatible metric sinks from your CockroachDB Dedicated cluster hosted on Azure is now supported in Limited Access.
+
+
+
All★
+
+
{% include icon-no.html %}
+
{% include icon-yes.html %}
+
{% include icon-no.html %}
+
+
+
+
Improved Overload Dashboard
+
+ Updates to the Overload dashboard include moving important metrics nearer the top and adding more informative tooltips. These enhancements aim to help users more easily identify when Admission Control mechanisms are activated due to overload.
+
+
+
v24.2
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
diff --git a/src/current/_includes/releases/v24.2/feature-highlights-operations.html b/src/current/_includes/releases/v24.2/feature-highlights-operations.html
new file mode 100644
index 00000000000..7234df9546a
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-highlights-operations.html
@@ -0,0 +1,42 @@
+
+
+
+
Feature
+
Availability
+
+
+
Ver.
+
Self-Hosted
+
Dedicated
+
Serverless
+
+
+
+
+
+
CockroachDB Cloud Terraform Provider - Operations at scale
+
+ This release includes updates to enhance operations at scale using the CockroachDB Cloud Terraform Provider across multiple Terraform projects. A new Resource for User Role Grants makes it easier to manage user account access to clusters across projects. A new Data Source for Folders allows better access to clusters organized in folders across multiple projects. A new Service Account Resource brings CockroachDB Cloud API access under Terraform management.
+
+
+
All★★
+
+
{% include icon-no.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
+
Support for Optional Innovation Releases
+
As of v24.2, CockroachDB has shifted from a 6-month major version release cycle to a 3-month cycle. The additional versions, called Innovation releases, are optional and can be skipped for CockroachDB Dedicated and Self-Hosted, but are required for CockroachDB Serverless. Innovation releases have shorter support windows than Regular releases. Users can upgrade directly from a Regular release to the next Regular release, without needing to upgrade to the intermediary Innovation release.
+
+
In CockroachDB Dedicated, users can now choose to deploy or upgrade a cluster on any supported version. CockroachDB Serverless clusters continue to receive all major versions and patches for both Innovation releases and Regular releases as they become available.
+
+
24.2
+
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-no.html %} (not skippable)
+
+
+
diff --git a/src/current/_includes/releases/v24.2/feature-highlights-sql.html b/src/current/_includes/releases/v24.2/feature-highlights-sql.html
new file mode 100644
index 00000000000..868a2cb285b
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/feature-highlights-sql.html
@@ -0,0 +1,56 @@
+
+
+
+
Feature
+
Availability
+
+
+
Ver.
+
Self-Hosted
+
Dedicated
+
Serverless
+
+
+
+
+
+
Vector search
+
+ Users can now store
+ VECTOR
+ embeddings within CockroachDB with pgvector-compatible semantics to build AI-driven applications. Numerous built-in functions have been added for running similarity search across vectors. Note that vector indexing is not supported in this release. This feature is in Preview and requires an Enterprise license.
+
+
+
24.2
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
+
Generic query plans
+
+ Users can now enable generic query plans. Generic query plans optimize query execution for prepared statements by reusing precompiled query plans, and significantly reduce the CPU overhead associated with parsing and planning repeated queries, at the expense of plan quality. This feature is in Preview and requires an Enterprise license.
+
+
+
24.2
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
+
+ COMMENT ON TYPE
+
+
+ CockroachDB users can now annotate a type with a comment and reference the comment later for documentation purposes.
+
+
+
24.2
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
{% include icon-yes.html %}
+
+
+
diff --git a/src/current/_includes/releases/v24.2/v24.2.0-alpha.1.md b/src/current/_includes/releases/v24.2/v24.2.0-alpha.1.md
index 549411d5985..3fb3d259685 100644
--- a/src/current/_includes/releases/v24.2/v24.2.0-alpha.1.md
+++ b/src/current/_includes/releases/v24.2/v24.2.0-alpha.1.md
@@ -176,6 +176,7 @@ This release includes 1234 merged PRs by 97 authors.
[#124681]: https://github.com/cockroachdb/cockroach/pull/124681
[#124721]: https://github.com/cockroachdb/cockroach/pull/124721
[#124730]: https://github.com/cockroachdb/cockroach/pull/124730
+[#124735]: https://github.com/cockroachdb/cockroach/pull/124735
[#124788]: https://github.com/cockroachdb/cockroach/pull/124788
[#124830]: https://github.com/cockroachdb/cockroach/pull/124830
[#124851]: https://github.com/cockroachdb/cockroach/pull/124851
@@ -209,4 +210,5 @@ This release includes 1234 merged PRs by 97 authors.
[#125968]: https://github.com/cockroachdb/cockroach/pull/125968
[#126084]: https://github.com/cockroachdb/cockroach/pull/126084
[#125744]: https://github.com/cockroachdb/cockroach/pull/125744
+[#125910]: https://github.com/cockroachdb/cockroach/pull/125910
[#125979]: https://github.com/cockroachdb/cockroach/pull/125979
\ No newline at end of file
diff --git a/src/current/_includes/releases/v24.2/v24.2.0-beta.3.md b/src/current/_includes/releases/v24.2/v24.2.0-beta.3.md
new file mode 100644
index 00000000000..3ed6e1ea9a6
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/v24.2.0-beta.3.md
@@ -0,0 +1,16 @@
+## v24.2.0-beta.3
+
+Release Date: August 1, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
Command-line changes
+
+- A `--locality-file` flag is now available on the [`cockroach start`]({% link v24.2/cockroach-start.md %}) and [`cockroach start-single-node`]({% link v24.2/cockroach-start-single-node.md %}) commands. This provides the option of specifing node [locality]({% link v24.2/cockroach-start.md %}#locality) (typically a `region` value) as a file, as an alternative to specifying this using the [`--locality` flag]({% link v24.2/cockroach-start.md %}#locality). [#127476][#127476]
+
+
Bug fixes
+
+- Fixed a formatting issue with the `sql_sequence_cached_node` value of the `serial_normalization` [setting]({% link v24.2/session-variables.md %}). This could lead to an error connecting to CockroachDB if this value was set as the default for `serial_normalization` via cluster setting [`sql.defaults.serial_normalization`]({% link v24.2/cluster-settings.md %}#setting-sql-defaults-serial-normalization). [#127674][#127674]
+- Dropping [ENUM]({% link v24.2/enum.md %})-type values which were referenced by [index expressions]({% link v24.2/expression-indexes.md %}) could fail with an error. [#127455][#127455]
+
+This release includes 13 merged PRs by 7 authors.
diff --git a/src/current/_includes/releases/v24.2/v24.2.0-rc.1.md b/src/current/_includes/releases/v24.2/v24.2.0-rc.1.md
new file mode 100644
index 00000000000..66db651c0f4
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/v24.2.0-rc.1.md
@@ -0,0 +1,37 @@
+## v24.2.0-rc.1
+
+Release Date: August 7, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
+
+- Added a new Kafka [changefeed sink]({% link v24.2/changefeed-sinks.md %}) that uses the [`franz-go` library](https://github.com/twmb/franz-go) and CockroachDB's `batching_sink` implementation. The new Kafka sink can be enabled with the [`changefeed.new_kafka_sink_enabled`]({% link v24.2/cluster-settings.md %}) cluster setting, which is disabled by default. [#127899][#127899]
+- The v2 Kafka [changefeed sink]({% link v24.2/changefeed-sinks.md %}) now supports [Amazon Managed Streaming for Apache Kafka (MSK)](https://aws.amazon.com/msk/) IAM SASL authentication. [#127899][#127899]
+
+
DB Console changes
+
+- The [Databases]({% link v24.2/ui-databases-page.md %}) and [Tables]({% link v24.2/ui-databases-page.md %}#tables-view) pages in the [DB Console]({% link v24.2/ui-overview.md %}) will show a loading state while loading information for databases and tables including size and range counts. [#127696][#127696]
+- On the [Database details]({% link v24.2/ui-databases-page.md %}) page, the table name will no longer appear with quotes around the schema and table name. [#127770][#127770]
+
+
Bug fixes
+
+- Fixed a bug that caused a memory leak when executing SQL statements with comments, for example, `SELECT /* comment */ 1;`. Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the [SQL session]({% link v24.2/show-sessions.md %}). This bug has been present since v23.1. [#127760][#127760]
+- Fixed a bug in [debug zip]({% link v24.2/cockroach-debug-zip.md %}) generation where an error was produced while fetching unstructured/malformed [logs]({% link v24.2/log-formats.md %}). [#127883][#127883]
+- Fixed small memory leaks that occur during [changefeed creation]({% link v24.2/create-changefeed.md %}). [#127899][#127899]
+- Fixed a [known limitation]({% link v24.2/physical-cluster-replication-overview.md %}#known-limitations) in which [fast cutback]({% link v24.2/cutover-replication.md %}#cut-back-to-the-primary-cluster) could fail. Users can now protect data for the [default protection window]({% link v24.2/physical-cluster-replication-technical-overview.md %}) of 4 hours on both the primary and the standby clusters. [#127892][#127892]
+
+
+
+
Contributors
+
+This release includes 29 merged PRs by 21 authors.
+
+
+
+[#127696]: https://github.com/cockroachdb/cockroach/pull/127696
+[#127760]: https://github.com/cockroachdb/cockroach/pull/127760
+[#127770]: https://github.com/cockroachdb/cockroach/pull/127770
+[#127883]: https://github.com/cockroachdb/cockroach/pull/127883
+[#127892]: https://github.com/cockroachdb/cockroach/pull/127892
+[#127899]: https://github.com/cockroachdb/cockroach/pull/127899
diff --git a/src/current/_includes/releases/v24.2/v24.2.0.md b/src/current/_includes/releases/v24.2/v24.2.0.md
new file mode 100644
index 00000000000..295568657ee
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/v24.2.0.md
@@ -0,0 +1,152 @@
+## v24.2.0
+
+Release Date: August 12, 2024
+
+With the release of CockroachDB v24.2, we've added new capabilities to help you migrate, build, and operate more efficiently. Refer to our summary of the most significant user-facing changes under [Feature Highlights](#v24-2-0-feature-highlights).
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
Feature highlights
+
+This section summarizes the most significant user-facing changes in v24.2.0 and other features recently made available to CockroachDB users across versions. For a complete list of features and changes in v24.2, including bug fixes and performance improvements, refer to the [release notes]({% link releases/index.md %}#testing-releases) for previous v24.2 testing releases. You can also search the docs for sections labeled [New in v24.2](https://www.cockroachlabs.com/docs/search?query=new+in+v24.2).
+
+- **Feature categories**
+ - [Change data capture](#v24-2-0-change-data-capture)
+ - [Migrations](#v24-2-0-migrations)
+ - [SQL](#v24-2-0-sql)
+ - [Operations](#v24-2-0-operations)
+ - [Observability](#v24-2-0-observability)
+
+- **Additional information**
+ - [Backward-incompatible changes and deprecations](#v24-2-0-backward-incompatible-changes-and-deprecations)
+ - [Key cluster setting changes](#v24-2-0-key-cluster-setting-changes)
+ - [Known limitations](#v24-2-0-known-limitations)
+ - [Additional resources](#v24-2-0-additional-resources)
+
+{{ site.data.alerts.callout_info }}
+In CockroachDB Self-Hosted, all available features are free to use unless their description specifies that an Enterprise license is required. For more information, refer to the [Licensing FAQ](https://www.cockroachlabs.com/docs/stable/licensing-faqs).
+{{ site.data.alerts.end }}
+
+
+
+
Change Data Capture
+
+{% include releases/v24.2/feature-highlights-change-data-capture.html %}
+
+
Migrations
+
+{% include releases/v24.2/feature-highlights-migrations.html %}
+
+
SQL
+
+{% include releases/v24.2/feature-highlights-sql.html %}
+
+
Operations
+
+{% include releases/v24.2/feature-highlights-operations.html %}
+
+
Observability
+
+{% include releases/v24.2/feature-highlights-observability.html %}
+
+{% include releases/v24.2/feature-detail-key.html %}
+
+
+
+
+
+
+
Backward-incompatible changes and deprecations
+
+CockroachDB v24.2.0 includes no backward-incompatible changes or deprecations.
+
+
+
+
Key Cluster Setting Changes
+
+The following changes should be reviewed prior to upgrading. Default cluster settings will be used unless you have manually set a value for a setting. This can be confirmed by running the SQL statement `SELECT * FROM system.settings` to view the non-default settings.
+
+- [Settings added](#v24-2-0-settings-added)
+- [Settings removed](#v24-2-0-settings-removed)
+- [Settings with changed defaults](#v24-2-0-settings-with-changed-defaults)
+- [Settings with new options](#v24-2-0-settings-with-new-options)
+- [Settings with new aliases](#v24-2-0-settings-with-new-aliases)
+
+
Settings added
+
+- `debug.zip.redact_addresses`: Added the [cluster setting]({% link v24.2/cluster-settings.md %}) `debug.zip.redact_addresses.enabled` that allows the user to enable or disable redaction of fields like `hostname` and IP addresses. [#123544][#123544]
+- `kv.transaction.randomized_anchor_key`: Previously, concurrent transactions that constructed large write batches could cause [hotspots]({% link v24.2/ui-hot-ranges-page.md %}). This was because the [transaction record]({% link v24.2/architecture/transaction-layer.md %}#transaction-records) for all [ranges]({% link v24.2/architecture/reads-and-writes-overview.md %}#range) would coalesce on a single range, which would then cause this range's [leaseholder]({% link v24.2/architecture/reads-and-writes-overview.md %}#leaseholder) to perform all intent resolution work. This is fixed by distributing transaction records randomly across the ranges the write batch touches. In turn, hotspots are prevented. [#125744][#125744]
+- `server.oidc_authentication.client.timeout`: The new [cluster setting]({% link v24.2/cluster-settings.md %}#setting-server-oidc-authentication-client-timeout) `server.oidc_authentication.client.timeout` allows configuration of the HTTP client timeout for external requests made during [OIDC authentication]({% link v24.2/sso-db-console.md %}). The default timeout is 30 seconds. [#125767][#125767]
+- `sql.auth.grant_option_for_owner.enabled`: The new [cluster setting]({% link v24.2/cluster-settings.md %}) [`sql.auth.grant_option_for_owner.enabled`]({% link v24.2/cluster-settings.md %}#setting-sql-auth-grant-option-for-owner-enabled) controls whether the owner of an object has permission to grant permission on the object to other [users]({% link v24.2/security-reference/authorization.md %}#roles). When set to `true` (the default), the [`GRANT OPTION`]({% link v24.2/show-grants.md %}#privilege-grants) is implicitly granted to the object owner, who can grant permissions on the object to other users, preserving the existing behavior of CockroachDB. When set to `false`, the `GRANT OPTION` is not implicitly given to the owner of an object. The owner's permissions do not change, but they can no longer grant permissions to others unless the `GRANT OPTION` is granted to them explicitly. [#126960][#126960]
+- `sql.auth.grant_option_inheritance.enabled`: Added the [`sql.auth.grant_option_inheritance.enabled` cluster setting]({% link v24.2/cluster-settings.md %}#setting-sql-auth-grant-option-inheritance-enabled). The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with [`WITH GRANT OPTION`]({% link v24.2/grant.md %}) can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership. [#125590][#125590]
+- `storage.sstable.compression_algorithm_backup_storage`, `storage.sstable.compression_algorithm_backup_transport`: Added two new [cluster settings]({% link v24.2/cluster-settings.md %}), `storage.sstable.compression_algorithm_backup_storage` and `storage.sstable.compression_algorithm_backup_transport`, which in addition to the existing cluster setting `storage.sstable.compression_algorithm`, can be used to alter the compression algorithm used for various types of [SSTs]({% link v24.2/architecture/storage-layer.md %}#ssts). [#124245][#124245]
+
+
Settings removed
+
+- `kv.rangefeed.range_stuck_threshold`: Removed the stuck rangefeed cancel feature and its related [cluster setting]({% link v24.2/cluster-settings.md %}) `kv.rangefeed.range_stuck_threshold`, because it was only available in [non-mux rangefeeds]({% link v24.2/advanced-changefeed-configuration.md %}#mux-rangefeeds). Previously, the stuck rangefeed cancel feature was introduced to restart single rangefeeds automatically if they had not received KV updates for some time. [#125663][#125663]
+- `storage.value_blocks.enabled`: The `storage.value_blocks.enabled` [cluster setting]({% link v24.2/cluster-settings.md %}) has been removed; value blocks are always enabled. [#122164][#122164]
+
+
Settings with changed defaults
+
+- `kv.dist_sender.circuit_breakers.mode` has had its default changed to `liveness range only = 1`.
+- `sql.defaults.results_buffer.size` has had its default changed to `512 KiB`: The default value of the `sql.defaults.results_buffer.size` [cluster setting]({% link v24.2/cluster-settings.md %}) has been changed from 16KiB to 512KiB. This reduces the chance that clients using [`READ COMMITTED`]({% link v24.2/read-committed.md %}) transactions will encounter errors that cannot automatically be retried within CockroachDB. [#124633][#124633]
+- `sql.metrics.max_mem_stmt_fingerprints` and `sql.metrics.max_mem_txn_fingerprints` have had their defaults changed to `7500`: The default values for the [cluster settings]({% link v24.2/cluster-settings.md %}) `sql.metrics.max_mem_stmt_fingerprints` and `sql.metrics.max_mem_txn_fingerprints` have been changed from `100000` to `7500`, thus lowering the default limits for in-memory statement and transaction fingerprints. [#123430][#123430]
+- `sql.stats.histogram_samples.count` has had its default changed to `0`: Histograms are no longer constructed using a default sample size of `10k`. Samples are now sized dynamically based on table size unless the sample count has been set in the table or [cluster settings]({% link v24.2/cluster-settings.md %}). [#125345][#125345]
+- `sql.ttl.default_delete_rate_limit` has had its default changed to `100`: The storage parameter `ttl_delete_rate_limit`, which determines the rate limit for deleting expired rows, is now set to `100` by default. [#124354][#124354]
+
+
Settings with new options
+
+- `storage.sstable.compression_algorithm` has added the option `none = 3`: The compression option `none` was added to allow for the disabling of SSTable compression. This option is disabled by default, but can can be used with any of the three existing cluster settings that control SSTable compression: `storage.sstable.compression_algorithm`, `storage.sstable.compression_algorithm_backup_storage`, and `storage.sstable.compression_algorithm_backup_transport`. [#126508][#126508]
+
+
Settings with new aliases
+
+- `changefeed.batch_reduction_retry.enabled` is aliased to `changefeed.batch_reduction_retry_enabled`.
+- `kv.closed_timestamp.follower_reads.enabled` is aliased to `kv.closed_timestamp.follower_reads_enabled`.
+- `kv.range_split.by_load.enabled` is aliased to `kv.range_split.by_load_enabled`.
+- `kv.transaction.write_pipelining.enabled` is aliased to `kv.transaction.write_pipelining_enabled`.
+- `kv.transaction.write_pipelining.max_batch_size` is aliased to `kv.transaction.write_pipelining_max_batch_size`.
+- `physical_replication.consumer.minimum_flush_interval` is aliased to `builkio.stream_ingestion.minimum_flush_interval`.
+- `server.clock.forward_jump_check.enabled` is aliased to `server.clock.forward_jump_check_enabled`.
+- `server.oidc_authentication.autologin.enabled` is aliased to `server.oidc_authentication.autologin`.
+- `server.shutdown.connections.timeout` is aliased to `server.shutdown.connection_wait`.
+- `server.shutdown.initial_wait` is aliased to `server.shutdown.drain_wait`.
+- `server.shutdown.jobs.timeout` is aliased to `server.shutdown.jobs_wait`.
+- `server.shutdown.lease_transfer_iteration.timeout` is aliased to `server.shutdown.lease_transfer_wait`.
+- `server.shutdown.transactions.timeout` is aliased to `server.shutdown.query_wait`.
+- `server.web_session.timeout` is aliased to `server.web_session_timeout`.
+- `spanconfig.range_coalescing.application.enabled` is aliased to `spanconfig.tenant_coalesce_adjacent.enabled`.
+- `spanconfig.range_coalescing.system.enabled` is aliased to `spanconfig.storage_coalesce_adjacent.enabled`.
+- `sql.log.all_statements.enabled` is aliased to `sql.trace.log_statement_execute`.
+- `sql.metrics.statement_details.dump_to_logs.enabled` is aliased to `sql.metrics.statement_details.dump_to_logs`.
+- `trace.debug_http_endpoint.enabled` is aliased to `trace.debug.enable`.
+
+
Known limitations
+
+For information about new and unresolved limitations in CockroachDB v24.2, with suggested workarounds where applicable, refer to [Known Limitations]({% link v24.2/known-limitations.md %}).
+
+
Additional resources
+
+Resource | Topic | Description
+---------------------+--------------------------------------------+-------------
+Cockroach University | [Introduction to Distributed SQL and CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-distributed-sql-and-cockroachdb+self-paced/about) | This course introduces the core concepts behind distributed SQL databases and describes how CockroachDB fits into this landscape. You will learn what differentiates CockroachDB from both legacy SQL and NoSQL databases and how CockroachDB ensures consistent transactions without sacrificing scale and resiliency. You'll learn about CockroachDB's seamless horizontal scalability, distributed transactions with strict ACID guarantees, and high availability and resilience.
+Cockroach University | [Practical First Steps with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+practical-first-steps-with-crdb+self-paced/about) | This course will give you the tools you need to get started with CockroachDB. During the course, you will learn how to spin up a cluster, use the Admin UI to monitor cluster activity, and use SQL shell to solve a set of hands-on exercises.
+Cockroach University | [Enterprise Application Development with CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+client-side-txn-handling+self-paced/about) | This course is the first in a series designed to equip you with best practices for mastering application-level (client-side) transaction management in CockroachDB. We'll dive deep on common differences between CockroachDB and legacy SQL databases and help you sidestep challenges you might encounter when migrating to CockroachDB from Oracle, PostgreSQL, and MySQL.
+Cockroach University | [Building a Highly Resilient Multi-region Database using CockroachDB](https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-resilience-in-multi-region+self-paced/about) | This course is part of a series introducing solutions to running low-latency, highly resilient applications for data-intensive workloads on CockroachDB. In this course we focus on surviving large-scale infrastructure failures like losing an entire cloud region without losing data during recovery. We'll show you how to use CockroachDB survival goals in a multi-region cluster to implement a highly resilient database that survives node or network failures across multiple regions with zero data loss.
+Docs | [Migration Overview]({% link v24.2/migration-overview.md %}) | This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.
+Docs | [Architecture Overview](https://www.cockroachlabs.com/docs/v24.2/architecture/overview) | This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.
+Docs | [SQL Feature Support]({% link v24.2/sql-feature-support.md %}) | The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.
+Docs | [Change Data Capture Overview]({% link v24.2/change-data-capture-overview.md %}) | This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.
+Docs | [Backup Architecture]({% link v24.2/backup-architecture.md %}) | This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.
+
+[#115166]: https://github.com/cockroachdb/cockroach/pull/115166
+[#113893]: https://github.com/cockroachdb/cockroach/pull/113893
+[#115166]: https://github.com/cockroachdb/cockroach/pull/115166
+[#122368]: https://github.com/cockroachdb/cockroach/pull/122368
+[#116664]: https://github.com/cockroachdb/cockroach/pull/116664
+[#120509]: https://github.com/cockroachdb/cockroach/pull/120509
+[#118781]: https://github.com/cockroachdb/cockroach/pull/118781
+[#117729]: https://github.com/cockroachdb/cockroach/pull/117729
+[#120255]: https://github.com/cockroachdb/cockroach/pull/120255
+[#123430]: https://github.com/cockroachdb/cockroach/pull/123430
+[#124633]: https://github.com/cockroachdb/cockroach/pull/124633
+[#124354]: https://github.com/cockroachdb/cockroach/pull/124354
diff --git a/src/current/_includes/releases/v24.2/v24.2.1.md b/src/current/_includes/releases/v24.2/v24.2.1.md
new file mode 100644
index 00000000000..de88c9a7069
--- /dev/null
+++ b/src/current/_includes/releases/v24.2/v24.2.1.md
@@ -0,0 +1,65 @@
+## v24.2.1
+
+Release Date: September 5, 2024
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
Security updates
+
+- The new cluster setting `server.jwt_authentication.issuers.configuration` is now aliased to [`server.jwt_authentication.issuers`]({% link v24.2/sso-sql.md %}#cluster-settings). The new cluster setting reflects the value the setting can take. The setting can now take multiple values to support various kinds of providers and their mapped JWKS URIs. This can be set to one of the following values:
+ - Simple string that Go can parse as a valid issuer URL: `'https://accounts.google.com'`.
+ - String that can be parsed as a valid JSON array of issuer URLs list: `['example.com/adfs','https://accounts.google.com']`.
+ - String that can be parsed as a valid JSON and deserialized into a map of issuer URLs to corresponding JWKS URIs. In this case, CockroachDB will override the JWKS URI present in the issuer's well-known endpoint: `'{ "issuer_jwks_map": { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", "example.com/adfs": "https://example.com/adfs/discovery/keys" } }'`.
+
+ When `issuer_jwks_map` is set, CockroachDB directly uses the JWKS URI to get the key set. In all other cases where [`server.jwt_authentication.jwks_auto_fetch.enabled`]({% link v24.2/sso-sql.md %}#cluster-settings) is set, CockroachDB attempts to automatically obtain the JWKS URI first from the issuer's well-known endpoint. [#128178][#128178]
+
+
+
+- The new Kafka [changefeed sink]({% link v24.2/changefeed-sinks.md %}) is now enabled by default. To disable it, set the cluster setting [`changefeed.new_kafka_sink_enabled`]({% link v24.2/cluster-settings.md %}) to `false`. [#128700][#128700]
+- The new Kafka sink and the Google Cloud Pub/Sub sink now display the topics that a changefeed will emit to. [#128332][#128332]
+
+
Operational changes
+
+- The cluster setting [`storage.ingestion.value_blocks.enabled`]({% link v24.2/cluster-settings.md %}#setting-storage-ingestion-value-blocks-enabled) can be set to `false` if a pathological huge [range]({% link v24.2/architecture/glossary.md %}#range) happens to occur in a cluster, and incoming [snapshots]({% link v24.2/architecture/replication-layer.md %}#snapshots) of that range are causing [OOMs]({% link v24.2/cluster-setup-troubleshooting.md %}#out-of-memory-oom-crash). [#128098][#128098]
+- Two new structured logging events report connection breakage during node shutdown. Previously, these logs existed but were unstructured. These logs appear in the [`OPS` logging channel]({% link v24.2/logging.md %}#ops).
+ - The [`node_shutdown_connection_timeout`]({% link v24.2/eventlog.md %}#node_shutdown_connection_timeout) event is logged after the timeout defined by [`server.shutdown.connections.timeout`]({% link v24.2/cluster-settings.md %}#setting-server-shutdown-connection-wait) transpires, if there are still [open SQL connections]({% link v24.2/show-sessions.md %}).
+ - The [`node_shutdown_transaction_timeout`]({% link v24.2/eventlog.md %}#node_shutdown_transaction_timeout) event is logged after the timeout defined by [`server.shutdown.transactions.timeout`]({% link v24.2/cluster-settings.md %}#setting-server-shutdown-query-wait) transpires, if there are still open [transactions]({% link v24.2/transactions.md %}) on those SQL connections. [#128712][#128712]
+
+
DB Console changes
+
+- Corrected the series names in the legend for the [`Admission Queueing Delay p99 – Background (Elastic) CPU` graph]({% link v24.2/ui-overload-dashboard.md %}#admission-queueing-delay-p99-background-elastic-cpu) on the [Overload dashboard]({% link v24.2/ui-overload-dashboard.md %}) by removing the `KV write ' prefix. [#128891][#128891]
+- Hovering on graphs on [Metrics dashboards]({% link v24.2/ui-overview.md %}#metrics) now highlights the line under the mouse pointer and displays the corresponding value near the mouse pointer. [#128412][#128412]
+
+
Bug fixes
+
+- Fixed a memory leak that could occur when a connection string specifies a [virtual cluster]({% link v24.2/cluster-virtualization-overview.md %}) that does not exist. [#128108][#128108]
+- Fixed a bug where [`CREATE INDEX IF NOT EXISTS`]({% link v24.2/create-index.md %}) would not correctly short-circuit if the given index already existed. [#128240][#128240]
+- Fixed a bug where syntax validation incorrectly prevented use of the `DESCENDING` clause for non-terminal columns of an [inverted index]({% link v24.2/inverted-indexes.md %}). Now only the last column of an inverted index is prevented from using `DESCENDING`. [#128240][#128240]
+- Fixed a bug where an [index]({% link v24.2/indexes.md %}) could store a column in the primary index if that column had a mixed-case name. [#128240][#128240]
+- Setting or dropping a default value on a [computed column]({% link v24.2/computed-columns.md %}) is now disallowed -- even for null defaults. Previously, setting or dropping a default value on a computed column was a no-op; now it is an error. [#128465][#128465]
+- Fixed a bug where a hash-sharded constraint could not be created if it referred to a column that had a backslash in its name. [#128522][#128522]
+- Fixed a bug introduced in v23.1 where the output of [`EXPLAIN (OPT, REDACT)`]({% link v24.2/explain.md %}) for various `CREATE` statements was not redacted. This bug affects the following statements:
+ - `EXPLAIN (OPT, REDACT) CREATE TABLE`
+ - `EXPLAIN (OPT, REDACT) CREATE VIEW`
+ - `EXPLAIN (OPT, REDACT) CREATE FUNCTION` [#128490][#128490]
+- Fixed a bug where legacy and [declarative schema changes]({% link v24.2/online-schema-changes.md %}#declarative-schema-changer) could be executed concurrently, which could lead to failing or hung schema change jobs. [#128825][#128825]
+- Fixed a bug that caused errors like `ERROR: column 'crdb_internal_idx_expr' does not exist` when accessing a table with an [expression index]({% link v24.2/expression-indexes.md %}) where the expression evaluates to an [ENUM type]({% link v24.2/enum.md %}), such as `CREATE INDEX ON t ((col::an_enum))`. [#129094][#129094]
+
+[#128098]: https://github.com/cockroachdb/cockroach/pull/128098
+[#128108]: https://github.com/cockroachdb/cockroach/pull/128108
+[#128178]: https://github.com/cockroachdb/cockroach/pull/128178
+[#128188]: https://github.com/cockroachdb/cockroach/pull/128188
+[#128202]: https://github.com/cockroachdb/cockroach/pull/128202
+[#128240]: https://github.com/cockroachdb/cockroach/pull/128240
+[#128332]: https://github.com/cockroachdb/cockroach/pull/128332
+[#128349]: https://github.com/cockroachdb/cockroach/pull/128349
+[#128412]: https://github.com/cockroachdb/cockroach/pull/128412
+[#128465]: https://github.com/cockroachdb/cockroach/pull/128465
+[#128490]: https://github.com/cockroachdb/cockroach/pull/128490
+[#128522]: https://github.com/cockroachdb/cockroach/pull/128522
+[#128622]: https://github.com/cockroachdb/cockroach/pull/128622
+[#128700]: https://github.com/cockroachdb/cockroach/pull/128700
+[#128712]: https://github.com/cockroachdb/cockroach/pull/128712
+[#128825]: https://github.com/cockroachdb/cockroach/pull/128825
+[#128837]: https://github.com/cockroachdb/cockroach/pull/128837
+[#128891]: https://github.com/cockroachdb/cockroach/pull/128891
+[#129094]: https://github.com/cockroachdb/cockroach/pull/129094
\ No newline at end of file
diff --git a/src/current/_includes/releases/whats-new-intro.md b/src/current/_includes/releases/whats-new-intro.md
index e084ace9f01..0c7a15cb38e 100644
--- a/src/current/_includes/releases/whats-new-intro.md
+++ b/src/current/_includes/releases/whats-new-intro.md
@@ -1,9 +1,15 @@
-{% comment %}Early in development, a new major-version directory may not
- yet exist. Adapt some links in this situation.{% endcomment %}
+{% assign DEBUG = false %}
{% assign branched = false %}
-{% assign ancient = false %}
+{% assign old = false %}
+{% assign no_highlights = false %}
+{% assign skippable = false %}
+{% assign will_never_have_lts = false %}
+{% assign lts = false %}
{% assign install_links = '' %}
+{% comment %}Early in development, a new major-version directory may not
+ yet exist. Adapt some links in this situation.{% endcomment %}
+
{% for file in site.pages %}
{% unless branched == true %}
{% capture fpath %}{{ file.dir | remove:'/' }}{% endcapture %}
@@ -13,14 +19,28 @@
{% endunless %}
{% endfor %}
-{% comment %}Some old pages need different links to install and upgrade pages{% endcomment %}
-{% if page.major_version == 'v1.0' or page.major_version == 'v1.1' or page.major_version == 'v2.0' or page.major_version == 'v2.1' or page.major_version == 'v21.1' %}
+{% comment %}Some old pages don't have feature highlights and won't get LTS{% endcomment %}
+{% if page.major_version == 'v1.0' or
+ page.major_version == 'v1.1' or
+ page.major_version == 'v2.0' or
+ page.major_version == 'v2.1' or
+ page.major_version == 'v19.1' or
+ page.major_version == 'v19.2' or
+ page.major_version == 'v20.1' or
+ page.major_version == 'v20.2' or
+ page.major_version == 'v21.1' or
+ page.major_version == 'v21.2' or
+ page.major_version == 'v22.1' or
+ page.major_version == 'v22.2' %}
{% assign branched = true %}
- {% assign ancient = true %}
+ {% assign no_highlights = true %}
+ {% assign will_never_have_lts = true %}
+{% endif %}
+
+{% if page.major_version == 'v1.0' or page.major_version == 'v1.1' or page.major_version == 'v2.0' or page.major_version == 'v2.1' or page.major_version == 'v21.1' %}
{% capture install_link %}[install CockroachDB](https://cockroachlabs.com/docs/{{ page.major_version}}/install-cockroachdb.html){% endcapture %}
{% capture install_sentence %}After downloading a supported CockroachDB binary, learn how to {{ install_link }}.{% endcapture %}
{% elsif page.major_version == 'v19.1' or page.major_version == 'v19.2' or page.major_version == 'v20.1' or page.major_version == 'v20.2' %}
- {% assign branched = true %}
{% capture install_link %}[install CockroachDB](https://cockroachlabs.com/docs/{{ page.major_version}}/install-cockroachdb.html){% endcapture %}
{% capture upgrade_link %}[upgrade your cluster](https://cockroachlabs.com/docs/{{ page.major_version }}/upgrade-cockroach-version.html){% endcapture %}
{% capture install_sentence %}After downloading a supported CockroachDB binary, learn how to {{ install_link }} or {{ upgrade_link }}.{% endcapture %}
@@ -35,7 +55,36 @@
{% capture install_sentence %}After downloading a supported CockroachDB binary, learn how to {{ install_link }} or {{ upgrade_link }}.{% endcapture %}
{% endif %}
-On this page, you can read about changes and find downloads for all production and testing releases of CockroachDB {{ page.major_version }}.
+{% comment %}Is it skippable or LTS?{% endcomment %}
+
+{% if include.major_version.release_date != "N/A" %}
+ {% if include.major_version.asst_supp_exp_date == "N/A" %}
+ {% assign skippable = true %}
+ {% elsif include.major_version.initial_lts_patch != "N/A" %}
+ {% assign lts = true %}
+ {% endif %}
+{% endif %}
+
+{% if DEBUG == true %}
+include.major_version: {{ include.major_version }}
+page.major_version: {{ page.major_version }}
+branched: {{ branched }}
+will_never_have_lts: {{ will_never_have_lts }}
+lts: {{ lts }}
+skippable: {{ skippable }}
+no_highlights: {{ no_highlights }}
+
+{% endif %}
+
+{% if skippable == true %}
+CockroachDB {{ page.major_version }} is an [Innovation Release]({% link releases/release-support-policy.md %}#support-types), which is optional for CockroachDB {{ site.data.products.dedicated }} and CockroachDB {{ site.data.products.core }} clusters but is required for CockroachDB {{ site.data.products.serverless }}.
+{% else %}
+CockroachDB {{ page.major_version }}{% if lts == true %} [(LTS)]({% link releases/release-support-policy.md %}#support-phases){% endif %} is a required [Regular Release]({% link releases/release-support-policy.md %}#support-types).
+{% endif %}
+
+Refer to [Major release types]({% link releases/release-support-policy.md %}#support-types) before installing or upgrading for release timing and support details.{% if no_highlights == false %} To learn what’s new in this release, refer to its [Feature Highlights](#feature-highlights).{% endif %}
+
+On this page, you can read about changes and find downloads for all production and testing releases of CockroachDB {{ page.major_version }}{% if lts == true %} [(LTS)]({% link releases/release-support-policy.md %}#support-phases){% endif %}
{% comment %}v1.0 has no #v1-0-0 anchor, and before GA other releases also do not.{% endcomment %}
- For key feature enhancements in {{ page.major_version }} and other upgrade considerations, refer to the notes for {% if include.major_version.release_date != 'N/A' and page.major_version != 'v1.0' %}[{{ page.major_version }}.0](#{{ page.major_version | replace: '.', '-' }}-0){% else %}{{ page.major_version }} on this page{% endif %}.
@@ -43,7 +92,7 @@ On this page, you can read about changes and find downloads for all production a
- Be sure to also review the [Release Support Policy]({% link releases/release-support-policy.md %}).
- {{ install_sentence | strip_newlines }}
-{% comment %}The strip_newlines is needed here because otherwise Jekyll inserts
tags around the install and ugrade links{% endcomment %}
+{% comment %}The strip_newlines is needed here because otherwise Jekyll inserts
tags around the install and upgrade links{% endcomment %}
Get future release notes emailed to you:
{% include_cached marketo.html formId=1083 %}
diff --git a/src/current/_includes/unsupported-version.md b/src/current/_includes/unsupported-version.md
deleted file mode 100644
index 6d0b1eba736..00000000000
--- a/src/current/_includes/unsupported-version.md
+++ /dev/null
@@ -1,166 +0,0 @@
-{% assign DEBUG=false %}
-{% unless include.major_version %}
-Missing include.major_version. Usage: {% raw %}{% include unsupported-version.md major_version=page.major_version %}{% endraw %}
-{% break %}
-{% endunless %}
-{% if DEBUG %}Major version: {{ include.major_version }} {% endif %}
-
-{% comment %}To test, comment this line and uncomment the today and actual_today variables below{% endcomment %}
-{% assign today = "today" | date: "%s" %}{% comment %} Simulate future date and format it in seconds. {% endcomment %}
-
-{% comment %} Some dates to test:
-2025-11-14: 23.1 LTS EOL (LTS EOL message)
-2025-11-13: 23.1 LTS Assistance (LTS Assistance message)
-2024-11-13: 23.1 LTS Maintenance (LTS Assistance message)
-2024-11-12: 23.1 LTS GA (no message)
-
-The date logic in this file can be confusing. Read it like this:
-{% if today > la %}...{% endif %} = "If today is after (larger than) la"
-{% if today <= la %}...{% endif %} +If today is la or earlier (smaller)"
-{% endcomment %}
-
-{% comment %}Uncomment the following two lines and comment the third to test a specific date{% endcomment %}
-{% comment %}{% assign today = '2024-11-13' | date: "%s" %}{% endcomment %}
-{% comment %}{% assign actual_today = "today" | date: "%s" %}{% endcomment %}
-
-{% if DEBUG %}
- {% if actual_today %}Actual today: {{ actual_today }} {% endif %}
-Today: {{ today }}
-Today date: {{ today | date: "%Y-%m-%d" }}
-{% endif %}
-
-{% assign x = site.data.versions | where_exp: "m", "m.major_version == include.major_version" | first %}
-
-{% comment %}Continue only if we found an entry for this major version {% endcomment %}
-{% if x %}
-
- {% if DEBUG %}Major version object: {{ x }} {% endif %}
-
- {% assign production = false %}
- {% assign lts = false %}
- {% if DEBUG %}GA Maintenance support date: {{ x.maint_supp_exp_date }} GA Assistance support date: {{ x.asst_supp_exp_date }} {% endif %}
-
- {% comment %}Is it GA?{% endcomment %}
- {% if x.asst_supp_exp_date != "N/A" and x.asst_supp_exp_date != "N/A" %}
- {% assign production = true %}
- {% assign m = x.maint_supp_exp_date | date: "%s" %} {% comment %} Format m_raw in seconds. {% endcomment %}
- {% assign a = x.asst_supp_exp_date | date: "%s" %} {% comment %} Format a_raw in seconds. {% endcomment %}
- {% endif %}
-
- {% if production == true %}
- {% comment %}Is it an LTS?{% endcomment %}
- {% if x.initial_lts_patch != "N/A" %}
- {% assign lts = true %}
- {% assign lm = x.lts_maint_supp_exp_date | date: "%s" %} {% comment %} Format m_raw in seconds. {% endcomment %}
- {% assign la = x.lts_asst_supp_exp_date | date: "%s" %} {% comment %} Format a_raw in seconds. {% endcomment %}
- {% endif %}
- {% endif %}
-
- {% if DEBUG %}LTS maintenance support date: {{ x.lts_maint_supp_exp_date }} LTS assistance support date: {{ x.lts_asst_supp_exp_date }}
- {% endif %}
-
-{% comment %}Save the admonitions into variables
- The logic wrappers here make the variable empty
- if the condition is false. The logic where these variables are used chooses which one of these variables to show, if any.
- {% endcomment %}
-{% capture lts_eol_message %}
- {% if today > la %}
- {{site.data.alerts.callout_danger}}
- As of {{ x.lts_asst_supp_exp_date | date: "%B %e, %Y"}}, CockroachDB {{ include.major_version }} is no longer supported. For more details, refer to the Release Support Policy.
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
-{% capture lts_assistance_message %}
- {% if today > lm %}
- {{site.data.alerts.callout_danger}}
- Maintenance Support for LTS releases ended on {{ x.lts_maint_supp_exp_date | date: "%B %e, %Y" }}{% if today >= a %}, and GA releases of CockroachDB are no longer supported{% endif %}. Cockroach Labs will stop providing Assistance Support for LTS releases of {{ include.major_version }} on {{ x.lts_asst_supp_exp_date | date: "%B %e, %Y" }}. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, refer to the Release Support Policy.
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
-{% capture lts_maintenance_message %}
- {% if today >= lm %}
- {{site.data.alerts.callout_danger}}
- As of {{ x.lts_maint_supp_exp_date | date: "%B %e, %Y" }}, LTS releases of CockroachDB {{ x.major_version }} releases are in Maintenance Support{% if today > a %} and GA releases of CockroachDB {{ include.major_version }} are no longer supported.{% endif %}. Cockroach Labs will stop providing Assistance Support for {{ include.major_version }} LTS on {{ x.lts_asst_supp_exp_date | date: "%B %e, %Y" }}. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, refer to the Release Support Policy
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
-{% capture ga_eol_message %}
- {% if today > a %}
- {{site.data.alerts.callout_danger}}
- As of {{ x.asst_supp_exp_date | date: "%B %e, %Y"}}, CockroachDB {{ include.major_version }} is no longer supported. For more details, refer to the Release Support Policy.
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
-{% capture ga_assistance_message %}
- {% if today > m %}
- {{site.data.alerts.callout_danger}}
- As of {{ x.maint_supp_exp_date | date: "%B %e, %Y" }}, Maintenance support for {{ include.major_version }} has ended, and Cockroach Labs will stop providing Assistance Support for {{ include.major_version }} on {{ x.asst_supp_exp_date | date: "%B %e, %Y" }}. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, refer to the Release Support Policy.
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
-{% capture ga_maintenance_message %}
- {% if today <= m and today > a %}
- {{site.data.alerts.callout_danger}}
- As of {{ x.maint_supp_exp_date | date: "%B %e, %Y" }}, {{ include.major_version }} releases are in Maintenance Support. Cockroach Labs will stop providing Assistance Support for {{ include.major_version }} on {{ x.asst_supp_exp_date | date: "%B %e, %Y" }}. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, refer to the Release Support Policy.
- {{site.data.alerts.end}}
- {% endif %}
-{% endcapture %}
-
- {% comment %}Show unsupported admonitions only for production releases {% endcomment %}
- {% if production == true %}
- {% comment %}Show LTS admonitions only for versions with LTS releases {% endcomment %}
- {% if lts == true %}
-
- {% if DEBUG %}lts: {{ lts }} production: {{ production }} lm: {{ lm }} la: {{ la }} m: {{ m }} a: {{ a }} {% endif %}
-
- {% comment %} LTS date validation will stop processing the include early {% endcomment %}
- {% if la <= lm %}
- Error: LTS assistance date must be after LTS maintenance date. Giving up.
- {% break %}
- {% endif %}
- {% if la <= a or la <= m %}
- Error: LTS assistance date must be after GA assistance and maintenance dates. Giving up.
- {% break %}
- {% endif %}
-
- {% comment %}Show LTS Maintenance message from the start of LTS maintance until LTS Assistance,
- then show the LTS assistance message until EOL{% endcomment %}
- {% if today > la %} {% comment %}LTS assistance has passed, EOL{% endcomment %}
- {{ lts_eol_message }}
- {% else %}{% comment %}LTS assistance has not passed {% endcomment %}
- {% if today > lm %} {% comment %}After LTS maintenance{% endcomment %}
- {{ lts_assistance_message }}
- {% elsif today > m and today <= lm %}{% comment %}GA maintenance has passed, in LTS maintenance{% endcomment %}
- {{ lts_maintenance_message }}
- {% endif %}{% comment %}If GA maintenance hasn't passed, show nothing{% endcomment %}
- {% endif %}
-
- {% comment %}Show non-LTS admonitions only releases without LTS {% endcomment %}
- {% else %}
-
- {% comment %} GA date validation will stop processing the include early {% endcomment %}
- {% if a <= m %}
- Error: Assistance date must be after Maintenance date. Check _data/versions.csv. Giving up.
- {% break %}
- {% endif %}
- {% if DEBUG %}production: {{ production }} m: {{ m }} a: {{ a }} {% endif %}
-
- {% comment %}Show Assistance message from the start of maintance until EOL{% endcomment %}
- {% if today > a %} {% comment %}assistance has passed, EOL{% endcomment %}
- {{ ga_eol_message }}
- {% else %}
- {% if today > m %} {% comment %}maintenance has ended{% endcomment %}
- {{ ga_assistance_message }}
- {% elsif today <= m %}
- {{ ga_maintenance_message }}
- {% endif %}
- {% endif %}
- {% endif %}
-
- {% endif %}
-{% endif %}
diff --git a/src/current/_includes/v22.1/backups/backup-to-deprec.md b/src/current/_includes/v22.1/backups/backup-to-deprec.md
index ede1749d269..1515e96c713 100644
--- a/src/current/_includes/v22.1/backups/backup-to-deprec.md
+++ b/src/current/_includes/v22.1/backups/backup-to-deprec.md
@@ -1,7 +1,7 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](../v20.2/backup.html) and [`RESTORE ... FROM`](../v20.2/restore.html) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
-We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection](take-full-and-incremental-backups.html#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`](restore.html#restore-the-most-recent-backup) or a specific [subdirectory](restore.html#subdir-param).
+We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
-For guidance on the syntax for backups and restores, see the [`BACKUP`](backup.html#examples) and [`RESTORE`](restore.html#examples) examples.
+For guidance on the syntax for backups and restores, see the [`BACKUP`]({% link {{ page.version.version }}/backup.md %}#examples) and [`RESTORE`]({% link {{ page.version.version }}/restore.md %}#examples) examples.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-helm.md
index a1a7f164185..6c796b28074 100644
--- a/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -6,7 +6,7 @@
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
diff --git a/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-manual.md
index 82af471e281..0e4fb1b59ca 100644
--- a/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v22.1/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -6,7 +6,7 @@
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
diff --git a/src/current/_includes/v22.2/backups/backup-to-deprec.md b/src/current/_includes/v22.2/backups/backup-to-deprec.md
index ede1749d269..1515e96c713 100644
--- a/src/current/_includes/v22.2/backups/backup-to-deprec.md
+++ b/src/current/_includes/v22.2/backups/backup-to-deprec.md
@@ -1,7 +1,7 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](../v20.2/backup.html) and [`RESTORE ... FROM`](../v20.2/restore.html) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
-We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection](take-full-and-incremental-backups.html#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`](restore.html#restore-the-most-recent-backup) or a specific [subdirectory](restore.html#subdir-param).
+We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
-For guidance on the syntax for backups and restores, see the [`BACKUP`](backup.html#examples) and [`RESTORE`](restore.html#examples) examples.
+For guidance on the syntax for backups and restores, see the [`BACKUP`]({% link {{ page.version.version }}/backup.md %}#examples) and [`RESTORE`]({% link {{ page.version.version }}/restore.md %}#examples) examples.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-helm.md
index 5aefc5a904a..88b4021014e 100644
--- a/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -6,7 +6,7 @@
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
diff --git a/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-manual.md
index 60f13b08370..87fffdaf4d0 100644
--- a/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v22.2/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -6,7 +6,7 @@
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
diff --git a/src/current/_includes/v22.2/prod-deployment/insecure-start-nodes.md b/src/current/_includes/v22.2/prod-deployment/insecure-start-nodes.md
index 45e3b75f9cd..bfc21befbb8 100644
--- a/src/current/_includes/v22.2/prod-deployment/insecure-start-nodes.md
+++ b/src/current/_includes/v22.2/prod-deployment/insecure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS](spatial-glossary.html#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`](cockroach-start.html) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=localhost:8080`. To set these options manually, see [Start a Node](cockroach-start.html).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v22.2/prod-deployment/secure-start-nodes.md b/src/current/_includes/v22.2/prod-deployment/secure-start-nodes.md
index 94f12c0fb89..8d2743bb740 100644
--- a/src/current/_includes/v22.2/prod-deployment/secure-start-nodes.md
+++ b/src/current/_includes/v22.2/prod-deployment/secure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS](spatial-glossary.html#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`](cockroach-start.html) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=:8080`. To set these options manually, see [Start a Node](cockroach-start.html).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v23.1/app/hibernate-dialects-note.md b/src/current/_includes/v23.1/app/hibernate-dialects-note.md
index 99add090b32..287f314d393 100644
--- a/src/current/_includes/v23.1/app/hibernate-dialects-note.md
+++ b/src/current/_includes/v23.1/app/hibernate-dialects-note.md
@@ -1,5 +1,5 @@
Versions of the Hibernate CockroachDB dialect correspond to the version of CockroachDB installed on your machine. For example, `org.hibernate.dialect.CockroachDB201Dialect` corresponds to CockroachDB v20.1 and later, and `org.hibernate.dialect.CockroachDB192Dialect` corresponds to CockroachDB v19.2 and later.
-All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes](https://www.cockroachlabs.com/docs/releases). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
+All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes]({% link releases/index.md %}). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
-Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
\ No newline at end of file
+Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
diff --git a/src/current/_includes/v23.1/backups/backup-to-deprec.md b/src/current/_includes/v23.1/backups/backup-to-deprec.md
index 2ffc5d96ea8..77a2b6cae18 100644
--- a/src/current/_includes/v23.1/backups/backup-to-deprec.md
+++ b/src/current/_includes/v23.1/backups/backup-to-deprec.md
@@ -1,5 +1,5 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](https://www.cockroachlabs.com/docs/v20.2/backup) and [`RESTORE ... FROM`](https://www.cockroachlabs.com/docs/v20.2/restore) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-full-or-incremental-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
diff --git a/src/current/_includes/v23.1/backups/serverless-locality-aware.md b/src/current/_includes/v23.1/backups/serverless-locality-aware.md
index 18110607e3a..eef7701884e 100644
--- a/src/current/_includes/v23.1/backups/serverless-locality-aware.md
+++ b/src/current/_includes/v23.1/backups/serverless-locality-aware.md
@@ -1 +1 @@
-CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with [data domiciling]({% link v23.1/data-domiciling.md %}) requirements.
\ No newline at end of file
+CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with {% if page.title contains "Cloud" or page.title contains "Serverless" %} [data domiciling]({% link {{site.current_cloud_version}}/data-domiciling.md %}) {% else %} [data domiciling]({% link {{page.version.version}}/data-domiciling.md %}) {% endif %} requirements.
diff --git a/src/current/_includes/v23.1/backward-incompatible/alpha.1.md b/src/current/_includes/v23.1/backward-incompatible/alpha.1.md
index 9e3070ad086..d5aaef86c6b 100644
--- a/src/current/_includes/v23.1/backward-incompatible/alpha.1.md
+++ b/src/current/_includes/v23.1/backward-incompatible/alpha.1.md
@@ -7,9 +7,9 @@
- Optional: keep port `26257` for RPC, and allocate a new port, e.g., `26357`, for SQL connections. For example, you might configure a node with the flags `--listen-addr=:26257 --sql-addr=:26357`. When using this mode of operation, the `--join` flags do not need to be modified. However, SQL client apps or the SQL load balancer configuration (when in use) must be updated to use the new SQL port number. [#85671][#85671]
- If no `nullif` option is specified while using [`IMPORT CSV`](../v23.1/import.html), then a zero-length string in the input is now treated as `NULL`. The quoted empty string in the input is treated as an empty string. Similarly, if `nullif` is specified, then an unquoted value is treated as `NULL`, and a quoted value is treated as that string. These changes were made to make `IMPORT CSV` behave more similarly to `COPY CSV`. If the previous behavior (i.e., treating either quoted or unquoted values that match the `nullif` setting as `NULL`) is desired, you can use the new `allow_quoted_null` option in the `IMPORT` statement. [#84487][#84487]
- [`COPY FROM`](../v23.1/copy-from.html) operations are now atomic by default instead of being segmented into 100 row transactions. Set the `copy_from_atomic_enabled` session setting to `false` for the previous behavior. [#85986][#85986]
-- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`](https://www.cockroachlabs.com/docs/v22.2/grant#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
+- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`]({% link v22.2/grant.md %}#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
- Removed the ability to cast `int`, `int2`, and `int8` to a `0` length `BIT` or `VARBIT`. [#81266][#81266]
- Removed the deprecated `GRANT` privilege. [#81310][#81310]
- Removed the `ttl_automatic_column` storage parameter. The `crdb_internal_expiration` column is created when `ttl_expire_after` is set and removed when `ttl_expire_after` is reset. [#83134][#83134]
- Removed the byte string parameter in the `crdb_internal.schedule_sql_stats_compaction` function. [#82560][#82560]
-- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements](https://www.cockroachlabs.com/docs/v22.2/transactions#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
+- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements]({% link v22.2/transactions.md %}#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
diff --git a/src/current/_includes/v23.1/cdc/kafka-vpc-limitation.md b/src/current/_includes/v23.1/cdc/kafka-vpc-limitation.md
index 17b3be98b60..5f7950cdf27 100644
--- a/src/current/_includes/v23.1/cdc/kafka-vpc-limitation.md
+++ b/src/current/_includes/v23.1/cdc/kafka-vpc-limitation.md
@@ -1 +1 @@
-[VPC Peering](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#vpc-peering) and [AWS PrivateLink](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
\ No newline at end of file
+[VPC Peering]({% link cockroachcloud/network-authorization.md %}#vpc-peering) and [AWS PrivateLink]({% link cockroachcloud/network-authorization.md %}#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
diff --git a/src/current/_includes/v23.1/cdc/virtual-computed-column-cdc.md b/src/current/_includes/v23.1/cdc/virtual-computed-column-cdc.md
index e7768290325..60910bb817a 100644
--- a/src/current/_includes/v23.1/cdc/virtual-computed-column-cdc.md
+++ b/src/current/_includes/v23.1/cdc/virtual-computed-column-cdc.md
@@ -1 +1 @@
-As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change](https://www.cockroachlabs.com/docs/releases/v22.1#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`](create-changefeed.html#virtual-columns) option for more detail.
+As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change]({% link releases/v22.1.md %}#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`]({% link {{ page.version.version }}/create-changefeed.md %}#virtual-columns) option for more detail.
diff --git a/src/current/_includes/v23.1/cdc/webhook-beta.md b/src/current/_includes/v23.1/cdc/webhook-beta.md
index 212de3397f1..5d27a27585e 100644
--- a/src/current/_includes/v23.1/cdc/webhook-beta.md
+++ b/src/current/_includes/v23.1/cdc/webhook-beta.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-The webhook sink is currently in **beta** — see [usage considerations](https://www.cockroachlabs.com/docs/{{ page.version.version }}/changefeed-sinks#webhook-sink), available [parameters](https://www.cockroachlabs.com/docs/{{ page.version.version }}/create-changefeed#parameters), and [options](../{{ page.version.version }}/create-changefeed.html#options) for more information.
+The webhook sink is currently in **beta** — see [usage considerations]({% link {{ page.version.version }}/changefeed-sinks.md %}#webhook-sink), available [parameters]({% link {{ page.version.version }}/create-changefeed.md %}#parameters), and [options]({% link {{ page.version.version }}/create-changefeed.md %}#options) for more information.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v23.1/cdc/work-distribution-setting.md b/src/current/_includes/v23.1/cdc/work-distribution-setting.md
new file mode 100644
index 00000000000..d4430739252
--- /dev/null
+++ b/src/current/_includes/v23.1/cdc/work-distribution-setting.md
@@ -0,0 +1 @@
+{% include_cached new-in.html version="v23.1.23" %} You can enable the `changefeed.random_replica_selection.enabled` cluster setting to change the way in which a changefeed distributes work across the cluster. With `changefeed.random_replica_selection.enabled` set to `true`, the job will evenly distribute changefeed work across the cluster by assigning it to any [replica]({% link {{ page.version.version }}/architecture/replication-layer.md %}) for a particular range. For `changefeed.random_replica_selection.enabled` to take effect on changefeed jobs, ensure you enable the cluster setting and then [pause]({% link {{ page.version.version }}/pause-job.md %}) and [resume]({% link {{ page.version.version }}/resume-job.md %}) existing changefeeds.
diff --git a/src/current/_includes/v23.1/known-limitations/cdc-queries-column-families.md b/src/current/_includes/v23.1/known-limitations/cdc-queries-column-families.md
new file mode 100644
index 00000000000..a68a7949824
--- /dev/null
+++ b/src/current/_includes/v23.1/known-limitations/cdc-queries-column-families.md
@@ -0,0 +1 @@
+Creating a changefeed with {% if page.name == "cdc-queries.md" %} CDC queries {% else %} [CDC queries]({% link {{ page.version.version }}/cdc-queries.md %}) {% endif %} on tables with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %} is not supported. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/127761)
\ No newline at end of file
diff --git a/src/current/_includes/v23.1/known-limitations/changefeed-column-family-message.md b/src/current/_includes/v23.1/known-limitations/changefeed-column-family-message.md
new file mode 100644
index 00000000000..b8aafbe11dc
--- /dev/null
+++ b/src/current/_includes/v23.1/known-limitations/changefeed-column-family-message.md
@@ -0,0 +1 @@
+When you create a changefeed on a table with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %}, the changefeed will emit messages per column family in separate streams. As a result, [changefeed messages]({% link {{ page.version.version }}/changefeed-messages.md %}) for different column families will arrive at the [sink]({% link {{ page.version.version }}/changefeed-sinks.md %}) under separate topics. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/127736)
\ No newline at end of file
diff --git a/src/current/_includes/v23.1/known-limitations/show-backup-symlink.md b/src/current/_includes/v23.1/known-limitations/show-backup-symlink.md
new file mode 100644
index 00000000000..1316e7d7667
--- /dev/null
+++ b/src/current/_includes/v23.1/known-limitations/show-backup-symlink.md
@@ -0,0 +1 @@
+[`SHOW BACKUP`]({% link {{ page.version.version }}/show-backup.md %}) does not support listing backups if the [`nodelocal`]({% link {{ page.version.version }}/cockroach-nodelocal-upload.md %}) storage location is a symlink. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/70260)
\ No newline at end of file
diff --git a/src/current/_includes/v23.1/migration/load-data-import-into.md b/src/current/_includes/v23.1/migration/load-data-import-into.md
index d60faa70b50..174b1bd33f4 100644
--- a/src/current/_includes/v23.1/migration/load-data-import-into.md
+++ b/src/current/_includes/v23.1/migration/load-data-import-into.md
@@ -1 +1 @@
-Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
+Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the CockroachDB tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
diff --git a/src/current/_includes/v23.1/misc/note-egress-perimeter-cdc-backup.md b/src/current/_includes/v23.1/misc/note-egress-perimeter-cdc-backup.md
index ee8352b424c..ffa1c87e2a2 100644
--- a/src/current/_includes/v23.1/misc/note-egress-perimeter-cdc-backup.md
+++ b/src/current/_includes/v23.1/misc/note-egress-perimeter-cdc-backup.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls](https://www.cockroachlabs.com/docs/cockroachcloud/egress-perimeter-controls) for detail and setup instructions.
+Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls]({% link cockroachcloud/egress-perimeter-controls.md %}) for detail and setup instructions.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v23.1/misc/session-vars.md b/src/current/_includes/v23.1/misc/session-vars.md
index 8eec1163850..b01008cb397 100644
--- a/src/current/_includes/v23.1/misc/session-vars.md
+++ b/src/current/_includes/v23.1/misc/session-vars.md
@@ -49,7 +49,6 @@
| `pg_trgm.similarity_threshold` | The threshold above which a [`%`]({% link {{ page.version.version }}/functions-and-operators.md %}#operators) string comparison returns `true`. The value must be between `0` and `1`. For more information, see [Trigram Indexes]({% link {{ page.version.version }}/trigram-indexes.md %}). | `0.3` | Yes | Yes |
| `prefer_lookup_joins_for_fks` | If `on`, the optimizer prefers [`lookup joins`]({% link {{ page.version.version }}/joins.md %}#lookup-joins) to [`merge joins`]({% link {{ page.version.version }}/joins.md %}#merge-joins) when performing [`foreign key`]({% link {{ page.version.version }}/foreign-key.md %}) checks. | `off` | Yes | Yes |
| `reorder_joins_limit` | Maximum number of joins that the optimizer will attempt to reorder when searching for an optimal query execution plan.
For more information, see [Join reordering]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-reordering). | `8` | Yes | Yes |
-| `results_buffer_size` | The default size of the buffer that accumulates results for a statement or a batch of statements before they are sent to the client. This can also be set for all connections using the `sql.defaults.results_buffer_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}). Note that auto-retries generally only happen while no results have been delivered to the client, so reducing this size can increase the number of retryable errors a client receives. On the other hand, increasing the buffer size can increase the delay until the client receives the first result row. Setting to 0 disables any buffering. | `16384` | Yes | Yes |
| `require_explicit_primary_keys` | If `on`, CockroachDB throws an error for all tables created without an explicit primary key defined. | `off` | Yes | Yes |
| `search_path` | A list of schemas that will be searched to resolve unqualified table or function names. For more details, see [SQL name resolution]({% link {{ page.version.version }}/sql-name-resolution.md %}). | `public` | Yes | Yes |
| `serial_normalization` | Specifies the default handling of [`SERIAL`]({% link {{ page.version.version }}/serial.md %}) in table definitions. Valid options include `'rowid'`, `'virtual_sequence'`, `sql_sequence`, `sql_sequence_cached`, and `unordered_rowid`. If set to `'virtual_sequence'`, the `SERIAL` type auto-creates a sequence for [better compatibility with Hibernate sequences](https://forum.cockroachlabs.com/t/hibernate-sequence-generator-returns-negative-number-and-ignore-unique-rowid/1885). If set to `sql_sequence_cached`, you can use the `sql.defaults.serial_sequences_cache_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to control the number of values to cache in a user's session, with a default of 256. If set to `unordered_rowid`, the `SERIAL` type generates a globally unique 64-bit integer (a combination of the insert timestamp and the ID of the node executing the statement) that does not have unique ordering. | `'rowid'` | Yes | Yes |
diff --git a/src/current/_includes/v23.1/misc/table-storage-parameters.md b/src/current/_includes/v23.1/misc/table-storage-parameters.md
index 2f0f43b57b5..0efd01751be 100644
--- a/src/current/_includes/v23.1/misc/table-storage-parameters.md
+++ b/src/current/_includes/v23.1/misc/table-storage-parameters.md
@@ -1,6 +1,7 @@
| Parameter name | Description | Data type | Default value |
|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------|
| `exclude_data_from_backup` | Exclude the data in this table from any future backups. | Boolean | `false` |
+| New in v23.1.15: `schema_locked` | Disallow [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) on this table. Enabling `schema_locked` can help [improve performance of changefeeds]({% link {{ page.version.version }}/create-changefeed.md %}#disallow-schema-changes-on-tables-to-improve-changefeed-performance) running on this table. | Boolean | `false` |
| `sql_stats_automatic_collection_enabled` | Enable [automatic statistics collection]({% link {{ page.version.version }}/cost-based-optimizer.md %}#enable-and-disable-automatic-statistics-collection-for-tables) for this table. | Boolean | `true` |
| `sql_stats_automatic_collection_min_stale_rows` | Minimum number of stale rows in this table that will trigger a statistics refresh. | Integer | 500 |
| `sql_stats_automatic_collection_fraction_stale_rows` | Fraction of stale rows in this table that will trigger a statistics refresh. | Float | 0.2 |
diff --git a/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-helm.md
index a70f5ad3463..4eb07232e2f 100644
--- a/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-manual.md
index 6b36bc587f9..0705a452274 100644
--- a/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v23.1/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v23.1/performance/increase-server-side-retries.md b/src/current/_includes/v23.1/performance/increase-server-side-retries.md
index a461aac5804..fd79b1b5c26 100644
--- a/src/current/_includes/v23.1/performance/increase-server-side-retries.md
+++ b/src/current/_includes/v23.1/performance/increase-server-side-retries.md
@@ -1,3 +1,4 @@
- [Send statements in transactions as a single batch]({% link {{ page.version.version }}/transactions.md %}#batched-statements). Batching allows CockroachDB to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) a transaction when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a multi-statement transaction is not batched, and takes more than a single round trip, CockroachDB cannot automatically retry the transaction. For an example showing how to break up large transactions in an application, see [Break up large transactions into smaller units of work](build-a-python-app-with-cockroachdb-sqlalchemy.html#break-up-large-transactions-into-smaller-units-of-work).
-- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [session variable](set-vars.html).
\ No newline at end of file
+
+- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [connection parameter]({% link {{page.version.version}}/connection-parameters.md %}#additional-connection-parameters).
diff --git a/src/current/_includes/v23.1/performance/reduce-hot-spots.md b/src/current/_includes/v23.1/performance/reduce-hot-spots.md
index 74cdab96a2c..4d7b601e33d 100644
--- a/src/current/_includes/v23.1/performance/reduce-hot-spots.md
+++ b/src/current/_includes/v23.1/performance/reduce-hot-spots.md
@@ -2,17 +2,23 @@
- Place parts of the records that are modified by different transactions in different tables. That is, increase [normalization](https://wikipedia.org/wiki/Database_normalization). However, there are benefits and drawbacks to increasing normalization.
- - Benefits:
+ - Benefits of increasing normalization:
+ - Can improve performance for write-heavy workloads. This is because, with increased normalization, a given business fact must be written to one place rather than to multiple places.
- Allows separate transactions to modify related underlying data without causing [contention](#transaction-contention).
- - Can improve performance for read-heavy workloads.
+ - Reduces the chance of data inconsistency, since a given business fact must be written only to one place.
+ - Reduces or eliminates data redundancy.
+ - Uses less disk space.
- - Drawbacks:
+ - Drawbacks of increasing normalization:
+ - Can reduce performance for read-heavy workloads. This is because increasing normalization results in more joins, and can make the SQL more complicated in other ways.
- More complex data model.
- - Increases the chance of data inconsistency.
- - Increases data redundancy.
- - Can degrade performance for write-heavy workloads.
+
+ - In general:
+
+ - Increase normalization for write-intensive and read/write-intensive transactional workloads.
+ - Do not increase normalization for read-intensive reporting workloads.
- If the application strictly requires operating on very few different index keys, consider using [`ALTER ... SPLIT AT`]({% link {{ page.version.version }}/alter-table.md %}#split-at) so that each index key can be served by a separate group of nodes in the cluster.
diff --git a/src/current/_includes/v23.1/prod-deployment/healthy-workload-concurrency.md b/src/current/_includes/v23.1/prod-deployment/healthy-workload-concurrency.md
index 9ab356a821c..09bf8763cc0 100644
--- a/src/current/_includes/v23.1/prod-deployment/healthy-workload-concurrency.md
+++ b/src/current/_includes/v23.1/prod-deployment/healthy-workload-concurrency.md
@@ -1 +1 @@
-**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console](../cockroachcloud/metrics-page.html#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools](connection-pooling.html#size-connection-pools).
\ No newline at end of file
+**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console]({% link cockroachcloud/statements-page.md %}). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console]({% link cockroachcloud/metrics-page.md %}#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools]({% link {{ page.version.version }}/connection-pooling.md %}#size-connection-pools).
diff --git a/src/current/_includes/v23.1/prod-deployment/insecure-start-nodes.md b/src/current/_includes/v23.1/prod-deployment/insecure-start-nodes.md
index d19b20c75c0..8b063a588b4 100644
--- a/src/current/_includes/v23.1/prod-deployment/insecure-start-nodes.md
+++ b/src/current/_includes/v23.1/prod-deployment/insecure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=localhost:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v23.1/prod-deployment/secure-start-nodes.md b/src/current/_includes/v23.1/prod-deployment/secure-start-nodes.md
index 1c9c74b9bea..78e975874c6 100644
--- a/src/current/_includes/v23.1/prod-deployment/secure-start-nodes.md
+++ b/src/current/_includes/v23.1/prod-deployment/secure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
diff --git a/src/current/_includes/v23.1/setup/create-first-sql-user.md b/src/current/_includes/v23.1/setup/create-first-sql-user.md
index 556a2d8ad60..21c080a0626 100644
--- a/src/current/_includes/v23.1/setup/create-first-sql-user.md
+++ b/src/current/_includes/v23.1/setup/create-first-sql-user.md
@@ -5,4 +5,4 @@ The **Create SQL user** dialog allows you to create a new SQL user and password.
1. Copy the generated password and save it in a secure location.
1. Click **Next**.
- Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [[Manage SQL users on a cluster](https://www.cockroachlabs.com/docs/cockroachcloud/managing-access#manage-sql-users-on-a-cluster).
\ No newline at end of file
+ Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [Manage SQL users on a cluster]({% link cockroachcloud/managing-access.md %}#manage-sql-users-on-a-cluster).
diff --git a/src/current/_includes/v23.1/sidebar-data/migrate.json b/src/current/_includes/v23.1/sidebar-data/migrate.json
index 071a8e4acc3..4a09e7dcd3d 100644
--- a/src/current/_includes/v23.1/sidebar-data/migrate.json
+++ b/src/current/_includes/v23.1/sidebar-data/migrate.json
@@ -22,12 +22,6 @@
"urls": [
"/molt/molt-verify.html"
]
- },
- {
- "title": "Live Migration Service",
- "urls": [
- "/molt/live-migration-service.html"
- ]
}
]
},
diff --git a/src/current/_includes/v23.1/sql/locality-optimized-search.md b/src/current/_includes/v23.1/sql/locality-optimized-search.md
index 0df9e9741cd..23cac1bc9d9 100644
--- a/src/current/_includes/v23.1/sql/locality-optimized-search.md
+++ b/src/current/_includes/v23.1/sql/locality-optimized-search.md
@@ -1 +1 @@
-Note that the [SQL engine](https://www.cockroachlabs.com/docs/{{ page.version.version }}/architecture/sql-layer) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_](https://www.cockroachlabs.com/docs/{{ page.version.version }}/cost-based-optimizer#locality-optimized-search-in-multi-region-clusters).
+Note that the [SQL engine]({% link {{ page.version.version }}/architecture/sql-layer.md %}) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_]({% link {{ page.version.version }}/cost-based-optimizer.md %}#locality-optimized-search-in-multi-region-clusters).
diff --git a/src/current/_includes/v23.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md b/src/current/_includes/v23.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
index f58bb05bdb1..6fdea66fc89 100644
--- a/src/current/_includes/v23.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
+++ b/src/current/_includes/v23.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
@@ -1,5 +1,5 @@
| Replication Zone Pattern | Multi-Region SQL |
|--------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Duplicate indexes](https://www.cockroachlabs.com/docs/v20.2/topology-duplicate-indexes) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
-| [Geo-partitioned replicas](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-replicas) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
-| [Geo-partitioned leaseholders](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-leaseholders) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
+| [Duplicate indexes]({% link v20.2/topology-duplicate-indexes.md %}) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
+| [Geo-partitioned replicas]({% link v20.2/topology-geo-partitioned-replicas.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
+| [Geo-partitioned leaseholders]({% link v20.2/topology-geo-partitioned-leaseholders.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
diff --git a/src/current/_includes/v23.1/sql/show-ranges-output-deprecation-notice.md b/src/current/_includes/v23.1/sql/show-ranges-output-deprecation-notice.md
index 678370f0218..ff9ef2d7813 100644
--- a/src/current/_includes/v23.1/sql/show-ranges-output-deprecation-notice.md
+++ b/src/current/_includes/v23.1/sql/show-ranges-output-deprecation-notice.md
@@ -5,7 +5,7 @@ The statement syntax and output documented on this page use the updated `SHOW RA
SET CLUSTER SETTING sql.show_ranges_deprecated_behavior.enabled = false;
~~~
-The pre-v23.1 output of `SHOW RANGES` is deprecated in v23.1 **and will be removed in v23.2**. To view the documentation for the deprecated version of the `SHOW RANGES` statement, see [`SHOW RANGES` (v22.2)](https://www.cockroachlabs.com/docs/v22.2/show-ranges).
+The pre-v23.1 output of `SHOW RANGES` is deprecated in v23.1 **and will be removed in v23.2**. To view the documentation for the deprecated version of the `SHOW RANGES` statement, see [`SHOW RANGES` (v22.2)]({% link v22.2/show-ranges.md %}).
When you use the deprecated version of the `SHOW RANGES` statement, the following message will appear, reminding you to update [the cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}#setting-sql-show-ranges-deprecated-behavior-enabled):
diff --git a/src/current/_includes/v23.2/app/hibernate-dialects-note.md b/src/current/_includes/v23.2/app/hibernate-dialects-note.md
index 99add090b32..287f314d393 100644
--- a/src/current/_includes/v23.2/app/hibernate-dialects-note.md
+++ b/src/current/_includes/v23.2/app/hibernate-dialects-note.md
@@ -1,5 +1,5 @@
Versions of the Hibernate CockroachDB dialect correspond to the version of CockroachDB installed on your machine. For example, `org.hibernate.dialect.CockroachDB201Dialect` corresponds to CockroachDB v20.1 and later, and `org.hibernate.dialect.CockroachDB192Dialect` corresponds to CockroachDB v19.2 and later.
-All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes](https://www.cockroachlabs.com/docs/releases). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
+All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes]({% link releases/index.md %}). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
-Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
\ No newline at end of file
+Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
diff --git a/src/current/_includes/v23.2/backups/backup-to-deprec.md b/src/current/_includes/v23.2/backups/backup-to-deprec.md
index 2ffc5d96ea8..77a2b6cae18 100644
--- a/src/current/_includes/v23.2/backups/backup-to-deprec.md
+++ b/src/current/_includes/v23.2/backups/backup-to-deprec.md
@@ -1,5 +1,5 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](https://www.cockroachlabs.com/docs/v20.2/backup) and [`RESTORE ... FROM`](https://www.cockroachlabs.com/docs/v20.2/restore) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-full-or-incremental-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
diff --git a/src/current/_includes/v23.2/backups/serverless-locality-aware.md b/src/current/_includes/v23.2/backups/serverless-locality-aware.md
index 456ee436781..eef7701884e 100644
--- a/src/current/_includes/v23.2/backups/serverless-locality-aware.md
+++ b/src/current/_includes/v23.2/backups/serverless-locality-aware.md
@@ -1 +1 @@
-CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with [data domiciling]({% link v23.2/data-domiciling.md %}) requirements.
\ No newline at end of file
+CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with {% if page.title contains "Cloud" or page.title contains "Serverless" %} [data domiciling]({% link {{site.current_cloud_version}}/data-domiciling.md %}) {% else %} [data domiciling]({% link {{page.version.version}}/data-domiciling.md %}) {% endif %} requirements.
diff --git a/src/current/_includes/v23.2/backups/support-products.md b/src/current/_includes/v23.2/backups/support-products.md
index a3d1b1c2fd5..32423354661 100644
--- a/src/current/_includes/v23.2/backups/support-products.md
+++ b/src/current/_includes/v23.2/backups/support-products.md
@@ -1,3 +1,3 @@
## Supported products
-The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups](https://www.cockroachlabs.com/docs/cockroachcloud/take-and-restore-customer-owned-backups). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
\ No newline at end of file
+The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups]({% link cockroachcloud/take-and-restore-customer-owned-backups.md %}). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
diff --git a/src/current/_includes/v23.2/backward-incompatible/alpha.1.md b/src/current/_includes/v23.2/backward-incompatible/alpha.1.md
index 9e3070ad086..d5aaef86c6b 100644
--- a/src/current/_includes/v23.2/backward-incompatible/alpha.1.md
+++ b/src/current/_includes/v23.2/backward-incompatible/alpha.1.md
@@ -7,9 +7,9 @@
- Optional: keep port `26257` for RPC, and allocate a new port, e.g., `26357`, for SQL connections. For example, you might configure a node with the flags `--listen-addr=:26257 --sql-addr=:26357`. When using this mode of operation, the `--join` flags do not need to be modified. However, SQL client apps or the SQL load balancer configuration (when in use) must be updated to use the new SQL port number. [#85671][#85671]
- If no `nullif` option is specified while using [`IMPORT CSV`](../v23.1/import.html), then a zero-length string in the input is now treated as `NULL`. The quoted empty string in the input is treated as an empty string. Similarly, if `nullif` is specified, then an unquoted value is treated as `NULL`, and a quoted value is treated as that string. These changes were made to make `IMPORT CSV` behave more similarly to `COPY CSV`. If the previous behavior (i.e., treating either quoted or unquoted values that match the `nullif` setting as `NULL`) is desired, you can use the new `allow_quoted_null` option in the `IMPORT` statement. [#84487][#84487]
- [`COPY FROM`](../v23.1/copy-from.html) operations are now atomic by default instead of being segmented into 100 row transactions. Set the `copy_from_atomic_enabled` session setting to `false` for the previous behavior. [#85986][#85986]
-- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`](https://www.cockroachlabs.com/docs/v22.2/grant#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
+- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`]({% link v22.2/grant.md %}#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
- Removed the ability to cast `int`, `int2`, and `int8` to a `0` length `BIT` or `VARBIT`. [#81266][#81266]
- Removed the deprecated `GRANT` privilege. [#81310][#81310]
- Removed the `ttl_automatic_column` storage parameter. The `crdb_internal_expiration` column is created when `ttl_expire_after` is set and removed when `ttl_expire_after` is reset. [#83134][#83134]
- Removed the byte string parameter in the `crdb_internal.schedule_sql_stats_compaction` function. [#82560][#82560]
-- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements](https://www.cockroachlabs.com/docs/v22.2/transactions#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
+- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements]({% link v22.2/transactions.md %}#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
diff --git a/src/current/_includes/v23.2/cdc/filter-show-changefeed-jobs-columns.md b/src/current/_includes/v23.2/cdc/filter-show-changefeed-jobs-columns.md
new file mode 100644
index 00000000000..39471ac538d
--- /dev/null
+++ b/src/current/_includes/v23.2/cdc/filter-show-changefeed-jobs-columns.md
@@ -0,0 +1,11 @@
+You can filter the columns that `SHOW CHANGEFEED JOBS` displays using a `SELECT` statement:
+
+{% include_cached copy-clipboard.html %}
+~~~ sql
+SELECT job_id, sink_uri, status, format FROM [SHOW CHANGEFEED JOBS] WHERE job_id = 997306743028908033;
+~~~
+~~~
+ job_id | sink_uri | status | format
+---------------------+------------------+----------+---------
+ 997306743028908033 | external://kafka | running | json
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/cdc/kafka-vpc-limitation.md b/src/current/_includes/v23.2/cdc/kafka-vpc-limitation.md
index 17b3be98b60..5f7950cdf27 100644
--- a/src/current/_includes/v23.2/cdc/kafka-vpc-limitation.md
+++ b/src/current/_includes/v23.2/cdc/kafka-vpc-limitation.md
@@ -1 +1 @@
-[VPC Peering](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#vpc-peering) and [AWS PrivateLink](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
\ No newline at end of file
+[VPC Peering]({% link cockroachcloud/network-authorization.md %}#vpc-peering) and [AWS PrivateLink]({% link cockroachcloud/network-authorization.md %}#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
diff --git a/src/current/_includes/v23.2/cdc/virtual-computed-column-cdc.md b/src/current/_includes/v23.2/cdc/virtual-computed-column-cdc.md
index e7768290325..60910bb817a 100644
--- a/src/current/_includes/v23.2/cdc/virtual-computed-column-cdc.md
+++ b/src/current/_includes/v23.2/cdc/virtual-computed-column-cdc.md
@@ -1 +1 @@
-As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change](https://www.cockroachlabs.com/docs/releases/v22.1#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`](create-changefeed.html#virtual-columns) option for more detail.
+As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change]({% link releases/v22.1.md %}#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`]({% link {{ page.version.version }}/create-changefeed.md %}#virtual-columns) option for more detail.
diff --git a/src/current/_includes/v23.2/cdc/webhook-beta.md b/src/current/_includes/v23.2/cdc/webhook-beta.md
index 212de3397f1..5d27a27585e 100644
--- a/src/current/_includes/v23.2/cdc/webhook-beta.md
+++ b/src/current/_includes/v23.2/cdc/webhook-beta.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-The webhook sink is currently in **beta** — see [usage considerations](https://www.cockroachlabs.com/docs/{{ page.version.version }}/changefeed-sinks#webhook-sink), available [parameters](https://www.cockroachlabs.com/docs/{{ page.version.version }}/create-changefeed#parameters), and [options](../{{ page.version.version }}/create-changefeed.html#options) for more information.
+The webhook sink is currently in **beta** — see [usage considerations]({% link {{ page.version.version }}/changefeed-sinks.md %}#webhook-sink), available [parameters]({% link {{ page.version.version }}/create-changefeed.md %}#parameters), and [options]({% link {{ page.version.version }}/create-changefeed.md %}#options) for more information.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v23.2/cdc/work-distribution-setting.md b/src/current/_includes/v23.2/cdc/work-distribution-setting.md
new file mode 100644
index 00000000000..3928be00cd3
--- /dev/null
+++ b/src/current/_includes/v23.2/cdc/work-distribution-setting.md
@@ -0,0 +1 @@
+{% include_cached new-in.html version="v23.2.7" %} You can enable the `changefeed.random_replica_selection.enabled` cluster setting to change the way in which a changefeed distributes work across the cluster. With `changefeed.random_replica_selection.enabled` set to `true`, the job will evenly distribute changefeed work across the cluster by assigning it to any [replica]({% link {{ page.version.version }}/architecture/replication-layer.md %}) for a particular range. For `changefeed.random_replica_selection.enabled` to take effect on changefeed jobs, ensure you enable the cluster setting and then [pause]({% link {{ page.version.version }}/pause-job.md %}) and [resume]({% link {{ page.version.version }}/resume-job.md %}) existing changefeeds.
diff --git a/src/current/_includes/v23.2/demo_movr.md b/src/current/_includes/v23.2/demo_movr.md
index ce908298dbc..5a8a431193a 100644
--- a/src/current/_includes/v23.2/demo_movr.md
+++ b/src/current/_includes/v23.2/demo_movr.md
@@ -3,8 +3,4 @@ Start the [MovR database]({% link {{ page.version.version }}/movr.md %}) on a 3-
{% include_cached copy-clipboard.html %}
~~~ shell
cockroach demo movr --num-histories 250000 --num-promo-codes 250000 --num-rides 125000 --num-users 12500 --num-vehicles 3750 --nodes 3
-~~~
-
-{% comment %}
-This is a test
-{% endcomment %}
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/known-limitations/cdc-queries-column-families.md b/src/current/_includes/v23.2/known-limitations/cdc-queries-column-families.md
new file mode 100644
index 00000000000..a68a7949824
--- /dev/null
+++ b/src/current/_includes/v23.2/known-limitations/cdc-queries-column-families.md
@@ -0,0 +1 @@
+Creating a changefeed with {% if page.name == "cdc-queries.md" %} CDC queries {% else %} [CDC queries]({% link {{ page.version.version }}/cdc-queries.md %}) {% endif %} on tables with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %} is not supported. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/127761)
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/known-limitations/changefeed-column-family-message.md b/src/current/_includes/v23.2/known-limitations/changefeed-column-family-message.md
new file mode 100644
index 00000000000..b8aafbe11dc
--- /dev/null
+++ b/src/current/_includes/v23.2/known-limitations/changefeed-column-family-message.md
@@ -0,0 +1 @@
+When you create a changefeed on a table with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %}, the changefeed will emit messages per column family in separate streams. As a result, [changefeed messages]({% link {{ page.version.version }}/changefeed-messages.md %}) for different column families will arrive at the [sink]({% link {{ page.version.version }}/changefeed-sinks.md %}) under separate topics. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/127736)
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/known-limitations/physical-cluster-replication.md b/src/current/_includes/v23.2/known-limitations/physical-cluster-replication.md
index fc876bc24a0..0a9fc624cf2 100644
--- a/src/current/_includes/v23.2/known-limitations/physical-cluster-replication.md
+++ b/src/current/_includes/v23.2/known-limitations/physical-cluster-replication.md
@@ -1,11 +1,7 @@
- Physical cluster replication is supported only on CockroachDB {{ site.data.products.core }} in new v23.2 clusters. Physical Cluster Replication cannot be enabled on clusters that have been upgraded from a previous version of CockroachDB.
-- Cockroach Labs supports physical cluster replication up to the following scale:
- - Initial data load: 2TB
- - Read maximum: 1000 reads per second
- - Write maximum: 850 writes per second
- Read queries are not supported on the standby cluster before [cutover]({% link {{ page.version.version }}/cutover-replication.md %}).
- The primary and standby cluster **cannot have different [region topology]({% link {{ page.version.version }}/topology-patterns.md %})**. For example, replicating a multi-region primary cluster to a single-region standby cluster is not supported. Mismatching regions between a multi-region primary and standby cluster is also not supported.
- Cutting back to the primary cluster after a cutover is a manual process. Refer to [Cut back to the primary cluster]({% link {{ page.version.version }}/cutover-replication.md %}#cut-back-to-the-primary-cluster). In addition, after cutover, to continue using physical cluster replication, you must configure it again.
- Before cutover to the standby, the standby cluster does not support running [backups]({% link {{ page.version.version }}/backup-and-restore-overview.md %}) or [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}).
-- After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records. [Tracking GitHub issue](https://github.com/cockroachdb/cockroach/issues/117984)
+- After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records.
- Large data imports, such as those produced by [`RESTORE`]({% link {{ page.version.version }}/restore.md %}) or [`IMPORT`]({% link {{ page.version.version }}/import.md %}), may dramatically increase [replication lag]({% link {{ page.version.version }}/physical-cluster-replication-technical-overview.md %}#cutover-and-promotion-process).
diff --git a/src/current/_includes/v23.2/known-limitations/show-backup-symlink.md b/src/current/_includes/v23.2/known-limitations/show-backup-symlink.md
new file mode 100644
index 00000000000..1316e7d7667
--- /dev/null
+++ b/src/current/_includes/v23.2/known-limitations/show-backup-symlink.md
@@ -0,0 +1 @@
+[`SHOW BACKUP`]({% link {{ page.version.version }}/show-backup.md %}) does not support listing backups if the [`nodelocal`]({% link {{ page.version.version }}/cockroach-nodelocal-upload.md %}) storage location is a symlink. [Tracking GitHub Issue](https://github.com/cockroachdb/cockroach/issues/70260)
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/migration/load-data-import-into.md b/src/current/_includes/v23.2/migration/load-data-import-into.md
index d60faa70b50..174b1bd33f4 100644
--- a/src/current/_includes/v23.2/migration/load-data-import-into.md
+++ b/src/current/_includes/v23.2/migration/load-data-import-into.md
@@ -1 +1 @@
-Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
+Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the CockroachDB tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/misc/note-egress-perimeter-cdc-backup.md b/src/current/_includes/v23.2/misc/note-egress-perimeter-cdc-backup.md
index ee8352b424c..ffa1c87e2a2 100644
--- a/src/current/_includes/v23.2/misc/note-egress-perimeter-cdc-backup.md
+++ b/src/current/_includes/v23.2/misc/note-egress-perimeter-cdc-backup.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls](https://www.cockroachlabs.com/docs/cockroachcloud/egress-perimeter-controls) for detail and setup instructions.
+Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls]({% link cockroachcloud/egress-perimeter-controls.md %}) for detail and setup instructions.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v23.2/misc/session-vars.md b/src/current/_includes/v23.2/misc/session-vars.md
index 7bc46843661..c6b1d090ac6 100644
--- a/src/current/_includes/v23.2/misc/session-vars.md
+++ b/src/current/_includes/v23.2/misc/session-vars.md
@@ -22,13 +22,13 @@
| `enable_auto_rehoming` | When enabled, the [home regions]({% link {{ page.version.version }}/alter-table.md %}#crdb_region) of rows in [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#set-the-table-locality-to-regional-by-row) tables are automatically set to the region of the [gateway node]({% link {{ page.version.version }}/ui-sessions-page.md %}#session-details-gateway-node) from which any [`UPDATE`]({% link {{ page.version.version }}/update.md %}) or [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements that operate on those rows originate. | `off` | Yes | Yes |
| `enable_durable_locking_for_serializable` | Indicates whether CockroachDB replicates [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) locks via [Raft]({% link {{ page.version.version }}/architecture/replication-layer.md %}#raft), allowing locks to be preserved when leases are transferred. Note that replicating `FOR UPDATE` and `FOR SHARE` locks will add latency to those statements. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_experimental_alter_column_type_general` | If `on`, it is possible to [alter column data types]({% link {{ page.version.version }}/alter-table.md %}#alter-column-data-types). | `off` | Yes | Yes |
-| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, `enable_shared_locking_for_serializable` must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
+| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, the [`enable_shared_locking_for_serializable`](#enable-shared-locking-for-serializable) setting must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_implicit_select_for_update` | Indicates whether [`UPDATE`]({% link {{ page.version.version }}/update.md %}) and [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements acquire locks using the `FOR UPDATE` locking mode during their initial row scan, which improves performance for contended workloads.
For more information about how `FOR UPDATE` locking works, see the documentation for [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}). | `on` | Yes | Yes |
| `enable_implicit_transaction_for_batch_statements` | Indicates whether multiple statements in a single query (a "batch statement") will all run in the same implicit transaction, which matches the PostgreSQL wire protocol. | `on` | Yes | Yes |
| `enable_insert_fast_path` | Indicates whether CockroachDB will use a specialized execution operator for inserting into a table. We recommend leaving this setting `on`. | `on` | Yes | Yes |
| `enable_shared_locking_for_serializable` | Indicates whether [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) are enabled for `SERIALIZABLE` transactions. When `off`, `SELECT` statements using `FOR SHARE` are still permitted under `SERIALIZABLE` isolation, but silently do not lock. | `off` | Yes | Yes |
| `enable_super_regions` | When enabled, you can define a super region: a set of [database regions]({% link {{ page.version.version }}/multiregion-overview.md %}#super-regions) on a multi-region cluster such that your [schema objects]({% link {{ page.version.version }}/schema-design-overview.md %}#database-schema-objects) will have all of their [replicas]({% link {{ page.version.version }}/architecture/overview.md %}#architecture-replica) stored _only_ in regions that are members of the super region. | `off` | Yes | Yes |
-| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a zig-zag merge join algorithm, which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
+| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a [zigzag merge join algorithm]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins), which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
| `enforce_home_region` | If set to `on`, queries return an error and in some cases a suggested resolution if they cannot run entirely in their home region. This can occur if a query has no home region (for example, if it reads from different home regions in a [regional by row table]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables)) or a query's home region differs from the [gateway]({% link {{ page.version.version }}/architecture/life-of-a-distributed-transaction.md %}#gateway) region. Note that only tables with `ZONE` [survivability]({% link {{ page.version.version }}/multiregion-survival-goals.md %}#when-to-use-zone-vs-region-survival-goals) can be scanned without error when this is enabled. For more information about home regions, see [Table localities]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities).
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `enforce_home_region_follower_reads_enabled` | If `on` while the [`enforce_home_region`]({% link {{ page.version.version }}/cost-based-optimizer.md %}#control-whether-queries-are-limited-to-a-single-region) setting is `on`, allows `enforce_home_region` to perform `AS OF SYSTEM TIME` [follower reads]({% link {{ page.version.version }}/follower-reads.md %}) to detect and report a query's [home region]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities), if any.
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `expect_and_ignore_not_visible_columns_in_copy` | If `on`, [`COPY FROM`]({% link {{ page.version.version }}/copy-from.md %}) with no column specifiers will assume that hidden columns are in the copy data, but will ignore them when applying `COPY FROM`. | `off` | Yes | Yes |
@@ -47,15 +47,17 @@
| `multiple_active_portals_enabled` | Whether to enable the [multiple active portals]({% link {{ page.version.version }}/postgresql-compatibility.md %}#multiple-active-portals) pgwire feature. | `false` | Yes | Yes |
| `node_id` | The ID of the node currently connected to.
This variable is particularly useful for verifying load balanced connections. | Node-dependent | No | Yes |
| `null_ordered_last` | Set the default ordering of `NULL`s. The default order is `NULL`s first for ascending order and `NULL`s last for descending order. | `false` | Yes | Yes |
+| `optimizer_push_offset_into_index_join` | If `on`, the optimizer will attempt to push offset expressions into index join expressions to produce more efficient query plans. | `off` | Yes | Yes |
| `optimizer_use_forecasts` | If `on`, the optimizer uses forecasted statistics for query planning. | `on` | Yes | Yes |
| `optimizer_use_histograms` | If `on`, the optimizer uses collected histograms for cardinality estimation. | `on` | No | Yes |
+| `optimizer_use_improved_multi_column_selectivity_estimate` | If `on`, the optimizer uses an improved selectivity estimate for multi-column predicates. | `off` | Yes | Yes |
+| `optimizer_use_improved_zigzag_join_costing` | If `on`, the cost of [zigzag joins]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins) is updated so they will be never be chosen over scans unless they produce fewer rows. To take effect, the [`enable_zigzag_join`](#enable-zigzag-join) setting must also be enabled. | `on` | Yes | Yes |
| `optimizer_use_lock_op_for_serializable` | If `on`, the optimizer uses a `Lock` operator to construct query plans for `SELECT` statements using the [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) clauses. This setting only affects `SERIALIZABLE` transactions. `READ COMMITTED` transactions are evaluated with the `Lock` operator regardless of the setting. | `off` | Yes | Yes |
| `optimizer_use_multicol_stats` | If `on`, the optimizer uses collected multi-column statistics for cardinality estimation. | `on` | No | Yes |
| `optimizer_use_not_visible_indexes` | If `on`, the optimizer uses not visible indexes for planning. | `off` | No | Yes |
| `pg_trgm.similarity_threshold` | The threshold above which a [`%`]({% link {{ page.version.version }}/functions-and-operators.md %}#operators) string comparison returns `true`. The value must be between `0` and `1`. For more information, see [Trigram Indexes]({% link {{ page.version.version }}/trigram-indexes.md %}). | `0.3` | Yes | Yes |
| `prefer_lookup_joins_for_fks` | If `on`, the optimizer prefers [`lookup joins`]({% link {{ page.version.version }}/joins.md %}#lookup-joins) to [`merge joins`]({% link {{ page.version.version }}/joins.md %}#merge-joins) when performing [`foreign key`]({% link {{ page.version.version }}/foreign-key.md %}) checks. | `off` | Yes | Yes |
| `reorder_joins_limit` | Maximum number of joins that the optimizer will attempt to reorder when searching for an optimal query execution plan.
For more information, see [Join reordering]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-reordering). | `8` | Yes | Yes |
-| `results_buffer_size` | The default size of the buffer that accumulates results for a statement or a batch of statements before they are sent to the client. This can also be set for all connections using the `sql.defaults.results_buffer_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}). Note that auto-retries generally only happen while no results have been delivered to the client, so reducing this size can increase the number of retryable errors a client receives. On the other hand, increasing the buffer size can increase the delay until the client receives the first result row. Setting to 0 disables any buffering. | `16384` | Yes | Yes |
| `require_explicit_primary_keys` | If `on`, CockroachDB throws an error for all tables created without an explicit primary key defined. | `off` | Yes | Yes |
| `search_path` | A list of schemas that will be searched to resolve unqualified table or function names. For more details, see [SQL name resolution]({% link {{ page.version.version }}/sql-name-resolution.md %}). | `public` | Yes | Yes |
| `serial_normalization` | Specifies the default handling of [`SERIAL`]({% link {{ page.version.version }}/serial.md %}) in table definitions. Valid options include `'rowid'`, `'virtual_sequence'`, `sql_sequence`, `sql_sequence_cached`, and `unordered_rowid`. If set to `'virtual_sequence'`, the `SERIAL` type auto-creates a sequence for [better compatibility with Hibernate sequences](https://forum.cockroachlabs.com/t/hibernate-sequence-generator-returns-negative-number-and-ignore-unique-rowid/1885). If set to `sql_sequence_cached`, you can use the `sql.defaults.serial_sequences_cache_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to control the number of values to cache in a user's session, with a default of 256. If set to `unordered_rowid`, the `SERIAL` type generates a globally unique 64-bit integer (a combination of the insert timestamp and the ID of the node executing the statement) that does not have unique ordering. | `'rowid'` | Yes | Yes |
diff --git a/src/current/_includes/v23.2/misc/table-storage-parameters.md b/src/current/_includes/v23.2/misc/table-storage-parameters.md
index 2f0f43b57b5..32dee5a9aaa 100644
--- a/src/current/_includes/v23.2/misc/table-storage-parameters.md
+++ b/src/current/_includes/v23.2/misc/table-storage-parameters.md
@@ -1,6 +1,7 @@
| Parameter name | Description | Data type | Default value |
|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------|
| `exclude_data_from_backup` | Exclude the data in this table from any future backups. | Boolean | `false` |
+| New in v23.2.1: `schema_locked` | Disallow [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) on this table. Enabling `schema_locked` can help [improve performance of changefeeds]({% link {{ page.version.version }}/create-changefeed.md %}#disallow-schema-changes-on-tables-to-improve-changefeed-performance) running on this table. | Boolean | `false` |
| `sql_stats_automatic_collection_enabled` | Enable [automatic statistics collection]({% link {{ page.version.version }}/cost-based-optimizer.md %}#enable-and-disable-automatic-statistics-collection-for-tables) for this table. | Boolean | `true` |
| `sql_stats_automatic_collection_min_stale_rows` | Minimum number of stale rows in this table that will trigger a statistics refresh. | Integer | 500 |
| `sql_stats_automatic_collection_fraction_stale_rows` | Fraction of stale rows in this table that will trigger a statistics refresh. | Float | 0.2 |
diff --git a/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-helm.md
index 5d10a01dde9..4506ae28c74 100644
--- a/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-manual.md
index 34054e2587b..078858ee083 100644
--- a/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v23.2/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v23.2/performance/increase-server-side-retries.md b/src/current/_includes/v23.2/performance/increase-server-side-retries.md
index a461aac5804..7419e6aac42 100644
--- a/src/current/_includes/v23.2/performance/increase-server-side-retries.md
+++ b/src/current/_includes/v23.2/performance/increase-server-side-retries.md
@@ -1,3 +1,3 @@
- [Send statements in transactions as a single batch]({% link {{ page.version.version }}/transactions.md %}#batched-statements). Batching allows CockroachDB to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) a transaction when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a multi-statement transaction is not batched, and takes more than a single round trip, CockroachDB cannot automatically retry the transaction. For an example showing how to break up large transactions in an application, see [Break up large transactions into smaller units of work](build-a-python-app-with-cockroachdb-sqlalchemy.html#break-up-large-transactions-into-smaller-units-of-work).
-- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [session variable](set-vars.html).
\ No newline at end of file
+- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [connection parameter]({% link {{page.version.version}}/connection-parameters.md %}#additional-connection-parameters).
diff --git a/src/current/_includes/v23.2/performance/reduce-hot-spots.md b/src/current/_includes/v23.2/performance/reduce-hot-spots.md
index 74cdab96a2c..4d7b601e33d 100644
--- a/src/current/_includes/v23.2/performance/reduce-hot-spots.md
+++ b/src/current/_includes/v23.2/performance/reduce-hot-spots.md
@@ -2,17 +2,23 @@
- Place parts of the records that are modified by different transactions in different tables. That is, increase [normalization](https://wikipedia.org/wiki/Database_normalization). However, there are benefits and drawbacks to increasing normalization.
- - Benefits:
+ - Benefits of increasing normalization:
+ - Can improve performance for write-heavy workloads. This is because, with increased normalization, a given business fact must be written to one place rather than to multiple places.
- Allows separate transactions to modify related underlying data without causing [contention](#transaction-contention).
- - Can improve performance for read-heavy workloads.
+ - Reduces the chance of data inconsistency, since a given business fact must be written only to one place.
+ - Reduces or eliminates data redundancy.
+ - Uses less disk space.
- - Drawbacks:
+ - Drawbacks of increasing normalization:
+ - Can reduce performance for read-heavy workloads. This is because increasing normalization results in more joins, and can make the SQL more complicated in other ways.
- More complex data model.
- - Increases the chance of data inconsistency.
- - Increases data redundancy.
- - Can degrade performance for write-heavy workloads.
+
+ - In general:
+
+ - Increase normalization for write-intensive and read/write-intensive transactional workloads.
+ - Do not increase normalization for read-intensive reporting workloads.
- If the application strictly requires operating on very few different index keys, consider using [`ALTER ... SPLIT AT`]({% link {{ page.version.version }}/alter-table.md %}#split-at) so that each index key can be served by a separate group of nodes in the cluster.
diff --git a/src/current/_includes/v23.2/prod-deployment/healthy-workload-concurrency.md b/src/current/_includes/v23.2/prod-deployment/healthy-workload-concurrency.md
index 9ab356a821c..09bf8763cc0 100644
--- a/src/current/_includes/v23.2/prod-deployment/healthy-workload-concurrency.md
+++ b/src/current/_includes/v23.2/prod-deployment/healthy-workload-concurrency.md
@@ -1 +1 @@
-**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console](../cockroachcloud/metrics-page.html#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools](connection-pooling.html#size-connection-pools).
\ No newline at end of file
+**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console]({% link cockroachcloud/statements-page.md %}). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console]({% link cockroachcloud/metrics-page.md %}#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools]({% link {{ page.version.version }}/connection-pooling.md %}#size-connection-pools).
diff --git a/src/current/_includes/v23.2/prod-deployment/insecure-start-nodes.md b/src/current/_includes/v23.2/prod-deployment/insecure-start-nodes.md
index d19b20c75c0..8b063a588b4 100644
--- a/src/current/_includes/v23.2/prod-deployment/insecure-start-nodes.md
+++ b/src/current/_includes/v23.2/prod-deployment/insecure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=localhost:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v23.2/prod-deployment/secure-start-nodes.md b/src/current/_includes/v23.2/prod-deployment/secure-start-nodes.md
index 8d30630c7d5..0af2606b90b 100644
--- a/src/current/_includes/v23.2/prod-deployment/secure-start-nodes.md
+++ b/src/current/_includes/v23.2/prod-deployment/secure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v23.2/setup/create-first-sql-user.md b/src/current/_includes/v23.2/setup/create-first-sql-user.md
index 556a2d8ad60..21c080a0626 100644
--- a/src/current/_includes/v23.2/setup/create-first-sql-user.md
+++ b/src/current/_includes/v23.2/setup/create-first-sql-user.md
@@ -5,4 +5,4 @@ The **Create SQL user** dialog allows you to create a new SQL user and password.
1. Copy the generated password and save it in a secure location.
1. Click **Next**.
- Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [[Manage SQL users on a cluster](https://www.cockroachlabs.com/docs/cockroachcloud/managing-access#manage-sql-users-on-a-cluster).
\ No newline at end of file
+ Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [Manage SQL users on a cluster]({% link cockroachcloud/managing-access.md %}#manage-sql-users-on-a-cluster).
diff --git a/src/current/_includes/v23.2/sidebar-data/migrate.json b/src/current/_includes/v23.2/sidebar-data/migrate.json
index e9e9d4b949a..48e1670082a 100644
--- a/src/current/_includes/v23.2/sidebar-data/migrate.json
+++ b/src/current/_includes/v23.2/sidebar-data/migrate.json
@@ -34,12 +34,6 @@
"urls": [
"/molt/molt-verify.html"
]
- },
- {
- "title": "Live Migration Service",
- "urls": [
- "/molt/live-migration-service.html"
- ]
}
]
},
diff --git a/src/current/_includes/v23.2/sql/locality-optimized-search.md b/src/current/_includes/v23.2/sql/locality-optimized-search.md
index 0df9e9741cd..23cac1bc9d9 100644
--- a/src/current/_includes/v23.2/sql/locality-optimized-search.md
+++ b/src/current/_includes/v23.2/sql/locality-optimized-search.md
@@ -1 +1 @@
-Note that the [SQL engine](https://www.cockroachlabs.com/docs/{{ page.version.version }}/architecture/sql-layer) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_](https://www.cockroachlabs.com/docs/{{ page.version.version }}/cost-based-optimizer#locality-optimized-search-in-multi-region-clusters).
+Note that the [SQL engine]({% link {{ page.version.version }}/architecture/sql-layer.md %}) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_]({% link {{ page.version.version }}/cost-based-optimizer.md %}#locality-optimized-search-in-multi-region-clusters).
diff --git a/src/current/_includes/v23.2/sql/partially-visible-indexes.md b/src/current/_includes/v23.2/sql/partially-visible-indexes.md
new file mode 100644
index 00000000000..83f251c8374
--- /dev/null
+++ b/src/current/_includes/v23.2/sql/partially-visible-indexes.md
@@ -0,0 +1 @@
+For the purposes of [index recommendations]({% link {{ page.version.version }}/explain.md %}#success-responses), partially visible indexes are treated as [not visible]({% link {{ page.version.version }}/alter-index.md %}#not-visible). If a partially visible index can be used to improve a query plan, the {% if page.name != "cost-based-optimizer.md" %}[optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}){% else %}optimizer{% endif %} will recommend making it fully visible. For an example, refer to [Set an index as partially visible]({% link {{ page.version.version }}/alter-index.md %}#set-an-index-as-partially-visible).
\ No newline at end of file
diff --git a/src/current/_includes/v23.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md b/src/current/_includes/v23.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
index f58bb05bdb1..6fdea66fc89 100644
--- a/src/current/_includes/v23.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
+++ b/src/current/_includes/v23.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
@@ -1,5 +1,5 @@
| Replication Zone Pattern | Multi-Region SQL |
|--------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Duplicate indexes](https://www.cockroachlabs.com/docs/v20.2/topology-duplicate-indexes) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
-| [Geo-partitioned replicas](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-replicas) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
-| [Geo-partitioned leaseholders](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-leaseholders) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
+| [Duplicate indexes]({% link v20.2/topology-duplicate-indexes.md %}) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
+| [Geo-partitioned replicas]({% link v20.2/topology-geo-partitioned-replicas.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
+| [Geo-partitioned leaseholders]({% link v20.2/topology-geo-partitioned-leaseholders.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
diff --git a/src/current/_includes/v23.2/sql/show-ranges-output-deprecation-notice.md b/src/current/_includes/v23.2/sql/show-ranges-output-deprecation-notice.md
index 8f628b4910d..ad6d8956115 100644
--- a/src/current/_includes/v23.2/sql/show-ranges-output-deprecation-notice.md
+++ b/src/current/_includes/v23.2/sql/show-ranges-output-deprecation-notice.md
@@ -5,7 +5,7 @@ The statement syntax and output documented on this page use the updated `SHOW RA
SET CLUSTER SETTING sql.show_ranges_deprecated_behavior.enabled = true;
~~~
-The pre-v23.1 output of `SHOW RANGES` was deprecated in v23.1 and will be removed in a future release. To view the documentation for the deprecated version of the `SHOW RANGES` statement, see [`SHOW RANGES` (v22.2)](https://www.cockroachlabs.com/docs/v22.2/show-ranges).
+The pre-v23.1 output of `SHOW RANGES` was deprecated in v23.1 and will be removed in a future release. To view the documentation for the deprecated version of the `SHOW RANGES` statement, see [`SHOW RANGES` (v22.2)]({% link v22.2/show-ranges.md %}).
When you use the deprecated version of the `SHOW RANGES` statement, the following message will appear, reminding you to update [the cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}#setting-sql-show-ranges-deprecated-behavior-enabled):
diff --git a/src/current/_includes/v24.1/app/hibernate-dialects-note.md b/src/current/_includes/v24.1/app/hibernate-dialects-note.md
index 99add090b32..287f314d393 100644
--- a/src/current/_includes/v24.1/app/hibernate-dialects-note.md
+++ b/src/current/_includes/v24.1/app/hibernate-dialects-note.md
@@ -1,5 +1,5 @@
Versions of the Hibernate CockroachDB dialect correspond to the version of CockroachDB installed on your machine. For example, `org.hibernate.dialect.CockroachDB201Dialect` corresponds to CockroachDB v20.1 and later, and `org.hibernate.dialect.CockroachDB192Dialect` corresponds to CockroachDB v19.2 and later.
-All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes](https://www.cockroachlabs.com/docs/releases). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
+All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes]({% link releases/index.md %}). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
-Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
\ No newline at end of file
+Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
diff --git a/src/current/_includes/v24.1/backups/backup-to-deprec.md b/src/current/_includes/v24.1/backups/backup-to-deprec.md
index 2ffc5d96ea8..77a2b6cae18 100644
--- a/src/current/_includes/v24.1/backups/backup-to-deprec.md
+++ b/src/current/_includes/v24.1/backups/backup-to-deprec.md
@@ -1,5 +1,5 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](https://www.cockroachlabs.com/docs/v20.2/backup) and [`RESTORE ... FROM`](https://www.cockroachlabs.com/docs/v20.2/restore) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-full-or-incremental-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
diff --git a/src/current/_includes/v24.1/backups/serverless-locality-aware.md b/src/current/_includes/v24.1/backups/serverless-locality-aware.md
index 456ee436781..eef7701884e 100644
--- a/src/current/_includes/v24.1/backups/serverless-locality-aware.md
+++ b/src/current/_includes/v24.1/backups/serverless-locality-aware.md
@@ -1 +1 @@
-CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with [data domiciling]({% link v23.2/data-domiciling.md %}) requirements.
\ No newline at end of file
+CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with {% if page.title contains "Cloud" or page.title contains "Serverless" %} [data domiciling]({% link {{site.current_cloud_version}}/data-domiciling.md %}) {% else %} [data domiciling]({% link {{page.version.version}}/data-domiciling.md %}) {% endif %} requirements.
diff --git a/src/current/_includes/v24.1/backups/support-products.md b/src/current/_includes/v24.1/backups/support-products.md
index a3d1b1c2fd5..32423354661 100644
--- a/src/current/_includes/v24.1/backups/support-products.md
+++ b/src/current/_includes/v24.1/backups/support-products.md
@@ -1,3 +1,3 @@
## Supported products
-The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups](https://www.cockroachlabs.com/docs/cockroachcloud/take-and-restore-customer-owned-backups). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
\ No newline at end of file
+The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups]({% link cockroachcloud/take-and-restore-customer-owned-backups.md %}). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
diff --git a/src/current/_includes/v24.1/backward-incompatible/alpha.1.md b/src/current/_includes/v24.1/backward-incompatible/alpha.1.md
index 9e3070ad086..d5aaef86c6b 100644
--- a/src/current/_includes/v24.1/backward-incompatible/alpha.1.md
+++ b/src/current/_includes/v24.1/backward-incompatible/alpha.1.md
@@ -7,9 +7,9 @@
- Optional: keep port `26257` for RPC, and allocate a new port, e.g., `26357`, for SQL connections. For example, you might configure a node with the flags `--listen-addr=:26257 --sql-addr=:26357`. When using this mode of operation, the `--join` flags do not need to be modified. However, SQL client apps or the SQL load balancer configuration (when in use) must be updated to use the new SQL port number. [#85671][#85671]
- If no `nullif` option is specified while using [`IMPORT CSV`](../v23.1/import.html), then a zero-length string in the input is now treated as `NULL`. The quoted empty string in the input is treated as an empty string. Similarly, if `nullif` is specified, then an unquoted value is treated as `NULL`, and a quoted value is treated as that string. These changes were made to make `IMPORT CSV` behave more similarly to `COPY CSV`. If the previous behavior (i.e., treating either quoted or unquoted values that match the `nullif` setting as `NULL`) is desired, you can use the new `allow_quoted_null` option in the `IMPORT` statement. [#84487][#84487]
- [`COPY FROM`](../v23.1/copy-from.html) operations are now atomic by default instead of being segmented into 100 row transactions. Set the `copy_from_atomic_enabled` session setting to `false` for the previous behavior. [#85986][#85986]
-- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`](https://www.cockroachlabs.com/docs/v22.2/grant#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
+- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`]({% link v22.2/grant.md %}#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
- Removed the ability to cast `int`, `int2`, and `int8` to a `0` length `BIT` or `VARBIT`. [#81266][#81266]
- Removed the deprecated `GRANT` privilege. [#81310][#81310]
- Removed the `ttl_automatic_column` storage parameter. The `crdb_internal_expiration` column is created when `ttl_expire_after` is set and removed when `ttl_expire_after` is reset. [#83134][#83134]
- Removed the byte string parameter in the `crdb_internal.schedule_sql_stats_compaction` function. [#82560][#82560]
-- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements](https://www.cockroachlabs.com/docs/v22.2/transactions#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
+- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements]({% link v22.2/transactions.md %}#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
diff --git a/src/current/_includes/v24.1/cdc/filter-show-changefeed-jobs-columns.md b/src/current/_includes/v24.1/cdc/filter-show-changefeed-jobs-columns.md
new file mode 100644
index 00000000000..39471ac538d
--- /dev/null
+++ b/src/current/_includes/v24.1/cdc/filter-show-changefeed-jobs-columns.md
@@ -0,0 +1,11 @@
+You can filter the columns that `SHOW CHANGEFEED JOBS` displays using a `SELECT` statement:
+
+{% include_cached copy-clipboard.html %}
+~~~ sql
+SELECT job_id, sink_uri, status, format FROM [SHOW CHANGEFEED JOBS] WHERE job_id = 997306743028908033;
+~~~
+~~~
+ job_id | sink_uri | status | format
+---------------------+------------------+----------+---------
+ 997306743028908033 | external://kafka | running | json
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/cdc/kafka-vpc-limitation.md b/src/current/_includes/v24.1/cdc/kafka-vpc-limitation.md
index 17b3be98b60..5f7950cdf27 100644
--- a/src/current/_includes/v24.1/cdc/kafka-vpc-limitation.md
+++ b/src/current/_includes/v24.1/cdc/kafka-vpc-limitation.md
@@ -1 +1 @@
-[VPC Peering](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#vpc-peering) and [AWS PrivateLink](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
\ No newline at end of file
+[VPC Peering]({% link cockroachcloud/network-authorization.md %}#vpc-peering) and [AWS PrivateLink]({% link cockroachcloud/network-authorization.md %}#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
diff --git a/src/current/_includes/v24.1/cdc/virtual-computed-column-cdc.md b/src/current/_includes/v24.1/cdc/virtual-computed-column-cdc.md
index e7768290325..60910bb817a 100644
--- a/src/current/_includes/v24.1/cdc/virtual-computed-column-cdc.md
+++ b/src/current/_includes/v24.1/cdc/virtual-computed-column-cdc.md
@@ -1 +1 @@
-As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change](https://www.cockroachlabs.com/docs/releases/v22.1#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`](create-changefeed.html#virtual-columns) option for more detail.
+As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change]({% link releases/v22.1.md %}#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`]({% link {{ page.version.version }}/create-changefeed.md %}#virtual-columns) option for more detail.
diff --git a/src/current/_includes/v24.1/cdc/webhook-beta.md b/src/current/_includes/v24.1/cdc/webhook-beta.md
index 212de3397f1..5d27a27585e 100644
--- a/src/current/_includes/v24.1/cdc/webhook-beta.md
+++ b/src/current/_includes/v24.1/cdc/webhook-beta.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-The webhook sink is currently in **beta** — see [usage considerations](https://www.cockroachlabs.com/docs/{{ page.version.version }}/changefeed-sinks#webhook-sink), available [parameters](https://www.cockroachlabs.com/docs/{{ page.version.version }}/create-changefeed#parameters), and [options](../{{ page.version.version }}/create-changefeed.html#options) for more information.
+The webhook sink is currently in **beta** — see [usage considerations]({% link {{ page.version.version }}/changefeed-sinks.md %}#webhook-sink), available [parameters]({% link {{ page.version.version }}/create-changefeed.md %}#parameters), and [options]({% link {{ page.version.version }}/create-changefeed.md %}#options) for more information.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v24.1/demo_movr.md b/src/current/_includes/v24.1/demo_movr.md
index ce908298dbc..5a8a431193a 100644
--- a/src/current/_includes/v24.1/demo_movr.md
+++ b/src/current/_includes/v24.1/demo_movr.md
@@ -3,8 +3,4 @@ Start the [MovR database]({% link {{ page.version.version }}/movr.md %}) on a 3-
{% include_cached copy-clipboard.html %}
~~~ shell
cockroach demo movr --num-histories 250000 --num-promo-codes 250000 --num-rides 125000 --num-users 12500 --num-vehicles 3750 --nodes 3
-~~~
-
-{% comment %}
-This is a test
-{% endcomment %}
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/essential-metrics.md b/src/current/_includes/v24.1/essential-metrics.md
index b308d770349..e7520ddafdb 100644
--- a/src/current/_includes/v24.1/essential-metrics.md
+++ b/src/current/_includes/v24.1/essential-metrics.md
@@ -50,6 +50,20 @@ The **Usage** column explains why each metric is important to visualize in a cus
| admission.wait_durations.kv-stores-p75 | {% if include.deployment == 'self-hosted' %}admission.wait.durations.kv_stores |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Wait time durations for requests that waited | This metric shows if I/O utilization-based admission control feature is working effectively or potentially overaggressive. This is a latency histogram of how much delay was added to the workload due to throttling by I/O control. If observing over 100ms waits for over 5 seconds while there was excess I/O capacity available, then the admission control is overly aggressive. |
| sys.runnable.goroutines.per.cpu | {% if include.deployment == 'self-hosted' %}sys.runnable.goroutines.per_cpu |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Average number of goroutines that are waiting to run, normalized by number of cores | If this metric has a value over 30, it indicates a CPU overload. If the condition lasts a short period of time (a few seconds), the database users are likely to experience inconsistent response times. If the condition persists for an extended period of time (tens of seconds, or minutes) the cluster may start developing stability issues. Review [CPU planning]({% link {{ page.version.version }}/common-issues-to-monitor.md %}#cpu).
+{% if include.deployment == 'self-hosted' %}
+## Network
+
+|
| Usage |
+| ------------------------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| rpc.connection.avg_round_trip_latency | rpc.connection.avg_round_trip_latency | Sum of exponentially weighted moving average of round-trip latencies, as measured through a gRPC RPC. Dividing this gauge by `rpc.connection.healthy` gives an approximation of average latency, but the top-level round-trip-latency histogram is more useful. Instead, users should consult the label families of this metric if they are available (which requires Prometheus and the cluster setting `server.child_metrics.enabled`); these provide per-peer moving averages. This metric does not track failed connection. A failed connection's contribution is reset to zero. | This metric is helpful in understanding general network issues outside of CockroachDB that could be impacting the user’s workload. |
+| rpc.connection.failures | rpc.connection.failures.count | Counter of failed connections. This includes both the event in which a healthy connection terminates as well as unsuccessful reconnection attempts. Connections that are terminated as part of local node shutdown are excluded. Decommissioned peers are excluded. | See Description. |
+| rpc.connection.healthy | rpc.connection.healthy | Gauge of current connections in a healthy state (i.e., bidirectionally connected and heartbeating). | See Description. |
+| rpc.connection.healthy_nanos | rpc.connection.healthy_nanos | Gauge of nanoseconds of healthy connection time. On the Prometheus endpoint scraped when the cluster setting `server.child_metrics.enabled` is set, this gauge allows you to see the duration for which a given peer has been connected in a healthy state. | This can be useful for monitoring the stability and health of connections within your CockroachDB cluster. |
+| rpc.connection.heartbeats | rpc.connection.heartbeats.count | Counter of successful heartbeats. | See Description. |
+| rpc.connection.unhealthy | rpc.connection.unhealthy | Gauge of current connections in an unhealthy state (not bidirectionally connected or heartbeating). | If the value of this metric is greater than 0, this could indicate a network partition. |
+| rpc.connection.unhealthy_nanos | rpc.connection.unhealthy_nanos | Gauge of nanoseconds of unhealthy connection time. On the Prometheus endpoint scraped when the cluster setting `server.child_metrics.enabled` is set, this gauge allows you to see the duration for which a given peer has been unreachable. | If this duration is greater than 0, this could indicate how long a network partition has been occurring. |
+{% endif %}
+
{% if include.deployment == 'self-hosted' %}
## Expiration of license and certificates
@@ -135,7 +149,7 @@ The **Usage** column explains why each metric is important to visualize in a cus
| jobs.backup.currently_running | {% if include.deployment == 'self-hosted' %}jobs.backup.currently_running |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of backup jobs currently running | See Description. |
| jobs.backup.currently_paused | {% if include.deployment == 'self-hosted' %}jobs.backup.currently_paused |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of backup jobs currently considered Paused | Monitor and alert on this metric to safeguard against an inadvertent operational error of leaving a backup job in a paused state for an extended period of time. In functional areas, a paused job can hold resources or have concurrency impact or some other negative consequence. Paused backup may break the [recovery point objective (RPO)]({% link {{ page.version.version }}/backup.md %}#performance). |
| schedules.BACKUP.failed | {% if include.deployment == 'self-hosted' %}schedules.backup.failed |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of BACKUP jobs failed | Monitor this metric and investigate backup job failures. |
-| schedules.BACKUP.last-completed-time | {% if include.deployment == 'self-hosted' %}schedules.backup.last_completed_time |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} The unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric | Monitor this metric to know that backups are meeting the [recovery point objective (RPO)]({% link {{ page.version.version }}/backup.md %}#performance). |
+| schedules.BACKUP.last-completed-time | {% if include.deployment == 'self-hosted' %}schedules.backup.last_completed_time |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} The Unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric | Monitor this metric to ensure that backups are meeting the [recovery point objective (RPO)]({% link {{ page.version.version }}/disaster-recovery-overview.md %}#resilience-strategy). Each node exports the time that it last completed a backup on behalf of the schedule. If a node is restarted, it will report `0` until it completes a backup. If all nodes are restarted, `max()` is `0` until a node completes a backup.
To make use of this metric, first, from each node, take the maximum over a rolling window equal to or greater than the backup frequency, and then take the maximum of those values across nodes. For example with a backup frequency of 60 minutes, monitor `time() - max_across_nodes(max_over_time(schedules_BACKUP_last_completed_time, 60min))`. |
## Changefeeds
diff --git a/src/current/_includes/v24.1/known-limitations/aost-limitations.md b/src/current/_includes/v24.1/known-limitations/aost-limitations.md
new file mode 100644
index 00000000000..811c884d08d
--- /dev/null
+++ b/src/current/_includes/v24.1/known-limitations/aost-limitations.md
@@ -0,0 +1 @@
+CockroachDB does not support placeholders in {% if page.name == "as-of-system-time.md" %}`AS OF SYSTEM TIME`{% else %}[`AS OF SYSTEM TIME`]({% link {{ page.version.version }}/as-of-system-time.md %}){% endif %}. The time value must be a constant value embedded in the SQL string. [#30955](https://github.com/cockroachdb/cockroach/issues/30955)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/cdc-queries-column-families.md b/src/current/_includes/v24.1/known-limitations/cdc-queries-column-families.md
new file mode 100644
index 00000000000..505a8c9700e
--- /dev/null
+++ b/src/current/_includes/v24.1/known-limitations/cdc-queries-column-families.md
@@ -0,0 +1 @@
+Creating a changefeed with {% if page.name == "cdc-queries.md" %} CDC queries {% else %} [CDC queries]({% link {{ page.version.version }}/cdc-queries.md %}) {% endif %} on tables with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %} is not supported. [#127761](https://github.com/cockroachdb/cockroach/issues/127761)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/changefeed-column-family-message.md b/src/current/_includes/v24.1/known-limitations/changefeed-column-family-message.md
new file mode 100644
index 00000000000..41744b9b4b4
--- /dev/null
+++ b/src/current/_includes/v24.1/known-limitations/changefeed-column-family-message.md
@@ -0,0 +1 @@
+When you create a changefeed on a table with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %}, the changefeed will emit messages per column family in separate streams. As a result, [changefeed messages]({% link {{ page.version.version }}/changefeed-messages.md %}) for different column families will arrive at the [sink]({% link {{ page.version.version }}/changefeed-sinks.md %}) under separate topics. [#127736](https://github.com/cockroachdb/cockroach/issues/127736)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/create-statistics-aost-limitation.md b/src/current/_includes/v24.1/known-limitations/create-statistics-aost-limitation.md
new file mode 100644
index 00000000000..09f86f51c48
--- /dev/null
+++ b/src/current/_includes/v24.1/known-limitations/create-statistics-aost-limitation.md
@@ -0,0 +1 @@
+The `ANALYZE` alias {% if page.name != "create-statistics.md" %}of [`CREATE STATISTICS`]({% link {{ page.version.version }}/create-statistics.md %}){% endif %} does not support specifying an {% if page.name == "as-of-system-time.md" %}`AS OF SYSTEM TIME`{% else %}[`AS OF SYSTEM TIME`]({% link {{ page.version.version }}/as-of-system-time.md %}){% endif %} timestamp. `ANALYZE` statements use `AS OF SYSTEM TIME '-0.001ms'` automatically. For more control over the statistics interval, use the `CREATE STATISTICS` syntax instead. [#96430](https://github.com/cockroachdb/cockroach/issues/96430)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/cutover-stop-application.md b/src/current/_includes/v24.1/known-limitations/cutover-stop-application.md
index 94ed342620e..1762f211c5a 100644
--- a/src/current/_includes/v24.1/known-limitations/cutover-stop-application.md
+++ b/src/current/_includes/v24.1/known-limitations/cutover-stop-application.md
@@ -1 +1 @@
-After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records. [#117984](https://github.com/cockroachdb/cockroach/issues/117984)
\ No newline at end of file
+After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records.
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/physical-cluster-replication.md b/src/current/_includes/v24.1/known-limitations/physical-cluster-replication.md
index fb951e9bbde..f914c7eced2 100644
--- a/src/current/_includes/v24.1/known-limitations/physical-cluster-replication.md
+++ b/src/current/_includes/v24.1/known-limitations/physical-cluster-replication.md
@@ -3,5 +3,4 @@
- The primary and standby cluster **cannot have different [region topology]({% link {{ page.version.version }}/topology-patterns.md %})**. For example, replicating a multi-region primary cluster to a single-region standby cluster is not supported. Mismatching regions between a multi-region primary and standby cluster is also not supported.
- Cutting back to the primary cluster after a cutover is a manual process. Refer to [Cut back to the primary cluster]({% link {{ page.version.version }}/cutover-replication.md %}#cut-back-to-the-primary-cluster). In addition, after cutover, to continue using physical cluster replication, you must configure it again.
- Before cutover to the standby, the standby cluster does not support running [backups]({% link {{ page.version.version }}/backup-and-restore-overview.md %}) or [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}).
-- After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records.
- Large data imports, such as those produced by [`RESTORE`]({% link {{ page.version.version }}/restore.md %}) or [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}), may dramatically increase [replication lag]({% link {{ page.version.version }}/physical-cluster-replication-technical-overview.md %}#cutover-and-promotion-process).
diff --git a/src/current/_includes/v24.1/known-limitations/plpgsql-limitations.md b/src/current/_includes/v24.1/known-limitations/plpgsql-limitations.md
index 70b66dbd6a1..ddd8ab55026 100644
--- a/src/current/_includes/v24.1/known-limitations/plpgsql-limitations.md
+++ b/src/current/_includes/v24.1/known-limitations/plpgsql-limitations.md
@@ -17,4 +17,10 @@
- `NOT NULL` variable declarations are not supported. [#105243](https://github.com/cockroachdb/cockroach/issues/105243)
- Cursors opened in PL/pgSQL execute their queries on opening, affecting performance and resource usage. [#111479](https://github.com/cockroachdb/cockroach/issues/111479)
- Cursors in PL/pgSQL cannot be declared with arguments. [#117746](https://github.com/cockroachdb/cockroach/issues/117746)
-- `OPEN FOR EXECUTE` is not supported for opening cursors. [#117744](https://github.com/cockroachdb/cockroach/issues/117744)
\ No newline at end of file
+- `OPEN FOR EXECUTE` is not supported for opening cursors. [#117744](https://github.com/cockroachdb/cockroach/issues/117744)
+- The `print_strict_params` option is not supported in PL/pgSQL. [#123671](https://github.com/cockroachdb/cockroach/issues/123671)
+- The `FOUND` local variable, which checks whether a statement affected any rows, is not supported in PL/pgSQL. [#122306](https://github.com/cockroachdb/cockroach/issues/122306)
+- By default, when a PL/pgSQL variable conflicts with a column name, CockroachDB resolves the ambiguity by treating it as a column reference rather than a variable reference. This behavior differs from PostgreSQL, where an ambiguous column error is reported, and it is possible to change the `plpgsql.variable_conflict` setting in order to prefer either columns or variables. [#115680](https://github.com/cockroachdb/cockroach/issues/115680)
+- It is not possible to define a `RECORD`-returning PL/pgSQL function that returns different-typed expressions from different `RETURN` statements. CockroachDB requires a consistent return type for `RECORD`-returning functions. [#115384](https://github.com/cockroachdb/cockroach/issues/115384)
+- Variables cannot be declared with an associated collation using the `COLLATE` keyword. [#105245](https://github.com/cockroachdb/cockroach/issues/105245)
+- Variables cannot be accessed using the `label.var_name` pattern. [#122322](https://github.com/cockroachdb/cockroach/issues/122322)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/read-committed-limitations.md b/src/current/_includes/v24.1/known-limitations/read-committed-limitations.md
index 5087e29ac00..c322ec2585c 100644
--- a/src/current/_includes/v24.1/known-limitations/read-committed-limitations.md
+++ b/src/current/_includes/v24.1/known-limitations/read-committed-limitations.md
@@ -1,5 +1,5 @@
- Schema changes (e.g., [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %}), [`CREATE SCHEMA`]({% link {{ page.version.version }}/create-schema.md %}), [`CREATE INDEX`]({% link {{ page.version.version }}/create-index.md %})) cannot be performed within explicit `READ COMMITTED` transactions, and will cause transactions to abort. As a workaround, [set the transaction's isolation level]({% link {{ page.version.version }}/read-committed.md %}#set-the-current-transaction-to-read-committed) to `SERIALIZABLE`. [#114778](https://github.com/cockroachdb/cockroach/issues/114778)
-- `READ COMMITTED` transactions performing `INSERT`, `UPDATE`, or `UPSERT` cannot access [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables in which [`UNIQUE`]({% link {{ page.version.version }}/unique.md %}) and [`PRIMARY KEY`]({% link {{ page.version.version }}/primary-key.md %}) constraints exist, the region is not included in the constraint, and the region cannot be computed from the constraint columns.
+- `READ COMMITTED` transactions performing `INSERT`, `UPDATE`, or `UPSERT` cannot access [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables in which [`UNIQUE`]({% link {{ page.version.version }}/unique.md %}) and [`PRIMARY KEY`]({% link {{ page.version.version }}/primary-key.md %}) constraints exist, the region is not included in the constraint, and the region cannot be computed from the constraint columns. [#110873](https://github.com/cockroachdb/cockroach/issues/110873)
- Multi-column-family checks during updates are not supported under `READ COMMITTED` isolation. [#112488](https://github.com/cockroachdb/cockroach/issues/112488)
- Because locks acquired by [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks, [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}), and [`SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) are fully replicated under `READ COMMITTED` isolation, some queries experience a delay for Raft replication.
- [Foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks are not performed in parallel under `READ COMMITTED` isolation.
diff --git a/src/current/_includes/v24.1/known-limitations/routine-limitations.md b/src/current/_includes/v24.1/known-limitations/routine-limitations.md
index f122a76f25f..701ea79c75b 100644
--- a/src/current/_includes/v24.1/known-limitations/routine-limitations.md
+++ b/src/current/_includes/v24.1/known-limitations/routine-limitations.md
@@ -4,4 +4,6 @@
- Routines cannot be created with unnamed `INOUT` parameters. For example, `CREATE PROCEDURE p(INOUT INT) AS $$ BEGIN NULL; END; $$ LANGUAGE PLpgSQL;`. [#121251](https://github.com/cockroachdb/cockroach/issues/121251)
- Routines cannot be created if they return fewer columns than declared. For example, `CREATE FUNCTION f(OUT sum INT, INOUT a INT, INOUT b INT) LANGUAGE SQL AS $$ SELECT (a + b, b); $$;`. [#121247](https://github.com/cockroachdb/cockroach/issues/121247)
{% endif %}
-- DDL statements (e.g., `CREATE TABLE`, `CREATE INDEX`) are not allowed within UDFs or stored procedures. [#110080](https://github.com/cockroachdb/cockroach/issues/110080)
\ No newline at end of file
+- Routines cannot be created with an `OUT` parameter of type `RECORD`. [#123448](https://github.com/cockroachdb/cockroach/issues/123448)
+- DDL statements (e.g., `CREATE TABLE`, `CREATE INDEX`) are not allowed within UDFs or stored procedures. [#110080](https://github.com/cockroachdb/cockroach/issues/110080)
+- Polymorphic types cannot be cast to other types (e.g., `TEXT`) within routine parameters. [#123536](https://github.com/cockroachdb/cockroach/issues/123536)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/show-backup-symlink.md b/src/current/_includes/v24.1/known-limitations/show-backup-symlink.md
new file mode 100644
index 00000000000..38ba86fb28f
--- /dev/null
+++ b/src/current/_includes/v24.1/known-limitations/show-backup-symlink.md
@@ -0,0 +1 @@
+[`SHOW BACKUP`]({% link {{ page.version.version }}/show-backup.md %}) does not support listing backups if the [`nodelocal`]({% link {{ page.version.version }}/cockroach-nodelocal-upload.md %}) storage location is a symlink. [#70260](https://github.com/cockroachdb/cockroach/issues/70260)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/stored-proc-limitations.md b/src/current/_includes/v24.1/known-limitations/stored-proc-limitations.md
index ec0fa31c9b8..70d8cd71791 100644
--- a/src/current/_includes/v24.1/known-limitations/stored-proc-limitations.md
+++ b/src/current/_includes/v24.1/known-limitations/stored-proc-limitations.md
@@ -1,2 +1,3 @@
{% if page.name != "known-limitations.md" # New limitations in v24.1 %}
-{% endif %}
\ No newline at end of file
+{% endif %}
+- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/known-limitations/udf-limitations.md b/src/current/_includes/v24.1/known-limitations/udf-limitations.md
index 7064acb8775..7555fde890a 100644
--- a/src/current/_includes/v24.1/known-limitations/udf-limitations.md
+++ b/src/current/_includes/v24.1/known-limitations/udf-limitations.md
@@ -6,4 +6,5 @@
- Views. [#87699](https://github.com/cockroachdb/cockroach/issues/87699)
- User-defined functions cannot call themselves recursively. [#93049](https://github.com/cockroachdb/cockroach/issues/93049)
- [Common table expressions]({% link {{ page.version.version }}/common-table-expressions.md %}) (CTE), recursive or non-recursive, are not supported in [user-defined functions]({% link {{ page.version.version }}/user-defined-functions.md %}) (UDF). That is, you cannot use a `WITH` clause in the body of a UDF. [#92961](https://github.com/cockroachdb/cockroach/issues/92961)
-- The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860)
\ No newline at end of file
+- The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860)
+- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/migration/load-data-import-into.md b/src/current/_includes/v24.1/migration/load-data-import-into.md
index d60faa70b50..174b1bd33f4 100644
--- a/src/current/_includes/v24.1/migration/load-data-import-into.md
+++ b/src/current/_includes/v24.1/migration/load-data-import-into.md
@@ -1 +1 @@
-Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
+Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the CockroachDB tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/misc/note-egress-perimeter-cdc-backup.md b/src/current/_includes/v24.1/misc/note-egress-perimeter-cdc-backup.md
index ee8352b424c..ffa1c87e2a2 100644
--- a/src/current/_includes/v24.1/misc/note-egress-perimeter-cdc-backup.md
+++ b/src/current/_includes/v24.1/misc/note-egress-perimeter-cdc-backup.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls](https://www.cockroachlabs.com/docs/cockroachcloud/egress-perimeter-controls) for detail and setup instructions.
+Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls]({% link cockroachcloud/egress-perimeter-controls.md %}) for detail and setup instructions.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v24.1/misc/session-vars.md b/src/current/_includes/v24.1/misc/session-vars.md
index cabc75dc9ed..1a848fce954 100644
--- a/src/current/_includes/v24.1/misc/session-vars.md
+++ b/src/current/_includes/v24.1/misc/session-vars.md
@@ -22,13 +22,13 @@
| `enable_auto_rehoming` | When enabled, the [home regions]({% link {{ page.version.version }}/alter-table.md %}#crdb_region) of rows in [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#set-the-table-locality-to-regional-by-row) tables are automatically set to the region of the [gateway node]({% link {{ page.version.version }}/ui-sessions-page.md %}#session-details-gateway-node) from which any [`UPDATE`]({% link {{ page.version.version }}/update.md %}) or [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements that operate on those rows originate. | `off` | Yes | Yes |
| `enable_durable_locking_for_serializable` | Indicates whether CockroachDB replicates [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) locks via [Raft]({% link {{ page.version.version }}/architecture/replication-layer.md %}#raft), allowing locks to be preserved when leases are transferred. Note that replicating `FOR UPDATE` and `FOR SHARE` locks will add latency to those statements. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_experimental_alter_column_type_general` | If `on`, it is possible to [alter column data types]({% link {{ page.version.version }}/alter-table.md %}#alter-column-data-types). | `off` | Yes | Yes |
-| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, `enable_shared_locking_for_serializable` must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
+| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, the [`enable_shared_locking_for_serializable`](#enable-shared-locking-for-serializable) setting must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_implicit_select_for_update` | Indicates whether [`UPDATE`]({% link {{ page.version.version }}/update.md %}) and [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements acquire locks using the `FOR UPDATE` locking mode during their initial row scan, which improves performance for contended workloads.
For more information about how `FOR UPDATE` locking works, see the documentation for [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}). | `on` | Yes | Yes |
| `enable_implicit_transaction_for_batch_statements` | Indicates whether multiple statements in a single query (a "batch statement") will all run in the same implicit transaction, which matches the PostgreSQL wire protocol. | `on` | Yes | Yes |
| `enable_insert_fast_path` | Indicates whether CockroachDB will use a specialized execution operator for inserting into a table. We recommend leaving this setting `on`. | `on` | Yes | Yes |
| `enable_shared_locking_for_serializable` | Indicates whether [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) are enabled for `SERIALIZABLE` transactions. When `off`, `SELECT` statements using `FOR SHARE` are still permitted under `SERIALIZABLE` isolation, but silently do not lock. | `off` | Yes | Yes |
| `enable_super_regions` | When enabled, you can define a super region: a set of [database regions]({% link {{ page.version.version }}/multiregion-overview.md %}#super-regions) on a multi-region cluster such that your [schema objects]({% link {{ page.version.version }}/schema-design-overview.md %}#database-schema-objects) will have all of their [replicas]({% link {{ page.version.version }}/architecture/overview.md %}#architecture-replica) stored _only_ in regions that are members of the super region. | `off` | Yes | Yes |
-| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a zig-zag merge join algorithm, which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
+| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a [zigzag merge join algorithm]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins), which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
| `enforce_home_region` | If set to `on`, queries return an error and in some cases a suggested resolution if they cannot run entirely in their home region. This can occur if a query has no home region (for example, if it reads from different home regions in a [regional by row table]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables)) or a query's home region differs from the [gateway]({% link {{ page.version.version }}/architecture/life-of-a-distributed-transaction.md %}#gateway) region. Note that only tables with `ZONE` [survivability]({% link {{ page.version.version }}/multiregion-survival-goals.md %}#when-to-use-zone-vs-region-survival-goals) can be scanned without error when this is enabled. For more information about home regions, see [Table localities]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities).
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `enforce_home_region_follower_reads_enabled` | If `on` while the [`enforce_home_region`]({% link {{ page.version.version }}/cost-based-optimizer.md %}#control-whether-queries-are-limited-to-a-single-region) setting is `on`, allows `enforce_home_region` to perform `AS OF SYSTEM TIME` [follower reads]({% link {{ page.version.version }}/follower-reads.md %}) to detect and report a query's [home region]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities), if any.
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `expect_and_ignore_not_visible_columns_in_copy` | If `on`, [`COPY FROM`]({% link {{ page.version.version }}/copy-from.md %}) with no column specifiers will assume that hidden columns are in the copy data, but will ignore them when applying `COPY FROM`. | `off` | Yes | Yes |
@@ -47,18 +47,20 @@
| `multiple_active_portals_enabled` | Whether to enable the [multiple active portals]({% link {{ page.version.version }}/postgresql-compatibility.md %}#multiple-active-portals) pgwire feature. | `false` | Yes | Yes |
| `node_id` | The ID of the node currently connected to.
This variable is particularly useful for verifying load balanced connections. | Node-dependent | No | Yes |
| `null_ordered_last` | Set the default ordering of `NULL`s. The default order is `NULL`s first for ascending order and `NULL`s last for descending order. | `false` | Yes | Yes |
-| `optimizer_merge_joins_enabled` | If `on`, the optimizer will explore query plans with merge joins. | `on` | Yes| Yes |
+| `optimizer_merge_joins_enabled` | If `on`, the optimizer will explore query plans with merge joins. | `on` | Yes | Yes |
+| `optimizer_push_offset_into_index_join` | If `on`, the optimizer will attempt to push offset expressions into index join expressions to produce more efficient query plans. | `on` | Yes | Yes |
| `optimizer_use_forecasts` | If `on`, the optimizer uses forecasted statistics for query planning. | `on` | Yes | Yes |
| `optimizer_use_histograms` | If `on`, the optimizer uses collected histograms for cardinality estimation. | `on` | No | Yes |
+| `optimizer_use_improved_multi_column_selectivity_estimate` | If `on`, the optimizer uses an improved selectivity estimate for multi-column predicates. | `off` | Yes | Yes |
+| `optimizer_use_improved_zigzag_join_costing` | If `on`, the cost of [zigzag joins]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins) is updated so they will be never be chosen over scans unless they produce fewer rows. To take effect, the [`enable_zigzag_join`](#enable-zigzag-join) setting must also be enabled. | `on` | Yes | Yes |
| `optimizer_use_lock_op_for_serializable` | If `on`, the optimizer uses a `Lock` operator to construct query plans for `SELECT` statements using the [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) clauses. This setting only affects `SERIALIZABLE` transactions. `READ COMMITTED` transactions are evaluated with the `Lock` operator regardless of the setting. | `off` | Yes | Yes |
| `optimizer_use_multicol_stats` | If `on`, the optimizer uses collected multi-column statistics for cardinality estimation. | `on` | No | Yes |
| `optimizer_use_not_visible_indexes` | If `on`, the optimizer uses not visible indexes for planning. | `off` | No | Yes |
-| `optimizer_use_virtual_computed_column_stats` | If `on`, the optimizer uses table statistics on [virtual computed columns]({% link {{ page.version.version }}/computed-columns.md %}#virtual-computed-columns). | `on` | Yes | Yes
+| `optimizer_use_virtual_computed_column_stats` | If `on`, the optimizer uses table statistics on [virtual computed columns]({% link {{ page.version.version }}/computed-columns.md %}#virtual-computed-columns). | `on` | Yes | Yes |
| `plpgsql_use_strict_into` | If `on`, PL/pgSQL [`SELECT ... INTO` and `RETURNING ... INTO` statements]({% link {{ page.version.version }}/plpgsql.md %}#assign-a-result-to-a-variable) behave as though the `STRICT` option is specified. This causes the SQL statement to error if it does not return exactly one row. | `off` | Yes | Yes |
| `pg_trgm.similarity_threshold` | The threshold above which a [`%`]({% link {{ page.version.version }}/functions-and-operators.md %}#operators) string comparison returns `true`. The value must be between `0` and `1`. For more information, see [Trigram Indexes]({% link {{ page.version.version }}/trigram-indexes.md %}). | `0.3` | Yes | Yes |
| `prefer_lookup_joins_for_fks` | If `on`, the optimizer prefers [`lookup joins`]({% link {{ page.version.version }}/joins.md %}#lookup-joins) to [`merge joins`]({% link {{ page.version.version }}/joins.md %}#merge-joins) when performing [`foreign key`]({% link {{ page.version.version }}/foreign-key.md %}) checks. | `off` | Yes | Yes |
| `reorder_joins_limit` | Maximum number of joins that the optimizer will attempt to reorder when searching for an optimal query execution plan.
For more information, see [Join reordering]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-reordering). | `8` | Yes | Yes |
-| `results_buffer_size` | The default size of the buffer that accumulates results for a statement or a batch of statements before they are sent to the client. This can also be set for all connections using the `sql.defaults.results_buffer_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}). Note that auto-retries generally only happen while no results have been delivered to the client, so reducing this size can increase the number of retryable errors a client receives. On the other hand, increasing the buffer size can increase the delay until the client receives the first result row. Setting to 0 disables any buffering. | `16384` | Yes | Yes |
| `require_explicit_primary_keys` | If `on`, CockroachDB throws an error for all tables created without an explicit primary key defined. | `off` | Yes | Yes |
| `search_path` | A list of schemas that will be searched to resolve unqualified table or function names. For more details, see [SQL name resolution]({% link {{ page.version.version }}/sql-name-resolution.md %}). | `public` | Yes | Yes |
| `serial_normalization` | Specifies the default handling of [`SERIAL`]({% link {{ page.version.version }}/serial.md %}) in table definitions. Valid options include `'rowid'`, `'virtual_sequence'`, `sql_sequence`, `sql_sequence_cached`, and `unordered_rowid`. If set to `'virtual_sequence'`, the `SERIAL` type auto-creates a sequence for [better compatibility with Hibernate sequences](https://forum.cockroachlabs.com/t/hibernate-sequence-generator-returns-negative-number-and-ignore-unique-rowid/1885). If set to `sql_sequence_cached`, you can use the `sql.defaults.serial_sequences_cache_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to control the number of values to cache in a user's session, with a default of 256. If set to `unordered_rowid`, the `SERIAL` type generates a globally unique 64-bit integer (a combination of the insert timestamp and the ID of the node executing the statement) that does not have unique ordering. | `'rowid'` | Yes | Yes |
@@ -66,11 +68,11 @@
| `server_version_num` | The version of PostgreSQL that CockroachDB emulates. | Version-dependent | Yes | Yes |
| `session_id` | The ID of the current session. | Session-dependent | No | Yes |
| `session_user` | The user connected for the current session. | User in connection string | No | Yes |
-| `sql_safe_updates` | If `false`, potentially unsafe SQL statements are allowed, including `DROP` of a non-empty database and all dependent objects, [`DELETE`]({% link {{ page.version.version }}/delete.md %}) without a `WHERE` clause, [`UPDATE`]({% link {{ page.version.version }}/update.md %}) without a `WHERE` clause, and [`ALTER TABLE .. DROP COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#drop-column). See [Allow Potentially Unsafe SQL Statements]({% link {{ page.version.version }}/cockroach-sql.md %}#allow-potentially-unsafe-sql-statements) for more details. | `true` for interactive sessions from the [built-in SQL client]({% link {{ page.version.version }}/cockroach-sql.md %}), `false` for sessions from other clients | Yes | Yes |
+| `sql_safe_updates` | If `true`, the following potentially unsafe SQL statements are disallowed: [`DROP DATABASE`]({% link {{ page.version.version }}/drop-database.md %}) of a non-empty database and all dependent objects; [`DELETE`]({% link {{ page.version.version }}/delete.md %}) and [`UPDATE`]({% link {{ page.version.version }}/update.md %}) without a `WHERE` clause, unless a [`LIMIT`]({% link {{ page.version.version }}/limit-offset.md %}) clause is included; [`SELECT ... FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}) and [`SELECT ... FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) without a `WHERE` or [`LIMIT`]({% link {{ page.version.version }}/limit-offset.md %}) clause; and [`ALTER TABLE ... DROP COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#drop-column). For more details, refer to [Allow potentially unsafe SQL statements]({% link {{ page.version.version }}/cockroach-sql.md %}#allow-potentially-unsafe-sql-statements). | `true` for interactive sessions from the [built-in SQL client]({% link {{ page.version.version }}/cockroach-sql.md %}), `false` for sessions from other clients | Yes | Yes |
| `statement_timeout` | The amount of time a statement can run before being stopped. This value can be an `int` (e.g., `10`) and will be interpreted as milliseconds. It can also be an interval or string argument, where the string can be parsed as a valid interval (e.g., `'4s'`). A value of `0` turns it off. | The value set by the `sql.defaults.statement_timeout` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) (`0s`, by default). | Yes | Yes |
| `stub_catalog_tables` | If `off`, querying an unimplemented, empty [`pg_catalog`]({% link {{ page.version.version }}/pg-catalog.md %}) table will result in an error, as is the case in v20.2 and earlier. If `on`, querying an unimplemented, empty `pg_catalog` table simply returns no rows. | `on` | Yes | Yes |
-| `timezone` | The default time zone for the current session. This session variable was named `"time zone"` (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `UTC` | Yes | Yes |
-| `tracing` | The trace recording state. | `off` | | Yes |
+| `timezone` | The default time zone for the current session. | `UTC` | Yes | Yes |
+| `tracing` | The trace recording state. | `off` | Yes | Yes |
| `transaction_isolation` | The isolation level at which the transaction executes ([`SERIALIZABLE`]({% link {{ page.version.version }}/demo-serializable.md %}) or [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %})). See [Isolation levels]({% link {{ page.version.version }}/transactions.md %}#isolation-levels). | `SERIALIZABLE` | Yes | Yes |
| `transaction_priority` | The priority of the current transaction. See Transactions: Transaction priorities for more details. This session variable was called transaction priority (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `NORMAL` | Yes | Yes |
| `transaction_read_only` | The access mode of the current transaction. See [`SET TRANSACTION`]({% link {{ page.version.version }}/set-transaction.md %}) for more details. | `off` | Yes | Yes |
@@ -78,7 +80,7 @@
| `transaction_rows_read_log` | The threshold for the number of rows read by a SQL transaction. If this value is exceeded, the event will be logged to `SQL_PERF` (or `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
| `transaction_rows_written_err` | The limit for the number of rows written by a SQL transaction. If this value is exceeded the transaction will fail (or the event will be logged to `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
| `transaction_rows_written_log` | The threshold for the number of rows written by a SQL transaction. If this value is exceeded, the event will be logged to `SQL_PERF` (or `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
-| `transaction_status` | The state of the current transaction. See [Transactions]({% link {{ page.version.version }}/transactions.md %}) for more details. This session variable was called `transaction status` (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `NoTxn` | No | Yes |
+| `transaction_status` | The state of the current transaction. See [Transactions]({% link {{ page.version.version }}/transactions.md %}) for more details. | `NoTxn` | No | Yes |
| `transaction_timeout` | Aborts an explicit [transaction]({% link {{ page.version.version }}/transactions.md %}) when it runs longer than the configured duration. Stored in milliseconds; can be expressed in milliseconds or as an [`INTERVAL`]({% link {{ page.version.version }}/interval.md %}). | `0` | Yes | Yes |
| `troubleshooting_mode_enabled` | When enabled, avoid performing additional work on queries, such as collecting and emitting telemetry data. This session variable is particularly useful when the cluster is experiencing issues, unavailability, or failure. | `off` | Yes | Yes |
| `use_declarative_schema_changer` | Whether to use the declarative schema changer for supported statements. See [Declarative schema changer]({% link {{ page.version.version }}/online-schema-changes.md %}#declarative-schema-changer) for more details. | `on` | Yes | Yes |
diff --git a/src/current/_includes/v24.1/misc/table-storage-parameters.md b/src/current/_includes/v24.1/misc/table-storage-parameters.md
index 2f0f43b57b5..3ca7f601648 100644
--- a/src/current/_includes/v24.1/misc/table-storage-parameters.md
+++ b/src/current/_includes/v24.1/misc/table-storage-parameters.md
@@ -1,6 +1,7 @@
| Parameter name | Description | Data type | Default value |
|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------|
| `exclude_data_from_backup` | Exclude the data in this table from any future backups. | Boolean | `false` |
+| `schema_locked` | Disallow [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) on this table. Enabling `schema_locked` can help [improve performance of changefeeds]({% link {{ page.version.version }}/create-changefeed.md %}#disallow-schema-changes-on-tables-to-improve-changefeed-performance) running on this table. | Boolean | `false` |
| `sql_stats_automatic_collection_enabled` | Enable [automatic statistics collection]({% link {{ page.version.version }}/cost-based-optimizer.md %}#enable-and-disable-automatic-statistics-collection-for-tables) for this table. | Boolean | `true` |
| `sql_stats_automatic_collection_min_stale_rows` | Minimum number of stale rows in this table that will trigger a statistics refresh. | Integer | 500 |
| `sql_stats_automatic_collection_fraction_stale_rows` | Fraction of stale rows in this table that will trigger a statistics refresh. | Float | 0.2 |
diff --git a/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-helm.md
index 5d10a01dde9..4506ae28c74 100644
--- a/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-manual.md
index 34054e2587b..078858ee083 100644
--- a/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v24.1/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v24.1/performance/increase-server-side-retries.md b/src/current/_includes/v24.1/performance/increase-server-side-retries.md
index f43b8a9abf8..95f2c2a9647 100644
--- a/src/current/_includes/v24.1/performance/increase-server-side-retries.md
+++ b/src/current/_includes/v24.1/performance/increase-server-side-retries.md
@@ -2,4 +2,4 @@
-- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [session variable](set-vars.html).
\ No newline at end of file
+- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [connection parameter]({% link {{page.version.version}}/connection-parameters.md %}#additional-connection-parameters).
diff --git a/src/current/_includes/v24.1/performance/reduce-hot-spots.md b/src/current/_includes/v24.1/performance/reduce-hot-spots.md
index 74cdab96a2c..4d7b601e33d 100644
--- a/src/current/_includes/v24.1/performance/reduce-hot-spots.md
+++ b/src/current/_includes/v24.1/performance/reduce-hot-spots.md
@@ -2,17 +2,23 @@
- Place parts of the records that are modified by different transactions in different tables. That is, increase [normalization](https://wikipedia.org/wiki/Database_normalization). However, there are benefits and drawbacks to increasing normalization.
- - Benefits:
+ - Benefits of increasing normalization:
+ - Can improve performance for write-heavy workloads. This is because, with increased normalization, a given business fact must be written to one place rather than to multiple places.
- Allows separate transactions to modify related underlying data without causing [contention](#transaction-contention).
- - Can improve performance for read-heavy workloads.
+ - Reduces the chance of data inconsistency, since a given business fact must be written only to one place.
+ - Reduces or eliminates data redundancy.
+ - Uses less disk space.
- - Drawbacks:
+ - Drawbacks of increasing normalization:
+ - Can reduce performance for read-heavy workloads. This is because increasing normalization results in more joins, and can make the SQL more complicated in other ways.
- More complex data model.
- - Increases the chance of data inconsistency.
- - Increases data redundancy.
- - Can degrade performance for write-heavy workloads.
+
+ - In general:
+
+ - Increase normalization for write-intensive and read/write-intensive transactional workloads.
+ - Do not increase normalization for read-intensive reporting workloads.
- If the application strictly requires operating on very few different index keys, consider using [`ALTER ... SPLIT AT`]({% link {{ page.version.version }}/alter-table.md %}#split-at) so that each index key can be served by a separate group of nodes in the cluster.
diff --git a/src/current/_includes/v24.1/prod-deployment/healthy-workload-concurrency.md b/src/current/_includes/v24.1/prod-deployment/healthy-workload-concurrency.md
index 9ab356a821c..09bf8763cc0 100644
--- a/src/current/_includes/v24.1/prod-deployment/healthy-workload-concurrency.md
+++ b/src/current/_includes/v24.1/prod-deployment/healthy-workload-concurrency.md
@@ -1 +1 @@
-**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console](../cockroachcloud/metrics-page.html#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools](connection-pooling.html#size-connection-pools).
\ No newline at end of file
+**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console]({% link cockroachcloud/statements-page.md %}). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console]({% link cockroachcloud/metrics-page.md %}#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools]({% link {{ page.version.version }}/connection-pooling.md %}#size-connection-pools).
diff --git a/src/current/_includes/v24.1/prod-deployment/insecure-start-nodes.md b/src/current/_includes/v24.1/prod-deployment/insecure-start-nodes.md
index d19b20c75c0..8b063a588b4 100644
--- a/src/current/_includes/v24.1/prod-deployment/insecure-start-nodes.md
+++ b/src/current/_includes/v24.1/prod-deployment/insecure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=localhost:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v24.1/prod-deployment/secure-start-nodes.md b/src/current/_includes/v24.1/prod-deployment/secure-start-nodes.md
index e8229b3ff05..b9ee8bb0935 100644
--- a/src/current/_includes/v24.1/prod-deployment/secure-start-nodes.md
+++ b/src/current/_includes/v24.1/prod-deployment/secure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v24.1/setup/create-first-sql-user.md b/src/current/_includes/v24.1/setup/create-first-sql-user.md
index 556a2d8ad60..21c080a0626 100644
--- a/src/current/_includes/v24.1/setup/create-first-sql-user.md
+++ b/src/current/_includes/v24.1/setup/create-first-sql-user.md
@@ -5,4 +5,4 @@ The **Create SQL user** dialog allows you to create a new SQL user and password.
1. Copy the generated password and save it in a secure location.
1. Click **Next**.
- Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [[Manage SQL users on a cluster](https://www.cockroachlabs.com/docs/cockroachcloud/managing-access#manage-sql-users-on-a-cluster).
\ No newline at end of file
+ Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [Manage SQL users on a cluster]({% link cockroachcloud/managing-access.md %}#manage-sql-users-on-a-cluster).
diff --git a/src/current/_includes/v24.1/sidebar-data/migrate.json b/src/current/_includes/v24.1/sidebar-data/migrate.json
index e9e9d4b949a..48e1670082a 100644
--- a/src/current/_includes/v24.1/sidebar-data/migrate.json
+++ b/src/current/_includes/v24.1/sidebar-data/migrate.json
@@ -34,12 +34,6 @@
"urls": [
"/molt/molt-verify.html"
]
- },
- {
- "title": "Live Migration Service",
- "urls": [
- "/molt/live-migration-service.html"
- ]
}
]
},
diff --git a/src/current/_includes/v24.1/sidebar-data/reference.json b/src/current/_includes/v24.1/sidebar-data/reference.json
index e22c44e9fcf..63a2b466961 100644
--- a/src/current/_includes/v24.1/sidebar-data/reference.json
+++ b/src/current/_includes/v24.1/sidebar-data/reference.json
@@ -284,7 +284,7 @@
{
"title": "Metrics",
"urls": [
- "/${VERSION}/metrics.html"
+ "/${VERSION}/metrics.html"
]
},
{
diff --git a/src/current/_includes/v24.1/sql/locality-optimized-search.md b/src/current/_includes/v24.1/sql/locality-optimized-search.md
index 0df9e9741cd..23cac1bc9d9 100644
--- a/src/current/_includes/v24.1/sql/locality-optimized-search.md
+++ b/src/current/_includes/v24.1/sql/locality-optimized-search.md
@@ -1 +1 @@
-Note that the [SQL engine](https://www.cockroachlabs.com/docs/{{ page.version.version }}/architecture/sql-layer) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_](https://www.cockroachlabs.com/docs/{{ page.version.version }}/cost-based-optimizer#locality-optimized-search-in-multi-region-clusters).
+Note that the [SQL engine]({% link {{ page.version.version }}/architecture/sql-layer.md %}) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_]({% link {{ page.version.version }}/cost-based-optimizer.md %}#locality-optimized-search-in-multi-region-clusters).
diff --git a/src/current/_includes/v24.1/sql/partially-visible-indexes.md b/src/current/_includes/v24.1/sql/partially-visible-indexes.md
new file mode 100644
index 00000000000..83f251c8374
--- /dev/null
+++ b/src/current/_includes/v24.1/sql/partially-visible-indexes.md
@@ -0,0 +1 @@
+For the purposes of [index recommendations]({% link {{ page.version.version }}/explain.md %}#success-responses), partially visible indexes are treated as [not visible]({% link {{ page.version.version }}/alter-index.md %}#not-visible). If a partially visible index can be used to improve a query plan, the {% if page.name != "cost-based-optimizer.md" %}[optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}){% else %}optimizer{% endif %} will recommend making it fully visible. For an example, refer to [Set an index as partially visible]({% link {{ page.version.version }}/alter-index.md %}#set-an-index-as-partially-visible).
\ No newline at end of file
diff --git a/src/current/_includes/v24.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md b/src/current/_includes/v24.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
index f58bb05bdb1..6fdea66fc89 100644
--- a/src/current/_includes/v24.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
+++ b/src/current/_includes/v24.1/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
@@ -1,5 +1,5 @@
| Replication Zone Pattern | Multi-Region SQL |
|--------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Duplicate indexes](https://www.cockroachlabs.com/docs/v20.2/topology-duplicate-indexes) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
-| [Geo-partitioned replicas](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-replicas) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
-| [Geo-partitioned leaseholders](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-leaseholders) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
+| [Duplicate indexes]({% link v20.2/topology-duplicate-indexes.md %}) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
+| [Geo-partitioned replicas]({% link v20.2/topology-geo-partitioned-replicas.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
+| [Geo-partitioned leaseholders]({% link v20.2/topology-geo-partitioned-leaseholders.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
diff --git a/src/current/_includes/v24.1/ui/cpu-percent-graph.md b/src/current/_includes/v24.1/ui/cpu-percent-graph.md
index 3b06a738171..b56608e4d06 100644
--- a/src/current/_includes/v24.1/ui/cpu-percent-graph.md
+++ b/src/current/_includes/v24.1/ui/cpu-percent-graph.md
@@ -1,14 +1,12 @@
-
-
-The **CPU Percent** graph displays the current user and system CPU percentage consumed by the CockroachDB process, normalized by number of cores, as tracked by the `sys.cpu.combined.percent-normalized` metric.
+This graph displays the current user and system CPU percentage consumed by the CockroachDB process, normalized by number of cores, as tracked by the `sys.cpu.combined.percent-normalized` metric.
{{site.data.alerts.callout_info}}
This graph shows the CPU consumption by the CockroachDB process, and excludes other processes on the node. Use the [Host CPU Percent graph]({% link {{ page.version.version }}/ui-hardware-dashboard.md %}#host-cpu-percent) to measure the total CPU consumption across all processes.
{{site.data.alerts.end}}
-- In the node view, the graph shows the percentage of CPU in use by the CockroachDB process for the selected node.
+- In the node view, the graph shows the percentage of CPU utilization of the CockroachDB process as measured by the host for the selected node.
-- In the cluster view, the graph shows the percentage of CPU in use by the CockroachDB process across all nodes.
+- In the cluster view, the graph shows the percentage of CPU utilization of the CockroachDB process as measured by the host across all nodes.
{% include {{ page.version.version }}/prod-deployment/healthy-cpu-percent.md %}
diff --git a/src/current/_includes/v24.1/ui/runnable-goroutines-graph.md b/src/current/_includes/v24.1/ui/runnable-goroutines-graph.md
index 0f6b6d45a79..274d485d6b0 100644
--- a/src/current/_includes/v24.1/ui/runnable-goroutines-graph.md
+++ b/src/current/_includes/v24.1/ui/runnable-goroutines-graph.md
@@ -1,5 +1,4 @@
-This graph shows the number of [Goroutines](https://golangbot.com/goroutines/) waiting to run per CPU. This graph should rise and fall based on CPU load. Values greater than 50 are considered high.
+This graph shows the number of [Goroutines](https://golangbot.com/goroutines/) waiting to run per CPU, as tracked by the `sys.runnable.goroutines.per.cpu` metric. This graph should rise and fall based on CPU load. Values greater than `50` are considered high. A value greater than the value set in `admission.kv_slot_adjuster.overload_threshold` (default = `32`), sampled at `1ms`, is used by [admission control]({% link {{ page.version.version }}/admission-control.md %}) to throttle regular CPU work.
- In the node view, the graph shows the number of Goroutines waiting per CPU on the selected node.
-
- In the cluster view, the graph shows the number of Goroutines waiting per CPU across all nodes in the cluster.
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/app/hibernate-dialects-note.md b/src/current/_includes/v24.2/app/hibernate-dialects-note.md
index 99add090b32..287f314d393 100644
--- a/src/current/_includes/v24.2/app/hibernate-dialects-note.md
+++ b/src/current/_includes/v24.2/app/hibernate-dialects-note.md
@@ -1,5 +1,5 @@
Versions of the Hibernate CockroachDB dialect correspond to the version of CockroachDB installed on your machine. For example, `org.hibernate.dialect.CockroachDB201Dialect` corresponds to CockroachDB v20.1 and later, and `org.hibernate.dialect.CockroachDB192Dialect` corresponds to CockroachDB v19.2 and later.
-All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes](https://www.cockroachlabs.com/docs/releases). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
+All dialect versions are forward-compatible (e.g., CockroachDB v20.1 is compatible with `CockroachDB192Dialect`), as long as your application is not affected by any backward-incompatible changes listed in your CockroachDB version's [release notes]({% link releases/index.md %}). In the event of a CockroachDB version upgrade, using a previous version of the CockroachDB dialect will not break an application, but, to enable all features available in your version of CockroachDB, we recommend keeping the dialect version in sync with the installed version of CockroachDB.
-Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
\ No newline at end of file
+Not all versions of CockroachDB have a corresponding dialect yet. Use the dialect number that is closest to your installed version of CockroachDB. For example, use `CockroachDB201Dialect` when using CockroachDB v21.1 and later.
diff --git a/src/current/_includes/v24.2/backups/backup-to-deprec.md b/src/current/_includes/v24.2/backups/backup-to-deprec.md
index 2ffc5d96ea8..77a2b6cae18 100644
--- a/src/current/_includes/v24.2/backups/backup-to-deprec.md
+++ b/src/current/_includes/v24.2/backups/backup-to-deprec.md
@@ -1,5 +1,5 @@
{{site.data.alerts.callout_danger}}
-The [`BACKUP ... TO`](https://www.cockroachlabs.com/docs/v20.2/backup) and [`RESTORE ... FROM`](https://www.cockroachlabs.com/docs/v20.2/restore) syntax is **deprecated** as of v22.1 and will be removed in a future release.
+The `BACKUP ... TO` and `RESTORE ... FROM` syntax is **deprecated** as of v22.1 and will be removed in a future release.
We recommend using the `BACKUP ... INTO {collectionURI}` syntax, which creates or adds to a [backup collection]({% link {{ page.version.version }}/take-full-and-incremental-backups.md %}#backup-collections) in your storage location. For restoring backups, we recommend using `RESTORE FROM {backup} IN {collectionURI}` with `{backup}` being [`LATEST`]({% link {{ page.version.version }}/restore.md %}#restore-the-most-recent-full-or-incremental-backup) or a specific [subdirectory]({% link {{ page.version.version }}/restore.md %}#subdir-param).
diff --git a/src/current/_includes/v24.2/backups/serverless-locality-aware.md b/src/current/_includes/v24.2/backups/serverless-locality-aware.md
index 456ee436781..eef7701884e 100644
--- a/src/current/_includes/v24.2/backups/serverless-locality-aware.md
+++ b/src/current/_includes/v24.2/backups/serverless-locality-aware.md
@@ -1 +1 @@
-CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with [data domiciling]({% link v23.2/data-domiciling.md %}) requirements.
\ No newline at end of file
+CockroachDB {{ site.data.products.serverless }} clusters operate with a [different architecture]({% link cockroachcloud/architecture.md %}#cockroachdb-serverless) compared to CockroachDB {{ site.data.products.core }} and CockroachDB {{ site.data.products.dedicated }} clusters. These architectural differences have implications for how locality-aware backups can run. Serverless clusters will scale resources depending on whether they are actively in use, which means that it is less likely to have a SQL pod available in every locality. As a result, your Serverless cluster may not have a SQL pod in the locality where the data resides, which can lead to the cluster uploading that data to a storage bucket in a locality where you do have active SQL pods. You should consider this as you plan a backup strategy that must comply with {% if page.title contains "Cloud" or page.title contains "Serverless" %} [data domiciling]({% link {{site.current_cloud_version}}/data-domiciling.md %}) {% else %} [data domiciling]({% link {{page.version.version}}/data-domiciling.md %}) {% endif %} requirements.
diff --git a/src/current/_includes/v24.2/backups/support-products.md b/src/current/_includes/v24.2/backups/support-products.md
index a3d1b1c2fd5..32423354661 100644
--- a/src/current/_includes/v24.2/backups/support-products.md
+++ b/src/current/_includes/v24.2/backups/support-products.md
@@ -1,3 +1,3 @@
## Supported products
-The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups](https://www.cockroachlabs.com/docs/cockroachcloud/take-and-restore-customer-owned-backups). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
\ No newline at end of file
+The feature described on this page is available in **CockroachDB {{ site.data.products.dedicated }}**, **CockroachDB {{ site.data.products.serverless }}**, and **CockroachDB {{ site.data.products.core }}** clusters when you are running [customer-owned backups]({% link cockroachcloud/take-and-restore-customer-owned-backups.md %}). For a full list of features, refer to [Backup and restore product support]({% link {{ page.version.version }}/backup-and-restore-overview.md %}#backup-and-restore-support).
diff --git a/src/current/_includes/v24.2/backward-incompatible/alpha.1.md b/src/current/_includes/v24.2/backward-incompatible/alpha.1.md
index 9e3070ad086..d5aaef86c6b 100644
--- a/src/current/_includes/v24.2/backward-incompatible/alpha.1.md
+++ b/src/current/_includes/v24.2/backward-incompatible/alpha.1.md
@@ -7,9 +7,9 @@
- Optional: keep port `26257` for RPC, and allocate a new port, e.g., `26357`, for SQL connections. For example, you might configure a node with the flags `--listen-addr=:26257 --sql-addr=:26357`. When using this mode of operation, the `--join` flags do not need to be modified. However, SQL client apps or the SQL load balancer configuration (when in use) must be updated to use the new SQL port number. [#85671][#85671]
- If no `nullif` option is specified while using [`IMPORT CSV`](../v23.1/import.html), then a zero-length string in the input is now treated as `NULL`. The quoted empty string in the input is treated as an empty string. Similarly, if `nullif` is specified, then an unquoted value is treated as `NULL`, and a quoted value is treated as that string. These changes were made to make `IMPORT CSV` behave more similarly to `COPY CSV`. If the previous behavior (i.e., treating either quoted or unquoted values that match the `nullif` setting as `NULL`) is desired, you can use the new `allow_quoted_null` option in the `IMPORT` statement. [#84487][#84487]
- [`COPY FROM`](../v23.1/copy-from.html) operations are now atomic by default instead of being segmented into 100 row transactions. Set the `copy_from_atomic_enabled` session setting to `false` for the previous behavior. [#85986][#85986]
-- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`](https://www.cockroachlabs.com/docs/v22.2/grant#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
+- The `GRANT` privilege has been removed and replaced by the more granular [`WITH GRANT OPTION`]({% link v22.2/grant.md %}#grant-privileges-with-the-option-to-grant-to-others), which provides control over which privileges are allowed to be granted. [#81310][#81310]
- Removed the ability to cast `int`, `int2`, and `int8` to a `0` length `BIT` or `VARBIT`. [#81266][#81266]
- Removed the deprecated `GRANT` privilege. [#81310][#81310]
- Removed the `ttl_automatic_column` storage parameter. The `crdb_internal_expiration` column is created when `ttl_expire_after` is set and removed when `ttl_expire_after` is reset. [#83134][#83134]
- Removed the byte string parameter in the `crdb_internal.schedule_sql_stats_compaction` function. [#82560][#82560]
-- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements](https://www.cockroachlabs.com/docs/v22.2/transactions#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
+- Changed the default value of the `enable_implicit_transaction_for_batch_statements` to `true`. This means that a [batch of statements]({% link v22.2/transactions.md %}#batched-statements) sent in one string separated by semicolons is treated as an implicit transaction. [#76834][#76834]
diff --git a/src/current/_includes/v24.2/cdc/filter-show-changefeed-jobs-columns.md b/src/current/_includes/v24.2/cdc/filter-show-changefeed-jobs-columns.md
new file mode 100644
index 00000000000..39471ac538d
--- /dev/null
+++ b/src/current/_includes/v24.2/cdc/filter-show-changefeed-jobs-columns.md
@@ -0,0 +1,11 @@
+You can filter the columns that `SHOW CHANGEFEED JOBS` displays using a `SELECT` statement:
+
+{% include_cached copy-clipboard.html %}
+~~~ sql
+SELECT job_id, sink_uri, status, format FROM [SHOW CHANGEFEED JOBS] WHERE job_id = 997306743028908033;
+~~~
+~~~
+ job_id | sink_uri | status | format
+---------------------+------------------+----------+---------
+ 997306743028908033 | external://kafka | running | json
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/cdc/kafka-vpc-limitation.md b/src/current/_includes/v24.2/cdc/kafka-vpc-limitation.md
index 17b3be98b60..5f7950cdf27 100644
--- a/src/current/_includes/v24.2/cdc/kafka-vpc-limitation.md
+++ b/src/current/_includes/v24.2/cdc/kafka-vpc-limitation.md
@@ -1 +1 @@
-[VPC Peering](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#vpc-peering) and [AWS PrivateLink](https://www.cockroachlabs.com/docs/cockroachcloud/network-authorization#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
\ No newline at end of file
+[VPC Peering]({% link cockroachcloud/network-authorization.md %}#vpc-peering) and [AWS PrivateLink]({% link cockroachcloud/network-authorization.md %}#aws-privatelink) in CockroachDB {{ site.data.products.dedicated }} clusters do **not** support connecting to a [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) sink's internal IP addresses for [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}). To connect to a Kafka sink from CockroachDB {{ site.data.products.dedicated }}, it is necessary to expose the Kafka cluster's external IP address and open ports with firewall rules to allow access from a CockroachDB {{ site.data.products.dedicated }} cluster.
diff --git a/src/current/_includes/v24.2/cdc/sink-list.md b/src/current/_includes/v24.2/cdc/sink-list.md
new file mode 100644
index 00000000000..6468b3d317c
--- /dev/null
+++ b/src/current/_includes/v24.2/cdc/sink-list.md
@@ -0,0 +1,8 @@
+- {% if page.name == "changefeed-sinks.md" %} [Amazon MSK](#amazon-msk) {% else %} [Amazon MSK]({% link {{ page.version.version }}/changefeed-sinks.md %}#amazon-msk) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Apache Pulsar](#apache-pulsar) (in Preview) {% else %} [Apache Pulsar]({% link {{ page.version.version }}/changefeed-sinks.md %}#apache-pulsar) (in Preview) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Azure Event Hubs](#azure-event-hubs) {% else %} [Azure Event Hubs]({% link {{ page.version.version }}/changefeed-sinks.md %}#azure-event-hubs) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Cloud Storage](#cloud-storage-sink) / HTTP {% else %} [Cloud Storage]({% link {{ page.version.version }}/changefeed-sinks.md %}#cloud-storage-sink) / HTTP {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Confluent Cloud](#confluent-cloud) {% else %} [Confluent Cloud]({% link {{ page.version.version }}/changefeed-sinks.md %}#confluent-cloud) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Google Cloud Pub/Sub](#google-cloud-pub-sub) {% else %} [Google Cloud Pub/Sub]({% link {{ page.version.version }}/changefeed-sinks.md %}#google-cloud-pub-sub) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Kafka](#kafka) {% else %} [Kafka]({% link {{ page.version.version }}/changefeed-sinks.md %}#kafka) {% endif %}
+- {% if page.name == "changefeed-sinks.md" %} [Webhook](#webhook-sink) {% else %} [Webhook]({% link {{ page.version.version }}/changefeed-sinks.md %}#webhook-sink) {% endif %}
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/cdc/virtual-computed-column-cdc.md b/src/current/_includes/v24.2/cdc/virtual-computed-column-cdc.md
index e7768290325..60910bb817a 100644
--- a/src/current/_includes/v24.2/cdc/virtual-computed-column-cdc.md
+++ b/src/current/_includes/v24.2/cdc/virtual-computed-column-cdc.md
@@ -1 +1 @@
-As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change](https://www.cockroachlabs.com/docs/releases/v22.1#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`](create-changefeed.html#virtual-columns) option for more detail.
+As of v22.1, changefeeds filter out [`VIRTUAL` computed columns]({% link {{ page.version.version }}/computed-columns.md %}) from events by default. This is a [backward-incompatible change]({% link releases/v22.1.md %}#v22-1-0-backward-incompatible-changes). To maintain the changefeed behavior in previous versions where [`NULL`]({% link {{ page.version.version }}/null-handling.md %}) values are emitted for virtual computed columns, see the [`virtual_columns`]({% link {{ page.version.version }}/create-changefeed.md %}#virtual-columns) option for more detail.
diff --git a/src/current/_includes/v24.2/cdc/webhook-beta.md b/src/current/_includes/v24.2/cdc/webhook-beta.md
index 212de3397f1..5d27a27585e 100644
--- a/src/current/_includes/v24.2/cdc/webhook-beta.md
+++ b/src/current/_includes/v24.2/cdc/webhook-beta.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-The webhook sink is currently in **beta** — see [usage considerations](https://www.cockroachlabs.com/docs/{{ page.version.version }}/changefeed-sinks#webhook-sink), available [parameters](https://www.cockroachlabs.com/docs/{{ page.version.version }}/create-changefeed#parameters), and [options](../{{ page.version.version }}/create-changefeed.html#options) for more information.
+The webhook sink is currently in **beta** — see [usage considerations]({% link {{ page.version.version }}/changefeed-sinks.md %}#webhook-sink), available [parameters]({% link {{ page.version.version }}/create-changefeed.md %}#parameters), and [options]({% link {{ page.version.version }}/create-changefeed.md %}#options) for more information.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v24.2/child-metrics-table.md b/src/current/_includes/v24.2/child-metrics-table.md
new file mode 100644
index 00000000000..23db1271931
--- /dev/null
+++ b/src/current/_includes/v24.2/child-metrics-table.md
@@ -0,0 +1,27 @@
+{% assign metrics = site.data.child-metrics | where_exp: "metrics", "metrics.feature contains feature" | sort: "child_metric_id" %}
+{% comment %} Fetch child-metrics for given feature. {% endcomment %}
+
+Following is a list of the metrics that have child metrics:
+
+
+
+
+
CockroachDB Metric Name
+
Description When Aggregated
+
Type
+
Unit
+
+
+
+ {% for m in metrics %} {% comment %} Iterate through the metrics. {% endcomment %}
+ {% assign metrics-list = site.data.metrics-list | where: "metric", m.child_metric_id %}
+ {% comment %} Get the row from the metrics-list with the given child_metric_id. {% endcomment %}
+
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/demo_movr.md b/src/current/_includes/v24.2/demo_movr.md
index ce908298dbc..5a8a431193a 100644
--- a/src/current/_includes/v24.2/demo_movr.md
+++ b/src/current/_includes/v24.2/demo_movr.md
@@ -3,8 +3,4 @@ Start the [MovR database]({% link {{ page.version.version }}/movr.md %}) on a 3-
{% include_cached copy-clipboard.html %}
~~~ shell
cockroach demo movr --num-histories 250000 --num-promo-codes 250000 --num-rides 125000 --num-users 12500 --num-vehicles 3750 --nodes 3
-~~~
-
-{% comment %}
-This is a test
-{% endcomment %}
+~~~
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/essential-metrics.md b/src/current/_includes/v24.2/essential-metrics.md
index b308d770349..e7520ddafdb 100644
--- a/src/current/_includes/v24.2/essential-metrics.md
+++ b/src/current/_includes/v24.2/essential-metrics.md
@@ -50,6 +50,20 @@ The **Usage** column explains why each metric is important to visualize in a cus
| admission.wait_durations.kv-stores-p75 | {% if include.deployment == 'self-hosted' %}admission.wait.durations.kv_stores |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Wait time durations for requests that waited | This metric shows if I/O utilization-based admission control feature is working effectively or potentially overaggressive. This is a latency histogram of how much delay was added to the workload due to throttling by I/O control. If observing over 100ms waits for over 5 seconds while there was excess I/O capacity available, then the admission control is overly aggressive. |
| sys.runnable.goroutines.per.cpu | {% if include.deployment == 'self-hosted' %}sys.runnable.goroutines.per_cpu |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Average number of goroutines that are waiting to run, normalized by number of cores | If this metric has a value over 30, it indicates a CPU overload. If the condition lasts a short period of time (a few seconds), the database users are likely to experience inconsistent response times. If the condition persists for an extended period of time (tens of seconds, or minutes) the cluster may start developing stability issues. Review [CPU planning]({% link {{ page.version.version }}/common-issues-to-monitor.md %}#cpu).
+{% if include.deployment == 'self-hosted' %}
+## Network
+
+|
| Usage |
+| ------------------------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| rpc.connection.avg_round_trip_latency | rpc.connection.avg_round_trip_latency | Sum of exponentially weighted moving average of round-trip latencies, as measured through a gRPC RPC. Dividing this gauge by `rpc.connection.healthy` gives an approximation of average latency, but the top-level round-trip-latency histogram is more useful. Instead, users should consult the label families of this metric if they are available (which requires Prometheus and the cluster setting `server.child_metrics.enabled`); these provide per-peer moving averages. This metric does not track failed connection. A failed connection's contribution is reset to zero. | This metric is helpful in understanding general network issues outside of CockroachDB that could be impacting the user’s workload. |
+| rpc.connection.failures | rpc.connection.failures.count | Counter of failed connections. This includes both the event in which a healthy connection terminates as well as unsuccessful reconnection attempts. Connections that are terminated as part of local node shutdown are excluded. Decommissioned peers are excluded. | See Description. |
+| rpc.connection.healthy | rpc.connection.healthy | Gauge of current connections in a healthy state (i.e., bidirectionally connected and heartbeating). | See Description. |
+| rpc.connection.healthy_nanos | rpc.connection.healthy_nanos | Gauge of nanoseconds of healthy connection time. On the Prometheus endpoint scraped when the cluster setting `server.child_metrics.enabled` is set, this gauge allows you to see the duration for which a given peer has been connected in a healthy state. | This can be useful for monitoring the stability and health of connections within your CockroachDB cluster. |
+| rpc.connection.heartbeats | rpc.connection.heartbeats.count | Counter of successful heartbeats. | See Description. |
+| rpc.connection.unhealthy | rpc.connection.unhealthy | Gauge of current connections in an unhealthy state (not bidirectionally connected or heartbeating). | If the value of this metric is greater than 0, this could indicate a network partition. |
+| rpc.connection.unhealthy_nanos | rpc.connection.unhealthy_nanos | Gauge of nanoseconds of unhealthy connection time. On the Prometheus endpoint scraped when the cluster setting `server.child_metrics.enabled` is set, this gauge allows you to see the duration for which a given peer has been unreachable. | If this duration is greater than 0, this could indicate how long a network partition has been occurring. |
+{% endif %}
+
{% if include.deployment == 'self-hosted' %}
## Expiration of license and certificates
@@ -135,7 +149,7 @@ The **Usage** column explains why each metric is important to visualize in a cus
| jobs.backup.currently_running | {% if include.deployment == 'self-hosted' %}jobs.backup.currently_running |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of backup jobs currently running | See Description. |
| jobs.backup.currently_paused | {% if include.deployment == 'self-hosted' %}jobs.backup.currently_paused |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of backup jobs currently considered Paused | Monitor and alert on this metric to safeguard against an inadvertent operational error of leaving a backup job in a paused state for an extended period of time. In functional areas, a paused job can hold resources or have concurrency impact or some other negative consequence. Paused backup may break the [recovery point objective (RPO)]({% link {{ page.version.version }}/backup.md %}#performance). |
| schedules.BACKUP.failed | {% if include.deployment == 'self-hosted' %}schedules.backup.failed |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} Number of BACKUP jobs failed | Monitor this metric and investigate backup job failures. |
-| schedules.BACKUP.last-completed-time | {% if include.deployment == 'self-hosted' %}schedules.backup.last_completed_time |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} The unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric | Monitor this metric to know that backups are meeting the [recovery point objective (RPO)]({% link {{ page.version.version }}/backup.md %}#performance). |
+| schedules.BACKUP.last-completed-time | {% if include.deployment == 'self-hosted' %}schedules.backup.last_completed_time |{% elsif include.deployment == 'dedicated' %}NOT AVAILABLE |{% endif %} The Unix timestamp of the most recently completed backup by a schedule specified as maintaining this metric | Monitor this metric to ensure that backups are meeting the [recovery point objective (RPO)]({% link {{ page.version.version }}/disaster-recovery-overview.md %}#resilience-strategy). Each node exports the time that it last completed a backup on behalf of the schedule. If a node is restarted, it will report `0` until it completes a backup. If all nodes are restarted, `max()` is `0` until a node completes a backup.
To make use of this metric, first, from each node, take the maximum over a rolling window equal to or greater than the backup frequency, and then take the maximum of those values across nodes. For example with a backup frequency of 60 minutes, monitor `time() - max_across_nodes(max_over_time(schedules_BACKUP_last_completed_time, 60min))`. |
## Changefeeds
diff --git a/src/current/_includes/v24.2/known-limitations/aost-limitations.md b/src/current/_includes/v24.2/known-limitations/aost-limitations.md
new file mode 100644
index 00000000000..811c884d08d
--- /dev/null
+++ b/src/current/_includes/v24.2/known-limitations/aost-limitations.md
@@ -0,0 +1 @@
+CockroachDB does not support placeholders in {% if page.name == "as-of-system-time.md" %}`AS OF SYSTEM TIME`{% else %}[`AS OF SYSTEM TIME`]({% link {{ page.version.version }}/as-of-system-time.md %}){% endif %}. The time value must be a constant value embedded in the SQL string. [#30955](https://github.com/cockroachdb/cockroach/issues/30955)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/cdc-queries-column-families.md b/src/current/_includes/v24.2/known-limitations/cdc-queries-column-families.md
new file mode 100644
index 00000000000..505a8c9700e
--- /dev/null
+++ b/src/current/_includes/v24.2/known-limitations/cdc-queries-column-families.md
@@ -0,0 +1 @@
+Creating a changefeed with {% if page.name == "cdc-queries.md" %} CDC queries {% else %} [CDC queries]({% link {{ page.version.version }}/cdc-queries.md %}) {% endif %} on tables with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %} is not supported. [#127761](https://github.com/cockroachdb/cockroach/issues/127761)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/changefeed-column-family-message.md b/src/current/_includes/v24.2/known-limitations/changefeed-column-family-message.md
new file mode 100644
index 00000000000..41744b9b4b4
--- /dev/null
+++ b/src/current/_includes/v24.2/known-limitations/changefeed-column-family-message.md
@@ -0,0 +1 @@
+When you create a changefeed on a table with more than one {% if page.name == "changefeeds-on-tables-with-column-families.md" %} column family {% else %} [column family]({% link {{ page.version.version }}/changefeeds-on-tables-with-column-families.md %}) {% endif %}, the changefeed will emit messages per column family in separate streams. As a result, [changefeed messages]({% link {{ page.version.version }}/changefeed-messages.md %}) for different column families will arrive at the [sink]({% link {{ page.version.version }}/changefeed-sinks.md %}) under separate topics. [#127736](https://github.com/cockroachdb/cockroach/issues/127736)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/create-statistics-aost-limitation.md b/src/current/_includes/v24.2/known-limitations/create-statistics-aost-limitation.md
new file mode 100644
index 00000000000..09f86f51c48
--- /dev/null
+++ b/src/current/_includes/v24.2/known-limitations/create-statistics-aost-limitation.md
@@ -0,0 +1 @@
+The `ANALYZE` alias {% if page.name != "create-statistics.md" %}of [`CREATE STATISTICS`]({% link {{ page.version.version }}/create-statistics.md %}){% endif %} does not support specifying an {% if page.name == "as-of-system-time.md" %}`AS OF SYSTEM TIME`{% else %}[`AS OF SYSTEM TIME`]({% link {{ page.version.version }}/as-of-system-time.md %}){% endif %} timestamp. `ANALYZE` statements use `AS OF SYSTEM TIME '-0.001ms'` automatically. For more control over the statistics interval, use the `CREATE STATISTICS` syntax instead. [#96430](https://github.com/cockroachdb/cockroach/issues/96430)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/cutover-stop-application.md b/src/current/_includes/v24.2/known-limitations/cutover-stop-application.md
index 94ed342620e..1762f211c5a 100644
--- a/src/current/_includes/v24.2/known-limitations/cutover-stop-application.md
+++ b/src/current/_includes/v24.2/known-limitations/cutover-stop-application.md
@@ -1 +1 @@
-After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records. [#117984](https://github.com/cockroachdb/cockroach/issues/117984)
\ No newline at end of file
+After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records.
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/fast-cutback-latest-timestamp.md b/src/current/_includes/v24.2/known-limitations/fast-cutback-latest-timestamp.md
deleted file mode 100644
index 1a5b3b91a2c..00000000000
--- a/src/current/_includes/v24.2/known-limitations/fast-cutback-latest-timestamp.md
+++ /dev/null
@@ -1 +0,0 @@
-{% include {{ page.version.version }}/physical-replication/fast-cutback-latest-timestamp.md %} [#117984](https://github.com/cockroachdb/cockroach/issues/117984)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/physical-cluster-replication.md b/src/current/_includes/v24.2/known-limitations/physical-cluster-replication.md
index fb951e9bbde..f914c7eced2 100644
--- a/src/current/_includes/v24.2/known-limitations/physical-cluster-replication.md
+++ b/src/current/_includes/v24.2/known-limitations/physical-cluster-replication.md
@@ -3,5 +3,4 @@
- The primary and standby cluster **cannot have different [region topology]({% link {{ page.version.version }}/topology-patterns.md %})**. For example, replicating a multi-region primary cluster to a single-region standby cluster is not supported. Mismatching regions between a multi-region primary and standby cluster is also not supported.
- Cutting back to the primary cluster after a cutover is a manual process. Refer to [Cut back to the primary cluster]({% link {{ page.version.version }}/cutover-replication.md %}#cut-back-to-the-primary-cluster). In addition, after cutover, to continue using physical cluster replication, you must configure it again.
- Before cutover to the standby, the standby cluster does not support running [backups]({% link {{ page.version.version }}/backup-and-restore-overview.md %}) or [changefeeds]({% link {{ page.version.version }}/change-data-capture-overview.md %}).
-- After a cutover, there is no mechanism to stop applications from connecting to the original primary cluster. It is necessary to redirect application traffic manually, such as by using a network load balancer or adjusting DNS records.
- Large data imports, such as those produced by [`RESTORE`]({% link {{ page.version.version }}/restore.md %}) or [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}), may dramatically increase [replication lag]({% link {{ page.version.version }}/physical-cluster-replication-technical-overview.md %}#cutover-and-promotion-process).
diff --git a/src/current/_includes/v24.2/known-limitations/plpgsql-limitations.md b/src/current/_includes/v24.2/known-limitations/plpgsql-limitations.md
index 444943636c0..cfb6c0e102a 100644
--- a/src/current/_includes/v24.2/known-limitations/plpgsql-limitations.md
+++ b/src/current/_includes/v24.2/known-limitations/plpgsql-limitations.md
@@ -17,4 +17,10 @@
- `NOT NULL` variable declarations are not supported. [#105243](https://github.com/cockroachdb/cockroach/issues/105243)
- Cursors opened in PL/pgSQL execute their queries on opening, affecting performance and resource usage. [#111479](https://github.com/cockroachdb/cockroach/issues/111479)
- Cursors in PL/pgSQL cannot be declared with arguments. [#117746](https://github.com/cockroachdb/cockroach/issues/117746)
-- `OPEN FOR EXECUTE` is not supported for opening cursors. [#117744](https://github.com/cockroachdb/cockroach/issues/117744)
\ No newline at end of file
+- `OPEN FOR EXECUTE` is not supported for opening cursors. [#117744](https://github.com/cockroachdb/cockroach/issues/117744)
+- The `print_strict_params` option is not supported in PL/pgSQL. [#123671](https://github.com/cockroachdb/cockroach/issues/123671)
+- The `FOUND` local variable, which checks whether a statement affected any rows, is not supported in PL/pgSQL. [#122306](https://github.com/cockroachdb/cockroach/issues/122306)
+- By default, when a PL/pgSQL variable conflicts with a column name, CockroachDB resolves the ambiguity by treating it as a column reference rather than a variable reference. This behavior differs from PostgreSQL, where an ambiguous column error is reported, and it is possible to change the `plpgsql.variable_conflict` setting in order to prefer either columns or variables. [#115680](https://github.com/cockroachdb/cockroach/issues/115680)
+- It is not possible to define a `RECORD`-returning PL/pgSQL function that returns different-typed expressions from different `RETURN` statements. CockroachDB requires a consistent return type for `RECORD`-returning functions. [#115384](https://github.com/cockroachdb/cockroach/issues/115384)
+- Variables cannot be declared with an associated collation using the `COLLATE` keyword. [#105245](https://github.com/cockroachdb/cockroach/issues/105245)
+- Variables cannot be accessed using the `label.var_name` pattern. [#122322](https://github.com/cockroachdb/cockroach/issues/122322)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/read-committed-limitations.md b/src/current/_includes/v24.2/known-limitations/read-committed-limitations.md
index 5087e29ac00..947cf56814d 100644
--- a/src/current/_includes/v24.2/known-limitations/read-committed-limitations.md
+++ b/src/current/_includes/v24.2/known-limitations/read-committed-limitations.md
@@ -1,5 +1,5 @@
-- Schema changes (e.g., [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %}), [`CREATE SCHEMA`]({% link {{ page.version.version }}/create-schema.md %}), [`CREATE INDEX`]({% link {{ page.version.version }}/create-index.md %})) cannot be performed within explicit `READ COMMITTED` transactions, and will cause transactions to abort. As a workaround, [set the transaction's isolation level]({% link {{ page.version.version }}/read-committed.md %}#set-the-current-transaction-to-read-committed) to `SERIALIZABLE`. [#114778](https://github.com/cockroachdb/cockroach/issues/114778)
-- `READ COMMITTED` transactions performing `INSERT`, `UPDATE`, or `UPSERT` cannot access [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables in which [`UNIQUE`]({% link {{ page.version.version }}/unique.md %}) and [`PRIMARY KEY`]({% link {{ page.version.version }}/primary-key.md %}) constraints exist, the region is not included in the constraint, and the region cannot be computed from the constraint columns.
+- Schema changes (e.g., [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %}), [`CREATE SCHEMA`]({% link {{ page.version.version }}/create-schema.md %}), [`CREATE INDEX`]({% link {{ page.version.version }}/create-index.md %})) cannot be performed within explicit `READ COMMITTED` transactions when the [`autocommit_before_ddl` session setting]({% link {{page.version.version}}/set-vars.md %}#autocommit-before-ddl) is set to `off`, and will cause transactions to abort. As a workaround, [set the transaction's isolation level]({% link {{ page.version.version }}/read-committed.md %}#set-the-current-transaction-to-read-committed) to `SERIALIZABLE`. [#114778](https://github.com/cockroachdb/cockroach/issues/114778)
+- `READ COMMITTED` transactions performing `INSERT`, `UPDATE`, or `UPSERT` cannot access [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables in which [`UNIQUE`]({% link {{ page.version.version }}/unique.md %}) and [`PRIMARY KEY`]({% link {{ page.version.version }}/primary-key.md %}) constraints exist, the region is not included in the constraint, and the region cannot be computed from the constraint columns. [#110873](https://github.com/cockroachdb/cockroach/issues/110873)
- Multi-column-family checks during updates are not supported under `READ COMMITTED` isolation. [#112488](https://github.com/cockroachdb/cockroach/issues/112488)
- Because locks acquired by [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks, [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}), and [`SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) are fully replicated under `READ COMMITTED` isolation, some queries experience a delay for Raft replication.
- [Foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks are not performed in parallel under `READ COMMITTED` isolation.
diff --git a/src/current/_includes/v24.2/known-limitations/routine-limitations.md b/src/current/_includes/v24.2/known-limitations/routine-limitations.md
index 6a1394b55fa..4718c6c7abf 100644
--- a/src/current/_includes/v24.2/known-limitations/routine-limitations.md
+++ b/src/current/_includes/v24.2/known-limitations/routine-limitations.md
@@ -4,4 +4,7 @@
- Routines cannot be created if they reference temporary tables. [#121375](https://github.com/cockroachdb/cockroach/issues/121375)
- Routines cannot be created with unnamed `INOUT` parameters. For example, `CREATE PROCEDURE p(INOUT INT) AS $$ BEGIN NULL; END; $$ LANGUAGE PLpgSQL;`. [#121251](https://github.com/cockroachdb/cockroach/issues/121251)
- Routines cannot be created if they return fewer columns than declared. For example, `CREATE FUNCTION f(OUT sum INT, INOUT a INT, INOUT b INT) LANGUAGE SQL AS $$ SELECT (a + b, b); $$;`. [#121247](https://github.com/cockroachdb/cockroach/issues/121247)
-- DDL statements (e.g., `CREATE TABLE`, `CREATE INDEX`) are not allowed within UDFs or stored procedures. [#110080](https://github.com/cockroachdb/cockroach/issues/110080)
\ No newline at end of file
+- Routines cannot be created with an `OUT` parameter of type `RECORD`. [#123448](https://github.com/cockroachdb/cockroach/issues/123448)
+- DDL statements (e.g., `CREATE TABLE`, `CREATE INDEX`) are not allowed within UDFs or stored procedures. [#110080](https://github.com/cockroachdb/cockroach/issues/110080)
+- Polymorphic types cannot be cast to other types (e.g., `TEXT`) within routine parameters. [#123536](https://github.com/cockroachdb/cockroach/issues/123536)
+- Routine parameters and return types cannot be declared using the `ANYENUM` polymorphic type, which is able to match any [`ENUM`]({% link {{ page.version.version }}/enum.md %}) type. [123048](https://github.com/cockroachdb/cockroach/issues/123048)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/show-backup-symlink.md b/src/current/_includes/v24.2/known-limitations/show-backup-symlink.md
new file mode 100644
index 00000000000..38ba86fb28f
--- /dev/null
+++ b/src/current/_includes/v24.2/known-limitations/show-backup-symlink.md
@@ -0,0 +1 @@
+[`SHOW BACKUP`]({% link {{ page.version.version }}/show-backup.md %}) does not support listing backups if the [`nodelocal`]({% link {{ page.version.version }}/cockroach-nodelocal-upload.md %}) storage location is a symlink. [#70260](https://github.com/cockroachdb/cockroach/issues/70260)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/stored-proc-limitations.md b/src/current/_includes/v24.2/known-limitations/stored-proc-limitations.md
index db976be3c63..b2ba1b61562 100644
--- a/src/current/_includes/v24.2/known-limitations/stored-proc-limitations.md
+++ b/src/current/_includes/v24.2/known-limitations/stored-proc-limitations.md
@@ -1,2 +1,3 @@
{% if page.name != "known-limitations.md" # New limitations in v24.2 %}
-{% endif %}
\ No newline at end of file
+{% endif %}
+- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/known-limitations/udf-limitations.md b/src/current/_includes/v24.2/known-limitations/udf-limitations.md
index 8903180ded4..57011914407 100644
--- a/src/current/_includes/v24.2/known-limitations/udf-limitations.md
+++ b/src/current/_includes/v24.2/known-limitations/udf-limitations.md
@@ -6,4 +6,5 @@
- Views. [#87699](https://github.com/cockroachdb/cockroach/issues/87699)
- User-defined functions cannot call themselves recursively. [#93049](https://github.com/cockroachdb/cockroach/issues/93049)
- [Common table expressions]({% link {{ page.version.version }}/common-table-expressions.md %}) (CTE), recursive or non-recursive, are not supported in [user-defined functions]({% link {{ page.version.version }}/user-defined-functions.md %}) (UDF). That is, you cannot use a `WITH` clause in the body of a UDF. [#92961](https://github.com/cockroachdb/cockroach/issues/92961)
-- The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860)
\ No newline at end of file
+- The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860)
+- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/migration/load-data-import-into.md b/src/current/_includes/v24.2/migration/load-data-import-into.md
index d60faa70b50..174b1bd33f4 100644
--- a/src/current/_includes/v24.2/migration/load-data-import-into.md
+++ b/src/current/_includes/v24.2/migration/load-data-import-into.md
@@ -1 +1 @@
-Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
+Use [`IMPORT INTO`]({% link {{ page.version.version }}/import-into.md %}) to migrate [CSV]({% link {{ page.version.version }}/migrate-from-csv.md %}), TSV, or [Avro]({% link {{ page.version.version }}/migrate-from-avro.md %}) data stored via [userfile]({% link {{ page.version.version }}/use-userfile-storage.md %}) or [cloud storage]({% link {{ page.version.version }}/use-cloud-storage.md %}) into pre-existing tables on CockroachDB. This option achieves the highest throughput, but [requires taking the CockroachDB tables **offline**]({% link {{ page.version.version }}/import-into.md %}#considerations) to achieve its import speed.
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/misc/enterprise-features.md b/src/current/_includes/v24.2/misc/enterprise-features.md
index 258370890be..765da40371a 100644
--- a/src/current/_includes/v24.2/misc/enterprise-features.md
+++ b/src/current/_includes/v24.2/misc/enterprise-features.md
@@ -7,6 +7,8 @@ Feature | Description
[Multi-Region Capabilities]({% link {{ page.version.version }}/multiregion-overview.md %}) | Row-level control over where your data is stored to help you reduce read and write latency and meet regulatory requirements.
[PL/pgSQL]({% link {{ page.version.version }}/plpgsql.md %}) | Use a procedural language in [user-defined functions]({% link {{ page.version.version }}/user-defined-functions.md %}) and [stored procedures]({% link {{ page.version.version }}/stored-procedures.md %}) to improve performance and enable more complex queries.
[Node Map]({% link {{ page.version.version }}/enable-node-map.md %}) | Visualize the geographical distribution of a cluster by plotting its node localities on a world map.
+[Generic query plans]({% link {{ page.version.version }}/cost-based-optimizer.md %}#query-plan-type) | Improve performance for prepared statements by enabling generic plans that eliminate most of the query latency attributed to planning.
+[`VECTOR` type]({% link {{ page.version.version }}/vector.md %}) | Represent data points in multi-dimensional space, using fixed-length arrays of floating-point numbers.
## Recovery and streaming
diff --git a/src/current/_includes/v24.2/misc/note-egress-perimeter-cdc-backup.md b/src/current/_includes/v24.2/misc/note-egress-perimeter-cdc-backup.md
index ee8352b424c..ffa1c87e2a2 100644
--- a/src/current/_includes/v24.2/misc/note-egress-perimeter-cdc-backup.md
+++ b/src/current/_includes/v24.2/misc/note-egress-perimeter-cdc-backup.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_info}}
-Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls](https://www.cockroachlabs.com/docs/cockroachcloud/egress-perimeter-controls) for detail and setup instructions.
+Cockroach Labs recommends enabling Egress Perimeter Controls on CockroachDB {{ site.data.products.dedicated }} clusters to mitigate the risk of data exfiltration when accessing external resources, such as cloud storage for change data capture or backup and restore operations. See [Egress Perimeter Controls]({% link cockroachcloud/egress-perimeter-controls.md %}) for detail and setup instructions.
{{site.data.alerts.end}}
diff --git a/src/current/_includes/v24.2/misc/session-vars.md b/src/current/_includes/v24.2/misc/session-vars.md
index cabc75dc9ed..4c2cada9ebc 100644
--- a/src/current/_includes/v24.2/misc/session-vars.md
+++ b/src/current/_includes/v24.2/misc/session-vars.md
@@ -22,13 +22,13 @@
| `enable_auto_rehoming` | When enabled, the [home regions]({% link {{ page.version.version }}/alter-table.md %}#crdb_region) of rows in [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#set-the-table-locality-to-regional-by-row) tables are automatically set to the region of the [gateway node]({% link {{ page.version.version }}/ui-sessions-page.md %}#session-details-gateway-node) from which any [`UPDATE`]({% link {{ page.version.version }}/update.md %}) or [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements that operate on those rows originate. | `off` | Yes | Yes |
| `enable_durable_locking_for_serializable` | Indicates whether CockroachDB replicates [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) locks via [Raft]({% link {{ page.version.version }}/architecture/replication-layer.md %}#raft), allowing locks to be preserved when leases are transferred. Note that replicating `FOR UPDATE` and `FOR SHARE` locks will add latency to those statements. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_experimental_alter_column_type_general` | If `on`, it is possible to [alter column data types]({% link {{ page.version.version }}/alter-table.md %}#alter-column-data-types). | `off` | Yes | Yes |
-| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, `enable_shared_locking_for_serializable` must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
+| `enable_implicit_fk_locking_for_serializable` | Indicates whether CockroachDB uses [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) to perform [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks. To take effect, the [`enable_shared_locking_for_serializable`](#enable-shared-locking-for-serializable) setting must also be enabled. This setting only affects `SERIALIZABLE` transactions and matches the default `READ COMMITTED` behavior when enabled. | `off` | Yes | Yes |
| `enable_implicit_select_for_update` | Indicates whether [`UPDATE`]({% link {{ page.version.version }}/update.md %}) and [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}) statements acquire locks using the `FOR UPDATE` locking mode during their initial row scan, which improves performance for contended workloads.
For more information about how `FOR UPDATE` locking works, see the documentation for [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}). | `on` | Yes | Yes |
| `enable_implicit_transaction_for_batch_statements` | Indicates whether multiple statements in a single query (a "batch statement") will all run in the same implicit transaction, which matches the PostgreSQL wire protocol. | `on` | Yes | Yes |
| `enable_insert_fast_path` | Indicates whether CockroachDB will use a specialized execution operator for inserting into a table. We recommend leaving this setting `on`. | `on` | Yes | Yes |
| `enable_shared_locking_for_serializable` | Indicates whether [shared locks]({% link {{ page.version.version }}/select-for-update.md %}#lock-strengths) are enabled for `SERIALIZABLE` transactions. When `off`, `SELECT` statements using `FOR SHARE` are still permitted under `SERIALIZABLE` isolation, but silently do not lock. | `off` | Yes | Yes |
| `enable_super_regions` | When enabled, you can define a super region: a set of [database regions]({% link {{ page.version.version }}/multiregion-overview.md %}#super-regions) on a multi-region cluster such that your [schema objects]({% link {{ page.version.version }}/schema-design-overview.md %}#database-schema-objects) will have all of their [replicas]({% link {{ page.version.version }}/architecture/overview.md %}#architecture-replica) stored _only_ in regions that are members of the super region. | `off` | Yes | Yes |
-| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a zig-zag merge join algorithm, which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
+| `enable_zigzag_join` | Indicates whether the [cost-based optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}) will plan certain queries using a [zigzag merge join algorithm]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins), which searches for the desired intersection by jumping back and forth between the indexes based on the fact that after constraining indexes, they share an ordering. | `on` | Yes | Yes |
| `enforce_home_region` | If set to `on`, queries return an error and in some cases a suggested resolution if they cannot run entirely in their home region. This can occur if a query has no home region (for example, if it reads from different home regions in a [regional by row table]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables)) or a query's home region differs from the [gateway]({% link {{ page.version.version }}/architecture/life-of-a-distributed-transaction.md %}#gateway) region. Note that only tables with `ZONE` [survivability]({% link {{ page.version.version }}/multiregion-survival-goals.md %}#when-to-use-zone-vs-region-survival-goals) can be scanned without error when this is enabled. For more information about home regions, see [Table localities]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities).
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `enforce_home_region_follower_reads_enabled` | If `on` while the [`enforce_home_region`]({% link {{ page.version.version }}/cost-based-optimizer.md %}#control-whether-queries-are-limited-to-a-single-region) setting is `on`, allows `enforce_home_region` to perform `AS OF SYSTEM TIME` [follower reads]({% link {{ page.version.version }}/follower-reads.md %}) to detect and report a query's [home region]({% link {{ page.version.version }}/multiregion-overview.md %}#table-localities), if any.
This feature is in preview. It is subject to change. | `off` | Yes | Yes |
| `expect_and_ignore_not_visible_columns_in_copy` | If `on`, [`COPY FROM`]({% link {{ page.version.version }}/copy-from.md %}) with no column specifiers will assume that hidden columns are in the copy data, but will ignore them when applying `COPY FROM`. | `off` | Yes | Yes |
@@ -47,18 +47,21 @@
| `multiple_active_portals_enabled` | Whether to enable the [multiple active portals]({% link {{ page.version.version }}/postgresql-compatibility.md %}#multiple-active-portals) pgwire feature. | `false` | Yes | Yes |
| `node_id` | The ID of the node currently connected to.
This variable is particularly useful for verifying load balanced connections. | Node-dependent | No | Yes |
| `null_ordered_last` | Set the default ordering of `NULL`s. The default order is `NULL`s first for ascending order and `NULL`s last for descending order. | `false` | Yes | Yes |
-| `optimizer_merge_joins_enabled` | If `on`, the optimizer will explore query plans with merge joins. | `on` | Yes| Yes |
+| `optimizer_merge_joins_enabled` | If `on`, the optimizer will explore query plans with merge joins. | `on` | Yes | Yes |
+| `optimizer_push_offset_into_index_join` | If `on`, the optimizer will attempt to push offset expressions into index join expressions to produce more efficient query plans. | `on` | Yes | Yes |
| `optimizer_use_forecasts` | If `on`, the optimizer uses forecasted statistics for query planning. | `on` | Yes | Yes |
| `optimizer_use_histograms` | If `on`, the optimizer uses collected histograms for cardinality estimation. | `on` | No | Yes |
+| `optimizer_use_improved_multi_column_selectivity_estimate` | If `on`, the optimizer uses an improved selectivity estimate for multi-column predicates. | `on` | Yes | Yes |
+| `optimizer_use_improved_zigzag_join_costing` | If `on`, the cost of [zigzag joins]({% link {{ page.version.version }}/cost-based-optimizer.md %}#zigzag-joins) is updated so they will be never be chosen over scans unless they produce fewer rows. To take effect, the [`enable_zigzag_join`](#enable-zigzag-join) setting must also be enabled. | `on` | Yes | Yes |
| `optimizer_use_lock_op_for_serializable` | If `on`, the optimizer uses a `Lock` operator to construct query plans for `SELECT` statements using the [`FOR UPDATE` and `FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) clauses. This setting only affects `SERIALIZABLE` transactions. `READ COMMITTED` transactions are evaluated with the `Lock` operator regardless of the setting. | `off` | Yes | Yes |
| `optimizer_use_multicol_stats` | If `on`, the optimizer uses collected multi-column statistics for cardinality estimation. | `on` | No | Yes |
| `optimizer_use_not_visible_indexes` | If `on`, the optimizer uses not visible indexes for planning. | `off` | No | Yes |
-| `optimizer_use_virtual_computed_column_stats` | If `on`, the optimizer uses table statistics on [virtual computed columns]({% link {{ page.version.version }}/computed-columns.md %}#virtual-computed-columns). | `on` | Yes | Yes
+| `optimizer_use_virtual_computed_column_stats` | If `on`, the optimizer uses table statistics on [virtual computed columns]({% link {{ page.version.version }}/computed-columns.md %}#virtual-computed-columns). | `on` | Yes | Yes |
+| `plan_cache_mode` | The type of plan that is cached in the [query plan cache]({% link {{ page.version.version }}/cost-based-optimizer.md %}#query-plan-cache): `auto`, `force_generic_plan`, or `force_custom_plan`.
For more information, refer to [Query plan type]({% link {{ page.version.version }}/cost-based-optimizer.md %}#query-plan-type). | `force_custom_plan` | Yes | Yes
| `plpgsql_use_strict_into` | If `on`, PL/pgSQL [`SELECT ... INTO` and `RETURNING ... INTO` statements]({% link {{ page.version.version }}/plpgsql.md %}#assign-a-result-to-a-variable) behave as though the `STRICT` option is specified. This causes the SQL statement to error if it does not return exactly one row. | `off` | Yes | Yes |
| `pg_trgm.similarity_threshold` | The threshold above which a [`%`]({% link {{ page.version.version }}/functions-and-operators.md %}#operators) string comparison returns `true`. The value must be between `0` and `1`. For more information, see [Trigram Indexes]({% link {{ page.version.version }}/trigram-indexes.md %}). | `0.3` | Yes | Yes |
| `prefer_lookup_joins_for_fks` | If `on`, the optimizer prefers [`lookup joins`]({% link {{ page.version.version }}/joins.md %}#lookup-joins) to [`merge joins`]({% link {{ page.version.version }}/joins.md %}#merge-joins) when performing [`foreign key`]({% link {{ page.version.version }}/foreign-key.md %}) checks. | `off` | Yes | Yes |
| `reorder_joins_limit` | Maximum number of joins that the optimizer will attempt to reorder when searching for an optimal query execution plan.
For more information, see [Join reordering]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-reordering). | `8` | Yes | Yes |
-| `results_buffer_size` | The default size of the buffer that accumulates results for a statement or a batch of statements before they are sent to the client. This can also be set for all connections using the `sql.defaults.results_buffer_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}). Note that auto-retries generally only happen while no results have been delivered to the client, so reducing this size can increase the number of retryable errors a client receives. On the other hand, increasing the buffer size can increase the delay until the client receives the first result row. Setting to 0 disables any buffering. | `16384` | Yes | Yes |
| `require_explicit_primary_keys` | If `on`, CockroachDB throws an error for all tables created without an explicit primary key defined. | `off` | Yes | Yes |
| `search_path` | A list of schemas that will be searched to resolve unqualified table or function names. For more details, see [SQL name resolution]({% link {{ page.version.version }}/sql-name-resolution.md %}). | `public` | Yes | Yes |
| `serial_normalization` | Specifies the default handling of [`SERIAL`]({% link {{ page.version.version }}/serial.md %}) in table definitions. Valid options include `'rowid'`, `'virtual_sequence'`, `sql_sequence`, `sql_sequence_cached`, and `unordered_rowid`. If set to `'virtual_sequence'`, the `SERIAL` type auto-creates a sequence for [better compatibility with Hibernate sequences](https://forum.cockroachlabs.com/t/hibernate-sequence-generator-returns-negative-number-and-ignore-unique-rowid/1885). If set to `sql_sequence_cached`, you can use the `sql.defaults.serial_sequences_cache_size` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to control the number of values to cache in a user's session, with a default of 256. If set to `unordered_rowid`, the `SERIAL` type generates a globally unique 64-bit integer (a combination of the insert timestamp and the ID of the node executing the statement) that does not have unique ordering. | `'rowid'` | Yes | Yes |
@@ -66,11 +69,11 @@
| `server_version_num` | The version of PostgreSQL that CockroachDB emulates. | Version-dependent | Yes | Yes |
| `session_id` | The ID of the current session. | Session-dependent | No | Yes |
| `session_user` | The user connected for the current session. | User in connection string | No | Yes |
-| `sql_safe_updates` | If `false`, potentially unsafe SQL statements are allowed, including `DROP` of a non-empty database and all dependent objects, [`DELETE`]({% link {{ page.version.version }}/delete.md %}) without a `WHERE` clause, [`UPDATE`]({% link {{ page.version.version }}/update.md %}) without a `WHERE` clause, and [`ALTER TABLE .. DROP COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#drop-column). See [Allow Potentially Unsafe SQL Statements]({% link {{ page.version.version }}/cockroach-sql.md %}#allow-potentially-unsafe-sql-statements) for more details. | `true` for interactive sessions from the [built-in SQL client]({% link {{ page.version.version }}/cockroach-sql.md %}), `false` for sessions from other clients | Yes | Yes |
+| `sql_safe_updates` | If `true`, the following potentially unsafe SQL statements are disallowed: [`DROP DATABASE`]({% link {{ page.version.version }}/drop-database.md %}) of a non-empty database and all dependent objects; [`DELETE`]({% link {{ page.version.version }}/delete.md %}) and [`UPDATE`]({% link {{ page.version.version }}/update.md %}) without a `WHERE` clause, unless a [`LIMIT`]({% link {{ page.version.version }}/limit-offset.md %}) clause is included; [`SELECT ... FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}) and [`SELECT ... FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) without a `WHERE` or [`LIMIT`]({% link {{ page.version.version }}/limit-offset.md %}) clause; and [`ALTER TABLE ... DROP COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#drop-column). For more details, refer to [Allow potentially unsafe SQL statements]({% link {{ page.version.version }}/cockroach-sql.md %}#allow-potentially-unsafe-sql-statements). | `true` for interactive sessions from the [built-in SQL client]({% link {{ page.version.version }}/cockroach-sql.md %}), `false` for sessions from other clients | Yes | Yes |
| `statement_timeout` | The amount of time a statement can run before being stopped. This value can be an `int` (e.g., `10`) and will be interpreted as milliseconds. It can also be an interval or string argument, where the string can be parsed as a valid interval (e.g., `'4s'`). A value of `0` turns it off. | The value set by the `sql.defaults.statement_timeout` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) (`0s`, by default). | Yes | Yes |
| `stub_catalog_tables` | If `off`, querying an unimplemented, empty [`pg_catalog`]({% link {{ page.version.version }}/pg-catalog.md %}) table will result in an error, as is the case in v20.2 and earlier. If `on`, querying an unimplemented, empty `pg_catalog` table simply returns no rows. | `on` | Yes | Yes |
-| `timezone` | The default time zone for the current session. This session variable was named `"time zone"` (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `UTC` | Yes | Yes |
-| `tracing` | The trace recording state. | `off` | | Yes |
+| `timezone` | The default time zone for the current session. | `UTC` | Yes | Yes |
+| `tracing` | The trace recording state. | `off` | Yes | Yes |
| `transaction_isolation` | The isolation level at which the transaction executes ([`SERIALIZABLE`]({% link {{ page.version.version }}/demo-serializable.md %}) or [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %})). See [Isolation levels]({% link {{ page.version.version }}/transactions.md %}#isolation-levels). | `SERIALIZABLE` | Yes | Yes |
| `transaction_priority` | The priority of the current transaction. See Transactions: Transaction priorities for more details. This session variable was called transaction priority (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `NORMAL` | Yes | Yes |
| `transaction_read_only` | The access mode of the current transaction. See [`SET TRANSACTION`]({% link {{ page.version.version }}/set-transaction.md %}) for more details. | `off` | Yes | Yes |
@@ -78,7 +81,7 @@
| `transaction_rows_read_log` | The threshold for the number of rows read by a SQL transaction. If this value is exceeded, the event will be logged to `SQL_PERF` (or `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
| `transaction_rows_written_err` | The limit for the number of rows written by a SQL transaction. If this value is exceeded the transaction will fail (or the event will be logged to `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
| `transaction_rows_written_log` | The threshold for the number of rows written by a SQL transaction. If this value is exceeded, the event will be logged to `SQL_PERF` (or `SQL_INTERNAL_PERF` for internal transactions). | `0` | Yes | Yes |
-| `transaction_status` | The state of the current transaction. See [Transactions]({% link {{ page.version.version }}/transactions.md %}) for more details. This session variable was called `transaction status` (with a space) in CockroachDB 1.x. It has been renamed for compatibility with PostgreSQL. | `NoTxn` | No | Yes |
+| `transaction_status` | The state of the current transaction. See [Transactions]({% link {{ page.version.version }}/transactions.md %}) for more details. | `NoTxn` | No | Yes |
| `transaction_timeout` | Aborts an explicit [transaction]({% link {{ page.version.version }}/transactions.md %}) when it runs longer than the configured duration. Stored in milliseconds; can be expressed in milliseconds or as an [`INTERVAL`]({% link {{ page.version.version }}/interval.md %}). | `0` | Yes | Yes |
| `troubleshooting_mode_enabled` | When enabled, avoid performing additional work on queries, such as collecting and emitting telemetry data. This session variable is particularly useful when the cluster is experiencing issues, unavailability, or failure. | `off` | Yes | Yes |
| `use_declarative_schema_changer` | Whether to use the declarative schema changer for supported statements. See [Declarative schema changer]({% link {{ page.version.version }}/online-schema-changes.md %}#declarative-schema-changer) for more details. | `on` | Yes | Yes |
diff --git a/src/current/_includes/v24.2/misc/table-storage-parameters.md b/src/current/_includes/v24.2/misc/table-storage-parameters.md
index 2f0f43b57b5..3ca7f601648 100644
--- a/src/current/_includes/v24.2/misc/table-storage-parameters.md
+++ b/src/current/_includes/v24.2/misc/table-storage-parameters.md
@@ -1,6 +1,7 @@
| Parameter name | Description | Data type | Default value |
|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------|
| `exclude_data_from_backup` | Exclude the data in this table from any future backups. | Boolean | `false` |
+| `schema_locked` | Disallow [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) on this table. Enabling `schema_locked` can help [improve performance of changefeeds]({% link {{ page.version.version }}/create-changefeed.md %}#disallow-schema-changes-on-tables-to-improve-changefeed-performance) running on this table. | Boolean | `false` |
| `sql_stats_automatic_collection_enabled` | Enable [automatic statistics collection]({% link {{ page.version.version }}/cost-based-optimizer.md %}#enable-and-disable-automatic-statistics-collection-for-tables) for this table. | Boolean | `true` |
| `sql_stats_automatic_collection_min_stale_rows` | Minimum number of stale rows in this table that will trigger a statistics refresh. | Integer | 500 |
| `sql_stats_automatic_collection_fraction_stale_rows` | Fraction of stale rows in this table that will trigger a statistics refresh. | Float | 0.2 |
diff --git a/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-helm.md b/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-helm.md
index 5d10a01dde9..4506ae28c74 100644
--- a/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-helm.md
+++ b/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-helm.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=helm#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=helm). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-manual.md b/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-manual.md
index 34054e2587b..078858ee083 100644
--- a/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-manual.md
+++ b/src/current/_includes/v24.2/orchestration/kubernetes-upgrade-cluster-manual.md
@@ -2,11 +2,11 @@
1. Verify that you can upgrade.
- To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release](https://www.cockroachlabs.com/docs/releases) and not a testing release (alpha/beta).
+ To upgrade to a new major version, you must first be on a production release of the previous version. The release does not need to be the latest production release of the previous version, but it must be a production [release]({% link releases/index.md %}) and not a testing release (alpha/beta).
Therefore, in order to upgrade to {{ page.version.version }}, you must be on a production release of {{ previous_version }}.
- 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}](../v21.1/operate-cockroachdb-kubernetes.html?filters=manual#upgrade-the-cluster). Be sure to complete all the steps.
+ 1. If you are upgrading to {{ page.version.version }} from a production release earlier than {{ previous_version }}, or from a testing release (alpha/beta), first [upgrade to a production release of {{ previous_version }}]({% link {{ previous_version }}/upgrade-cockroachdb-kubernetes.md %}?filters=manual). Be sure to complete all the steps.
1. Then return to this page and perform a second upgrade to {{ page.version.version }}.
@@ -21,7 +21,7 @@
{% assign rd = site.data.versions | where_exp: "rd", "rd.major_version == page.version.version" | first %}
-1. Review the [backward-incompatible changes in {{ page.version.version }}](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features](https://www.cockroachlabs.com/docs/releases/{{ page.version.version }}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
+1. Review the [backward-incompatible changes in {{ page.version.version }}]({% link releases/{{ page.version.version }}.md %}{% unless rd.release_date == "N/A" or rd.release_date > today %}#{{ page.version.version | replace: ".", "-" }}-0-backward-incompatible-changes{% endunless %}) and [deprecated features]({% link releases/{{ page.version.version }}.md %}#{% unless rd.release_date == "N/A" or rd.release_date > today %}{{ page.version.version | replace: ".", "-" }}-0-deprecations{% endunless %}). If any affect your deployment, make the necessary changes before starting the rolling upgrade to {{ page.version.version }}.
1. Decide how the upgrade will be finalized.
diff --git a/src/current/_includes/v24.2/performance/increase-server-side-retries.md b/src/current/_includes/v24.2/performance/increase-server-side-retries.md
index f43b8a9abf8..95f2c2a9647 100644
--- a/src/current/_includes/v24.2/performance/increase-server-side-retries.md
+++ b/src/current/_includes/v24.2/performance/increase-server-side-retries.md
@@ -2,4 +2,4 @@
-- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [session variable](set-vars.html).
\ No newline at end of file
+- Limit the size of the result sets of your transactions to under 16KB, so that CockroachDB is more likely to [automatically retry]({% link {{ page.version.version }}/transactions.md %}#automatic-retries) when [previous reads are invalidated]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#read-refreshing) at a [pushed timestamp]({% link {{ page.version.version }}/architecture/transaction-layer.md %}#timestamp-cache). When a transaction returns a result set over 16KB, even if that transaction has been sent as a single batch, CockroachDB cannot automatically retry the transaction. You can change the results buffer size for all new sessions using the `sql.defaults.results_buffer.size` [cluster setting](cluster-settings.html), or for a specific session using the `results_buffer_size` [connection parameter]({% link {{page.version.version}}/connection-parameters.md %}#additional-connection-parameters).
diff --git a/src/current/_includes/v24.2/performance/reduce-hot-spots.md b/src/current/_includes/v24.2/performance/reduce-hot-spots.md
index 74cdab96a2c..4d7b601e33d 100644
--- a/src/current/_includes/v24.2/performance/reduce-hot-spots.md
+++ b/src/current/_includes/v24.2/performance/reduce-hot-spots.md
@@ -2,17 +2,23 @@
- Place parts of the records that are modified by different transactions in different tables. That is, increase [normalization](https://wikipedia.org/wiki/Database_normalization). However, there are benefits and drawbacks to increasing normalization.
- - Benefits:
+ - Benefits of increasing normalization:
+ - Can improve performance for write-heavy workloads. This is because, with increased normalization, a given business fact must be written to one place rather than to multiple places.
- Allows separate transactions to modify related underlying data without causing [contention](#transaction-contention).
- - Can improve performance for read-heavy workloads.
+ - Reduces the chance of data inconsistency, since a given business fact must be written only to one place.
+ - Reduces or eliminates data redundancy.
+ - Uses less disk space.
- - Drawbacks:
+ - Drawbacks of increasing normalization:
+ - Can reduce performance for read-heavy workloads. This is because increasing normalization results in more joins, and can make the SQL more complicated in other ways.
- More complex data model.
- - Increases the chance of data inconsistency.
- - Increases data redundancy.
- - Can degrade performance for write-heavy workloads.
+
+ - In general:
+
+ - Increase normalization for write-intensive and read/write-intensive transactional workloads.
+ - Do not increase normalization for read-intensive reporting workloads.
- If the application strictly requires operating on very few different index keys, consider using [`ALTER ... SPLIT AT`]({% link {{ page.version.version }}/alter-table.md %}#split-at) so that each index key can be served by a separate group of nodes in the cluster.
diff --git a/src/current/_includes/v24.2/prod-deployment/healthy-workload-concurrency.md b/src/current/_includes/v24.2/prod-deployment/healthy-workload-concurrency.md
index 9ab356a821c..09bf8763cc0 100644
--- a/src/current/_includes/v24.2/prod-deployment/healthy-workload-concurrency.md
+++ b/src/current/_includes/v24.2/prod-deployment/healthy-workload-concurrency.md
@@ -1 +1 @@
-**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console](https://www.cockroachlabs.com/docs/cockroachcloud/statements-page). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console](../cockroachcloud/metrics-page.html#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools](connection-pooling.html#size-connection-pools).
\ No newline at end of file
+**Expected values for a healthy cluster**: At any time, the total number of connections actively executing SQL statements should not exceed 4 times the number of vCPUs in the cluster. You can find them in the Active Executions view in the [DB Console]({% link {{ page.version.version }}/ui-statements-page.md %}) or [Cloud Console]({% link cockroachcloud/statements-page.md %}). You can find the number of open connections in the [DB Console]({% link {{ page.version.version }}/ui-sql-dashboard.md %}#open-sql-sessions) or [Cloud Console]({% link cockroachcloud/metrics-page.md %}#sql-open-sessions). For more details on configuring connection pools, see [Size connection pools]({% link {{ page.version.version }}/connection-pooling.md %}#size-connection-pools).
diff --git a/src/current/_includes/v24.2/prod-deployment/insecure-start-nodes.md b/src/current/_includes/v24.2/prod-deployment/insecure-start-nodes.md
index d19b20c75c0..75d0de816b5 100644
--- a/src/current/_includes/v24.2/prod-deployment/insecure-start-nodes.md
+++ b/src/current/_includes/v24.2/prod-deployment/insecure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
diff --git a/src/current/_includes/v24.2/prod-deployment/secure-start-nodes.md b/src/current/_includes/v24.2/prod-deployment/secure-start-nodes.md
index e8229b3ff05..b9ee8bb0935 100644
--- a/src/current/_includes/v24.2/prod-deployment/secure-start-nodes.md
+++ b/src/current/_includes/v24.2/prod-deployment/secure-start-nodes.md
@@ -14,43 +14,9 @@ For each initial node of your cluster, complete the following steps:
After completing these steps, nodes will not yet be live. They will complete the startup process and join together to form a cluster as soon as the cluster is initialized in the next step.
{{site.data.alerts.end}}
-1. SSH to the machine where you want the node to run.
+1. Visit [Releases]({% link releases/index.md %}) and download the full binary of CockroachDB to the node.
-1. Download the [CockroachDB archive](https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz) for Linux, and extract the binary:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ curl https://binaries.cockroachdb.com/cockroach-{{ page.release_info.version }}.linux-amd64.tgz \
- | tar -xz
- ~~~
-
-1. Copy the binary into the `PATH`:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/cockroach /usr/local/bin/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
-
-1. CockroachDB uses custom-built versions of the [GEOS]({% link {{ page.version.version }}/architecture/glossary.md %}#geos) libraries. Copy these libraries to the location where CockroachDB expects to find them:
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ mkdir -p /usr/local/lib/cockroach
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
- ~~~
-
- {% include_cached copy-clipboard.html %}
- ~~~ shell
- $ cp -i cockroach-{{ page.release_info.version }}.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/
- ~~~
-
- If you get a permissions error, prefix the command with `sudo`.
+1. On the node, follow the instructions to [install CockroachDB]({% link {{ page.version.version }}/install-cockroachdb.md %}).
1. Run the [`cockroach start`]({% link {{ page.version.version }}/cockroach-start.md %}) command:
@@ -79,7 +45,7 @@ After completing these steps, nodes will not yet be live. They will complete the
For other flags not explicitly set, the command uses default values. For example, the node stores data in `--store=cockroach-data` and binds DB Console HTTP requests to `--http-addr=:8080`. To set these options manually, see [Start a Node]({% link {{ page.version.version }}/cockroach-start.md %}).
-1. Repeat these steps for each additional node that you want in your cluster.
+Repeat these steps for each additional node that you want in your cluster.
diff --git a/src/current/_includes/v24.2/setup/create-first-sql-user.md b/src/current/_includes/v24.2/setup/create-first-sql-user.md
index 556a2d8ad60..21c080a0626 100644
--- a/src/current/_includes/v24.2/setup/create-first-sql-user.md
+++ b/src/current/_includes/v24.2/setup/create-first-sql-user.md
@@ -5,4 +5,4 @@ The **Create SQL user** dialog allows you to create a new SQL user and password.
1. Copy the generated password and save it in a secure location.
1. Click **Next**.
- Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [[Manage SQL users on a cluster](https://www.cockroachlabs.com/docs/cockroachcloud/managing-access#manage-sql-users-on-a-cluster).
\ No newline at end of file
+ Currently, all new SQL users are created with admin privileges. For more information and to change the default settings, see [Manage SQL users on a cluster]({% link cockroachcloud/managing-access.md %}#manage-sql-users-on-a-cluster).
diff --git a/src/current/_includes/v24.2/sidebar-data/cloud-deployments.json b/src/current/_includes/v24.2/sidebar-data/cloud-deployments.json
index e91fec82150..d2049267f66 100644
--- a/src/current/_includes/v24.2/sidebar-data/cloud-deployments.json
+++ b/src/current/_includes/v24.2/sidebar-data/cloud-deployments.json
@@ -437,6 +437,12 @@
"/cockroachcloud/upgrade-policy.html"
]
},
+ {
+ "title": "Upgrade to v24.2",
+ "urls": [
+ "/cockroachcloud/upgrade-to-v24.2.html"
+ ]
+ },
{
"title": "Upgrade to v24.1",
"urls": [
diff --git a/src/current/_includes/v24.2/sidebar-data/migrate.json b/src/current/_includes/v24.2/sidebar-data/migrate.json
index e9e9d4b949a..48e1670082a 100644
--- a/src/current/_includes/v24.2/sidebar-data/migrate.json
+++ b/src/current/_includes/v24.2/sidebar-data/migrate.json
@@ -34,12 +34,6 @@
"urls": [
"/molt/molt-verify.html"
]
- },
- {
- "title": "Live Migration Service",
- "urls": [
- "/molt/live-migration-service.html"
- ]
}
]
},
diff --git a/src/current/_includes/v24.2/sidebar-data/reference.json b/src/current/_includes/v24.2/sidebar-data/reference.json
index e22c44e9fcf..b4cfc4b9a36 100644
--- a/src/current/_includes/v24.2/sidebar-data/reference.json
+++ b/src/current/_includes/v24.2/sidebar-data/reference.json
@@ -283,8 +283,19 @@
},
{
"title": "Metrics",
- "urls": [
- "/${VERSION}/metrics.html"
+ "items": [
+ {
+ "title": "Available Metrics",
+ "urls": [
+ "/${VERSION}/metrics.html"
+ ]
+ },
+ {
+ "title": "Child Metrics",
+ "urls": [
+ "/${VERSION}/child-metrics.html"
+ ]
+ }
]
},
{
diff --git a/src/current/_includes/v24.2/sidebar-data/sql.json b/src/current/_includes/v24.2/sidebar-data/sql.json
index 9bb38aacbe9..4b3d88d428d 100644
--- a/src/current/_includes/v24.2/sidebar-data/sql.json
+++ b/src/current/_includes/v24.2/sidebar-data/sql.json
@@ -1015,6 +1015,12 @@
"urls": [
"/${VERSION}/uuid.html"
]
+ },
+ {
+ "title": "VECTOR",
+ "urls": [
+ "/${VERSION}/vector.html"
+ ]
}
]
},
diff --git a/src/current/_includes/v24.2/sql/locality-optimized-search.md b/src/current/_includes/v24.2/sql/locality-optimized-search.md
index 0df9e9741cd..23cac1bc9d9 100644
--- a/src/current/_includes/v24.2/sql/locality-optimized-search.md
+++ b/src/current/_includes/v24.2/sql/locality-optimized-search.md
@@ -1 +1 @@
-Note that the [SQL engine](https://www.cockroachlabs.com/docs/{{ page.version.version }}/architecture/sql-layer) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_](https://www.cockroachlabs.com/docs/{{ page.version.version }}/cost-based-optimizer#locality-optimized-search-in-multi-region-clusters).
+Note that the [SQL engine]({% link {{ page.version.version }}/architecture/sql-layer.md %}) will avoid sending requests to nodes in other regions when it can instead read a value from a unique column that is stored locally. This capability is known as [_locality optimized search_]({% link {{ page.version.version }}/cost-based-optimizer.md %}#locality-optimized-search-in-multi-region-clusters).
diff --git a/src/current/_includes/v24.2/sql/partially-visible-indexes.md b/src/current/_includes/v24.2/sql/partially-visible-indexes.md
new file mode 100644
index 00000000000..83f251c8374
--- /dev/null
+++ b/src/current/_includes/v24.2/sql/partially-visible-indexes.md
@@ -0,0 +1 @@
+For the purposes of [index recommendations]({% link {{ page.version.version }}/explain.md %}#success-responses), partially visible indexes are treated as [not visible]({% link {{ page.version.version }}/alter-index.md %}#not-visible). If a partially visible index can be used to improve a query plan, the {% if page.name != "cost-based-optimizer.md" %}[optimizer]({% link {{ page.version.version }}/cost-based-optimizer.md %}){% else %}optimizer{% endif %} will recommend making it fully visible. For an example, refer to [Set an index as partially visible]({% link {{ page.version.version }}/alter-index.md %}#set-an-index-as-partially-visible).
\ No newline at end of file
diff --git a/src/current/_includes/v24.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md b/src/current/_includes/v24.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
index f58bb05bdb1..6fdea66fc89 100644
--- a/src/current/_includes/v24.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
+++ b/src/current/_includes/v24.2/sql/replication-zone-patterns-to-multiregion-sql-mapping.md
@@ -1,5 +1,5 @@
| Replication Zone Pattern | Multi-Region SQL |
|--------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Duplicate indexes](https://www.cockroachlabs.com/docs/v20.2/topology-duplicate-indexes) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
-| [Geo-partitioned replicas](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-replicas) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
-| [Geo-partitioned leaseholders](https://www.cockroachlabs.com/docs/v20.2/topology-geo-partitioned-leaseholders) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
+| [Duplicate indexes]({% link v20.2/topology-duplicate-indexes.md %}) | [`GLOBAL` tables]({% link {{ page.version.version }}/global-tables.md %}) |
+| [Geo-partitioned replicas]({% link v20.2/topology-geo-partitioned-replicas.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`ZONE` survival goals](multiregion-survival-goals.html#survive-zone-failures) |
+| [Geo-partitioned leaseholders]({% link v20.2/topology-geo-partitioned-leaseholders.md %}) | [`REGIONAL BY ROW` tables]({% link {{ page.version.version }}/regional-tables.md %}#regional-by-row-tables) with [`REGION` survival goals](multiregion-survival-goals.html#survive-region-failures) |
diff --git a/src/current/_includes/v24.2/ui/cpu-percent-graph.md b/src/current/_includes/v24.2/ui/cpu-percent-graph.md
index 600b783e12b..b56608e4d06 100644
--- a/src/current/_includes/v24.2/ui/cpu-percent-graph.md
+++ b/src/current/_includes/v24.2/ui/cpu-percent-graph.md
@@ -1,14 +1,12 @@
-
-
-The **CPU Percent** graph displays the current user and system CPU percentage consumed by the CockroachDB process, normalized by number of cores, as tracked by the `sys.cpu.combined.percent-normalized` metric.
+This graph displays the current user and system CPU percentage consumed by the CockroachDB process, normalized by number of cores, as tracked by the `sys.cpu.combined.percent-normalized` metric.
{{site.data.alerts.callout_info}}
This graph shows the CPU consumption by the CockroachDB process, and excludes other processes on the node. Use the [Host CPU Percent graph]({% link {{ page.version.version }}/ui-hardware-dashboard.md %}#host-cpu-percent) to measure the total CPU consumption across all processes.
{{site.data.alerts.end}}
-- In the node view, the graph shows the percentage of CPU in use by the CockroachDB process for the selected node.
+- In the node view, the graph shows the percentage of CPU utilization of the CockroachDB process as measured by the host for the selected node.
-- In the cluster view, the graph shows the percentage of CPU in use by the CockroachDB process across all nodes.
+- In the cluster view, the graph shows the percentage of CPU utilization of the CockroachDB process as measured by the host across all nodes.
{% include {{ page.version.version }}/prod-deployment/healthy-cpu-percent.md %}
diff --git a/src/current/_includes/v24.2/ui/runnable-goroutines-graph.md b/src/current/_includes/v24.2/ui/runnable-goroutines-graph.md
index 0f6b6d45a79..274d485d6b0 100644
--- a/src/current/_includes/v24.2/ui/runnable-goroutines-graph.md
+++ b/src/current/_includes/v24.2/ui/runnable-goroutines-graph.md
@@ -1,5 +1,4 @@
-This graph shows the number of [Goroutines](https://golangbot.com/goroutines/) waiting to run per CPU. This graph should rise and fall based on CPU load. Values greater than 50 are considered high.
+This graph shows the number of [Goroutines](https://golangbot.com/goroutines/) waiting to run per CPU, as tracked by the `sys.runnable.goroutines.per.cpu` metric. This graph should rise and fall based on CPU load. Values greater than `50` are considered high. A value greater than the value set in `admission.kv_slot_adjuster.overload_threshold` (default = `32`), sampled at `1ms`, is used by [admission control]({% link {{ page.version.version }}/admission-control.md %}) to throttle regular CPU work.
- In the node view, the graph shows the number of Goroutines waiting per CPU on the selected node.
-
- In the cluster view, the graph shows the number of Goroutines waiting per CPU across all nodes in the cluster.
\ No newline at end of file
diff --git a/src/current/_includes/version-switcher.html b/src/current/_includes/version-switcher.html
index 352ba95b811..205b117593f 100644
--- a/src/current/_includes/version-switcher.html
+++ b/src/current/_includes/version-switcher.html
@@ -1,13 +1,65 @@
+{% assign DEBUG=false %}
+
+{% comment %}Get the version of the page we are currently viewing{% endcomment %}
+{% assign version = site.data.versions | where_exp: "v", "v.major_version == page.version.version" | sort: "release_date" | first %}
+{% unless version %}Error: Could not get version details for version {{ page.version.version }}. Giving up.{% break %}{% endunless %}
+
+{% comment %}Check whether the current page's version is released and if so, is LTS{% endcomment %}
+{% assign current_version_is_lts = false %}
+{% if version.initial_lts_patch != "N/A" %}
+ {% assign current_version_is_lts = true %}
+{% endif %}
+
+{% if DEBUG %}
+
+
+
+
+
+{% endif %}
+
+ {% comment %}Build the list of versions of the page{% endcomment %}
+
{% for v in page.versions %}
+ {% assign v_is_lts = false %}
+ {% comment %}Get major-version details for this version{% endcomment %}
+ {% assign major_version_details = site.data.versions | where_exp: "pv", "pv.major_version == v.version.version" | sort: "release_date" | first %}
+ {% unless major_version_details %}Error: Could not get version details for version {{ v.version }}. Giving up.{% break %}{% endunless %}
+
+ {% comment %}Check whether this version is released and if so, and is LTS{% endcomment %}
+
+ {% if major_version_details.major_version == v.version.version and major_version_details.initial_lts_patch != "N/A" %}
+ {% assign v_is_lts = true %}
+ {% endif %}
+
+ {% if DEBUG %}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
diff --git a/src/current/_includes/windows_warning.md b/src/current/_includes/windows_warning.md
index 4b43e8e336c..5217edd8b71 100644
--- a/src/current/_includes/windows_warning.md
+++ b/src/current/_includes/windows_warning.md
@@ -1,3 +1,3 @@
{{site.data.alerts.callout_danger}}
-The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.
+CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.
{{site.data.alerts.end}}
diff --git a/src/current/_layouts/default.html b/src/current/_layouts/default.html
index 0294f14c0ad..d5f53b088ea 100755
--- a/src/current/_layouts/default.html
+++ b/src/current/_layouts/default.html
@@ -88,6 +88,34 @@
{% if page.twitter == true %}
{% include_cached twitter_analytics.html %}
{% endif %}
+