You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/relational-databases/performance/intelligent-query-processing.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -111,13 +111,13 @@ For some hybrid transactional-analytical workloads, the overhead on a workload's
111
111
### Workloads that might benefit from batch mode on rowstore
112
112
113
113
The following workloads might benefit from batch mode on rowstore:
114
-
1. A significant part of the workload consists of analytical queries. Usually, these queries have operators like joins or aggregates that process hundreds of thousands of rows or more, **and**
115
-
2. The workload is CPU bound. If the bottleneck is I/O, we still recommend that you consider a columnstore index, if possible, **and**
116
-
3. Creating a columnstore index adds too much overhead to the transactional part of your workload, **or**
117
-
4. Creating a columnstore index isn't feasible because your application depends on a feature that's not yet supported with columnstore indexes.
114
+
* A significant part of the workload consists of analytical queries. Usually, these queries have operators like joins or aggregates that process hundreds of thousands of rows or more, **and**
115
+
* The workload is CPU bound. If the bottleneck is I/O, we still recommend that you consider a columnstore index, if possible, **and**
116
+
* Creating a columnstore index adds too much overhead to the transactional part of your workload, **or**
117
+
* Creating a columnstore index isn't feasible because your application depends on a feature that's not yet supported with columnstore indexes.
118
118
119
119
> [!NOTE]
120
-
> Batch mode on rowstore helps only by reducing CPU consumption. If your bottleneck is I/O-related, and data isn't already cached, **cold cache**, batch mode on rowstore won't improve elapsed time. Similarly, if there isn't enough memory on the machine to cache all the data, a performance improvement is unlikely.
120
+
> Batch mode on rowstore helps only by reducing CPU consumption. If your bottleneck is I/Orelated, and data isn't already cached, **cold cache**, batch mode on rowstore won't improve elapsed time. Similarly, if there isn't enough memory on the machine to cache all the data, a performance improvement is unlikely.
121
121
122
122
### What changes with batch mode on rowstore?
123
123
@@ -127,17 +127,17 @@ Even if a query doesn't involve any table with a columnstore index, the query pr
127
127
1. An initial check of table sizes, operators used, and estimated cardinalities in the input query.
128
128
2. Additional checkpoints, as the optimizer discovers new, cheaper plans for the query. If these alternative plans don't make significant use of batch mode, the optimizer stops exploring batch mode alternatives.
129
129
130
-
If batch mode on rowstore is used, in the query run plan, you see the actual run mode as **batch mode**. It's used by the scan operator for on-disk heaps and B-tree indexes. This batch mode scan can evaluate batch mode bitmap filters. You might also see other batch mode operators in the plan. Examples are hash joins, hash-based aggregates, sorts, window aggregates, filters, concatenation, and compute scalar operators.
130
+
If batch mode on rowstore is used, you see the actual run mode as **batch mode** in the query run plan. The scan operator uses batch mode for on-disk heaps and B-tree indexes. This batch mode scan can evaluate batch mode bitmap filters. You might also see other batch mode operators in the plan. Examples are hash joins, hash-based aggregates, sorts, window aggregates, filters, concatenation, and compute scalar operators.
131
131
132
132
### Remarks
133
133
134
-
1. Query plans don't always use batch mode. The query optimizer might decide that batch mode isn't beneficial for the query.
135
-
2. The query optimizer's search space is changing. So if you get a row mode plan, it might not be the same as the plan you get in a lower compatibility level. And if you get a batch mode plan, it might not be the same as the plan you get with a columnstore index.
136
-
3. Plans might also change for queries that mix columnstore and rowstore indexes because of the new batch mode rowstore scan.
137
-
4. There are current limitations for the new batch mode on rowstore scan:
134
+
* Query plans don't always use batch mode. The query optimizer might decide that batch mode isn't beneficial for the query.
135
+
* The query optimizer's search space is changing. So if you get a row mode plan, it might not be the same as the plan you get in a lower compatibility level. And if you get a batch mode plan, it might not be the same as the plan you get with a columnstore index.
136
+
* Plans might also change for queries that mix columnstore and rowstore indexes because of the new batch mode rowstore scan.
137
+
* There are current limitations for the new batch mode on rowstore scan:
138
138
* It won't kick in for in-memory OLTP tables or for any index other than on-disk heaps and B-trees.
139
139
* It also won't kick in if a large object (LOB) column is fetched or filtered. This limitation includes sparse column sets and XML columns.
140
-
5. There are queries that batch mode isn't used for even with columnstore indexes. Examples are queries that involve cursors. These same exclusions also extend to batch mode on rowstore.
140
+
* There are queries that batch mode isn't used for even with columnstore indexes. Examples are queries that involve cursors. These same exclusions also extend to batch mode on rowstore.
0 commit comments