Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecated tidb_enable_table_partition, tidb_enable_list_partition and tidb_enable_global_index #18984

Merged
merged 4 commits into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 4 additions & 17 deletions partitioned-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,11 +316,6 @@ ALTER TABLE table_name LAST PARTITION LESS THAN (<expression>)

### List partitioning

Before creating a List partitioned table, make sure the following system variables are set to their default values of `ON`:

- [`tidb_enable_list_partition`](/system-variables.md#tidb_enable_list_partition-new-in-v50)
- [`tidb_enable_table_partition`](/system-variables.md#tidb_enable_table_partition)

List partitioning is similar to Range partitioning. Unlike Range partitioning, in List partitioning, the partitioning expression values for all rows in each partition are in a given value set. This value set defined for each partition can have any number of values but cannot have duplicate values. You can use the `PARTITION ... VALUES IN (...)` clause to define a value set.

Suppose that you want to create a personnel record table. You can create a table as follows:
Expand Down Expand Up @@ -1480,7 +1475,7 @@ This section discusses the relationship of partitioning keys with primary keys a

> **Note:**
>
> This rule only applies to the scenarios where the [`tidb_enable_global_index`](/system-variables.md#tidb_enable_global_index-new-in-v760) system variable is not enabled. When it is enabled, unique keys in partitioned tables are not required to include all the columns used in the partition expressions. For more information, see [global indexes](#global-indexes).
> This rule can be ignored by using [global indexes](#global-indexes).
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

For example, the following table creation statements are invalid:

Expand Down Expand Up @@ -1560,7 +1555,7 @@ PARTITIONS 4;
```

```
ERROR 1491 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
ERROR 8264 (HY000): Global Index is needed for index 'col1', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption
```

The `CREATE TABLE` statement fails because both `col1` and `col3` are included in the proposed partitioning key, but neither of these columns is part of both of unique keys on the table. After the following modifications, the `CREATE TABLE` statement becomes valid:
Expand Down Expand Up @@ -1686,7 +1681,7 @@ CREATE TABLE t (a varchar(20), b blob,
```

```sql
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
ERROR 8264 (HY000): Global Index is needed for index 'a', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption
```

#### Global indexes
Expand All @@ -1699,15 +1694,13 @@ To address these issues, TiDB introduces the global indexes feature in v8.3.0. A
>
> The global indexes feature is experimental. It is not recommended that you use it in the production environment. This feature might be changed or removed without prior notice. If you find a bug, you can report an [issue](https://github.com/pingcap/tidb/issues) on GitHub.
lilin90 marked this conversation as resolved.
Show resolved Hide resolved

To create a global index for a primary key or unique key that **does not include all the columns used in the partition expressions**, you can enable the [`tidb_enable_global_index`](/system-variables.md#tidb_enable_global_index-new-in-v760) system variable and add the `GLOBAL` keyword in the index definition.
To create a global index for a primary key or unique key that **does not include all the columns used in the partition expressions**, add the `GLOBAL` keyword in the index definition.

> **Note:**
>
> Global indexes affect partition management. `DROP`, `TRUNCATE`, and `REORGANIZE PARTITION` operations also trigger updates to table-level global indexes, meaning that these DDL operations will only return results after the global indexes of the corresponding tables are fully updated.

```sql
SET tidb_enable_global_index = ON;

CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
Expand All @@ -1725,8 +1718,6 @@ In the preceding example, the unique index `uidx12` is a global index, while `ui
Note that a **clustered index** cannot be a global index, as shown in the following example:

```sql
SET tidb_enable_global_index = ON;

CREATE TABLE t2 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
Expand Down Expand Up @@ -1920,10 +1911,6 @@ select * from t;
5 rows in set (0.00 sec)
```

The `tidb_enable_list_partition` environment variable controls whether to enable the partitioned table feature. If this variable is set to `OFF`, the partition information will be ignored when a table is created, and this table will be created as a normal table.

This variable is only used in table creation. After the table is created, modify this variable value takes no effect. For details, see [system variables](/system-variables.md#tidb_enable_list_partition-new-in-v50).

### Dynamic pruning mode

TiDB accesses partitioned tables in either `dynamic` or `static` mode. `dynamic` mode is used by default since v6.3.0. However, dynamic partitioning is effective only after the full table-level statistics, or GlobalStats, are collected. Before GlobalStats are collected, TiDB will use the `static` mode instead. For detailed information about GlobalStats, see [Collect statistics of partitioned tables in dynamic pruning mode](/statistics.md#collect-statistics-of-partitioned-tables-in-dynamic-pruning-mode).
Expand Down
2 changes: 0 additions & 2 deletions placement-rules-in-sql.md
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,6 @@ CREATE PLACEMENT POLICY storageforhistorydata CONSTRAINTS="[+node=history]";
CREATE PLACEMENT POLICY storagefornewdata CONSTRAINTS="[+node=new]";
CREATE PLACEMENT POLICY companystandardpolicy CONSTRAINTS="";

SET tidb_enable_global_index = ON;

CREATE TABLE t1 (id INT, name VARCHAR(50), purchased DATE, UNIQUE INDEX idx(id) GLOBAL)
PLACEMENT POLICY=companystandardpolicy
PARTITION BY RANGE( YEAR(purchased) ) (
Expand Down
16 changes: 5 additions & 11 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -2147,17 +2147,14 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;

### tidb_enable_global_index <span class="version-mark">New in v7.6.0</span>

> **Warning:**
>
> The feature controlled by this variable is experimental. It is not recommended that you use it in the production environment. This feature might be changed or removed without prior notice. If you find a bug, you can report an [issue](https://github.com/pingcap/tidb/issues) on GitHub.

- Scope: SESSION | GLOBAL
- Persists to cluster: Yes
- Applies to hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value): No
- Type: Boolean
- Default value: `OFF`
- Possible values: `OFF`, `ON`
- Default value: `ON`
- This variable controls whether to support creating [global indexes](/partitioned-table.md#global-indexes) for partitioned tables. When this variable is enabled, TiDB allows you to create unique indexes that **do not include all the columns used in the partition expressions** by specifying `GLOBAL` in the index definition.
- This variable is deprecated since v8.4.0. Its value will be fixed to the default value `ON`, that is, [global indexes](/partitioned-table.md#global-indexes) is enabled by default.


### tidb_enable_lazy_cursor_fetch <span class="version-mark">New in v8.3.0</span>

Expand Down Expand Up @@ -2306,6 +2303,7 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- Type: Boolean
- Default value: `ON`
- This variable is used to set whether to enable the `LIST (COLUMNS) TABLE PARTITION` feature.
- This variable is deprecated since v8.4.0. Its value will be fixed to the default value `ON`, that is, [LIST Partitioning](/partitioned-table#list-partitioning) is enabled by default.
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

### tidb_enable_local_txn

Expand Down Expand Up @@ -2711,11 +2709,7 @@ Query OK, 0 rows affected (0.09 sec)
- Applies to hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value): No
- Type: Enumeration
- Default value: `ON`
- Possible values: `OFF`, `ON`, `AUTO`
- This variable is used to set whether to enable the `TABLE PARTITION` feature:
- `ON` indicates enabling Range partitioning, Hash partitioning, and Range column partitioning with one single column.
- `AUTO` functions the same way as `ON` does.
- `OFF` indicates disabling the `TABLE PARTITION` feature. In this case, the syntax that creates a partition table can be executed, but the table created is not a partitioned one.
- This variable is deprecated since v8.4.0. Its value will be fixed to the default value `ON`, that is, [table partitioning](/partitioned-table) is enabled by default.
hfxsd marked this conversation as resolved.
Show resolved Hide resolved
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

### tidb_enable_telemetry <span class="version-mark">New in v4.0.2</span>

Expand Down
Loading