diff --git a/TOC.md b/TOC.md
index 809d639762f97..c4116f291de93 100644
--- a/TOC.md
+++ b/TOC.md
@@ -672,6 +672,8 @@
- Release Notes
- [All Releases](/releases/release-notes.md)
- [Release Timeline](/releases/release-timeline.md)
+ - v5.4
+ - [5.4.0](/releases/release-5.4.0.md)
- v5.3
- [5.3.0](/releases/release-5.3.0.md)
- v5.2
diff --git a/_index.md b/_index.md
index 0ca603dd913c8..4a9fba50ac97e 100644
--- a/_index.md
+++ b/_index.md
@@ -15,7 +15,7 @@ Designed for the cloud, TiDB provides flexible scalability, reliability and secu
- [TiDB Introduction](/overview.md)
- [Basic Features](/basic-features.md)
-- [TiDB 5.3 Release Notes](/releases/release-5.3.0.md)
+- [TiDB 5.4 Release Notes](/releases/release-5.4.0.md)
- [TiDB Release Timeline](/releases/release-timeline.md)
- [Compatibility with MySQL](/mysql-compatibility.md)
- [Usage Limitations](/tidb-limitations.md)
diff --git a/basic-features.md b/basic-features.md
index 11c87251820a5..d243f5088e486 100644
--- a/basic-features.md
+++ b/basic-features.md
@@ -9,168 +9,169 @@ This document lists the features supported in each TiDB version. Note that suppo
## Data types, functions, and operators
-| Data types, functions, and operators | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Numeric types](/data-type-numeric.md) | Y | Y | Y | Y | Y |
-| [Date and time types](/data-type-date-and-time.md) | Y | Y | Y | Y | Y |
-| [String types](/data-type-string.md) | Y | Y | Y | Y | Y |
-| [JSON type](/data-type-json.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Control flow functions](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y |
-| [String functions](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y |
-| [Numeric functions and operators](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y |
-| [Date and time functions](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y |
-| [Bit functions and operators](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y |
-| [Cast functions and operators](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y |
-| [Encryption and compression functions](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y |
-| [Information functions](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y |
-| [JSON functions](/functions-and-operators/json-functions.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Aggregation functions](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y |
-| [Window functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y |
-| [Miscellaneous functions](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y |
-| [Operators](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y |
-| [Character sets and collations](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y |
+| Data types, functions, and operators | **5.4** | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| [Numeric types](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y |
+| [Date and time types](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y |
+| [String types](/data-type-string.md) | Y | Y | Y | Y | Y | Y |
+| [JSON type](/data-type-json.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Control flow functions](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y |
+| [String functions](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Numeric functions and operators](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y |
+| [Date and time functions](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Bit functions and operators](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y |
+| [Cast functions and operators](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y |
+| [Encryption and compression functions](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Information functions](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y |
+| [JSON functions](/functions-and-operators/json-functions.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Aggregation functions](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Window functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Miscellaneous functions](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Operators](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y |
+| [Character sets and collations](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y |
## Indexing and constraints
-| Indexing and constraints | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Expression indexes](/sql-statements/sql-statement-create-index.md#expression-index) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Columnar storage (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y |
-| [RocksDB engine](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y |
-| [Titan plugin](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y |
-| [Invisible indexes](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | N |
-| [Composite `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y |
-| [Unique indexes](/constraints.md) | Y | Y | Y | Y | Y |
-| [Clustered index on integer `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y |
-| [Clustered index on composite or non-integer key](/constraints.md) | Y | Y | Y | Y | N |
+| Indexing and constraints | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| [Expression indexes](/sql-statements/sql-statement-create-index.md#expression-index) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Columnar storage (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y |
+| [RocksDB engine](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y |
+| [Titan plugin](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y |
+| [Invisible indexes](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | N |
+| [Composite `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y | Y |
+| [Unique indexes](/constraints.md) | Y | Y | Y | Y | Y | Y |
+| [Clustered index on integer `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y | Y |
+| [Clustered index on composite or non-integer key](/constraints.md) | Y | Y | Y | Y | Y | N |
## SQL statements
-| **SQL statements** [^2] | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| Basic `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `REPLACE` | Y | Y | Y | Y | Y |
-| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y |
-| `LOAD DATA INFILE` | Y | Y | Y | Y | Y |
-| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y |
-| `INNER JOIN`, `LEFT\|RIGHT [OUTER] JOIN` | Y | Y | Y | Y | Y |
-| `UNION`, `UNION ALL` | Y | Y | Y | Y | Y |
-| [`EXCEPT` and `INTERSECT` operators](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | N |
-| `GROUP BY`, `ORDER BY` | Y | Y | Y | Y | Y |
-| [Window Functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y |
-| [Common Table Expressions (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | N | N |
-| `START TRANSACTION`, `COMMIT`, `ROLLBACK` | Y | Y | Y | Y | Y |
-| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y |
-| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y |
-| [User-defined variables](/user-defined-variables.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
+| **SQL statements** [^2] | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| Basic `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `REPLACE` | Y | Y | Y | Y | Y | Y |
+| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y |
+| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y |
+| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y |
+| `INNER JOIN`, `LEFT\|RIGHT [OUTER] JOIN` | Y | Y | Y | Y | Y | Y |
+| `UNION`, `UNION ALL` | Y | Y | Y | Y | Y | Y |
+| [`EXCEPT` and `INTERSECT` operators](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | N |
+| `GROUP BY`, `ORDER BY` | Y | Y | Y | Y | Y | Y |
+| [Window Functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y |
+| [Common Table Expressions (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | N | N |
+| `START TRANSACTION`, `COMMIT`, `ROLLBACK` | Y | Y | Y | Y | Y | Y |
+| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y |
+| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y |
+| [User-defined variables](/user-defined-variables.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
## Advanced SQL features
-| **Advanced SQL features** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Prepared statement cache](/sql-prepare-plan-cache.md) | Y | Experimental | Experimental | Experimental | Experimental |
-| [SQL plan management (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y |
-| [Coprocessor cache](/coprocessor-cache.md) | Y | Y | Y | Y | Experimental |
-| [Stale Read](/stale-read.md) | Y | Y | Y | N | N |
-| [Follower reads](/follower-read.md) | Y | Y | Y | Y | Y |
-| [Read historical data (tidb_snapshot)](/read-historical-data.md) | Y | Y | Y | Y | Y |
-| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y |
-| [MPP Exection Engine](/explain-mpp.md) | Y | Y | Y | Y | N |
-| [Index Merge Join](/explain-index-merge.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Placement Rules in SQL](/placement-rules-in-sql.md) | Experimental | N | N | N | N |
+| **Advanced SQL features** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| [Prepared statement cache](/sql-prepare-plan-cache.md) | Y | Y | Experimental | Experimental | Experimental | Experimental |
+| [SQL plan management (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y |
+| [Coprocessor cache](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Experimental |
+| [Stale Read](/stale-read.md) | Y | Y | Y | Y | N | N |
+| [Follower reads](/follower-read.md) | Y | Y | Y | Y | Y | Y |
+| [Read historical data (tidb_snapshot)](/read-historical-data.md) | Y | Y | Y | Y | Y | Y |
+| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y |
+| [MPP Exection Engine](/explain-mpp.md) | Y | Y | Y | Y | Y | N |
+| [Index Merge Join](/explain-index-merge.md) | Y | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Placement Rules in SQL](/placement-rules-in-sql.md) | Experimental | Experimental | N | N | N | N |
## Data definition language (DDL)
-| **Data definition language (DDL)** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| Basic `CREATE`, `DROP`, `ALTER`, `RENAME`, `TRUNCATE` | Y | Y | Y | Y | Y |
-| [Generated columns](/generated-columns.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Views](/views.md) | Y | Y | Y | Y | Y |
-| [Sequences](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y |
-| [Auto increment](/auto-increment.md) | Y | Y | Y | Y | Y |
-| [Auto random](/auto-random.md) | Y | Y | Y | Y | Y |
-| [DDL algorithm assertions](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y |
-| Multi schema change: add column(s) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Change column type](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | N | N |
-| [Temporary tables](/temporary-tables.md) | Y | N | N | N | N |
+| **Data definition language (DDL)** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| Basic `CREATE`, `DROP`, `ALTER`, `RENAME`, `TRUNCATE` | Y | Y | Y | Y | Y | Y |
+| [Generated columns](/generated-columns.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Views](/views.md) | Y | Y | Y | Y | Y | Y |
+| [Sequences](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y |
+| [Auto increment](/auto-increment.md) | Y | Y | Y | Y | Y | Y |
+| [Auto random](/auto-random.md) | Y | Y | Y | Y | Y | Y |
+| [DDL algorithm assertions](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y |
+| Multi schema change: add column(s) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Change column type](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | N | N |
+| [Temporary tables](/temporary-tables.md) | Y | Y | N | N | N | N |
## Transactions
-| **Transactions** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Async commit](/system-variables.md#tidb_enable_async_commit-new-in-v50) | Y | Y | Y | Y | N |
-| [1PC](/system-variables.md#tidb_enable_1pc-new-in-v50) | Y | Y | Y | Y | N |
-| [Large transactions (10GB)](/transaction-overview.md#transaction-size-limit) | Y | Y | Y | Y | Y |
-| [Pessimistic transactions](/pessimistic-transaction.md) | Y | Y | Y | Y | Y |
-| [Optimistic transactions](/optimistic-transaction.md) | Y | Y | Y | Y | Y |
-| [Repeatable-read isolation (snapshot isolation)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y |
-| [Read-committed isolation](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y |
+| **Transactions** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ---- | :-----: | :-----: | :-----: | :-----: | :-----: |
+| [Async commit](/system-variables.md#tidb_enable_async_commit-new-in-v50) | Y | Y | Y | Y | Y | N |
+| [1PC](/system-variables.md#tidb_enable_1pc-new-in-v50) | Y | Y | Y | Y | Y | N |
+| [Large transactions (10GB)](/transaction-overview.md#transaction-size-limit) | Y | Y | Y | Y | Y | Y |
+| [Pessimistic transactions](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y |
+| [Optimistic transactions](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y |
+| [Repeatable-read isolation (snapshot isolation)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y |
+| [Read-committed isolation](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y |
## Partitioning
-| **Partitioning** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Range partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y |
-| [Hash partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y |
-| [List partitioning](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | N |
-| [List COLUMNS partitioning](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | N |
-| [`EXCHANGE PARTITION`](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | N |
-| [Dynamic Pruning](/partitioned-table.md#dynamic-pruning-mode) | Experimental | Experimental | Experimental | N | N |
+| **Partitioning** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :-----: |
+| [Range partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y | Y |
+| [Hash partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y | Y |
+| [List partitioning](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | Experimental | N |
+| [List COLUMNS partitioning](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | Experimental | N |
+| [`EXCHANGE PARTITION`](/partitioned-table.md) | Experimental | Experimental | Experimental | Experimental | Experimental | N |
+| [Dynamic Pruning](/partitioned-table.md#dynamic-pruning-mode) | Experimental | Experimental | Experimental | Experimental | N | N |
## Statistics
-| **Statistics** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [CMSketch](/statistics.md) | Deprecated | Deprecated | Deprecated | Deprecated | Y |
-| [Histograms](/statistics.md) | Y | Y | Y | Y | Y |
-| [Extended statistics (multiple columns)](/statistics.md) | Experimental | Experimental | Experimental | Experimental | N |
-| [Statistics Feedback](/statistics.md#automatic-update) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Fast Analyze](/system-variables.md#tidb_enable_fast_analyze) | Experimental | Experimental | Experimental | Experimental | Experimental |
+| **Statistics** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| [CMSketch](/statistics.md) | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Y |
+| [Histograms](/statistics.md) | Y | Y | Y | Y | Y | Y |
+| [Extended statistics (multiple columns)](/statistics.md) | Experimental | Experimental | Experimental | Experimental | Experimental | N |
+| [Statistics Feedback](/statistics.md#automatic-update) | Deprecated | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Fast Analyze](/system-variables.md#tidb_enable_fast_analyze) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
## Security
-| **Security** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Transparent layer security (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y |
-| [Encryption at rest (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y |
-| [Role-based authentication (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y |
-| [Certificate-based authentication](/certificate-authentication.md) | Y | Y | Y | Y | Y |
-| `caching_sha2_password` authentication | Y | Y | N | N | N |
-| [MySQL compatible `GRANT` system](/privilege-management.md) | Y | Y | Y | Y | Y |
-| [Dynamic Privileges](/privilege-management.md#dynamic-privileges) | Y | Y | Y | N | N |
-| [Security Enhanced Mode](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | N | N |
-| [Redacted Log Files](/log-redaction.md) | Y | Y | Y | Y | N |
+| **Security** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ---- | :-----: | :-----: | :-----: | :-----: | :-----: |
+| [Transparent layer security (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y |
+| [Encryption at rest (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y |
+| [Role-based authentication (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y |
+| [Certificate-based authentication](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y |
+| `caching_sha2_password` authentication | Y | Y | Y | N | N | N |
+| [MySQL compatible `GRANT` system](/privilege-management.md) | Y | Y | Y | Y | Y | Y |
+| [Dynamic Privileges](/privilege-management.md#dynamic-privileges) | Y | Y | Y | Y | N | N |
+| [Security Enhanced Mode](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | N | N |
+| [Redacted Log Files](/log-redaction.md) | Y | Y | Y | Y | Y | N |
## Data import and export
-| **Data import and export** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [Fast Importer (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y |
-| mydumper logical dumper | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated |
-| [Dumpling logical dumper](/dumpling-overview.md) | Y | Y | Y | Y | Y |
-| [Transactional `LOAD DATA`](/sql-statements/sql-statement-load-data.md) | Y | Y | Y | Y | N [^3] |
-| [Database migration toolkit (DM)](/migration-overview.md) | Y | Y | Y | Y | Y |
-| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y |
-| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y |
+| **Data import and export** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|
+| [Fast Importer (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y |
+| mydumper logical dumper | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated |
+| [Dumpling logical dumper](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y |
+| [Transactional `LOAD DATA`](/sql-statements/sql-statement-load-data.md) | Y | Y | Y | Y | Y | N [^3] |
+| [Database migration toolkit (DM)](/migration-overview.md) | Y | Y | Y | Y | Y | Y |
+| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y |
+| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y |
## Management, observability, and tools
-| **Management, observability, and tools** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
-|----------------------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:|:------------:|:------------:|
-| [TiDB Dashboard](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y |
-| [SQL diagnostics](/information-schema/information-schema-sql-diagnostics.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y |
-| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y |
-| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y |
-| [Slow query log](/identify-slow-queries.md) | Y | Y | Y | Y | Y |
-| [TiUP deployment](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y |
-| Ansible deployment | N | N | N | N | Deprecated |
-| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/) | Y | Y | Y | Y | Y |
-| [Built-in physical backup](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y |
-| [Global Kill](/sql-statements/sql-statement-kill.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Experimental | Experimental | Experimental |
-| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [`SET CONFIG`](/dynamic-config.md) | Experimental | Experimental | Experimental | Experimental | Experimental |
-| [Continuous Profiling](/dashboard/continuous-profiling.md) | Experimental | N | N | N | N |
+| **Management, observability, and tools** | **5.4** | **5.3** | **5.2** | **5.1** | **5.0** | **4.0** |
+| ------------------------------------------------------------ | ------------ | :----------: | :----------: | :----------: | :----------: | :----------: |
+| [TiDB Dashboard](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y |
+| [SQL diagnostics](/information-schema/information-schema-sql-diagnostics.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y |
+| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y |
+| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y |
+| [Slow query log](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y |
+| [TiUP deployment](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y |
+| Ansible deployment | N | N | N | N | N | Deprecated |
+| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/) | Y | Y | Y | Y | Y | Y |
+| [Built-in physical backup](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y |
+| [Global Kill](/sql-statements/sql-statement-kill.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Experimental | Experimental | Experimental |
+| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [`SET CONFIG`](/dynamic-config.md) | Experimental | Experimental | Experimental | Experimental | Experimental | Experimental |
+| [Continuous Profiling](/dashboard/continuous-profiling.md) | Experimental | Experimental | N | N | N | N |
+| [Top SQL](/dashboard/top-sql.md) | Experimental | N | N | N | N | N |
[^1]: TiDB incorrectly treats latin1 as a subset of utf8. See [TiDB #18955](https://github.com/pingcap/tidb/issues/18955) for more details.
diff --git a/experimental-features.md b/experimental-features.md
index cb457c7a7fefe..87088887807a2 100644
--- a/experimental-features.md
+++ b/experimental-features.md
@@ -7,6 +7,13 @@ summary: Learn the experimental features of TiDB.
This document introduces the experimental features of TiDB in different versions. It is **NOT** recommended to use these features in the production environment.
+## Performance
+
++ [Automatically scale TiFlash thread pool](/tiflash/tiflash-configuration.md). (Introduced in v5.4)
++ [Raft Engine](/tikv-configuration-file.md#raft-engine). (Introduced in v5.4)
++ [Support collecting statistics for `PREDICATE COLUMNS`](/statistics.md#collect-statistics-on-some-columns) (Introduced in v5.4)
++ [Support synchronously loading statistics](/statistics.md#load-statistics). (Introduced in v5.4)
+
## Stability
+ TiFlash limits the use of I/O resources by compressing or sorting data, mitigating the contention for I/O resources between background tasks and front-end data reading and writing (Introduced in v5.0)
@@ -46,10 +53,6 @@ This document introduces the experimental features of TiDB in different versions
+ [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge-experimental) (Introduced in v4.0)
+ TiFlash supports distributing the new data of the storage engine on multiple hard drives to share the I/O pressure. (Introduced in v4.0)
-## Data migration
-
-+ [DM OpenAPI](/dm/dm-open-api.md) (Introduced in v5.3)
-
## Backup and restoration
+ [Back up Raw KV](/br/use-br-command-line-tool.md#back-up-raw-kv-experimental-feature) (Introduced in v3.1)
@@ -63,4 +66,5 @@ This document introduces the experimental features of TiDB in different versions
+ [SQL diagnostics](/information-schema/information-schema-sql-diagnostics.md) (Introduced in v4.0)
+ [Cluster diagnostics](/dashboard/dashboard-diagnostics-access.md) (Introduced in v4.0)
+ [Continuous profiling](/dashboard/continuous-profiling.md) (Introduced in v5.3)
-+ [Online Unsafe Recovery](/online-unsafe-recovery.md) (Introduced in v5.3)
\ No newline at end of file
++ [Online Unsafe Recovery](/online-unsafe-recovery.md) (Introduced in v5.3)
++ [Top SQL](/dashboard/top-sql.md) (Introduced in v5.4)
diff --git a/pd-control.md b/pd-control.md
index 909d3e8e3497e..d9c909ce465c8 100644
--- a/pd-control.md
+++ b/pd-control.md
@@ -27,7 +27,7 @@ If you want to download the latest version of `pd-ctl`, directly download the Ti
> **Note:**
>
-> `{version}` indicates the version number of TiDB. For example, if `{version}` is `v5.3.0`, the package download link is `https://download.pingcap.org/tidb-v5.3.0-linux-amd64.tar.gz`.
+> `{version}` indicates the version number of TiDB. For example, if `{version}` is `v5.4.0`, the package download link is `https://download.pingcap.org/tidb-v5.4.0-linux-amd64.tar.gz`.
### Compile from source code
diff --git a/pd-recover.md b/pd-recover.md
index 920778bbb0173..355430ac733d1 100644
--- a/pd-recover.md
+++ b/pd-recover.md
@@ -26,7 +26,7 @@ To download the latest version of PD Recover, directly download the TiDB package
> **Note:**
>
-> `{version}` indicates the version number of TiDB. For example, if `{version}` is `v5.3.0`, the package download link is `https://download.pingcap.org/tidb-v5.3.0-linux-amd64.tar.gz`.
+> `{version}` indicates the version number of TiDB. For example, if `{version}` is `v5.4.0`, the package download link is `https://download.pingcap.org/tidb-v5.4.0-linux-amd64.tar.gz`.
## Quick Start
diff --git a/releases/release-5.4.0.md b/releases/release-5.4.0.md
new file mode 100644
index 0000000000000..0f61c31655175
--- /dev/null
+++ b/releases/release-5.4.0.md
@@ -0,0 +1,436 @@
+---
+title: TiDB 5.4 Release Notes
+---
+
+# TiDB 5.4 Release Notes
+
+Release date:February 15, 2022
+
+TiDB version: 5.4.0
+
+In v5.4, the key new features or improvements are as follows:
+
+- Support the GBK character set
+- Support using Index Merge to access data, which merges the filtering results of indexes on multiple columns
+- Support reading stale data using a session variable
+- Support persisting the configuration for collecting statistics
+- Support using Raft Engine as the log storage engine of TiKV (experimental)
+- Optimize the impact of backup on the cluster
+- Support using Azure Blob storage as the backup storage
+- Continuously improve the stability and performance of TiFlash and the MPP engine
+- Add a switch in TiDB Lightning to determine whether to allow importing to an existing table with data
+- Optimize the Continuous Profiling feature (experimental)
+- TiSpark supports user identification and authentication
+
+## Compatibility changes
+
+> **Note:**
+>
+> When upgrading from an earlier TiDB version to v5.4.0, if you want to know the compatibility change notes of all intermediate versions, you can check the [Release Notes](/releases/release-notes.md) of the corresponding version.
+
+### System variables
+
+| Variable name | Change type | Description |
+| :---------- | :----------- | :----------- |
+| [`tidb_enable_column_tracking`](/system-variables.md#tidb_enable_column_tracking-new-in-v540) | Newly added | Controls whether to allow TiDB to collect `PREDICATE COLUMNS`. The default value is `OFF`. |
+| [`tidb_enable_paging`](/system-variables.md#tidb_enable_paging-new-in-v540) | Newly added | Controls whether to use the method of paging to send coprocessor requests in `IndexLookUp` operator. The default value is `OFF`.
For read queries that use `IndexLookup` and `Limit` and that `Limit` cannot be pushed down to `IndexScan`, there might be high latency for the read queries and high CPU usage for TiKV's `unified read pool`. In such cases, because the `Limit` operator only requires a small set of data, if you set `tidb_enable_paging` to `ON`, TiDB processes less data, which reduces query latency and resource consumption. |
+| [`tidb_enable_top_sql`](/system-variables.md#tidb_enable_top_sql-new-in-v540) | Newly added | Controls whether to enable the Top SQL feature. The default value is `OFF`. |
+| [`tidb_persist_analyze_options`](/system-variables.md#tidb_persist_analyze_options-new-in-v540) | Newly added | Controls whether to enable the [ANALYZE configuration persistence](/statistics.md#persist-analyze-configurations) feature. The default value is `OFF`. |
+| [`tidb_read_staleness`](/system-variables.md#tidb_read_staleness-new-in-v540) | Newly added | Controls the range of historical data that can be read in the current session. The default value is `0`.|
+| [`tidb_regard_null_as_point`](/system-variables.md#tidb_regard_null_as_point-new-in-v540) | Newly added | Controls whether the optimizer can use a query condition including null equivalence as a prefix condition for index access. |
+| [`tidb_stats_load_sync_wait`](/system-variables.md#tidb_stats_load_sync_wait-new-in-v540) | Newly added | Controls whether to enable the synchronously loading statistics feature. The default value `0` means that the feature is disabled and that the statistics is asynchronously loaded. When the feature is enabled, this variable controls the maximum time that SQL optimization can wait for synchronously loading statistics before timeout. |
+| [`tidb_stats_load_pseudo_timeout`](/system-variables.md#tidb_stats_load_pseudo_timeout-new-in-v540) | Newly added | Controls when synchronously loading statistics reaches timeout, whether SQL fails (`OFF`) or falls back to using pseudo statistics (`ON`). The default value is `ON`. |
+| [`tidb_backoff_lock_fast`](/system-variables.md#tidb_backoff_lock_fast) | Modified | The default value is changed from `100` to `10`. |
+| [`tidb_enable_index_merge`](/system-variables.md#tidb_enable_index_merge-new-in-v40) | Modified | The default value is changed from `OFF` to `ON`.