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: tiflash/use-tiflash.md
+29-19Lines changed: 29 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,10 @@ You can either use TiDB to read TiFlash replicas for medium-scale analytical pro
13
13
-[Use TiDB to read TiFlash replicas](#use-tidb-to-read-tiflash-replicas)
14
14
-[Use TiSpark to read TiFlash replicas](#use-tispark-to-read-tiflash-replicas)
15
15
16
+
> **Note:**
17
+
>
18
+
> If you [use TiDB to read TiFlash replicas](#use-tidb-to-read-tiflash-replicas) in a transaction that contains any write operation (for example, `SELECT ... FOR UPDATE` followed by `UPDATE ...`), currently the behavior is undefined. This restriction will be removed in later versions.
19
+
16
20
## Create TiFlash replicas for tables
17
21
18
22
After TiFlash is connected to the TiKV cluster, data replication by default does not begin. You can send a DDL statement to TiDB through a MySQL client to create a TiFlash replica for a specific table:
@@ -59,8 +63,6 @@ ALTER TABLE `tpch50`.`lineitem` SET TIFLASH REPLICA 0
59
63
60
64
* It is recommended that you do not replicate more than 1,000 tables because this lowers the PD scheduling performance. This limit will be removed in later versions.
61
65
62
-
* TiFlash reserves the `system` database. You cannot create TiFlash replicas for the table in the database named `system`in TiDB. If you forcibly create such TiFlash replica, the result will be an undefined behavior (a temporary restriction).
63
-
64
66
## Check the replication progress
65
67
66
68
You can check the status of the TiFlash replicas of a specific table using the following statement. The table is specified using the `WHERE` clause. If you remove the `WHERE` clause, you will check the replica status of all tables.
@@ -119,11 +121,20 @@ explain analyze select count(*) from test.t;
119
121
120
122
`cop[tiflash]` means that the task will be sent to TiFlash for processing. If you have not selected a TiFlash replica, you can try to update the statistics using the `analyze table` statement, and then check the result using the `explain analyze` statement.
121
123
122
-
Note that if a table has only a single TiFlash replica and the related node cannot provide service, queries in the CBO mode will repeatedly retry. In this situation, you need to specify the engine or use the manual hint to read data from TiKV.
124
+
Note that if a table has only a single TiFlash replica and the related node cannot provide service, queries in the CBO mode will repeatedly retry. In this situation, you need to specify the engine or use the manual hint to read data from the TiKV replica.
123
125
124
126
### Engine isolation
125
127
126
-
Engine isolation is to specify that all queries use a replica of the specified engine by configuring the corresponding variable. The optional engines are `tikv` and `tiflash`, with the following two configuration levels:
128
+
Engine isolation is to specify that all queries use a replica of the specified engine by configuring the corresponding variable. The optional engines are "tikv", "tidb" (indicates the internal memory table area of TiDB, which stores some TiDB system tables and cannot be actively used by users), and "tiflash", with the following two configuration levels:
129
+
130
+
* TiDB instance-level, namely, INSTANCE level. Add the following configuration item in the TiDB configuration file:
131
+
132
+
```
133
+
[isolation-read]
134
+
engines = ["tikv", "tidb", "tiflash"]
135
+
```
136
+
137
+
**The INSTANCE-level default configuration is `["tikv", "tidb", "tiflash"]`.**
127
138
128
139
* SESSION level. Use the following statement to configure:
129
140
@@ -141,24 +152,19 @@ Engine isolation is to specify that all queries use a replica of the specified e
141
152
set SESSION tidb_isolation_read_engines = "engine list separated by commas";
142
153
```
143
154
144
-
The default configuration of the SESSION level inherits fromTiDB configuration of the INSTANCE level.
155
+
The default configuration of the SESSION level inherits from the configuration of the TiDB INSTANCE level.
145
156
146
-
* TiDB instance-level, namely, INSTANCE level. This level overlaps with the SESSION level. For example, if you have configured "tikv, tiflash"in the SESSION level and"tikv"in the INSTANCE level, only TiKV is read.
157
+
The final engine configuration is the session-level configuration, that is, the session-level configuration overrides the instance-level configuration. For example, if you have configured "tikv" in the INSTANCE level and "tiflash" in the SESSION level, then the TiFlash replicas are read. If the final engine configuration is "tikv" and "tiflash", then the TiKV and TiFlash replicas are both read, and the optimizer automatically selects a better engine to execute.
147
158
148
-
Add the following configuration item in the TiDB configuration file:
149
-
150
-
```
151
-
[isolation-read]
152
-
engines = ["tikv", "tiflash"]
153
-
```
154
-
155
-
The INSTANCE-level default configuration is `["tikv", "tiflash"]`.
159
+
> **Note:**
160
+
>
161
+
> Because TiDB Dashboard and other components need to read some system tables stored in the TiDB memory table area, it is recommended to always add the "tidb" engine to the instance-level engine configuration.
156
162
157
-
When the engine is configured as"tikv, tiflash", it can read both TiKV and TiFlash replicas at the same time, and the optimizer automatically chooses to read which one. After the engine is specified, if the table in the query does not have a corresponding engine replica, an error is reported indicating that the table does not have the engine replica. Because the TiKV replica always exist, so the only situation is that the engine is configured as`tiflash` but the TiFlash replica does not exist.
163
+
If the queried table does not have a replica of the specified engine (for example, the engine is configured as "tiflash" but the table does not have a TiFlash replica), the query returns an error.
158
164
159
165
### Manual hint
160
166
161
-
Manual hint can force TiDB to use TiFlash replicas for specific table(s). The priority of manual hint is lower than that of engine isolation. If the engine specified in hint is not in the engine list, a warning is returned. Here is an example of using the manual hint:
167
+
Manual hint can force TiDB to use specified replicas for specific table(s) on the premise of satisfying engine isolation. Here is an example of using the manual hint:
162
168
163
169
{{< copyable "sql" >}}
164
170
@@ -174,14 +180,18 @@ If you set an alias to a table in a query statement, you must use the alias in t
174
180
select/*+ read_from_storage(tiflash[alias_a,alias_b]) */ ... from table_name_1 as alias_a, table_name_2 as alias_b wherealias_a.column_1=alias_b.column_2;
175
181
```
176
182
177
-
For hint syntax details, refer to [READ_FROM_STORAGE](/optimizer-hints.md#read_from_storagetiflasht1_name--tl_name--tikvt2_name--tl_name-).
183
+
In the above statements, `tiflash[]` prompts the optimizer to read the TiFlash replicas. You can also use `tikv[]` to prompt the optimizer to read the TiKV replicas as needed. For hint syntax details, refer to [READ_FROM_STORAGE](/optimizer-hints.md#read_from_storagetiflasht1_name--tl_name--tikvt2_name--tl_name-).
178
184
179
-
Engine isolation has higher priority over CBO andhint, and hint has higher priority over the cost estimation, which means that the cost estimation only selects the replica of the specified engine.
185
+
If the table specified by a hint does not have a replica of the specified engine, the hint is ignored and a warning is reported. In addition, a hint only takes effect on the premise of engine isolation. If the engine specified in a hint is not in the engine isolation list, the hint is also ignored and a warning is reported.
180
186
181
187
> **Note:**
182
188
>
183
189
> The MySQL client of 5.7.7 or earlier versions clears optimizer hints by default. To use the hint syntax in these early versions, start the client with the `--comments` option, for example, `mysql -h 127.0.0.1 -P 4000 -uroot --comments`.
184
190
191
+
### The relationship of smart selection, engine isolation, and manual hint
192
+
193
+
In the above three ways of reading TiFlash replicas, engine isolation specifies the overall range of available replicas of engines; within this range, manual hint provides statement-level and table-level engine selection that is more fine-grained; finally, CBO makes the decision and selects a replica of an engine based on cost estimation within the specified engine list.
194
+
185
195
## Use TiSpark to read TiFlash replicas
186
196
187
197
Currently, you can use TiSpark to read TiFlash replicas in a method similar to the engine isolation in TiDB. This method is to configure the `spark.tispark.use.tiflash` parameter to `true` (or `false`).
@@ -208,7 +218,7 @@ You can configure this parameter in either of the following ways:
208
218
209
219
> **Note:**
210
220
>
211
-
>The feature that enables TiFlash to support the new framework for collationsin TiDB is indevelopment. Currently, if you enable the [new framework for collations](/character-set-and-collation.md#new-framework-for-collations) in TiDB, none of the expressions can be pushed down. This restriction will be removed in later versions.
221
+
> Before v4.0.2, TiDB does not support the new framework for collations, so in those previous versions, if you enable the [new framework for collations](/character-set-and-collation.md#new-framework-for-collations), none of the expressions can be pushed down. This restriction is removed in v4.0.2 and later versions.
212
222
213
223
TiFlash mainly supports predicate and aggregate push-down calculations. Push-down calculations can help TiDB perform distributed acceleration. Currently, table joins and `DISTINCT COUNT` are not the supported calculation types, which will be optimized in later versions.
0 commit comments