Skip to content

Commit f9a6f79

Browse files
committed
Merge remote-tracking branch 'origin/main' into DOC-13899
2 parents 336c80f + a654a94 commit f9a6f79

File tree

8 files changed

+162
-14
lines changed

8 files changed

+162
-14
lines changed

src/current/_data/releases.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9129,3 +9129,31 @@
91299129
docker_arm_limited_access: false
91309130
source: true
91319131
previous_release: v25.3.0-alpha.3
9132+
9133+
9134+
- release_name: v25.3.0-beta.2
9135+
major_version: v25.3
9136+
release_date: '2025-07-09'
9137+
release_type: Testing
9138+
go_version: go1.23.7
9139+
sha: 931cea93c97da32a66de8eda76733e18ce64f841
9140+
has_sql_only: true
9141+
has_sha256sum: true
9142+
mac:
9143+
mac_arm: true
9144+
mac_arm_experimental: true
9145+
mac_arm_limited_access: false
9146+
windows: true
9147+
linux:
9148+
linux_arm: true
9149+
linux_arm_experimental: false
9150+
linux_arm_limited_access: false
9151+
linux_intel_fips: true
9152+
linux_arm_fips: false
9153+
docker:
9154+
docker_image: cockroachdb/cockroach-unstable
9155+
docker_arm: true
9156+
docker_arm_experimental: false
9157+
docker_arm_limited_access: false
9158+
source: true
9159+
previous_release: v25.3.0-beta.1
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
## v25.3.0-beta.2
2+
3+
Release Date: July 9, 2025
4+
5+
{% include releases/new-release-downloads-docker-image.md release=include.release %}
6+
7+
<h3 id="v25-3-0-beta-2-general-changes">General changes</h3>
8+
9+
- For virtual clusters, hot range logging is now performed by a single job on one node, rather than by tasks on every node.
10+
[#148926][#148926]
11+
12+
<h3 id="v25-3-0-beta-2-bug-fixes">Bug fixes</h3>
13+
14+
- CockroachDB now prohibits `ORDER BY` and join equality operations on `REFCURSOR` types, matching PostgreSQL behavior.
15+
[#149292][#149292]
16+
- Fixed an issue where CockroachDB could hit an internal error when performing a `DELETE`, `UPDATE`, or `UPSERT` where the initial scan of the mutation is locking and is on a table different from the one being mutated. A possible workaround was `SET enable_implicit_select_for_update = false`, but this could increase contention. The bug was introduced in v25.2 and is now fixed.
17+
[#149302][#149302]
18+
19+
20+
[#148926]: https://github.com/cockroachdb/cockroach/pull/148926
21+
[#149292]: https://github.com/cockroachdb/cockroach/pull/149292
22+
[#149302]: https://github.com/cockroachdb/cockroach/pull/149302

src/current/v25.2/load-based-splitting.md

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,42 @@ This benefit is further amplified by [load-based rebalancing]({% link {{ page.ve
7171

7272
## Monitor load-based splitting
7373

74+
### Log message
75+
7476
The [`INFO`]({% link {{ page.version.version }}/logging.md %}#info) log message
7577

7678
~~~
7779
no split key found: ...
7880
~~~
7981

80-
indicates that CockroachDB wants to [split the range]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-splits) due to load, but couldn’t find a key to split at.
82+
indicates that CockroachDB attempted to [split the range]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-splits) due to load, but could not identify a key at which to split.
83+
84+
You can usually ignore this log message. However, if it appears repeatedly, it may indicate a load imbalance in the cluster. A load imbalance might occur if a range cannot be split because it contains a [hotspot]({% link {{ page.version.version }}/understand-hotspots.md %}). For more information about how to reduce hotspots on your cluster, refer to [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
85+
86+
The log message ends with one of the following patterns that describe the observed load:
87+
88+
1. `popular key detected, clear direction detected`
89+
1. `popular key detected, no clear direction`
90+
1. `no popular key, clear direction detected`
91+
1. `no popular key, no clear direction`
8192

82-
Usually this log message can be ignored, unless it repeatedly shows up, which can indicate there is a load imbalance problem in the cluster. If there is a load imbalance problem, it could be because a [hot range]({% link {{ page.version.version }}/ui-hot-ranges-page.md %}) cannot be split (because it's really a [hot key]({% link {{ page.version.version }}/ui-hot-ranges-page.md %}#range-report)).
93+
These patterns may indicate either or both of the following conditions:
8394

84-
You can see how often a split key cannot be found over time by looking at the following [time-series metric]({% link {{ page.version.version }}/monitoring-and-alerting.md %}#prometheus-endpoint):
95+
- `popular key detected` indicates that a significant percentage of reads or writes targets a single row within the range of data.
96+
- `clear direction detected` indicates that accesses within the range progress steadily in one direction, either increasing or decreasing key order, which generally indicates an [index hotspot]({% link {{ page.version.version }}/understand-hotspots.md %}#index-hotspot).
8597

86-
- `kv.loadsplitter.nosplitkey`
98+
### Metrics
8799

88-
This metric is directly related to the log message described above.
100+
These [time-series metrics]({% link {{ page.version.version }}/monitoring-and-alerting.md %}#prometheus-endpoint) correlate with the potential conditions described in the load-based splitting [log message](#log-message). You can monitor how often the load-based splitter fails to find a split key, and whether this is due to a popular key or a clear access direction.
89101

90-
For more information about how to reduce hotspots (including hot ranges) on your cluster, refer to [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
102+
Metric | Description
103+
-------|-------------
104+
`kv.loadsplitter.nosplitkey` | Load-based splitter could not find a split key.
105+
`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.
106+
`kv.loadsplitter.cleardirection` | Load-based splitter observed an access direction greater than 80% decreasing (left) or increasing (right) in the samples.
91107

92108
## See also
93109

94110
- [`SET CLUSTER SETTING`]({% link {{ page.version.version }}/set-cluster-setting.md %})
95111
- [Load-based replica rebalancing]({% link {{ page.version.version }}/architecture/replication-layer.md %}#load-based-replica-rebalancing)
112+
- [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %})

src/current/v25.2/logging-use-cases.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,20 @@ I210517 17:38:20.403619 586 2@util/log/event_log.go:32 ⋮ [n1] 168 ={"Timestamp
9494
`runtime_stats` events are typically used for troubleshooting. To monitor your cluster's health, see [Monitoring and Alerting]({% link {{ page.version.version }}/monitoring-and-alerting.md %}).
9595
{{site.data.alerts.end}}
9696
97+
#### Example: Hot ranges stats
98+
99+
Each node checks for [hot ranges]({% link {{ page.version.version }}/understand-hotspots.md %}#hot-range) every minute. If a single [replica]({% link {{ page.version.version }}/architecture/overview.md %}#replica) exceeds 250 ms of CPU time per second, a [`hot_ranges_stats`]({% link {{ page.version.version }}/eventlog.md %}#hot_ranges_stats) event is recorded. In [virtual clusters]({% link {{ page.version.version }}/cluster-virtualization-overview.md %}) and [CockroachDB Standard and Basic deployments]({% link cockroachcloud/index.md %}), nodes perform this check every 5 minutes at the cluster level. In addition to these conditional logs, `hot_ranges_stats` logs are automatically emitted every 4 hours.
100+
101+
~~~
102+
I250602 04:46:54.752464 2023 2@util/log/event_log.go:39 ⋮ [T1,Vsystem,n5] 31977 ={"Timestamp":1748839613749807000,"EventType":"hot_ranges_stats","RangeID":1115,"Qps":0,"LeaseholderNodeID":5,"WritesPerSecond":0.0012048123820978134,"CPUTimePerSecond":251.30338109510822,"Databases":["kv"],"Tables":["kv"],"Indexes":["kv_pkey"]}
103+
~~~
104+
105+
- Preceding the `=` character is the `crdb-v2` event metadata. See the [reference documentation]({% link {{ page.version.version }}/log-formats.md %}#format-crdb-v2) for details on the fields.
106+
107+
{{site.data.alerts.callout_info}}
108+
`hot_ranges_stats` events are typically used for troubleshooting [hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
109+
{{site.data.alerts.end}}
110+
97111
### SQL_SCHEMA
98112
99113
The [`SQL_SCHEMA`]({% link {{ page.version.version }}/logging.md %}#sql_schema) channel logs changes to the SQL logical schema resulting from DDL operations.

src/current/v25.2/ui-hot-ranges-page.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,27 @@ When optimizing or troubleshooting statement performance, this page can help you
1515

1616
To view this page, [access the DB Console]({% link {{ page.version.version }}/ui-overview.md %}#db-console-access) and click **Hot Ranges** in the left-hand navigation.
1717

18+
## Select nodes
19+
20+
In the **Select Nodes** filter, choose one or more nodes with high activity, such as high CPU usage, to investigate potential hotspots. Selecting fewer nodes can help identify the hottest ranges more quickly and improve page load time.
21+
22+
Selecting a region, such as `us-east1`, selects all nodes in that region.
23+
24+
In the **Select Nodes** search box, enter numbers to search for specific node IDs. For example, in a cluster with 12 nodes, entering `1` returns checkboxes for node IDs `n1`, `n10`, `n11`, and `n12`.
25+
26+
Click **Apply** to view the [hot ranges list](#hot-ranges-list) for the selected nodes.
27+
1828
## Filter hot ranges
1929

20-
Use the **Filter** menu to filter the [hot ranges list](#hot-ranges-list) on any combination of: node ID, store ID, database, table, index, or locality.
30+
After [selecting nodes](#select-nodes), use the **Filter** menu to filter the [hot ranges list](#hot-ranges-list). You can choose to view all hot ranges across a specific table, index, store ID, and one or more databases.
31+
32+
In the **Databases** dropdown list, you can choose to filter by specific databases (optional).
33+
34+
In the **Table** and **Index** search boxes, enter the complete name of a table or index to return results. For example, in the [`movr` database]({% link {{ page.version.version }}/movr.md %}), search for the exact index name `users_pkey` to return results. Entering a partial index name, such as `user` or `users` returns no results.
35+
36+
In the **Store ID** search box, enter numbers to search for specific store IDs. For example, in a cluster with 12 stores, entering `1` returns results for store IDs `1`, `10`, `11`, and `12`.
37+
38+
Click **Apply** to view the filtered [hot ranges list](#hot-ranges-list).
2139

2240
## Hot ranges list
2341

src/current/v25.3/load-based-splitting.md

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,42 @@ This benefit is further amplified by [load-based rebalancing]({% link {{ page.ve
7171

7272
## Monitor load-based splitting
7373

74+
### Log message
75+
7476
The [`INFO`]({% link {{ page.version.version }}/logging.md %}#info) log message
7577

7678
~~~
7779
no split key found: ...
7880
~~~
7981

80-
indicates that CockroachDB wants to [split the range]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-splits) due to load, but couldn’t find a key to split at.
82+
indicates that CockroachDB attempted to [split the range]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-splits) due to load, but could not identify a key at which to split.
83+
84+
You can usually ignore this log message. However, if it appears repeatedly, it may indicate a load imbalance in the cluster. A load imbalance might occur if a range cannot be split because it contains a [hotspot]({% link {{ page.version.version }}/understand-hotspots.md %}). For more information about how to reduce hotspots on your cluster, refer to [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
85+
86+
The log message ends with one of the following patterns that describe the observed load:
87+
88+
1. `popular key detected, clear direction detected`
89+
1. `popular key detected, no clear direction`
90+
1. `no popular key, clear direction detected`
91+
1. `no popular key, no clear direction`
8192

82-
Usually this log message can be ignored, unless it repeatedly shows up, which can indicate there is a load imbalance problem in the cluster. If there is a load imbalance problem, it could be because a [hot range]({% link {{ page.version.version }}/ui-hot-ranges-page.md %}) cannot be split (because it's really a [hot key]({% link {{ page.version.version }}/ui-hot-ranges-page.md %}#range-report)).
93+
These patterns may indicate either or both of the following conditions:
8394

84-
You can see how often a split key cannot be found over time by looking at the following [time-series metric]({% link {{ page.version.version }}/monitoring-and-alerting.md %}#prometheus-endpoint):
95+
- `popular key detected` indicates that a significant percentage of reads or writes targets a single row within the range of data.
96+
- `clear direction detected` indicates that accesses within the range progress steadily in one direction, either increasing or decreasing key order, which generally indicates an [index hotspot]({% link {{ page.version.version }}/understand-hotspots.md %}#index-hotspot).
8597

86-
- `kv.loadsplitter.nosplitkey`
98+
### Metrics
8799

88-
This metric is directly related to the log message described above.
100+
These [time-series metrics]({% link {{ page.version.version }}/monitoring-and-alerting.md %}#prometheus-endpoint) correlate with the potential conditions described in the load-based splitting [log message](#log-message). You can monitor how often the load-based splitter fails to find a split key, and whether this is due to a popular key or a clear access direction.
89101

90-
For more information about how to reduce hotspots (including hot ranges) on your cluster, refer to [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
102+
Metric | Description
103+
-------|-------------
104+
`kv.loadsplitter.nosplitkey` | Load-based splitter could not find a split key.
105+
`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.
106+
`kv.loadsplitter.cleardirection` | Load-based splitter observed an access direction greater than 80% decreasing (left) or increasing (right) in the samples.
91107

92108
## See also
93109

94110
- [`SET CLUSTER SETTING`]({% link {{ page.version.version }}/set-cluster-setting.md %})
95111
- [Load-based replica rebalancing]({% link {{ page.version.version }}/architecture/replication-layer.md %}#load-based-replica-rebalancing)
112+
- [Understand hotspots]({% link {{ page.version.version }}/understand-hotspots.md %})

src/current/v25.3/logging-use-cases.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,20 @@ I210517 17:38:20.403619 586 2@util/log/event_log.go:32 ⋮ [n1] 168 ={"Timestamp
9494
`runtime_stats` events are typically used for troubleshooting. To monitor your cluster's health, see [Monitoring and Alerting]({% link {{ page.version.version }}/monitoring-and-alerting.md %}).
9595
{{site.data.alerts.end}}
9696
97+
#### Example: Hot ranges stats
98+
99+
Each node checks for [hot ranges]({% link {{ page.version.version }}/understand-hotspots.md %}#hot-range) every minute. If a single [replica]({% link {{ page.version.version }}/architecture/overview.md %}#replica) exceeds 250 ms of CPU time per second, a [`hot_ranges_stats`]({% link {{ page.version.version }}/eventlog.md %}#hot_ranges_stats) event is recorded. In [virtual clusters]({% link {{ page.version.version }}/cluster-virtualization-overview.md %}) and [CockroachDB Standard and Basic deployments]({% link cockroachcloud/index.md %}), nodes perform this check every 5 minutes at the cluster level. In addition to these conditional logs, `hot_ranges_stats` logs are automatically emitted every 4 hours.
100+
101+
~~~
102+
I250602 04:46:54.752464 2023 2@util/log/event_log.go:39 ⋮ [T1,Vsystem,n5] 31977 ={"Timestamp":1748839613749807000,"EventType":"hot_ranges_stats","RangeID":1115,"Qps":0,"LeaseholderNodeID":5,"WritesPerSecond":0.0012048123820978134,"CPUTimePerSecond":251.30338109510822,"Databases":["kv"],"Tables":["kv"],"Indexes":["kv_pkey"]}
103+
~~~
104+
105+
- Preceding the `=` character is the `crdb-v2` event metadata. See the [reference documentation]({% link {{ page.version.version }}/log-formats.md %}#format-crdb-v2) for details on the fields.
106+
107+
{{site.data.alerts.callout_info}}
108+
`hot_ranges_stats` events are typically used for troubleshooting [hotspots]({% link {{ page.version.version }}/understand-hotspots.md %}).
109+
{{site.data.alerts.end}}
110+
97111
### SQL_SCHEMA
98112
99113
The [`SQL_SCHEMA`]({% link {{ page.version.version }}/logging.md %}#sql_schema) channel logs changes to the SQL logical schema resulting from DDL operations.

src/current/v25.3/ui-hot-ranges-page.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,27 @@ When optimizing or troubleshooting statement performance, this page can help you
1515

1616
To view this page, [access the DB Console]({% link {{ page.version.version }}/ui-overview.md %}#db-console-access) and click **Hot Ranges** in the left-hand navigation.
1717

18+
## Select nodes
19+
20+
In the **Select Nodes** filter, choose one or more nodes with high activity, such as high CPU usage, to investigate potential hotspots. Selecting fewer nodes can help identify the hottest ranges more quickly and improve page load time.
21+
22+
Selecting a region, such as `us-east1`, selects all nodes in that region.
23+
24+
In the **Select Nodes** search box, enter numbers to search for specific node IDs. For example, in a cluster with 12 nodes, entering `1` returns checkboxes for node IDs `n1`, `n10`, `n11`, and `n12`.
25+
26+
Click **Apply** to view the [hot ranges list](#hot-ranges-list) for the selected nodes.
27+
1828
## Filter hot ranges
1929

20-
Use the **Filter** menu to filter the [hot ranges list](#hot-ranges-list) on any combination of: node ID, store ID, database, table, index, or locality.
30+
After [selecting nodes](#select-nodes), use the **Filter** menu to filter the [hot ranges list](#hot-ranges-list). You can choose to view all hot ranges across a specific table, index, store ID, and one or more databases.
31+
32+
In the **Databases** dropdown list, you can choose to filter by specific databases (optional).
33+
34+
In the **Table** and **Index** search boxes, enter the complete name of a table or index to return results. For example, in the [`movr` database]({% link {{ page.version.version }}/movr.md %}), search for the exact index name `users_pkey` to return results. Entering a partial index name, such as `user` or `users` returns no results.
35+
36+
In the **Store ID** search box, enter numbers to search for specific store IDs. For example, in a cluster with 12 stores, entering `1` returns results for store IDs `1`, `10`, `11`, and `12`.
37+
38+
Click **Apply** to view the filtered [hot ranges list](#hot-ranges-list).
2139

2240
## Hot ranges list
2341

0 commit comments

Comments
 (0)