From 07c93e4a408df00fe310afaca11b47d295d1cee9 Mon Sep 17 00:00:00 2001 From: hongyunyan <649330952@qq.com> Date: Mon, 25 Mar 2024 15:44:20 +0800 Subject: [PATCH 1/5] add config --- ticdc/ticdc-changefeed-config.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 64eb617a93c75..09936db047696 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -193,6 +193,12 @@ enable-partition-separator = true # include-commit-ts = false # The encoding method of binary data, which can be 'base64' or 'hex'. The default value is 'base64'. # binary-encoding-method = 'base64' +# Whether to output handle key information. The default value is false. +# This variable is for internal implementation only and setting this variable is not recommended. +# output-handle-key = false +# Whether to output the value before the row data changes. The default value is false. +# After being turned on, the Update event will output two lines of data. The first line is a Delete event, which outputs the data before the change, and the second line is a Insert event, which outputs the changed data. +# output-old-value = false # Starting from v8.0.0, TiCDC supports the Simple message encoding protocol. The following are the configuration parameters for the Simple protocol. # For more information about the protocol, see . From f9967af41dc4afd35978511aca7cc60526149612 Mon Sep 17 00:00:00 2001 From: hongyunyan <649330952@qq.com> Date: Tue, 14 May 2024 10:45:36 +0800 Subject: [PATCH 2/5] update --- .github/pull_request_template.md | 3 +- .github/workflows/ci.yaml | 10 +- .github/workflows/cron.yml | 12 +- .../workflows/ja-full-translation-google.yaml | 6 +- .github/workflows/link-fail-fast.yaml | 2 +- .github/workflows/link.yaml | 2 +- .github/workflows/media.yml | 2 +- .github/workflows/prevent-deletion.yaml | 2 +- .github/workflows/rebase.yml | 2 +- .github/workflows/translation.yaml | 6 +- CONTRIBUTING.md | 2 +- README.md | 7 +- TOC-tidb-cloud.md | 9 +- TOC.md | 23 +- _docHome.md | 2 +- accelerated-table-creation.md | 57 ++ basic-features.md | 414 ++++---- benchmark/benchmark-tidb-using-sysbench.md | 2 +- best-practices-on-public-cloud.md | 2 +- best-practices/readonly-nodes.md | 2 +- binary-package.md | 2 +- br/backup-and-restore-overview.md | 1 + br/backup-and-restore-storages.md | 72 +- br/backup-and-restore-use-cases.md | 12 +- br/br-batch-create-table.md | 2 +- br/br-checkpoint-backup.md | 2 +- br/br-incremental-guide.md | 4 +- br/br-pitr-guide.md | 12 +- br/br-pitr-manual.md | 92 +- br/br-snapshot-guide.md | 29 +- br/br-snapshot-manual.md | 50 +- br/br-use-overview.md | 10 +- br/use-br-command-line-tool.md | 24 +- character-set-and-collation.md | 4 +- check-before-deployment.md | 10 +- choose-index.md | 499 +++++++--- clinic/quick-start-with-clinic.md | 4 +- command-line-flags-for-tidb-configuration.md | 6 + configure-memory-usage.md | 2 +- daily-check.md | 11 +- dashboard/dashboard-profiling.md | 2 + dashboard/dashboard-session-sso.md | 2 +- data-type-default-values.md | 44 +- ddl-introduction.md | 2 +- ddl-v2.md | 56 -- develop/dev-guide-gui-mysql-workbench.md | 13 + develop/dev-guide-insert-data.md | 2 +- develop/dev-guide-prepared-statement.md | 2 +- ...dev-guide-sample-application-aws-lambda.md | 2 +- .../dev-guide-sample-application-java-jdbc.md | 1 + .../dev-guide-sample-application-nextjs.md | 2 +- ...-guide-sample-application-nodejs-mysql2.md | 2 +- ...guide-sample-application-nodejs-mysqljs.md | 2 +- ...guide-sample-application-nodejs-typeorm.md | 2 +- ...de-sample-application-python-sqlalchemy.md | 4 + ...ev-guide-sample-application-ruby-mysql2.md | 2 +- ...dev-guide-sample-application-ruby-rails.md | 2 +- ...v-guide-third-party-tools-compatibility.md | 12 +- develop/dev-guide-timeouts-in-tidb.md | 49 +- .../dev-guide-use-common-table-expression.md | 2 +- dm/deploy-a-dm-cluster-using-tiup-offline.md | 4 +- dm/deploy-a-dm-cluster-using-tiup.md | 2 +- dm/dm-enable-tls.md | 2 +- dm/dm-error-handling.md | 2 +- dm/dm-faq.md | 6 +- dm/dm-open-api.md | 2 +- dm/dm-table-routing.md | 2 +- dm/maintain-dm-using-tiup.md | 2 +- dm/manually-handling-sharding-ddl-locks.md | 2 +- dm/monitor-a-dm-cluster.md | 2 +- dm/quick-start-create-source.md | 2 +- dm/quick-start-create-task.md | 2 +- dm/quick-start-with-dm.md | 2 +- dm/shard-merge-best-practices.md | 2 +- dumpling-overview.md | 14 +- dynamic-config.md | 14 +- enable-tls-between-components.md | 19 +- encryption-at-rest.md | 30 +- error-codes.md | 6 +- explain-index-merge.md | 4 +- external-storage-uri.md | 4 +- faq/manage-cluster-faq.md | 2 +- faq/migration-tidb-faq.md | 2 +- faq/monitor-faq.md | 2 +- faq/sql-faq.md | 2 +- .../bit-functions-and-operators.md | 13 +- .../cast-functions-and-operators.md | 60 +- .../control-flow-functions.md | 137 ++- .../date-and-time-functions.md | 6 +- .../encryption-and-compression-functions.md | 10 +- .../information-functions.md | 309 +++++- functions-and-operators/json-functions.md | 19 +- functions-and-operators/locking-functions.md | 4 +- .../miscellaneous-functions.md | 421 +++++++- .../numeric-functions-and-operators.md | 50 +- functions-and-operators/precision-math.md | 2 +- functions-and-operators/sequence-functions.md | 18 + functions-and-operators/string-functions.md | 907 +++++++++++++++++- functions-and-operators/tidb-functions.md | 2 +- get-started-with-tidb-lightning.md | 1 + grafana-pd-dashboard.md | 2 +- grafana-tikv-dashboard.md | 35 + hardware-and-software-requirements.md | 6 +- .../information-schema-columns.md | 2 +- .../information-schema-ddl-jobs.md | 4 - .../information-schema-deadlocks.md | 2 +- .../information-schema-runaway-watches.md | 8 +- .../information-schema-sequences.md | 4 +- .../information-schema-slow-query.md | 2 +- .../information-schema-tidb-index-usage.md | 4 + .../information-schema-tidb-servers-info.md | 2 +- information-schema/information-schema.md | 8 +- ...orkbench-adjust-sqleditor-read-timeout.jpg | Bin 0 -> 393797 bytes media/region-panel.png | Bin 384654 -> 169402 bytes media/sqlgram/AdminShowSlow.png | Bin 0 -> 9740 bytes media/sqlgram/AdminStmt.png | Bin 0 -> 102947 bytes media/sqlgram/AlgorithmClause.png | Bin 0 -> 13735 bytes media/sqlgram/AllOrPartitionNameList.png | Bin 0 -> 4613 bytes media/sqlgram/AlterAlgorithm.png | Bin 0 -> 3595 bytes media/sqlgram/AlterDatabaseStmt.png | Bin 0 -> 8097 bytes media/sqlgram/AlterInstanceStmt.png | Bin 0 -> 5393 bytes media/sqlgram/AlterOrderItem.png | Bin 0 -> 2820 bytes media/sqlgram/AlterTableDropIndexSpec.png | Bin 0 -> 8324 bytes media/sqlgram/AlterTableDropIndexStmt.png | Bin 0 -> 7139 bytes media/sqlgram/AlterTableOptionListOpt.png | Bin 0 -> 2797 bytes media/sqlgram/AlterTablePartitionOpt.png | Bin 0 -> 6591 bytes media/sqlgram/AlterTableSpec.png | Bin 0 -> 228989 bytes media/sqlgram/AlterTableSpecListOpt.png | Bin 0 -> 4971 bytes media/sqlgram/AlterTableStmt.png | Bin 0 -> 23955 bytes media/sqlgram/AlterUserStmt.png | Bin 0 -> 17767 bytes media/sqlgram/AnalyzeOption.png | Bin 0 -> 14417 bytes media/sqlgram/AnalyzeOptionListOpt.png | Bin 0 -> 6406 bytes media/sqlgram/AnalyzeTableStmt.png | Bin 0 -> 33659 bytes media/sqlgram/AnyOrAll.png | Bin 0 -> 4921 bytes media/sqlgram/AsOpt.png | Bin 0 -> 2680 bytes media/sqlgram/Assignment.png | Bin 0 -> 4041 bytes media/sqlgram/AssignmentListOpt.png | Bin 0 -> 492 bytes media/sqlgram/AuthOption.png | Bin 0 -> 20642 bytes media/sqlgram/AuthString.png | Bin 0 -> 1614 bytes media/sqlgram/BRIEBooleanOptionName.png | Bin 0 -> 35077 bytes media/sqlgram/BRIEKeywordOptionName.png | Bin 0 -> 9301 bytes media/sqlgram/BRIEOption.png | Bin 0 -> 56054 bytes media/sqlgram/BRIEStmt.png | Bin 0 -> 15857 bytes media/sqlgram/BRIEStringOptionName.png | Bin 0 -> 12703 bytes media/sqlgram/BeginTransactionStmt.png | Bin 0 -> 28301 bytes media/sqlgram/BetweenOrNotOp.png | Bin 0 -> 4393 bytes media/sqlgram/BinlogStmt.png | Bin 0 -> 3543 bytes media/sqlgram/BitExpr.png | Bin 0 -> 29151 bytes media/sqlgram/BitValueType.png | Bin 0 -> 966 bytes media/sqlgram/BlobType.png | Bin 0 -> 15918 bytes media/sqlgram/BooleanType.png | Bin 0 -> 5194 bytes .../sqlgram/BuggyDefaultFalseDistinctOpt.png | Bin 0 -> 6858 bytes media/sqlgram/ByItem.png | Bin 0 -> 2806 bytes media/sqlgram/ByList.png | Bin 0 -> 3295 bytes media/sqlgram/CastType.png | Bin 0 -> 34411 bytes media/sqlgram/ChangeStmt.png | Bin 0 -> 11274 bytes media/sqlgram/Char.png | Bin 0 -> 5409 bytes media/sqlgram/CharsetOpt.png | Bin 0 -> 5999 bytes media/sqlgram/ClearPasswordExpireOptions.png | Bin 0 -> 517 bytes media/sqlgram/CollationName.png | Bin 0 -> 4242 bytes media/sqlgram/ColumnDef.png | Bin 0 -> 7202 bytes media/sqlgram/ColumnFormat.png | Bin 0 -> 5902 bytes media/sqlgram/ColumnKeywordOpt.png | Bin 0 -> 3318 bytes media/sqlgram/ColumnName.png | Bin 0 -> 6966 bytes media/sqlgram/ColumnNameList.png | Bin 0 -> 3878 bytes media/sqlgram/ColumnNameListOpt.png | Bin 0 -> 3051 bytes .../sqlgram/ColumnNameListOptWithBrackets.png | Bin 0 -> 4496 bytes media/sqlgram/ColumnNameOrUserVarListOpt.png | Bin 0 -> 6279 bytes ...ColumnNameOrUserVarListOptWithBrackets.png | Bin 0 -> 6144 bytes media/sqlgram/ColumnNameOrUserVariable.png | Bin 0 -> 4440 bytes media/sqlgram/ColumnOption.png | Bin 0 -> 73894 bytes media/sqlgram/ColumnOptionList.png | Bin 0 -> 2699 bytes media/sqlgram/ColumnOptionListOpt.png | Bin 0 -> 2992 bytes media/sqlgram/ColumnPosition.png | Bin 0 -> 5853 bytes media/sqlgram/ColumnSetValue.png | Bin 0 -> 4041 bytes media/sqlgram/ColumnSetValueList.png | Bin 0 -> 492 bytes media/sqlgram/CommaOpt.png | Bin 0 -> 2014 bytes media/sqlgram/CommitStmt.png | Bin 0 -> 7061 bytes media/sqlgram/CompareOp.png | Bin 0 -> 6619 bytes .../CompletionTypeWithinTransaction.png | Bin 0 -> 17412 bytes media/sqlgram/ConnectionOption.png | Bin 0 -> 20084 bytes media/sqlgram/ConnectionOptions.png | Bin 0 -> 5615 bytes media/sqlgram/Constraint.png | Bin 0 -> 3959 bytes media/sqlgram/ConstraintElem.png | Bin 0 -> 40755 bytes media/sqlgram/ConstraintKeywordOpt.png | Bin 0 -> 5671 bytes media/sqlgram/CreateBindingStmt.png | Bin 0 -> 7354 bytes media/sqlgram/CreateDatabaseStmt.png | Bin 0 -> 8765 bytes media/sqlgram/CreateIndexStmt.png | Bin 0 -> 18609 bytes media/sqlgram/CreateIndexStmtUnique.png | Bin 0 -> 2082 bytes media/sqlgram/CreateRoleStmt.png | Bin 0 -> 7721 bytes media/sqlgram/CreateSequenceOptionListOpt.png | Bin 0 -> 3459 bytes media/sqlgram/CreateSequenceStmt.png | Bin 0 -> 11736 bytes media/sqlgram/CreateTableLikeStmt.png | Bin 0 -> 8484 bytes media/sqlgram/CreateTableOptionListOpt.png | Bin 0 -> 3188 bytes media/sqlgram/CreateTableSelectOpt.png | Bin 0 -> 6074 bytes media/sqlgram/CreateTableStmt.png | Bin 0 -> 21930 bytes media/sqlgram/CreateUserStmt.png | Bin 0 -> 12226 bytes media/sqlgram/CreateViewSelectOpt.png | Bin 0 -> 9471 bytes media/sqlgram/CreateViewStmt.png | Bin 0 -> 16146 bytes media/sqlgram/CrossOpt.png | Bin 0 -> 6533 bytes media/sqlgram/DatabaseOption.png | Bin 0 -> 16020 bytes media/sqlgram/DatabaseOptionList.png | Bin 0 -> 3419 bytes media/sqlgram/DatabaseOptionListOpt.png | Bin 0 -> 3718 bytes media/sqlgram/DatabaseSym.png | Bin 0 -> 1791 bytes media/sqlgram/DateAndTimeType.png | Bin 0 -> 14603 bytes media/sqlgram/DateArithInterval.png | Bin 0 -> 3528 bytes media/sqlgram/DateArithMultiFormsOpt.png | Bin 0 -> 2914 bytes media/sqlgram/DateArithOpt.png | Bin 0 -> 3413 bytes media/sqlgram/DeallocateStmt.png | Bin 0 -> 5503 bytes media/sqlgram/DeallocateSym.png | Bin 0 -> 5476 bytes media/sqlgram/DefaultFalseDistinctOpt.png | Bin 0 -> 2764 bytes media/sqlgram/DefaultKwdOpt.png | Bin 0 -> 3064 bytes media/sqlgram/DefaultTrueDistinctOpt.png | Bin 0 -> 2764 bytes media/sqlgram/DefaultValueExpr.png | Bin 0 -> 8945 bytes media/sqlgram/DeleteFromStmt.png | Bin 0 -> 36226 bytes media/sqlgram/DistinctKwd.png | Bin 0 -> 5903 bytes media/sqlgram/DistinctOpt.png | Bin 0 -> 4062 bytes media/sqlgram/DoStmt.png | Bin 0 -> 3793 bytes media/sqlgram/DropBindingStmt.png | Bin 0 -> 10393 bytes media/sqlgram/DropDatabaseStmt.png | Bin 0 -> 4892 bytes media/sqlgram/DropIndexStmt.png | Bin 0 -> 9540 bytes media/sqlgram/DropRoleStmt.png | Bin 0 -> 7708 bytes media/sqlgram/DropSequenceStmt.png | Bin 0 -> 5445 bytes media/sqlgram/DropStatsStmt.png | Bin 0 -> 4647 bytes media/sqlgram/DropTableStmt.png | Bin 0 -> 9923 bytes media/sqlgram/DropUserStmt.png | Bin 0 -> 7792 bytes media/sqlgram/DropViewStmt.png | Bin 0 -> 10655 bytes media/sqlgram/DuplicateOpt.png | Bin 0 -> 4832 bytes media/sqlgram/ElseOpt.png | Bin 0 -> 4210 bytes media/sqlgram/EmptyStmt.png | Bin 0 -> 517 bytes media/sqlgram/Enclosed.png | Bin 0 -> 492 bytes media/sqlgram/EncryptionOpt.png | Bin 0 -> 1614 bytes media/sqlgram/EnforcedOrNot.png | Bin 0 -> 5014 bytes media/sqlgram/EnforcedOrNotOpt.png | Bin 0 -> 3103 bytes media/sqlgram/EnforcedOrNotOrNotNullOpt.png | Bin 0 -> 5541 bytes media/sqlgram/EqOpt.png | Bin 0 -> 1691 bytes media/sqlgram/EqOrAssignmentEq.png | Bin 0 -> 3563 bytes media/sqlgram/Escaped.png | Bin 0 -> 492 bytes media/sqlgram/EscapedTableRef.png | Bin 0 -> 6178 bytes media/sqlgram/ExecuteStmt.png | Bin 0 -> 8788 bytes media/sqlgram/ExplainFormatType.png | Bin 0 -> 5446 bytes media/sqlgram/ExplainStmt.png | Bin 0 -> 26430 bytes media/sqlgram/ExplainSym.png | Bin 0 -> 7403 bytes media/sqlgram/ExplainableStmt.png | Bin 0 -> 12746 bytes media/sqlgram/ExprOrDefault.png | Bin 0 -> 4551 bytes media/sqlgram/Expression.png | Bin 0 -> 51085 bytes media/sqlgram/ExpressionList.png | Bin 0 -> 3822 bytes media/sqlgram/ExpressionListListItem.png | Bin 0 -> 2114 bytes media/sqlgram/ExpressionListOpt.png | Bin 0 -> 3049 bytes media/sqlgram/ExpressionOpt.png | Bin 0 -> 2687 bytes media/sqlgram/Field.png | Bin 0 -> 15921 bytes media/sqlgram/FieldAsName.png | Bin 0 -> 5063 bytes media/sqlgram/FieldAsNameOpt.png | Bin 0 -> 2862 bytes media/sqlgram/FieldItem.png | Bin 0 -> 14380 bytes media/sqlgram/FieldLen.png | Bin 0 -> 3311 bytes media/sqlgram/FieldOpt.png | Bin 0 -> 7625 bytes media/sqlgram/FieldOpts.png | Bin 0 -> 2435 bytes media/sqlgram/FieldTerminator.png | Bin 0 -> 3705 bytes media/sqlgram/Fields.png | Bin 0 -> 4451 bytes media/sqlgram/FieldsTerminated.png | Bin 0 -> 492 bytes media/sqlgram/FixedPointType.png | Bin 0 -> 5920 bytes media/sqlgram/FlashbackTableStmt.png | Bin 0 -> 6422 bytes media/sqlgram/FlashbackToNewName.png | Bin 0 -> 3388 bytes media/sqlgram/FloatOpt.png | Bin 0 -> 3411 bytes media/sqlgram/FloatingPointType.png | Bin 0 -> 10203 bytes media/sqlgram/FlushOption.png | Bin 0 -> 20378 bytes media/sqlgram/FlushStmt.png | Bin 0 -> 5605 bytes media/sqlgram/FulltextSearchModifierOpt.png | Bin 0 -> 19577 bytes media/sqlgram/FuncDatetimePrec.png | Bin 0 -> 3862 bytes media/sqlgram/FuncDatetimePrecList.png | Bin 0 -> 1155 bytes media/sqlgram/FuncDatetimePrecListOpt.png | Bin 0 -> 3633 bytes media/sqlgram/Function.png | Bin 0 -> 4246 bytes media/sqlgram/FunctionCallAgg.png | Bin 0 -> 15033 bytes media/sqlgram/FunctionCallConflict.png | Bin 0 -> 10647 bytes media/sqlgram/FunctionCallGeneric.png | Bin 0 -> 5176 bytes media/sqlgram/FunctionCallKeyword.png | Bin 0 -> 54849 bytes media/sqlgram/FunctionCallNonKeyword.png | Bin 0 -> 98153 bytes media/sqlgram/FunctionNameConflict.png | Bin 0 -> 66780 bytes media/sqlgram/FunctionNameDateArith.png | Bin 0 -> 4848 bytes .../FunctionNameDateArithMultiForms.png | Bin 0 -> 4815 bytes .../sqlgram/FunctionNameDatetimePrecision.png | Bin 0 -> 18420 bytes media/sqlgram/FunctionNameOptionalBraces.png | Bin 0 -> 12137 bytes media/sqlgram/FunctionNameSequence.png | Bin 0 -> 14029 bytes media/sqlgram/GeneratedAlways.png | Bin 0 -> 4897 bytes media/sqlgram/GetFormatSelector.png | Bin 0 -> 8995 bytes media/sqlgram/GrantRoleStmt.png | Bin 0 -> 5783 bytes media/sqlgram/GrantStmt.png | Bin 0 -> 13349 bytes media/sqlgram/GroupByClause.png | Bin 0 -> 3865 bytes media/sqlgram/HandleRange.png | Bin 0 -> 3410 bytes media/sqlgram/HashString.png | Bin 0 -> 1614 bytes media/sqlgram/HintTableList.png | Bin 0 -> 3111 bytes media/sqlgram/Identifier.png | Bin 0 -> 9647 bytes media/sqlgram/IfExists.png | Bin 0 -> 3364 bytes media/sqlgram/IfNotExists.png | Bin 0 -> 4033 bytes media/sqlgram/IgnoreLines.png | Bin 0 -> 4633 bytes media/sqlgram/IgnoreOptional.png | Bin 0 -> 3005 bytes media/sqlgram/InOrNotOp.png | Bin 0 -> 3576 bytes media/sqlgram/IndexAdviseStmt.png | Bin 0 -> 9392 bytes media/sqlgram/IndexColName.png | Bin 0 -> 3235 bytes media/sqlgram/IndexColNameList.png | Bin 0 -> 3666 bytes media/sqlgram/IndexHint.png | Bin 0 -> 5532 bytes media/sqlgram/IndexHintListOpt.png | Bin 0 -> 2371 bytes media/sqlgram/IndexHintScope.png | Bin 0 -> 9594 bytes media/sqlgram/IndexHintType.png | Bin 0 -> 8826 bytes media/sqlgram/IndexInvisible.png | Bin 0 -> 5138 bytes media/sqlgram/IndexKeyTypeOpt.png | Bin 0 -> 6607 bytes media/sqlgram/IndexLockAndAlgorithmOpt.png | Bin 0 -> 9847 bytes media/sqlgram/IndexName.png | Bin 0 -> 2333 bytes media/sqlgram/IndexNameAndTypeOpt.png | Bin 0 -> 11364 bytes media/sqlgram/IndexNameList.png | Bin 0 -> 10306 bytes media/sqlgram/IndexOption.png | Bin 0 -> 17704 bytes media/sqlgram/IndexOptionList.png | Bin 0 -> 2859 bytes media/sqlgram/IndexPartSpecification.png | Bin 0 -> 7515 bytes media/sqlgram/IndexPartSpecificationList.png | Bin 0 -> 5117 bytes .../sqlgram/IndexPartSpecificationListOpt.png | Bin 0 -> 5685 bytes media/sqlgram/IndexType.png | Bin 0 -> 6680 bytes media/sqlgram/IndexTypeName.png | Bin 0 -> 5156 bytes media/sqlgram/IndexTypeOpt.png | Bin 0 -> 2646 bytes media/sqlgram/InsertIntoStmt.png | Bin 0 -> 15608 bytes media/sqlgram/InsertValues.png | Bin 0 -> 31344 bytes media/sqlgram/InstanceOption.png | Bin 0 -> 8283 bytes media/sqlgram/IntegerType.png | Bin 0 -> 22030 bytes media/sqlgram/IntoOpt.png | Bin 0 -> 2741 bytes media/sqlgram/IsOrNotOp.png | Bin 0 -> 3671 bytes media/sqlgram/IsolationLevel.png | Bin 0 -> 13567 bytes media/sqlgram/JoinTable.png | Bin 0 -> 40176 bytes media/sqlgram/JoinType.png | Bin 0 -> 3713 bytes media/sqlgram/KeyOrIndex.png | Bin 0 -> 4036 bytes media/sqlgram/KeyOrIndexOpt.png | Bin 0 -> 2807 bytes media/sqlgram/KillOrKillTiDB.png | Bin 0 -> 3463 bytes media/sqlgram/KillStmt.png | Bin 0 -> 7458 bytes media/sqlgram/LengthNum.png | Bin 0 -> 1176 bytes media/sqlgram/LikeEscapeOpt.png | Bin 0 -> 4242 bytes media/sqlgram/LikeOrNotOp.png | Bin 0 -> 3773 bytes media/sqlgram/LikeTableWithOrWithoutParen.png | Bin 0 -> 7505 bytes media/sqlgram/LimitOption.png | Bin 0 -> 4134 bytes media/sqlgram/LinearOpt.png | Bin 0 -> 2964 bytes media/sqlgram/Lines.png | Bin 0 -> 5624 bytes media/sqlgram/LinesTerminated.png | Bin 0 -> 5106 bytes media/sqlgram/Literal.png | Bin 0 -> 19851 bytes media/sqlgram/LoadDataSetItem.png | Bin 0 -> 4682 bytes media/sqlgram/LoadDataSetSpecOpt.png | Bin 0 -> 6556 bytes media/sqlgram/LoadDataStmt.png | Bin 0 -> 20419 bytes media/sqlgram/LoadStatsStmt.png | Bin 0 -> 4205 bytes media/sqlgram/LocalOpt.png | Bin 0 -> 3010 bytes media/sqlgram/LocationLabelList.png | Bin 0 -> 5731 bytes media/sqlgram/LockClause.png | Bin 0 -> 6098 bytes media/sqlgram/LockClauseOpt.png | Bin 0 -> 492 bytes media/sqlgram/LockTablesStmt.png | Bin 0 -> 6916 bytes media/sqlgram/LockType.png | Bin 0 -> 6201 bytes media/sqlgram/LogTypeOpt.png | Bin 0 -> 7545 bytes media/sqlgram/LowPriorityOptional.png | Bin 0 -> 3306 bytes media/sqlgram/Match.png | Bin 0 -> 7719 bytes media/sqlgram/MatchOpt.png | Bin 0 -> 2039 bytes media/sqlgram/MaxIndexNumOpt.png | Bin 0 -> 5367 bytes media/sqlgram/MaxMinutesOpt.png | Bin 0 -> 4445 bytes media/sqlgram/MaxNumBuckets.png | Bin 0 -> 3097 bytes media/sqlgram/MaxValueOrExpression.png | Bin 0 -> 5108 bytes media/sqlgram/MaxValueOrExpressionList.png | Bin 0 -> 5236 bytes media/sqlgram/NChar.png | Bin 0 -> 9413 bytes media/sqlgram/NUM.png | Bin 0 -> 1116 bytes media/sqlgram/NVarchar.png | Bin 0 -> 28081 bytes media/sqlgram/NationalOpt.png | Bin 0 -> 2272 bytes media/sqlgram/NextValueForSequence.png | Bin 0 -> 9944 bytes media/sqlgram/NoWriteToBinLogAliasOpt.png | Bin 0 -> 6298 bytes media/sqlgram/NotKeywordToken.png | Bin 0 -> 146187 bytes media/sqlgram/NotOpt.png | Bin 0 -> 2747 bytes media/sqlgram/NowSym.png | Bin 0 -> 10166 bytes media/sqlgram/NowSymFunc.png | Bin 0 -> 11754 bytes media/sqlgram/NowSymOptionFraction.png | Bin 0 -> 7006 bytes media/sqlgram/NumList.png | Bin 0 -> 3440 bytes media/sqlgram/NumLiteral.png | Bin 0 -> 3587 bytes media/sqlgram/NumericType.png | Bin 0 -> 16593 bytes media/sqlgram/ODBCDateTimeType.png | Bin 0 -> 3696 bytes media/sqlgram/ObjectType.png | Bin 0 -> 2859 bytes media/sqlgram/OnDelete.png | Bin 0 -> 4086 bytes media/sqlgram/OnDeleteOpt.png | Bin 0 -> 3085 bytes media/sqlgram/OnDeleteUpdateOpt.png | Bin 0 -> 8385 bytes media/sqlgram/OnDuplicateKeyUpdate.png | Bin 0 -> 7272 bytes media/sqlgram/OnUpdate.png | Bin 0 -> 4308 bytes media/sqlgram/OnUpdateOpt.png | Bin 0 -> 3299 bytes media/sqlgram/Operand.png | Bin 0 -> 17694 bytes media/sqlgram/OptBinMod.png | Bin 0 -> 3139 bytes media/sqlgram/OptBinary.png | Bin 0 -> 8700 bytes media/sqlgram/OptCharset.png | Bin 0 -> 3466 bytes media/sqlgram/OptCharsetWithOptBinary.png | Bin 0 -> 7066 bytes media/sqlgram/OptCollate.png | Bin 0 -> 5015 bytes media/sqlgram/OptExistingWindowName.png | Bin 0 -> 2978 bytes media/sqlgram/OptFieldLen.png | Bin 0 -> 2160 bytes media/sqlgram/OptFromFirstLast.png | Bin 0 -> 5931 bytes media/sqlgram/OptGConcatSeparator.png | Bin 0 -> 4804 bytes media/sqlgram/OptInteger.png | Bin 0 -> 3813 bytes media/sqlgram/OptLLDefault.png | Bin 0 -> 3674 bytes media/sqlgram/OptLeadLagInfo.png | Bin 0 -> 7244 bytes media/sqlgram/OptNullTreatment.png | Bin 0 -> 6874 bytes media/sqlgram/OptPartitionClause.png | Bin 0 -> 4745 bytes media/sqlgram/OptTemporary.png | Bin 0 -> 3733 bytes media/sqlgram/OptWild.png | Bin 0 -> 2448 bytes media/sqlgram/OptWindowFrameClause.png | Bin 0 -> 4402 bytes media/sqlgram/OptWindowOrderByClause.png | Bin 0 -> 4596 bytes media/sqlgram/OptWindowingClause.png | Bin 0 -> 3451 bytes media/sqlgram/OptionalBraces.png | Bin 0 -> 2546 bytes media/sqlgram/OrReplace.png | Bin 0 -> 3911 bytes media/sqlgram/Order.png | Bin 0 -> 4243 bytes media/sqlgram/OrderBy.png | Bin 0 -> 3845 bytes media/sqlgram/OuterOpt.png | Bin 0 -> 3018 bytes media/sqlgram/PartDefOption.png | Bin 0 -> 38809 bytes media/sqlgram/PartDefOptionList.png | Bin 0 -> 3121 bytes media/sqlgram/PartDefOptionsOpt.png | Bin 0 -> 2721 bytes media/sqlgram/PartDefValuesOpt.png | Bin 0 -> 25183 bytes media/sqlgram/PartitionDefinition.png | Bin 0 -> 9498 bytes media/sqlgram/PartitionDefinitionList.png | Bin 0 -> 4461 bytes media/sqlgram/PartitionDefinitionListOpt.png | Bin 0 -> 5101 bytes media/sqlgram/PartitionKeyAlgorithmOpt.png | Bin 0 -> 4499 bytes media/sqlgram/PartitionMethod.png | Bin 0 -> 25300 bytes media/sqlgram/PartitionNameList.png | Bin 0 -> 3459 bytes media/sqlgram/PartitionNumOpt.png | Bin 0 -> 4878 bytes media/sqlgram/PartitionOpt.png | Bin 0 -> 10282 bytes media/sqlgram/PasswordExpire.png | Bin 0 -> 7611 bytes media/sqlgram/PasswordOpt.png | Bin 0 -> 7165 bytes media/sqlgram/PasswordOrLockOption.png | Bin 0 -> 18566 bytes media/sqlgram/PasswordOrLockOptions.png | Bin 0 -> 4150 bytes media/sqlgram/PerDB.png | Bin 0 -> 3653 bytes media/sqlgram/PerTable.png | Bin 0 -> 3929 bytes media/sqlgram/PluginNameList.png | Bin 0 -> 3459 bytes media/sqlgram/Precision.png | Bin 0 -> 3569 bytes media/sqlgram/PredicateExpr.png | Bin 0 -> 23805 bytes media/sqlgram/PrepareSQL.png | Bin 0 -> 3952 bytes media/sqlgram/PreparedStmt.png | Bin 0 -> 5990 bytes media/sqlgram/PrimaryExpression.png | Bin 0 -> 13714 bytes media/sqlgram/PrimaryFactor.png | Bin 0 -> 19853 bytes media/sqlgram/PrimaryOpt.png | Bin 0 -> 3290 bytes media/sqlgram/Priority.png | Bin 0 -> 6373 bytes media/sqlgram/PrivElem.png | Bin 0 -> 5753 bytes media/sqlgram/PrivElemList.png | Bin 0 -> 3299 bytes media/sqlgram/PrivLevel.png | Bin 0 -> 9207 bytes media/sqlgram/PrivType.png | Bin 0 -> 88778 bytes media/sqlgram/QuickOptional.png | Bin 0 -> 3166 bytes media/sqlgram/RecoverTableStmt.png | Bin 0 -> 7248 bytes media/sqlgram/ReferDef.png | Bin 0 -> 10755 bytes media/sqlgram/ReferOpt.png | Bin 0 -> 13618 bytes media/sqlgram/RegexpOrNotOp.png | Bin 0 -> 4396 bytes media/sqlgram/RegexpSym.png | Bin 0 -> 4254 bytes media/sqlgram/RenameTableStmt.png | Bin 0 -> 5962 bytes media/sqlgram/ReorganizePartitionRuleOpt.png | Bin 0 -> 6855 bytes media/sqlgram/ReplaceIntoStmt.png | Bin 0 -> 9247 bytes media/sqlgram/ReplacePriority.png | Bin 0 -> 4800 bytes media/sqlgram/RequireClause.png | Bin 0 -> 13632 bytes media/sqlgram/RequireClauseOpt.png | Bin 0 -> 3132 bytes media/sqlgram/RequireListElement.png | Bin 0 -> 8703 bytes media/sqlgram/RestrictOrCascadeOpt.png | Bin 0 -> 5961 bytes media/sqlgram/RevokeRoleStmt.png | Bin 0 -> 6367 bytes media/sqlgram/RevokeStmt.png | Bin 0 -> 8771 bytes media/sqlgram/RoleNameString.png | Bin 0 -> 3325 bytes media/sqlgram/RoleSpec.png | Bin 0 -> 1869 bytes media/sqlgram/RollbackStmt.png | Bin 0 -> 7488 bytes media/sqlgram/RowFormat.png | Bin 0 -> 48383 bytes media/sqlgram/SelectStmtBasic.png | Bin 0 -> 5373 bytes media/sqlgram/SelectStmtCalcFoundRows.png | Bin 0 -> 5438 bytes media/sqlgram/SelectStmtDistinct.png | Bin 0 -> 3987 bytes media/sqlgram/SelectStmtFromDualTable.png | Bin 0 -> 5942 bytes media/sqlgram/SelectStmtFromTable.png | Bin 0 -> 14224 bytes media/sqlgram/SelectStmtIntoOption.png | Bin 0 -> 5859 bytes media/sqlgram/SelectStmtSQLBigResult.png | Bin 0 -> 4264 bytes media/sqlgram/SelectStmtSQLBufferResult.png | Bin 0 -> 4599 bytes media/sqlgram/SelectStmtSQLCache.png | Bin 0 -> 7043 bytes media/sqlgram/SelectStmtSQLSmallResult.png | Bin 0 -> 4525 bytes media/sqlgram/SelectStmtStraightJoin.png | Bin 0 -> 3903 bytes media/sqlgram/SequenceOption.png | Bin 0 -> 47515 bytes media/sqlgram/SequenceOptionList.png | Bin 0 -> 3014 bytes media/sqlgram/SetExpr.png | Bin 0 -> 4534 bytes media/sqlgram/ShowProfileArgsOpt.png | Bin 0 -> 5064 bytes media/sqlgram/ShowProfileType.png | Bin 0 -> 23509 bytes media/sqlgram/ShowProfileTypesOpt.png | Bin 0 -> 5211 bytes media/sqlgram/SignedLiteral.png | Bin 0 -> 5936 bytes media/sqlgram/SignedNum.png | Bin 0 -> 4773 bytes media/sqlgram/SimpleExpr.png | Bin 0 -> 92790 bytes media/sqlgram/SimpleIdent.png | Bin 0 -> 8173 bytes media/sqlgram/Start.png | Bin 0 -> 3869 bytes media/sqlgram/Starting.png | Bin 0 -> 5013 bytes media/sqlgram/Statement.png | Bin 0 -> 144697 bytes media/sqlgram/StatsPersistentVal.png | Bin 0 -> 4323 bytes media/sqlgram/StorageMedia.png | Bin 0 -> 5694 bytes media/sqlgram/StringList.png | Bin 0 -> 3323 bytes .../sqlgram/StringNameOrBRIEOptionKeyword.png | Bin 0 -> 7175 bytes media/sqlgram/StringType.png | Bin 0 -> 38526 bytes media/sqlgram/SubPartDefinition.png | Bin 0 -> 6332 bytes media/sqlgram/SubPartDefinitionListOpt.png | Bin 0 -> 6582 bytes media/sqlgram/SubPartitionMethod.png | Bin 0 -> 13080 bytes media/sqlgram/SubPartitionNumOpt.png | Bin 0 -> 5467 bytes media/sqlgram/SubPartitionOpt.png | Bin 0 -> 7839 bytes media/sqlgram/SubSelect.png | Bin 0 -> 5548 bytes media/sqlgram/SumExpr.png | Bin 0 -> 75392 bytes media/sqlgram/Symbol.png | Bin 0 -> 1731 bytes media/sqlgram/SystemVariable.png | Bin 0 -> 2743 bytes media/sqlgram/TableAliasRefList.png | Bin 0 -> 4748 bytes media/sqlgram/TableAsName.png | Bin 0 -> 3839 bytes media/sqlgram/TableAsNameOpt.png | Bin 0 -> 2984 bytes media/sqlgram/TableElement.png | Bin 0 -> 3889 bytes media/sqlgram/TableElementList.png | Bin 0 -> 3923 bytes media/sqlgram/TableElementListOpt.png | Bin 0 -> 4612 bytes media/sqlgram/TableFactor.png | Bin 0 -> 17933 bytes media/sqlgram/TableLock.png | Bin 0 -> 3046 bytes media/sqlgram/TableNameList.png | Bin 0 -> 3374 bytes media/sqlgram/TableNameListOpt.png | Bin 0 -> 2706 bytes media/sqlgram/TableNameOptWild.png | Bin 0 -> 5613 bytes media/sqlgram/TableOptimizerHints.png | Bin 0 -> 2745 bytes media/sqlgram/TableOption.png | Bin 0 -> 113146 bytes media/sqlgram/TableOptionList.png | Bin 0 -> 4136 bytes media/sqlgram/TableOptionListOpt.png | Bin 0 -> 4416 bytes media/sqlgram/TableOrTables.png | Bin 0 -> 3751 bytes media/sqlgram/TableRefsClause.png | Bin 0 -> 1983 bytes media/sqlgram/TableToTable.png | Bin 0 -> 3017 bytes media/sqlgram/TablesTerminalSym.png | Bin 0 -> 3775 bytes media/sqlgram/TextType.png | Bin 0 -> 11318 bytes media/sqlgram/TiDBKeyword.png | Bin 0 -> 69390 bytes media/sqlgram/TimeUnit.png | Bin 0 -> 40124 bytes media/sqlgram/TimestampBound.png | Bin 0 -> 16792 bytes media/sqlgram/TimestampUnit.png | Bin 0 -> 47203 bytes media/sqlgram/TransactionChar.png | Bin 0 -> 10876 bytes media/sqlgram/TrimDirection.png | Bin 0 -> 7030 bytes media/sqlgram/Type.png | Bin 0 -> 6900 bytes media/sqlgram/UnReservedKeyword.png | Bin 0 -> 823737 bytes media/sqlgram/UnionOpt.png | Bin 0 -> 3324 bytes media/sqlgram/UnionSelect.png | Bin 0 -> 5809 bytes media/sqlgram/UnionStmt.png | Bin 0 -> 24323 bytes media/sqlgram/UnlockTablesStmt.png | Bin 0 -> 4801 bytes media/sqlgram/UseStmt.png | Bin 0 -> 3235 bytes media/sqlgram/UserSpec.png | Bin 0 -> 3180 bytes media/sqlgram/UserSpecList.png | Bin 0 -> 3697 bytes media/sqlgram/UserVariable.png | Bin 0 -> 2680 bytes media/sqlgram/ValueSym.png | Bin 0 -> 3889 bytes media/sqlgram/ValuesList.png | Bin 0 -> 3683 bytes media/sqlgram/ValuesOpt.png | Bin 0 -> 4706 bytes media/sqlgram/Varchar.png | Bin 0 -> 13007 bytes media/sqlgram/Variable.png | Bin 0 -> 5043 bytes media/sqlgram/VariableName.png | Bin 0 -> 4499 bytes media/sqlgram/ViewAlgorithm.png | Bin 0 -> 10451 bytes media/sqlgram/ViewCheckOption.png | Bin 0 -> 8882 bytes media/sqlgram/ViewDefiner.png | Bin 0 -> 4667 bytes media/sqlgram/ViewFieldList.png | Bin 0 -> 5545 bytes media/sqlgram/ViewName.png | Bin 0 -> 2021 bytes media/sqlgram/ViewSQLSecurity.png | Bin 0 -> 7940 bytes media/sqlgram/VirtualOrStored.png | Bin 0 -> 4769 bytes media/sqlgram/WhenClause.png | Bin 0 -> 4351 bytes media/sqlgram/WindowDefinition.png | Bin 0 -> 4456 bytes media/sqlgram/WindowFrameBetween.png | Bin 0 -> 5801 bytes media/sqlgram/WindowFrameBound.png | Bin 0 -> 16772 bytes media/sqlgram/WindowFrameExtent.png | Bin 0 -> 6318 bytes media/sqlgram/WindowFrameStart.png | Bin 0 -> 16969 bytes media/sqlgram/WindowFrameUnits.png | Bin 0 -> 6199 bytes media/sqlgram/WindowFuncCall.png | Bin 0 -> 48987 bytes media/sqlgram/WindowName.png | Bin 0 -> 1731 bytes media/sqlgram/WindowNameOrSpec.png | Bin 0 -> 4766 bytes media/sqlgram/WindowSpec.png | Bin 0 -> 4593 bytes media/sqlgram/WindowSpecDetails.png | Bin 0 -> 8978 bytes media/sqlgram/WindowingClause.png | Bin 0 -> 4955 bytes media/sqlgram/WithGrantOptionOpt.png | Bin 0 -> 24998 bytes media/sqlgram/WithReadLockOpt.png | Bin 0 -> 4037 bytes media/sqlgram/WithValidation.png | Bin 0 -> 6363 bytes media/sqlgram/WithValidationOpt.png | Bin 0 -> 3043 bytes media/sqlgram/Year.png | Bin 0 -> 5627 bytes media/sqlgram/logAnd.png | Bin 0 -> 3980 bytes media/sqlgram/logOr.png | Bin 0 -> 4267 bytes migrate-small-mysql-to-tidb.md | 4 +- migrate-with-pt-ghost.md | 2 +- mysql-compatibility.md | 4 + online-unsafe-recovery.md | 4 +- optimizer-fix-controls.md | 7 + oracle-functions-to-tidb.md | 4 +- partitioned-table.md | 2 +- pd-configuration-file.md | 2 +- pd-control.md | 2 +- pd-microservices.md | 15 +- performance-schema/performance-schema.md | 4 +- performance-tuning-methods.md | 4 +- performance-tuning-overview.md | 2 +- post-installation-check.md | 2 +- production-deployment-using-tiup.md | 22 +- quick-start-with-tidb.md | 10 +- releases/release-1.0.1.md | 1 + releases/release-1.0.3.md | 1 + releases/release-1.0.7.md | 1 + releases/release-2.0-ga.md | 2 +- releases/release-2.0-rc.1.md | 1 + releases/release-2.0.1.md | 1 + releases/release-2.0.6.md | 1 + releases/release-2.0.9.md | 1 + releases/release-2.1-ga.md | 3 +- releases/release-2.1.17.md | 2 +- releases/release-2.1.2.md | 1 + releases/release-3.0-beta.md | 1 + releases/release-3.0-ga.md | 1 + releases/release-3.0.0-rc.2.md | 1 + releases/release-3.0.10.md | 2 +- releases/release-3.0.15.md | 1 + releases/release-3.0.4.md | 2 +- releases/release-3.0.5.md | 1 + releases/release-4.0.0-beta.1.md | 2 +- releases/release-4.0.0-beta.md | 1 + releases/release-4.0.0-rc.2.md | 5 +- releases/release-4.0.0-rc.md | 6 +- releases/release-4.0.16.md | 2 +- releases/release-4.0.6.md | 2 +- releases/release-4.0.9.md | 1 + releases/release-5.0.0-rc.md | 1 + releases/release-5.0.0.md | 2 +- releases/release-5.0.3.md | 1 + releases/release-5.0.4.md | 1 + releases/release-5.0.6.md | 5 +- releases/release-5.1.0.md | 1 + releases/release-5.1.4.md | 2 +- releases/release-5.1.5.md | 2 +- releases/release-5.2.2.md | 2 +- releases/release-5.2.4.md | 1 + releases/release-5.3.0.md | 5 +- releases/release-5.3.1.md | 1 + releases/release-5.3.4.md | 1 + releases/release-5.4.0.md | 1 + releases/release-5.4.3.md | 1 + releases/release-6.0.0-dmr.md | 1 + releases/release-6.1.0.md | 4 +- releases/release-6.1.1.md | 4 +- releases/release-6.1.2.md | 2 +- releases/release-6.1.3.md | 2 +- releases/release-6.1.4.md | 2 +- releases/release-6.1.5.md | 2 +- releases/release-6.1.6.md | 2 +- releases/release-6.1.7.md | 2 +- releases/release-6.2.0.md | 1 + releases/release-6.3.0.md | 7 +- releases/release-6.4.0.md | 7 +- releases/release-6.5.0.md | 2 +- releases/release-6.5.1.md | 4 +- releases/release-6.5.2.md | 2 +- releases/release-6.5.3.md | 8 +- releases/release-6.5.4.md | 10 +- releases/release-6.5.5.md | 2 +- releases/release-6.5.6.md | 2 +- releases/release-6.5.7.md | 6 +- releases/release-6.5.8.md | 2 +- releases/release-6.5.9.md | 138 +++ releases/release-6.6.0.md | 4 +- releases/release-7.0.0.md | 2 +- releases/release-7.1.0.md | 2 +- releases/release-7.1.1.md | 6 +- releases/release-7.1.2.md | 6 +- releases/release-7.1.3.md | 6 +- releases/release-7.1.4.md | 3 +- releases/release-7.1.5.md | 119 +++ releases/release-7.2.0.md | 6 +- releases/release-7.3.0.md | 6 +- releases/release-7.4.0.md | 4 +- releases/release-7.5.0.md | 3 +- releases/release-7.5.1.md | 2 +- releases/release-7.6.0.md | 9 +- releases/release-8.0.0.md | 614 ++++++++++++ releases/release-notes.md | 7 + releases/release-pre-ga.md | 1 + releases/release-rc.3.md | 1 + releases/release-timeline.md | 3 + replicate-data-to-kafka.md | 2 +- runtime-filter.md | 2 +- scale-tidb-using-tiup.md | 50 +- scripts/get-en-duplicated-notes.py | 4 +- ...ase_notes_update_pr_author_info_add_dup.py | 2 +- security-compatibility-with-mysql.md | 2 +- sql-mode.md | 4 +- sql-plan-management.md | 4 +- sql-plan-replayer.md | 18 +- sql-prepared-plan-cache.md | 2 +- .../sql-statement-admin-show-ddl.md | 50 +- sql-statements/sql-statement-alter-index.md | 2 +- .../sql-statement-alter-placement-policy.md | 2 +- .../sql-statement-alter-sequence.md | 215 +++++ .../sql-statement-create-sequence.md | 47 +- sql-statements/sql-statement-drop-binding.md | 4 +- sql-statements/sql-statement-drop-sequence.md | 1 + .../sql-statement-explain-analyze.md | 2 +- sql-statements/sql-statement-explain.md | 4 +- sql-statements/sql-statement-import-into.md | 14 +- sql-statements/sql-statement-modify-column.md | 4 +- sql-statements/sql-statement-query-watch.md | 4 - sql-statements/sql-statement-savepoint.md | 15 + sql-statements/sql-statement-select.md | 82 +- .../sql-statement-set-default-role.md | 19 +- sql-statements/sql-statement-set-names.md | 31 +- sql-statements/sql-statement-set-password.md | 7 +- sql-statements/sql-statement-set-role.md | 25 +- sql-statements/sql-statement-set-variable.md | 35 +- sql-statements/sql-statement-show-bindings.md | 29 +- sql-statements/sql-statement-show-builtins.md | 9 +- .../sql-statement-show-character-set.md | 46 +- .../sql-statement-show-collation.md | 38 +- .../sql-statement-show-columns-from.md | 62 +- sql-statements/sql-statement-show-config.md | 19 +- .../sql-statement-show-create-database.md | 2 +- ...-statement-show-create-placement-policy.md | 2 +- .../sql-statement-show-create-sequence.md | 16 +- .../sql-statement-show-create-table.md | 23 +- .../sql-statement-show-create-user.md | 23 +- .../sql-statement-show-databases.md | 14 +- sql-statements/sql-statement-show-engines.md | 13 +- sql-statements/sql-statement-show-errors.md | 9 +- sql-statements/sql-statement-show-grants.md | 26 +- sql-statements/sql-statement-show-indexes.md | 29 +- .../sql-statement-show-placement-for.md | 8 +- .../sql-statement-show-placement-labels.md | 4 +- .../sql-statement-show-placement.md | 4 +- sql-statements/sql-statement-show-plugins.md | 19 +- .../sql-statement-show-privileges.md | 25 +- .../sql-statement-show-processlist.md | 12 +- sql-statements/sql-statement-show-profiles.md | 11 +- .../sql-statement-show-stats-healthy.md | 23 +- ...=> sql-statement-show-stats-histograms.md} | 29 +- .../sql-statement-show-stats-meta.md | 25 +- .../sql-statement-show-table-next-rowid.md | 25 +- .../sql-statement-show-table-regions.md | 32 +- .../sql-statement-show-table-status.md | 19 +- sql-statements/sql-statement-show-tables.md | 24 +- .../sql-statement-show-variables.md | 41 +- sql-statements/sql-statement-show-warnings.md | 7 +- sql-statements/sql-statement-shutdown.md | 9 +- sql-statements/sql-statement-split-region.md | 117 +-- sql-statements/sql-statement-trace.md | 52 +- sql-statements/sql-statement-unlock-stats.md | 2 +- sql-statements/sql-statement-update.md | 33 +- sql-statements/sql-statement-with.md | 9 +- statistics.md | 571 +++++------ .../sync-diff-inspector-overview.md | 6 +- .../sys-schema-unused-indexes.md | 58 +- sys-schema/sys-schema.md | 14 + system-variables.md | 149 ++- table-filter.md | 18 +- ticdc/deploy-ticdc.md | 4 +- ticdc/monitor-ticdc.md | 4 +- ticdc/ticdc-behavior-change.md | 54 ++ ticdc/ticdc-changefeed-config.md | 22 +- ticdc/ticdc-changefeed-overview.md | 4 +- ticdc/ticdc-client-authentication.md | 122 +++ ticdc/ticdc-csv.md | 18 +- ticdc/ticdc-ddl.md | 4 + ticdc/ticdc-faq.md | 10 +- ticdc/ticdc-manage-changefeed.md | 4 +- ticdc/ticdc-open-api-v2.md | 22 +- ticdc/ticdc-open-api.md | 8 +- ticdc/ticdc-overview.md | 2 +- ticdc/ticdc-server-config.md | 6 + ticdc/ticdc-sink-to-cloud-storage.md | 2 +- ticdc/ticdc-sink-to-pulsar.md | 2 +- tidb-binlog/get-started-with-tidb-binlog.md | 2 +- tidb-cloud/data-service-oas-with-nextjs.md | 2 +- tidb-cloud/import-snapshot-files.md | 2 +- tidb-cloud/migrate-from-op-tidb.md | 4 +- ...fication-2023-09-26-console-maintenance.md | 2 +- tidb-cloud/serverless-driver-node-example.md | 2 +- tidb-cloud/serverless-driver.md | 2 +- tidb-cloud/terraform-use-cluster-resource.md | 2 +- ...b-cloud-dm-precheck-and-troubleshooting.md | 14 +- tidb-cloud/tidb-cloud-import-local-files.md | 4 +- tidb-configuration-file.md | 11 +- tidb-global-sort.md | 7 +- .../tidb-lightning-command-line-full.md | 2 +- .../tidb-lightning-configuration.md | 35 +- tidb-lightning/tidb-lightning-data-source.md | 10 +- .../tidb-lightning-distributed-import.md | 2 +- .../tidb-lightning-error-resolution.md | 11 +- ...idb-lightning-logical-import-mode-usage.md | 4 +- tidb-lightning/tidb-lightning-overview.md | 2 +- ...db-lightning-physical-import-mode-usage.md | 53 +- tidb-monitoring-api.md | 2 +- tidb-resource-control.md | 6 +- tidb-roadmap.md | 247 +++-- tidb-troubleshooting-map.md | 6 +- tiflash-upgrade-guide.md | 38 +- tiflash/create-tiflash-replicas.md | 4 +- tiflash/tiflash-spill-disk.md | 4 +- tiflash/tune-tiflash-performance.md | 4 +- tikv-configuration-file.md | 10 +- time-to-live.md | 46 +- tiproxy/tiproxy-command-line-flags.md | 2 +- tiproxy/tiproxy-configuration.md | 12 +- tiproxy/tiproxy-overview.md | 4 +- tispark-overview.md | 4 +- tiup/tiup-cluster-topology-reference.md | 4 + tiup/tiup-cluster.md | 30 +- tiup/tiup-component-cluster-deploy.md | 2 +- tiup/tiup-component-cluster-patch.md | 2 +- tiup/tiup-component-cluster-upgrade.md | 70 +- tiup/tiup-component-dm-upgrade.md | 2 +- tiup/tiup-component-management.md | 12 +- tiup/tiup-mirror-reference.md | 2 +- tiup/tiup-mirror.md | 6 +- tiup/tiup-playground.md | 17 +- troubleshoot-high-disk-io.md | 4 +- tune-tikv-memory-performance.md | 2 +- two-data-centers-in-one-city-deployment.md | 6 +- upgrade-monitoring-services.md | 22 +- upgrade-tidb-using-tiup.md | 39 +- user-account-management.md | 2 +- user-defined-variables.md | 28 +- 801 files changed, 6111 insertions(+), 2315 deletions(-) create mode 100644 accelerated-table-creation.md delete mode 100644 ddl-v2.md create mode 100644 functions-and-operators/sequence-functions.md create mode 100644 media/develop/mysql-workbench-adjust-sqleditor-read-timeout.jpg create mode 100644 media/sqlgram/AdminShowSlow.png create mode 100644 media/sqlgram/AdminStmt.png create mode 100644 media/sqlgram/AlgorithmClause.png create mode 100644 media/sqlgram/AllOrPartitionNameList.png create mode 100644 media/sqlgram/AlterAlgorithm.png create mode 100644 media/sqlgram/AlterDatabaseStmt.png create mode 100644 media/sqlgram/AlterInstanceStmt.png create mode 100644 media/sqlgram/AlterOrderItem.png create mode 100755 media/sqlgram/AlterTableDropIndexSpec.png create mode 100755 media/sqlgram/AlterTableDropIndexStmt.png create mode 100644 media/sqlgram/AlterTableOptionListOpt.png create mode 100644 media/sqlgram/AlterTablePartitionOpt.png create mode 100644 media/sqlgram/AlterTableSpec.png create mode 100644 media/sqlgram/AlterTableSpecListOpt.png create mode 100644 media/sqlgram/AlterTableStmt.png create mode 100644 media/sqlgram/AlterUserStmt.png create mode 100644 media/sqlgram/AnalyzeOption.png create mode 100644 media/sqlgram/AnalyzeOptionListOpt.png create mode 100644 media/sqlgram/AnalyzeTableStmt.png create mode 100644 media/sqlgram/AnyOrAll.png create mode 100644 media/sqlgram/AsOpt.png create mode 100644 media/sqlgram/Assignment.png create mode 100644 media/sqlgram/AssignmentListOpt.png create mode 100644 media/sqlgram/AuthOption.png create mode 100644 media/sqlgram/AuthString.png create mode 100644 media/sqlgram/BRIEBooleanOptionName.png create mode 100644 media/sqlgram/BRIEKeywordOptionName.png create mode 100644 media/sqlgram/BRIEOption.png create mode 100644 media/sqlgram/BRIEStmt.png create mode 100644 media/sqlgram/BRIEStringOptionName.png create mode 100644 media/sqlgram/BeginTransactionStmt.png create mode 100644 media/sqlgram/BetweenOrNotOp.png create mode 100644 media/sqlgram/BinlogStmt.png create mode 100644 media/sqlgram/BitExpr.png create mode 100644 media/sqlgram/BitValueType.png create mode 100644 media/sqlgram/BlobType.png create mode 100644 media/sqlgram/BooleanType.png create mode 100644 media/sqlgram/BuggyDefaultFalseDistinctOpt.png create mode 100644 media/sqlgram/ByItem.png create mode 100644 media/sqlgram/ByList.png create mode 100644 media/sqlgram/CastType.png create mode 100644 media/sqlgram/ChangeStmt.png create mode 100644 media/sqlgram/Char.png create mode 100644 media/sqlgram/CharsetOpt.png create mode 100644 media/sqlgram/ClearPasswordExpireOptions.png create mode 100644 media/sqlgram/CollationName.png create mode 100644 media/sqlgram/ColumnDef.png create mode 100644 media/sqlgram/ColumnFormat.png create mode 100644 media/sqlgram/ColumnKeywordOpt.png create mode 100644 media/sqlgram/ColumnName.png create mode 100644 media/sqlgram/ColumnNameList.png create mode 100644 media/sqlgram/ColumnNameListOpt.png create mode 100644 media/sqlgram/ColumnNameListOptWithBrackets.png create mode 100644 media/sqlgram/ColumnNameOrUserVarListOpt.png create mode 100644 media/sqlgram/ColumnNameOrUserVarListOptWithBrackets.png create mode 100644 media/sqlgram/ColumnNameOrUserVariable.png create mode 100644 media/sqlgram/ColumnOption.png create mode 100644 media/sqlgram/ColumnOptionList.png create mode 100644 media/sqlgram/ColumnOptionListOpt.png create mode 100644 media/sqlgram/ColumnPosition.png create mode 100644 media/sqlgram/ColumnSetValue.png create mode 100644 media/sqlgram/ColumnSetValueList.png create mode 100644 media/sqlgram/CommaOpt.png create mode 100644 media/sqlgram/CommitStmt.png create mode 100644 media/sqlgram/CompareOp.png create mode 100644 media/sqlgram/CompletionTypeWithinTransaction.png create mode 100644 media/sqlgram/ConnectionOption.png create mode 100644 media/sqlgram/ConnectionOptions.png create mode 100644 media/sqlgram/Constraint.png create mode 100644 media/sqlgram/ConstraintElem.png create mode 100644 media/sqlgram/ConstraintKeywordOpt.png create mode 100644 media/sqlgram/CreateBindingStmt.png create mode 100644 media/sqlgram/CreateDatabaseStmt.png create mode 100644 media/sqlgram/CreateIndexStmt.png create mode 100644 media/sqlgram/CreateIndexStmtUnique.png create mode 100644 media/sqlgram/CreateRoleStmt.png create mode 100644 media/sqlgram/CreateSequenceOptionListOpt.png create mode 100644 media/sqlgram/CreateSequenceStmt.png create mode 100644 media/sqlgram/CreateTableLikeStmt.png create mode 100644 media/sqlgram/CreateTableOptionListOpt.png create mode 100644 media/sqlgram/CreateTableSelectOpt.png create mode 100644 media/sqlgram/CreateTableStmt.png create mode 100644 media/sqlgram/CreateUserStmt.png create mode 100644 media/sqlgram/CreateViewSelectOpt.png create mode 100644 media/sqlgram/CreateViewStmt.png create mode 100644 media/sqlgram/CrossOpt.png create mode 100644 media/sqlgram/DatabaseOption.png create mode 100644 media/sqlgram/DatabaseOptionList.png create mode 100644 media/sqlgram/DatabaseOptionListOpt.png create mode 100644 media/sqlgram/DatabaseSym.png create mode 100644 media/sqlgram/DateAndTimeType.png create mode 100644 media/sqlgram/DateArithInterval.png create mode 100644 media/sqlgram/DateArithMultiFormsOpt.png create mode 100644 media/sqlgram/DateArithOpt.png create mode 100644 media/sqlgram/DeallocateStmt.png create mode 100644 media/sqlgram/DeallocateSym.png create mode 100644 media/sqlgram/DefaultFalseDistinctOpt.png create mode 100644 media/sqlgram/DefaultKwdOpt.png create mode 100644 media/sqlgram/DefaultTrueDistinctOpt.png create mode 100644 media/sqlgram/DefaultValueExpr.png create mode 100644 media/sqlgram/DeleteFromStmt.png create mode 100644 media/sqlgram/DistinctKwd.png create mode 100644 media/sqlgram/DistinctOpt.png create mode 100644 media/sqlgram/DoStmt.png create mode 100644 media/sqlgram/DropBindingStmt.png create mode 100644 media/sqlgram/DropDatabaseStmt.png create mode 100644 media/sqlgram/DropIndexStmt.png create mode 100644 media/sqlgram/DropRoleStmt.png create mode 100644 media/sqlgram/DropSequenceStmt.png create mode 100644 media/sqlgram/DropStatsStmt.png create mode 100644 media/sqlgram/DropTableStmt.png create mode 100644 media/sqlgram/DropUserStmt.png create mode 100644 media/sqlgram/DropViewStmt.png create mode 100644 media/sqlgram/DuplicateOpt.png create mode 100644 media/sqlgram/ElseOpt.png create mode 100644 media/sqlgram/EmptyStmt.png create mode 100644 media/sqlgram/Enclosed.png create mode 100644 media/sqlgram/EncryptionOpt.png create mode 100644 media/sqlgram/EnforcedOrNot.png create mode 100644 media/sqlgram/EnforcedOrNotOpt.png create mode 100644 media/sqlgram/EnforcedOrNotOrNotNullOpt.png create mode 100644 media/sqlgram/EqOpt.png create mode 100644 media/sqlgram/EqOrAssignmentEq.png create mode 100644 media/sqlgram/Escaped.png create mode 100644 media/sqlgram/EscapedTableRef.png create mode 100644 media/sqlgram/ExecuteStmt.png create mode 100644 media/sqlgram/ExplainFormatType.png create mode 100644 media/sqlgram/ExplainStmt.png create mode 100644 media/sqlgram/ExplainSym.png create mode 100644 media/sqlgram/ExplainableStmt.png create mode 100644 media/sqlgram/ExprOrDefault.png create mode 100644 media/sqlgram/Expression.png create mode 100644 media/sqlgram/ExpressionList.png create mode 100644 media/sqlgram/ExpressionListListItem.png create mode 100644 media/sqlgram/ExpressionListOpt.png create mode 100644 media/sqlgram/ExpressionOpt.png create mode 100644 media/sqlgram/Field.png create mode 100644 media/sqlgram/FieldAsName.png create mode 100644 media/sqlgram/FieldAsNameOpt.png create mode 100644 media/sqlgram/FieldItem.png create mode 100644 media/sqlgram/FieldLen.png create mode 100644 media/sqlgram/FieldOpt.png create mode 100644 media/sqlgram/FieldOpts.png create mode 100644 media/sqlgram/FieldTerminator.png create mode 100644 media/sqlgram/Fields.png create mode 100644 media/sqlgram/FieldsTerminated.png create mode 100644 media/sqlgram/FixedPointType.png create mode 100755 media/sqlgram/FlashbackTableStmt.png create mode 100755 media/sqlgram/FlashbackToNewName.png create mode 100644 media/sqlgram/FloatOpt.png create mode 100644 media/sqlgram/FloatingPointType.png create mode 100644 media/sqlgram/FlushOption.png create mode 100644 media/sqlgram/FlushStmt.png create mode 100644 media/sqlgram/FulltextSearchModifierOpt.png create mode 100644 media/sqlgram/FuncDatetimePrec.png create mode 100644 media/sqlgram/FuncDatetimePrecList.png create mode 100644 media/sqlgram/FuncDatetimePrecListOpt.png create mode 100644 media/sqlgram/Function.png create mode 100644 media/sqlgram/FunctionCallAgg.png create mode 100644 media/sqlgram/FunctionCallConflict.png create mode 100644 media/sqlgram/FunctionCallGeneric.png create mode 100644 media/sqlgram/FunctionCallKeyword.png create mode 100644 media/sqlgram/FunctionCallNonKeyword.png create mode 100644 media/sqlgram/FunctionNameConflict.png create mode 100644 media/sqlgram/FunctionNameDateArith.png create mode 100644 media/sqlgram/FunctionNameDateArithMultiForms.png create mode 100644 media/sqlgram/FunctionNameDatetimePrecision.png create mode 100644 media/sqlgram/FunctionNameOptionalBraces.png create mode 100644 media/sqlgram/FunctionNameSequence.png create mode 100644 media/sqlgram/GeneratedAlways.png create mode 100644 media/sqlgram/GetFormatSelector.png create mode 100644 media/sqlgram/GrantRoleStmt.png create mode 100644 media/sqlgram/GrantStmt.png create mode 100644 media/sqlgram/GroupByClause.png create mode 100644 media/sqlgram/HandleRange.png create mode 100644 media/sqlgram/HashString.png create mode 100644 media/sqlgram/HintTableList.png create mode 100644 media/sqlgram/Identifier.png create mode 100755 media/sqlgram/IfExists.png create mode 100644 media/sqlgram/IfNotExists.png create mode 100644 media/sqlgram/IgnoreLines.png create mode 100755 media/sqlgram/IgnoreOptional.png create mode 100644 media/sqlgram/InOrNotOp.png create mode 100644 media/sqlgram/IndexAdviseStmt.png create mode 100644 media/sqlgram/IndexColName.png create mode 100644 media/sqlgram/IndexColNameList.png create mode 100644 media/sqlgram/IndexHint.png create mode 100644 media/sqlgram/IndexHintListOpt.png create mode 100644 media/sqlgram/IndexHintScope.png create mode 100644 media/sqlgram/IndexHintType.png create mode 100644 media/sqlgram/IndexInvisible.png create mode 100644 media/sqlgram/IndexKeyTypeOpt.png create mode 100644 media/sqlgram/IndexLockAndAlgorithmOpt.png create mode 100644 media/sqlgram/IndexName.png create mode 100644 media/sqlgram/IndexNameAndTypeOpt.png create mode 100644 media/sqlgram/IndexNameList.png create mode 100644 media/sqlgram/IndexOption.png create mode 100644 media/sqlgram/IndexOptionList.png create mode 100644 media/sqlgram/IndexPartSpecification.png create mode 100644 media/sqlgram/IndexPartSpecificationList.png create mode 100644 media/sqlgram/IndexPartSpecificationListOpt.png create mode 100644 media/sqlgram/IndexType.png create mode 100644 media/sqlgram/IndexTypeName.png create mode 100644 media/sqlgram/IndexTypeOpt.png create mode 100644 media/sqlgram/InsertIntoStmt.png create mode 100644 media/sqlgram/InsertValues.png create mode 100644 media/sqlgram/InstanceOption.png create mode 100644 media/sqlgram/IntegerType.png create mode 100644 media/sqlgram/IntoOpt.png create mode 100644 media/sqlgram/IsOrNotOp.png create mode 100644 media/sqlgram/IsolationLevel.png create mode 100644 media/sqlgram/JoinTable.png create mode 100644 media/sqlgram/JoinType.png create mode 100644 media/sqlgram/KeyOrIndex.png create mode 100644 media/sqlgram/KeyOrIndexOpt.png create mode 100644 media/sqlgram/KillOrKillTiDB.png create mode 100644 media/sqlgram/KillStmt.png create mode 100644 media/sqlgram/LengthNum.png create mode 100644 media/sqlgram/LikeEscapeOpt.png create mode 100644 media/sqlgram/LikeOrNotOp.png create mode 100644 media/sqlgram/LikeTableWithOrWithoutParen.png create mode 100644 media/sqlgram/LimitOption.png create mode 100644 media/sqlgram/LinearOpt.png create mode 100644 media/sqlgram/Lines.png create mode 100644 media/sqlgram/LinesTerminated.png create mode 100644 media/sqlgram/Literal.png create mode 100644 media/sqlgram/LoadDataSetItem.png create mode 100644 media/sqlgram/LoadDataSetSpecOpt.png create mode 100644 media/sqlgram/LoadDataStmt.png create mode 100644 media/sqlgram/LoadStatsStmt.png create mode 100644 media/sqlgram/LocalOpt.png create mode 100644 media/sqlgram/LocationLabelList.png create mode 100644 media/sqlgram/LockClause.png create mode 100644 media/sqlgram/LockClauseOpt.png create mode 100644 media/sqlgram/LockTablesStmt.png create mode 100644 media/sqlgram/LockType.png create mode 100644 media/sqlgram/LogTypeOpt.png create mode 100644 media/sqlgram/LowPriorityOptional.png create mode 100644 media/sqlgram/Match.png create mode 100644 media/sqlgram/MatchOpt.png create mode 100644 media/sqlgram/MaxIndexNumOpt.png create mode 100644 media/sqlgram/MaxMinutesOpt.png create mode 100644 media/sqlgram/MaxNumBuckets.png create mode 100644 media/sqlgram/MaxValueOrExpression.png create mode 100644 media/sqlgram/MaxValueOrExpressionList.png create mode 100644 media/sqlgram/NChar.png create mode 100755 media/sqlgram/NUM.png create mode 100644 media/sqlgram/NVarchar.png create mode 100644 media/sqlgram/NationalOpt.png create mode 100644 media/sqlgram/NextValueForSequence.png create mode 100644 media/sqlgram/NoWriteToBinLogAliasOpt.png create mode 100644 media/sqlgram/NotKeywordToken.png create mode 100644 media/sqlgram/NotOpt.png create mode 100644 media/sqlgram/NowSym.png create mode 100644 media/sqlgram/NowSymFunc.png create mode 100644 media/sqlgram/NowSymOptionFraction.png create mode 100644 media/sqlgram/NumList.png create mode 100644 media/sqlgram/NumLiteral.png create mode 100644 media/sqlgram/NumericType.png create mode 100644 media/sqlgram/ODBCDateTimeType.png create mode 100644 media/sqlgram/ObjectType.png create mode 100644 media/sqlgram/OnDelete.png create mode 100644 media/sqlgram/OnDeleteOpt.png create mode 100644 media/sqlgram/OnDeleteUpdateOpt.png create mode 100644 media/sqlgram/OnDuplicateKeyUpdate.png create mode 100644 media/sqlgram/OnUpdate.png create mode 100644 media/sqlgram/OnUpdateOpt.png create mode 100644 media/sqlgram/Operand.png create mode 100644 media/sqlgram/OptBinMod.png create mode 100644 media/sqlgram/OptBinary.png create mode 100644 media/sqlgram/OptCharset.png create mode 100644 media/sqlgram/OptCharsetWithOptBinary.png create mode 100644 media/sqlgram/OptCollate.png create mode 100644 media/sqlgram/OptExistingWindowName.png create mode 100644 media/sqlgram/OptFieldLen.png create mode 100644 media/sqlgram/OptFromFirstLast.png create mode 100644 media/sqlgram/OptGConcatSeparator.png create mode 100644 media/sqlgram/OptInteger.png create mode 100644 media/sqlgram/OptLLDefault.png create mode 100644 media/sqlgram/OptLeadLagInfo.png create mode 100644 media/sqlgram/OptNullTreatment.png create mode 100644 media/sqlgram/OptPartitionClause.png create mode 100644 media/sqlgram/OptTemporary.png create mode 100644 media/sqlgram/OptWild.png create mode 100644 media/sqlgram/OptWindowFrameClause.png create mode 100644 media/sqlgram/OptWindowOrderByClause.png create mode 100644 media/sqlgram/OptWindowingClause.png create mode 100644 media/sqlgram/OptionalBraces.png create mode 100644 media/sqlgram/OrReplace.png create mode 100644 media/sqlgram/Order.png create mode 100644 media/sqlgram/OrderBy.png create mode 100644 media/sqlgram/OuterOpt.png create mode 100644 media/sqlgram/PartDefOption.png create mode 100644 media/sqlgram/PartDefOptionList.png create mode 100644 media/sqlgram/PartDefOptionsOpt.png create mode 100644 media/sqlgram/PartDefValuesOpt.png create mode 100644 media/sqlgram/PartitionDefinition.png create mode 100644 media/sqlgram/PartitionDefinitionList.png create mode 100644 media/sqlgram/PartitionDefinitionListOpt.png create mode 100644 media/sqlgram/PartitionKeyAlgorithmOpt.png create mode 100644 media/sqlgram/PartitionMethod.png create mode 100644 media/sqlgram/PartitionNameList.png create mode 100644 media/sqlgram/PartitionNumOpt.png create mode 100644 media/sqlgram/PartitionOpt.png create mode 100644 media/sqlgram/PasswordExpire.png create mode 100644 media/sqlgram/PasswordOpt.png create mode 100644 media/sqlgram/PasswordOrLockOption.png create mode 100644 media/sqlgram/PasswordOrLockOptions.png create mode 100644 media/sqlgram/PerDB.png create mode 100644 media/sqlgram/PerTable.png create mode 100644 media/sqlgram/PluginNameList.png create mode 100644 media/sqlgram/Precision.png create mode 100644 media/sqlgram/PredicateExpr.png create mode 100644 media/sqlgram/PrepareSQL.png create mode 100644 media/sqlgram/PreparedStmt.png create mode 100644 media/sqlgram/PrimaryExpression.png create mode 100644 media/sqlgram/PrimaryFactor.png create mode 100644 media/sqlgram/PrimaryOpt.png create mode 100644 media/sqlgram/Priority.png create mode 100644 media/sqlgram/PrivElem.png create mode 100644 media/sqlgram/PrivElemList.png create mode 100644 media/sqlgram/PrivLevel.png create mode 100644 media/sqlgram/PrivType.png create mode 100644 media/sqlgram/QuickOptional.png create mode 100755 media/sqlgram/RecoverTableStmt.png create mode 100644 media/sqlgram/ReferDef.png create mode 100644 media/sqlgram/ReferOpt.png create mode 100644 media/sqlgram/RegexpOrNotOp.png create mode 100644 media/sqlgram/RegexpSym.png create mode 100755 media/sqlgram/RenameTableStmt.png create mode 100644 media/sqlgram/ReorganizePartitionRuleOpt.png create mode 100644 media/sqlgram/ReplaceIntoStmt.png create mode 100644 media/sqlgram/ReplacePriority.png create mode 100644 media/sqlgram/RequireClause.png create mode 100644 media/sqlgram/RequireClauseOpt.png create mode 100644 media/sqlgram/RequireListElement.png create mode 100644 media/sqlgram/RestrictOrCascadeOpt.png create mode 100644 media/sqlgram/RevokeRoleStmt.png create mode 100644 media/sqlgram/RevokeStmt.png create mode 100644 media/sqlgram/RoleNameString.png create mode 100644 media/sqlgram/RoleSpec.png create mode 100644 media/sqlgram/RollbackStmt.png create mode 100644 media/sqlgram/RowFormat.png create mode 100644 media/sqlgram/SelectStmtBasic.png create mode 100644 media/sqlgram/SelectStmtCalcFoundRows.png create mode 100644 media/sqlgram/SelectStmtDistinct.png create mode 100644 media/sqlgram/SelectStmtFromDualTable.png create mode 100644 media/sqlgram/SelectStmtFromTable.png create mode 100644 media/sqlgram/SelectStmtIntoOption.png create mode 100644 media/sqlgram/SelectStmtSQLBigResult.png create mode 100644 media/sqlgram/SelectStmtSQLBufferResult.png create mode 100644 media/sqlgram/SelectStmtSQLCache.png create mode 100644 media/sqlgram/SelectStmtSQLSmallResult.png create mode 100644 media/sqlgram/SelectStmtStraightJoin.png create mode 100644 media/sqlgram/SequenceOption.png create mode 100644 media/sqlgram/SequenceOptionList.png create mode 100644 media/sqlgram/SetExpr.png create mode 100644 media/sqlgram/ShowProfileArgsOpt.png create mode 100644 media/sqlgram/ShowProfileType.png create mode 100644 media/sqlgram/ShowProfileTypesOpt.png create mode 100644 media/sqlgram/SignedLiteral.png create mode 100644 media/sqlgram/SignedNum.png create mode 100644 media/sqlgram/SimpleExpr.png create mode 100644 media/sqlgram/SimpleIdent.png create mode 100644 media/sqlgram/Start.png create mode 100644 media/sqlgram/Starting.png create mode 100644 media/sqlgram/Statement.png create mode 100644 media/sqlgram/StatsPersistentVal.png create mode 100644 media/sqlgram/StorageMedia.png create mode 100644 media/sqlgram/StringList.png create mode 100644 media/sqlgram/StringNameOrBRIEOptionKeyword.png create mode 100644 media/sqlgram/StringType.png create mode 100644 media/sqlgram/SubPartDefinition.png create mode 100644 media/sqlgram/SubPartDefinitionListOpt.png create mode 100644 media/sqlgram/SubPartitionMethod.png create mode 100644 media/sqlgram/SubPartitionNumOpt.png create mode 100644 media/sqlgram/SubPartitionOpt.png create mode 100644 media/sqlgram/SubSelect.png create mode 100644 media/sqlgram/SumExpr.png create mode 100644 media/sqlgram/Symbol.png create mode 100644 media/sqlgram/SystemVariable.png create mode 100644 media/sqlgram/TableAliasRefList.png create mode 100644 media/sqlgram/TableAsName.png create mode 100644 media/sqlgram/TableAsNameOpt.png create mode 100644 media/sqlgram/TableElement.png create mode 100644 media/sqlgram/TableElementList.png create mode 100644 media/sqlgram/TableElementListOpt.png create mode 100644 media/sqlgram/TableFactor.png create mode 100644 media/sqlgram/TableLock.png create mode 100644 media/sqlgram/TableNameList.png create mode 100644 media/sqlgram/TableNameListOpt.png create mode 100644 media/sqlgram/TableNameOptWild.png create mode 100644 media/sqlgram/TableOptimizerHints.png create mode 100644 media/sqlgram/TableOption.png create mode 100644 media/sqlgram/TableOptionList.png create mode 100644 media/sqlgram/TableOptionListOpt.png create mode 100644 media/sqlgram/TableOrTables.png create mode 100644 media/sqlgram/TableRefsClause.png create mode 100755 media/sqlgram/TableToTable.png create mode 100644 media/sqlgram/TablesTerminalSym.png create mode 100644 media/sqlgram/TextType.png create mode 100644 media/sqlgram/TiDBKeyword.png create mode 100644 media/sqlgram/TimeUnit.png create mode 100644 media/sqlgram/TimestampBound.png create mode 100644 media/sqlgram/TimestampUnit.png create mode 100644 media/sqlgram/TransactionChar.png create mode 100644 media/sqlgram/TrimDirection.png create mode 100644 media/sqlgram/Type.png create mode 100644 media/sqlgram/UnReservedKeyword.png create mode 100644 media/sqlgram/UnionOpt.png create mode 100644 media/sqlgram/UnionSelect.png create mode 100644 media/sqlgram/UnionStmt.png create mode 100644 media/sqlgram/UnlockTablesStmt.png create mode 100644 media/sqlgram/UseStmt.png create mode 100644 media/sqlgram/UserSpec.png create mode 100644 media/sqlgram/UserSpecList.png create mode 100644 media/sqlgram/UserVariable.png create mode 100644 media/sqlgram/ValueSym.png create mode 100644 media/sqlgram/ValuesList.png create mode 100644 media/sqlgram/ValuesOpt.png create mode 100644 media/sqlgram/Varchar.png create mode 100644 media/sqlgram/Variable.png create mode 100644 media/sqlgram/VariableName.png create mode 100644 media/sqlgram/ViewAlgorithm.png create mode 100644 media/sqlgram/ViewCheckOption.png create mode 100644 media/sqlgram/ViewDefiner.png create mode 100644 media/sqlgram/ViewFieldList.png create mode 100644 media/sqlgram/ViewName.png create mode 100644 media/sqlgram/ViewSQLSecurity.png create mode 100644 media/sqlgram/VirtualOrStored.png create mode 100644 media/sqlgram/WhenClause.png create mode 100644 media/sqlgram/WindowDefinition.png create mode 100644 media/sqlgram/WindowFrameBetween.png create mode 100644 media/sqlgram/WindowFrameBound.png create mode 100644 media/sqlgram/WindowFrameExtent.png create mode 100644 media/sqlgram/WindowFrameStart.png create mode 100644 media/sqlgram/WindowFrameUnits.png create mode 100644 media/sqlgram/WindowFuncCall.png create mode 100644 media/sqlgram/WindowName.png create mode 100644 media/sqlgram/WindowNameOrSpec.png create mode 100644 media/sqlgram/WindowSpec.png create mode 100644 media/sqlgram/WindowSpecDetails.png create mode 100644 media/sqlgram/WindowingClause.png create mode 100644 media/sqlgram/WithGrantOptionOpt.png create mode 100644 media/sqlgram/WithReadLockOpt.png create mode 100644 media/sqlgram/WithValidation.png create mode 100644 media/sqlgram/WithValidationOpt.png create mode 100644 media/sqlgram/Year.png create mode 100644 media/sqlgram/logAnd.png create mode 100644 media/sqlgram/logOr.png create mode 100644 releases/release-6.5.9.md create mode 100644 releases/release-7.1.5.md create mode 100644 releases/release-8.0.0.md create mode 100644 sql-statements/sql-statement-alter-sequence.md rename sql-statements/{sql-statement-show-histograms.md => sql-statement-show-stats-histograms.md} (86%) rename sys-schema.md => sys-schema/sys-schema-unused-indexes.md (70%) create mode 100644 sys-schema/sys-schema.md create mode 100644 ticdc/ticdc-behavior-change.md create mode 100644 ticdc/ticdc-client-authentication.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e86a47b2f9c8f..bc2ed66ad4e30 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -24,10 +24,10 @@ By default, **CHOOSE MASTER ONLY** so your changes will be applied to the next T For details, see [tips for choosing the affected versions](https://github.com/pingcap/docs/blob/master/CONTRIBUTING.md#guideline-for-choosing-the-affected-versions). - [ ] master (the latest development version) +- [ ] v8.1 (TiDB 8.1 versions) - [ ] v8.0 (TiDB 8.0 versions) - [ ] v7.6 (TiDB 7.6 versions) - [ ] v7.5 (TiDB 7.5 versions) -- [ ] v7.4 (TiDB 7.4 versions) - [ ] v7.1 (TiDB 7.1 versions) - [ ] v6.5 (TiDB 6.5 versions) - [ ] v6.1 (TiDB 6.1 versions) @@ -35,7 +35,6 @@ For details, see [tips for choosing the affected versions](https://github.com/pi - [ ] v5.3 (TiDB 5.3 versions) - [ ] v5.2 (TiDB 5.2 versions) - [ ] v5.1 (TiDB 5.1 versions) -- [ ] v5.0 (TiDB 5.0 versions) ### What is the related PR or file link(s)? diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1a93b303192fd..45d885dc8abae 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,8 +11,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: "18" - name: Verify duplicated file names @@ -32,8 +32,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: "18" - name: Check TOC-tidb-cloud.md existence @@ -57,7 +57,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Vale Linter uses: errata-ai/vale-action@v2.0.1 with: diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 252ed8cab9bbc..7755a1e489898 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -10,17 +10,17 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download translator repo with: repository: "shczhen/markdown-translator" path: "markdown-translator" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download docs repo and specified branch with: ref: "i18n-ja-release-7.5" path: "docs" - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 name: Setup node 18 with: node-version: 18 @@ -68,17 +68,17 @@ jobs: # runs-on: ubuntu-latest # steps: -# - uses: actions/checkout@v3 +# - uses: actions/checkout@v4 # name: Download translator repo # with: # repository: "shczhen/markdown-translator" # path: "markdown-translator" -# - uses: actions/checkout@v3 +# - uses: actions/checkout@v4 # name: Download docs repo and specified branch # with: # ref: "i18n-ja-release-7.1" # path: "docs" -# - uses: actions/setup-node@v3 +# - uses: actions/setup-node@v4 # name: Setup node 18 # with: # node-version: 18 diff --git a/.github/workflows/ja-full-translation-google.yaml b/.github/workflows/ja-full-translation-google.yaml index 18c2d3edeef8c..39e6045bf74b7 100644 --- a/.github/workflows/ja-full-translation-google.yaml +++ b/.github/workflows/ja-full-translation-google.yaml @@ -7,17 +7,17 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download translator repo with: repository: "shczhen/markdown-translator" path: "markdown-translator" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download specified branch of docs repo with: ref: "release-7.5" path: "docs" - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 name: Setup node 18 with: node-version: 18 diff --git a/.github/workflows/link-fail-fast.yaml b/.github/workflows/link-fail-fast.yaml index 146f4d0a21f02..a5e4677d08972 100644 --- a/.github/workflows/link-fail-fast.yaml +++ b/.github/workflows/link-fail-fast.yaml @@ -7,7 +7,7 @@ jobs: linkChecker: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 2 diff --git a/.github/workflows/link.yaml b/.github/workflows/link.yaml index 4536d939fe79d..5a31c2df21dbd 100644 --- a/.github/workflows/link.yaml +++ b/.github/workflows/link.yaml @@ -10,7 +10,7 @@ jobs: linkChecker: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download Exclude Path run: | diff --git a/.github/workflows/media.yml b/.github/workflows/media.yml index 71ae0a603ac6b..bb69844588170 100644 --- a/.github/workflows/media.yml +++ b/.github/workflows/media.yml @@ -11,7 +11,7 @@ jobs: name: Upload media files runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # Must use at least depth 2! fetch-depth: 2 diff --git a/.github/workflows/prevent-deletion.yaml b/.github/workflows/prevent-deletion.yaml index 62b6c32c9a506..8e4a9994fa0f7 100644 --- a/.github/workflows/prevent-deletion.yaml +++ b/.github/workflows/prevent-deletion.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout base - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Fetch head run: | git remote add head ${{ github.event.pull_request.head.repo.clone_url }} diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index 73cce3c0fa894..7d3f25c248dcd 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the latest code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.REBASE_SECRET_KEY }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo diff --git a/.github/workflows/translation.yaml b/.github/workflows/translation.yaml index fd8ec27d49a84..e9c8c488b4646 100644 --- a/.github/workflows/translation.yaml +++ b/.github/workflows/translation.yaml @@ -8,18 +8,18 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download translator repo with: repository: "shczhen/markdown-translator" ref: "openai" path: "markdown-translator" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Download docs repo and specified branch with: ref: "i18n-ja-release-7.1" path: "docs" - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 name: Setup node 18 with: node-version: 18 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3d9ccc98b1ad2..a95ce9e6ca663 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,7 +44,7 @@ Please check out these templates before you submit a pull request: We use separate branches to maintain different versions of TiDB documentation. - The [documentation under development](https://docs.pingcap.com/tidb/dev) is maintained in the `master` branch. -- The [published documentation](https://docs.pingcap.com/tidb/stable/) is maintained in the corresponding `release-` branch. For example, TiDB v7.5 documentation is maintained in the `release-7.5` branch. +- The [published documentation](https://docs.pingcap.com/tidb/stable/) is maintained in the corresponding `release-` branch. For example, TiDB v7.5 documentation is maintained in the `release-7.5` branch. - The [archived documentation](https://docs-archive.pingcap.com/) is no longer maintained and does not receive any further updates. ### Use cherry-pick labels diff --git a/README.md b/README.md index 7a11f7d78f8cd..fb0f88abf30e7 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,10 @@ Currently, we maintain the following versions of TiDB documentation in different | Branch name | TiDB docs version | | :---------|:----------| | [`master`](https://github.com/pingcap/docs/tree/master) | The latest development version | +| [`release-8.0`](https://github.com/pingcap/docs/tree/release-8.0) | 8.0 Development Milestone Release | | [`release-7.6`](https://github.com/pingcap/docs/tree/release-7.6) | 7.6 Development Milestone Release | | [`release-7.5`](https://github.com/pingcap/docs/tree/release-7.5) | 7.5 LTS (Long-Term Support) | -| [`release-7.4`](https://github.com/pingcap/docs/tree/release-7.4) | 7.4 Development Milestone Release | +| [`release-7.4`](https://github.com/pingcap/docs/tree/release-7.4) | 7.4 Development Milestone Release (Archived documentation, no longer updated) | | [`release-7.3`](https://github.com/pingcap/docs/tree/release-7.3) | 7.3 Development Milestone Release (Archived documentation, no longer updated) | | [`release-7.2`](https://github.com/pingcap/docs/tree/release-7.2) | 7.2 Development Milestone Release (Archived documentation, no longer updated) | | [`release-7.1`](https://github.com/pingcap/docs/tree/release-7.1) | 7.1 LTS (Long-Term Support) version | @@ -46,8 +47,8 @@ Currently, we maintain the following versions of TiDB documentation in different | [`release-5.3`](https://github.com/pingcap/docs/tree/release-5.3) | 5.3 stable version | | [`release-5.2`](https://github.com/pingcap/docs/tree/release-5.2) | 5.2 stable version | | [`release-5.1`](https://github.com/pingcap/docs/tree/release-5.1) | 5.1 stable version | -| [`release-5.0`](https://github.com/pingcap/docs/tree/release-5.0) | 5.0 stable version | -| [`release-4.0`](https://github.com/pingcap/docs/tree/release-4.0) | 4.0 stable version | +| [`release-5.0`](https://github.com/pingcap/docs/tree/release-5.0) | 5.0 stable version (Archived documentation, no longer updated) | +| [`release-4.0`](https://github.com/pingcap/docs/tree/release-4.0) | 4.0 stable version (Archived documentation, no longer updated) | | [`release-3.1`](https://github.com/pingcap/docs/tree/release-3.1) | 3.1 stable version (Archived documentation, no longer updated) | | [`release-3.0`](https://github.com/pingcap/docs/tree/release-3.0) | 3.0 stable version (Archived documentation, no longer updated) | | [`release-2.1`](https://github.com/pingcap/docs/tree/release-2.1) | 2.1 stable version (Archived documentation, no longer updated) | diff --git a/TOC-tidb-cloud.md b/TOC-tidb-cloud.md index 5c46152b16969..27e0234bb1137 100644 --- a/TOC-tidb-cloud.md +++ b/TOC-tidb-cloud.md @@ -365,6 +365,7 @@ - [`ALTER PLACEMENT POLICY`](/sql-statements/sql-statement-alter-placement-policy.md) - [`ALTER RANGE`](/sql-statements/sql-statement-alter-range.md) - [`ALTER RESOURCE GROUP`](/sql-statements/sql-statement-alter-resource-group.md) + - [`ALTER SEQUENCE`](/sql-statements/sql-statement-alter-sequence.md) - [`ALTER TABLE`](/sql-statements/sql-statement-alter-table.md) - [`ALTER TABLE COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) - [`ALTER USER`](/sql-statements/sql-statement-alter-user.md) @@ -472,7 +473,7 @@ - [`SHOW PROFILES`](/sql-statements/sql-statement-show-profiles.md) - [`SHOW SCHEMAS`](/sql-statements/sql-statement-show-schemas.md) - [`SHOW STATS_HEALTHY`](/sql-statements/sql-statement-show-stats-healthy.md) - - [`SHOW STATS_HISTOGRAMS`](/sql-statements/sql-statement-show-histograms.md) + - [`SHOW STATS_HISTOGRAMS`](/sql-statements/sql-statement-show-stats-histograms.md) - [`SHOW STATS_LOCKED`](/sql-statements/sql-statement-show-stats-locked.md) - [`SHOW STATS_META`](/sql-statements/sql-statement-show-stats-meta.md) - [`SHOW STATUS`](/sql-statements/sql-statement-show-status.md) @@ -518,6 +519,7 @@ - [Miscellaneous Functions](/functions-and-operators/miscellaneous-functions.md) - [Precision Math](/functions-and-operators/precision-math.md) - [Set Operations](/functions-and-operators/set-operators.md) + - [Sequence Functions](/functions-and-operators/sequence-functions.md) - [List of Expressions for Pushdown](/functions-and-operators/expressions-pushed-down.md) - [TiDB Specific Functions](/functions-and-operators/tidb-functions.md) - [Clustered Indexes](/clustered-indexes.md) @@ -601,9 +603,12 @@ - PERFORMANCE_SCHEMA - [Overview](/performance-schema/performance-schema.md) - [`SESSION_CONNECT_ATTRS`](/performance-schema/performance-schema-session-connect-attrs.md) + - SYS + - [Overview](/sys-schema/sys-schema.md) + - [`schema_unused_indexes`](/sys-schema/sys-schema-unused-indexes.md) - [Metadata Lock](/metadata-lock.md) - [Use UUIDs](/best-practices/uuid.md) - - [TiDB DDL V2](/ddl-v2.md) + - [TiDB Accelerated Table Creation](/accelerated-table-creation.md) - [System Variables](/system-variables.md) - [Server Status Variables](/status-variables.md) - Storage Engines diff --git a/TOC.md b/TOC.md index 4fc8ade65b8bd..627b2bbe4e4fb 100644 --- a/TOC.md +++ b/TOC.md @@ -4,7 +4,7 @@ - [Docs Home](https://docs.pingcap.com/) - About TiDB - [TiDB Introduction](/overview.md) - - [TiDB 7.6 Release Notes](/releases/release-7.6.0.md) + - [TiDB 8.0 Release Notes](/releases/release-8.0.0.md) - [Features](/basic-features.md) - [MySQL Compatibility](/mysql-compatibility.md) - [TiDB Limitations](/tidb-limitations.md) @@ -526,10 +526,13 @@ - [Target Database Requirements](/tidb-lightning/tidb-lightning-requirements.md) - Data Sources - [Data Match Rules](/tidb-lightning/tidb-lightning-data-source.md) + - [Rename databases and tables](/tidb-lightning/tidb-lightning-data-source.md#rename-databases-and-tables) - [CSV](/tidb-lightning/tidb-lightning-data-source.md#csv) - [SQL](/tidb-lightning/tidb-lightning-data-source.md#sql) - [Parquet](/tidb-lightning/tidb-lightning-data-source.md#parquet) + - [Compressed files](/tidb-lightning/tidb-lightning-data-source.md#compressed-files) - [Customized File](/tidb-lightning/tidb-lightning-data-source.md#match-customized-files) + - [Import data from Amazon S3](/tidb-lightning/tidb-lightning-data-source.md#import-data-from-amazon-s3) - Physical Import Mode - [Requirements and Limitations](/tidb-lightning/tidb-lightning-physical-import-mode.md) - [Use Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md) @@ -561,11 +564,13 @@ - [Replicate Data to Pulsar](/ticdc/ticdc-sink-to-pulsar.md) - [Replicate Data to Storage Services](/ticdc/ticdc-sink-to-cloud-storage.md) - [Manage Changefeeds](/ticdc/ticdc-manage-changefeed.md) + - [TiCDC Client Authentication](/ticdc/ticdc-client-authentication.md) - [Log Filter](/ticdc/ticdc-filter.md) - [DDL Replication](/ticdc/ticdc-ddl.md) - [Bidirectional Replication](/ticdc/ticdc-bidirectional-replication.md) - [Data Integrity Validation for Single-Row Data](/ticdc/ticdc-integrity-check.md) - [Data Consistency Validation for TiDB Upstream/Downstream Clusters](/ticdc/ticdc-upstream-downstream-check.md) + - [TiCDC Behavior Changes](/ticdc/ticdc-behavior-change.md) - Monitor and Alert - [Monitoring Metrics Summary](/ticdc/ticdc-summary-monitor.md) - [Monitoring Metrics Details](/ticdc/monitor-ticdc.md) @@ -732,6 +737,7 @@ - [`ALTER PLACEMENT POLICY`](/sql-statements/sql-statement-alter-placement-policy.md) - [`ALTER RANGE`](/sql-statements/sql-statement-alter-range.md) - [`ALTER RESOURCE GROUP`](/sql-statements/sql-statement-alter-resource-group.md) + - [`ALTER SEQUENCE`](/sql-statements/sql-statement-alter-sequence.md) - [`ALTER TABLE`](/sql-statements/sql-statement-alter-table.md) - [`ALTER TABLE COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) - [`ALTER USER`](/sql-statements/sql-statement-alter-user.md) @@ -845,7 +851,7 @@ - [`SHOW PUMP STATUS`](/sql-statements/sql-statement-show-pump-status.md) - [`SHOW SCHEMAS`](/sql-statements/sql-statement-show-schemas.md) - [`SHOW STATS_HEALTHY`](/sql-statements/sql-statement-show-stats-healthy.md) - - [`SHOW STATS_HISTOGRAMS`](/sql-statements/sql-statement-show-histograms.md) + - [`SHOW STATS_HISTOGRAMS`](/sql-statements/sql-statement-show-stats-histograms.md) - [`SHOW STATS_LOCKED`](/sql-statements/sql-statement-show-stats-locked.md) - [`SHOW STATS_META`](/sql-statements/sql-statement-show-stats-meta.md) - [`SHOW STATUS`](/sql-statements/sql-statement-show-status.md) @@ -892,6 +898,7 @@ - [Miscellaneous Functions](/functions-and-operators/miscellaneous-functions.md) - [Precision Math](/functions-and-operators/precision-math.md) - [Set Operations](/functions-and-operators/set-operators.md) + - [Sequence Functions](/functions-and-operators/sequence-functions.md) - [List of Expressions for Pushdown](/functions-and-operators/expressions-pushed-down.md) - [TiDB Specific Functions](/functions-and-operators/tidb-functions.md) - [Comparisons between Functions and Syntax of Oracle and TiDB](/oracle-functions-to-tidb.md) @@ -981,9 +988,11 @@ - PERFORMANCE_SCHEMA - [Overview](/performance-schema/performance-schema.md) - [`SESSION_CONNECT_ATTRS`](/performance-schema/performance-schema-session-connect-attrs.md) - - [`SYS`](/sys-schema.md) + - SYS + - [Overview](/sys-schema/sys-schema.md) + - [`schema_unused_indexes`](/sys-schema/sys-schema-unused-indexes.md) - [Metadata Lock](/metadata-lock.md) - - [TiDB DDL V2](/ddl-v2.md) + - [TiDB Accelerated Table Creation](/accelerated-table-creation.md) - UI - TiDB Dashboard - [Overview](/dashboard/dashboard-intro.md) @@ -1038,8 +1047,10 @@ - [Release Timeline](/releases/release-timeline.md) - [TiDB Versioning](/releases/versioning.md) - [TiDB Installation Packages](/binary-package.md) + - v8.0 + - [8.0.0-DMR](/releases/release-8.0.0.md) - v7.6 - - [7.6.0](/releases/release-7.6.0.md) + - [7.6.0-DMR](/releases/release-7.6.0.md) - v7.5 - [7.5.1](/releases/release-7.5.1.md) - [7.5.0](/releases/release-7.5.0.md) @@ -1050,6 +1061,7 @@ - v7.2 - [7.2.0-DMR](/releases/release-7.2.0.md) - v7.1 + - [7.1.5](/releases/release-7.1.5.md) - [7.1.4](/releases/release-7.1.4.md) - [7.1.3](/releases/release-7.1.3.md) - [7.1.2](/releases/release-7.1.2.md) @@ -1060,6 +1072,7 @@ - v6.6 - [6.6.0-DMR](/releases/release-6.6.0.md) - v6.5 + - [6.5.9](/releases/release-6.5.9.md) - [6.5.8](/releases/release-6.5.8.md) - [6.5.7](/releases/release-6.5.7.md) - [6.5.6](/releases/release-6.5.6.md) diff --git a/_docHome.md b/_docHome.md index cb0ac6782d1ce..db74f2c1a4b1c 100644 --- a/_docHome.md +++ b/_docHome.md @@ -76,7 +76,7 @@ Learn how to deploy TiDB locally in a production environment. The open-source TiDB platform is released under the Apache 2.0 license and is supported by the community. -Download +View on GitHub diff --git a/accelerated-table-creation.md b/accelerated-table-creation.md new file mode 100644 index 0000000000000..f97eec9d5cfd0 --- /dev/null +++ b/accelerated-table-creation.md @@ -0,0 +1,57 @@ +--- +title: TiDB Accelerated Table Creation +summary: Learn the concept, principles, and implementation details of performance optimization for creating tables in TiDB. +aliases: ['/tidb/dev/ddl-v2/'] +--- + +# TiDB Accelerated Table Creation + +TiDB v7.6.0 introduces the system variable [`tidb_ddl_version`](https://docs.pingcap.com/tidb/v7.6/system-variables#tidb_enable_fast_create_table-new-in-v800) to support accelerating table creation, which improves the efficiency of bulk table creation. Starting from v8.0.0, this system variable is renamed to [`tidb_enable_fast_create_table`](/system-variables.md#tidb_enable_fast_create_table-new-in-v800). + +TiDB uses the online asynchronous schema change algorithm to change the metadata. All DDL jobs are submitted to the `mysql.tidb_ddl_job` table, and the owner node pulls the DDL job to execute. After executing each phase of the online DDL algorithm, the DDL job is marked as completed and moved to the `mysql.tidb_ddl_history` table. Therefore, DDL statements can only be executed on the owner node and cannot be linearly extended. + +However, for some DDL statements, it is not necessary to strictly follow the online DDL algorithm. For example, the `CREATE TABLE` statement only has two states for the job: `none` and `public`. Therefore, TiDB can simplify the execution process of DDL, and executes the `CREATE TABLE` statement on a non-owner node to accelerate table creation. + +> **Warning:** +> +> This feature is currently an experimental feature and it is not recommended to use in a production environment. This feature might change or be removed without prior notice. If you find a bug, please give feedback by raising an [issue](https://github.com/pingcap/tidb/issues) on GitHub. + +## Compatibility with TiDB tools + +- [TiCDC](https://docs.pingcap.com/tidb/stable/ticdc-overview) does not support replicating the tables that are created by `tidb_enable_fast_create_table`. + +## Limitation + +You can now use performance optimization for table creation only in the [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) statement, and this statement must not include any foreign key constraints. + +## Use `tidb_enable_fast_create_table` to accelerate table creation + +You can enable or disable performance optimization for creating tables by specifying the value of the system variable [`tidb_enable_fast_create_table`](/system-variables.md#tidb_enable_fast_create_table-new-in-v800). + +To enable performance optimization for creating tables, set the value of this variable to `ON`: + +```sql +SET GLOBAL tidb_enable_fast_create_table = ON; +``` + +To disable performance optimization for creating tables, set the value of this variable to `OFF`: + +```sql +SET GLOBAL tidb_enable_fast_create_table = OFF; +``` + +## Implementation principle + +The detailed implementation principle of performance optimization for table creation is as follows: + +1. Create a `CREATE TABLE` Job. + + The corresponding DDL Job is generated by parsing the `CREATE TABLE` statement. + +2. Execute the `CREATE TABLE` job. + + The TiDB node that receives the `CREATE TABLE` statement executes it directly, and then persists the table structure to TiKV. At the same time, the `CREATE TABLE` job is marked as completed and inserted into the `mysql.tidb_ddl_history` table. + +3. Synchronize the table information. + + TiDB notifies other nodes to synchronize the newly created table structure. diff --git a/basic-features.md b/basic-features.md index ed54778107a00..a56ab968b3a4f 100644 --- a/basic-features.md +++ b/basic-features.md @@ -22,241 +22,245 @@ You can try out TiDB features on [TiDB Playground](https://play.tidbcloud.com/?u ## Data types, functions, and operators -| Data types, functions, and operators | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Numeric types](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Date and time types](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [String types](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON type](/data-type-json.md) | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [Control flow functions](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [String functions](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Numeric functions and operators](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Date and time functions](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Bit functions and operators](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Cast functions and operators](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Encryption and compression functions](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Information functions](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON functions](/functions-and-operators/json-functions.md) | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [Aggregation functions](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Window functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Miscellaneous functions](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Operators](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Character sets and collations](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [User-level lock](/functions-and-operators/locking-functions.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | +| Data types, functions, and operators | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Numeric types](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Date and time types](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [String types](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON type](/data-type-json.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [Control flow functions](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [String functions](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Numeric functions and operators](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Date and time functions](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Bit functions and operators](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Cast functions and operators](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Encryption and compression functions](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Information functions](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON functions](/functions-and-operators/json-functions.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [Aggregation functions](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Window functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Miscellaneous functions](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Operators](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Character sets and collations](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [User-level lock](/functions-and-operators/locking-functions.md) | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N | ## Indexing and constraints -| Indexing and constraints | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Expression indexes](/sql-statements/sql-statement-create-index.md#expression-index) [^2] | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [Columnar storage (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Use FastScan to accelerate queries in OLAP scenarios](/tiflash/use-fastscan.md) | Y | Y | Y | E | N | N | N | N | N | N | N | -| [RocksDB engine](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan plugin](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge-experimental) | E | E | E | E | E | E | E | E | E | E | E | -| [Use buckets to improve scan concurrency](/tune-region-performance.md#use-bucket-to-increase-concurrency) | E | E | E | E | E | N | N | N | N | N | N | -| [Invisible indexes](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [Composite `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`CHECK` constraints](/constraints.md#check) | Y | Y | N | N | N | N | N | N | N | N | N | -| [Unique indexes](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Clustered index on integer `PRIMARY KEY`](/clustered-indexes.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Clustered index on composite or non-integer key](/clustered-indexes.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [Multi-valued indexes](/sql-statements/sql-statement-create-index.md#multi-valued-indexes) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [Foreign key](/constraints.md#foreign-key) | E | E | E | N | N | N | N | N | N | N | N | -| [TiFlash late materialization](/tiflash/tiflash-late-materialization.md) | Y | Y | Y | N | N | N | N | N | N | N | N | +| Indexing and constraints | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Expression indexes](/sql-statements/sql-statement-create-index.md#expression-index) [^2] | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [Columnar storage (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Use FastScan to accelerate queries in OLAP scenarios](/tiflash/use-fastscan.md) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | +| [RocksDB engine](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan plugin](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge-experimental) | E | E | E | E | E | E | E | E | E | E | E | E | +| [Use buckets to improve scan concurrency](/tune-region-performance.md#use-bucket-to-increase-concurrency) | E | E | E | E | E | E | N | N | N | N | N | N | +| [Invisible indexes](/sql-statements/sql-statement-create-index.md#invisible-index) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [Composite `PRIMARY KEY`](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`CHECK` constraints](/constraints.md#check) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [Unique indexes](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Clustered index on integer `PRIMARY KEY`](/clustered-indexes.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Clustered index on composite or non-integer key](/clustered-indexes.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [Multi-valued indexes](/sql-statements/sql-statement-create-index.md#multi-valued-indexes) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [Foreign key](/constraints.md#foreign-key) | E | E | E | E | N | N | N | N | N | N | N | N | +| [TiFlash late materialization](/tiflash/tiflash-late-materialization.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | ## SQL statements -| SQL statements [^3] | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| Basic `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `UNION`, `UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXCEPT` and `INTERSECT` operators](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| `GROUP BY`, `ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Window Functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Common Table Expressions (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| `START TRANSACTION`, `COMMIT`, `ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [User-defined variables](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | E | E | -| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | -| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | Y | Y | E | N | N | N | N | N | N | -| [Table Lock](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | E | E | -| [TiFlash Query Result Materialization](/tiflash/tiflash-results-materialization.md) | Y | Y | Y | E | N | N | N | N | N | N | N | +| SQL statements [^3] | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| Basic `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `UNION`, `UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXCEPT` and `INTERSECT` operators](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| `GROUP BY`, `ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Window Functions](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Common Table Expressions (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| `START TRANSACTION`, `COMMIT`, `ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [User-defined variables](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | E | E | E | +| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N | +| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | Y | Y | Y | E | N | N | N | N | N | N | +| [Table Lock](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | E | E | E | +| [TiFlash Query Result Materialization](/tiflash/tiflash-results-materialization.md) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | ## Advanced SQL features -| Advanced SQL features | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Prepared statement cache](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | Y | Y | E | E | E | E | -| [Non-prepared statement cache](/sql-non-prepared-plan-cache.md) | Y | Y | E | N | N | N | N | N | N | N | N | -| [SQL binding](/sql-plan-management.md#sql-binding) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Cross-database binding](/sql-plan-management.md#cross-database-binding) | Y | N | N | N | N | N | N | N | N | N | N | -| [Create bindings according to historical execution plans](/sql-plan-management.md#create-a-binding-according-to-a-historical-execution-plan) | Y | Y | Y | E | N | N | N | N | N | N | N | -| [Coprocessor cache](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | E | -| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Follower reads](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Read historical data (tidb_snapshot)](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [MPP execution engine](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [MPP execution engine - compression exchange](/explain-mpp.md#mpp-version-and-exchange-data-compression) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [TiFlash Pipeline Model](/tiflash/tiflash-pipeline-model.md) | Y | Y | N | N | N | N | N | N | N | N | N | -| [TiFlash replica selection strategy](/system-variables.md#tiflash_replica_read-new-in-v730) | Y | Y | N | N | N | N | N | N | N | N | N | -| [Index Merge](/explain-index-merge.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | E | -| [Placement Rules in SQL](/placement-rules-in-sql.md) | Y | Y | Y | Y | Y | E | E | N | N | N | N | -| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | E | E | -| [Runtime Filter](/runtime-filter.md) | Y | Y | N | N | N | N | N | N | N | N | N | +| Advanced SQL features | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Prepared statement cache](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | E | E | E | E | +| [Non-prepared statement cache](/sql-non-prepared-plan-cache.md) | Y | Y | Y | E | N | N | N | N | N | N | N | N | +| [SQL binding](/sql-plan-management.md#sql-binding) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Cross-database binding](/sql-plan-management.md#cross-database-binding) | Y | Y | N | N | N | N | N | N | N | N | N | N | +| [Create bindings according to historical execution plans](/sql-plan-management.md#create-a-binding-according-to-a-historical-execution-plan) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | +| [Coprocessor cache](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | E | +| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Follower reads](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Read historical data (tidb_snapshot)](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [MPP execution engine](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [MPP execution engine - compression exchange](/explain-mpp.md#mpp-version-and-exchange-data-compression) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [TiFlash Pipeline Model](/tiflash/tiflash-pipeline-model.md) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [TiFlash replica selection strategy](/system-variables.md#tiflash_replica_read-new-in-v730) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [Index Merge](/explain-index-merge.md) | Y | Y | Y | Y | Y | Y | Y | E | E | E | E | E | +| [Placement Rules in SQL](/placement-rules-in-sql.md) | Y | Y | Y | Y | Y | Y | E | E | N | N | N | N | +| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | E | E | E | +| [Runtime Filter](/runtime-filter.md) | Y | Y | Y | N | N | N | N | N | N | N | N | N | ## Data definition language (DDL) -| Data definition language (DDL) | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| Basic `CREATE`, `DROP`, `ALTER`, `RENAME`, `TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Generated columns](/generated-columns.md) | Y | Y | Y | E | E | E | E | E | E | E | E | -| [Views](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Sequences](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Auto increment](/auto-increment.md) | Y | Y | Y | Y[^4] | Y | Y | Y | Y | Y | Y | Y | -| [Auto random](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TTL (Time to Live)](/time-to-live.md) | Y | Y | Y | E | N | N | N | N | N | N | N | -| [DDL algorithm assertions](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| Multi-schema change: add columns | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [Change column type](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Temporary tables](/temporary-tables.md) | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | -| Concurrent DDL statements | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Acceleration of `ADD INDEX` and `CREATE INDEX`](/system-variables.md#tidb_ddl_enable_fast_reorg-new-in-v630) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Metadata lock](/metadata-lock.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [`FLASHBACK CLUSTER`](/sql-statements/sql-statement-flashback-cluster.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Pause](/sql-statements/sql-statement-admin-pause-ddl.md)/[Resume](/sql-statements/sql-statement-admin-resume-ddl.md) DDL | Y | Y | N | N | N | N | N | N | N | N | N | -| [TiDB DDL V2](/ddl-v2.md) | E | N | N | N | N | N | N | N | N | N | N | +| Data definition language (DDL) | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| Basic `CREATE`, `DROP`, `ALTER`, `RENAME`, `TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Generated columns](/generated-columns.md) | Y | Y | Y | Y | E | E | E | E | E | E | E | E | +| [Views](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Sequences](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Auto increment](/auto-increment.md) | Y | Y | Y | Y | Y[^4] | Y | Y | Y | Y | Y | Y | Y | +| [Auto random](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TTL (Time to Live)](/time-to-live.md) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | +| [DDL algorithm assertions](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| Multi-schema change: add columns | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [Change column type](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Temporary tables](/temporary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | +| Concurrent DDL statements | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Acceleration of `ADD INDEX` and `CREATE INDEX`](/system-variables.md#tidb_ddl_enable_fast_reorg-new-in-v630) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Metadata lock](/metadata-lock.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [`FLASHBACK CLUSTER`](/sql-statements/sql-statement-flashback-cluster.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Pause](/sql-statements/sql-statement-admin-pause-ddl.md)/[Resume](/sql-statements/sql-statement-admin-resume-ddl.md) DDL | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [TiDB Accelerated Table Creation](/accelerated-table-creation.md) | E | N | N | N | N | N | N | N | N | N | N | N | +| [Configure BDR role to replicate DDL statements in BDR mode](/sql-statements/sql-statement-admin-bdr-role.md#admin-setshowunset-bdr-role) | E | E | N | N | N | N | N | N | N | N | N | N | ## Transactions -| Transactions | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 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 | Y | Y | Y | Y | Y | N | -| [1PC](/system-variables.md#tidb_enable_1pc-new-in-v50) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [Large transactions (10GB)](/transaction-overview.md#transaction-size-limit) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Pessimistic transactions](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Optimistic transactions](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Repeatable-read isolation (snapshot isolation)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Read-committed isolation](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Automatically terminating long-running idle transactions](/system-variables.md#tidb_idle_transaction_timeout-new-in-v760) | Y | N | N | N | N | N | N | N | N | N | N | +| Transactions | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 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 | Y | Y | Y | Y | Y | Y | N | +| [1PC](/system-variables.md#tidb_enable_1pc-new-in-v50) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [Large transactions (10GB)](/transaction-overview.md#transaction-size-limit) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Pessimistic transactions](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Optimistic transactions](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Repeatable-read isolation (snapshot isolation)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Read-committed isolation](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Automatically terminating long-running idle transactions](/system-variables.md#tidb_idle_transaction_timeout-new-in-v760) | Y | Y | N | N | N | N | N | N | N | N | N | N | ## Partitioning -| Partitioning | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Range partitioning](/partitioned-table.md#range-partitioning) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Hash partitioning](/partitioned-table.md#hash-partitioning) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Key partitioning](/partitioned-table.md#key-partitioning) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [List partitioning](/partitioned-table.md#list-partitioning) | Y | Y | Y | Y | Y | E | E | E | E | E | N | -| [List COLUMNS partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y | E | E | E | E | E | N | -| [Default partition for List and List COLUMNS partitioned tables](/partitioned-table.md#default-list-partition) | Y | Y | N | N | N | N | N | N | N | N | N | -| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | Y | Y | E | E | E | E | E | E | N | -| [`REORGANIZE PARTITION`](/partitioned-table.md#reorganize-partitions) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [`COALESCE PARTITION`](/partitioned-table.md#decrease-the-number-of-partitions) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [Dynamic pruning](/partitioned-table.md#dynamic-pruning-mode) | Y | Y | Y | Y | Y | E | E | E | E | N | N | -| [Range COLUMNS partitioning](/partitioned-table.md#range-columns-partitioning) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Range INTERVAL partitioning](/partitioned-table.md#range-interval-partitioning) | Y | Y | Y | E | N | N | N | N | N | N | N | -| [Convert a partitioned table to a non-partitioned table](/partitioned-table.md#convert-a-partitioned-table-to-a-non-partitioned-table) | Y | Y | N | N | N | N | N | N | N | N | N | -| [Partition an existing table](/partitioned-table.md#partition-an-existing-table) | Y | Y | N | N | N | N | N | N | N | N | N | +| Partitioning | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Range partitioning](/partitioned-table.md#range-partitioning) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Hash partitioning](/partitioned-table.md#hash-partitioning) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Key partitioning](/partitioned-table.md#key-partitioning) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [List partitioning](/partitioned-table.md#list-partitioning) | Y | Y | Y | Y | Y | Y | E | E | E | E | E | N | +| [List COLUMNS partitioning](/partitioned-table.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | E | N | +| [Default partition for List and List COLUMNS partitioned tables](/partitioned-table.md#default-list-partition) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | N | +| [`REORGANIZE PARTITION`](/partitioned-table.md#reorganize-partitions) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [`COALESCE PARTITION`](/partitioned-table.md#decrease-the-number-of-partitions) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [Dynamic pruning](/partitioned-table.md#dynamic-pruning-mode) | Y | Y | Y | Y | Y | Y | E | E | E | E | N | N | +| [Range COLUMNS partitioning](/partitioned-table.md#range-columns-partitioning) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Range INTERVAL partitioning](/partitioned-table.md#range-interval-partitioning) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | +| [Convert a partitioned table to a non-partitioned table](/partitioned-table.md#convert-a-partitioned-table-to-a-non-partitioned-table) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| [Partition an existing table](/partitioned-table.md#partition-an-existing-table) | Y | Y | Y | N | N | N | N | N | N | N | N | N | ## Statistics -| Statistics | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 6.0 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [CMSketch](/statistics.md) | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Y | Y | Y | -| [Histograms](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Extended statistics](/extended-statistics.md) | E | E | E | E | E | E | E | E | E | E | E | -| Statistics feedback | N | N | N | N | Deprecated | Deprecated | Deprecated | E | E | E | E | -| [Automatically update statistics](/statistics.md#automatic-update) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Fast Analyze](/system-variables.md#tidb_enable_fast_analyze) | Deprecated | Deprecated | E | E | E | E | E | E | E | E | E | -| [Dynamic pruning](/partitioned-table.md#dynamic-pruning-mode) | Y | Y | Y | Y | Y | E | E | E | E | E | N | -| [Collect statistics for `PREDICATE COLUMNS`](/statistics.md#collect-statistics-on-some-columns) | E | E | E | E | E | E | E | N | N | N | N | -| [Control the memory quota for collecting statistics](/statistics.md#the-memory-quota-for-collecting-statistics) | E | E | E | E | E | N | N | N | N | N | N | -| [Randomly sample about 10000 rows of data to quickly build statistics](/system-variables.md#tidb_enable_fast_analyze) | Deprecated | Deprecated | E | E | E | E | E | E | E | E | E | -| [Lock statistics](/statistics.md#lock-statistics) | Y | Y | E | E | N | N | N | N | N | N | N | -| [Lightweight statistics initialization](/statistics.md#load-statistics) | Y | Y | E | N | N | N | N | N | N | N | N | -| [Show the progress of collecting statistics](/sql-statements/sql-statement-show-analyze-status.md) | Y | Y | N | N | N | N | N | N | N | N | N | +| Statistics | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [CMSketch](/statistics.md) | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Disabled by default | Y | Y | Y |Y | +| [Histograms](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Extended statistics](/extended-statistics.md) | E | E | E | E | E | E | E | E | E | E | E | N | +| Statistics feedback | N | N | N | N | N | Deprecated | Deprecated | E | E | E | E | E | +| [Automatically update statistics](/statistics.md#automatic-update) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Fast Analyze](/system-variables.md#tidb_enable_fast_analyze) | Deprecated | Deprecated | Deprecated | E | E | E | E | E | E | E | E | E | +| [Dynamic pruning](/partitioned-table.md#dynamic-pruning-mode) | Y | Y | Y | Y | Y | Y | E | E | E | E | N | N | +| [Collect statistics for `PREDICATE COLUMNS`](/statistics.md#collect-statistics-on-some-columns) | E | E | E | E | E | E | E | N | N | N | N | N | +| [Control the memory quota for collecting statistics](/statistics.md#the-memory-quota-for-collecting-statistics) | E | E | E | E | E | N | N | N | N | N | N | N | +| [Randomly sample about 10000 rows of data to quickly build statistics](/system-variables.md#tidb_enable_fast_analyze) | Deprecated | Deprecated | Deprecated | E | E | E | E | E | E | E | E | E | +| [Lock statistics](/statistics.md#lock-statistics) | Y | Y | Y | E | E | N | N | N | N | N | N | N | +| [Lightweight statistics initialization](/statistics.md#load-statistics) | Y | Y | Y | E | N | N | N | N | N | N | N | N | +| [Show the progress of collecting statistics](/sql-statements/sql-statement-show-analyze-status.md) | Y | Y | Y | N | N | N | N | N | N | N | N | N | ## Security -| Security | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 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 | Y | Y | Y | Y | Y | -| [Encryption at rest (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Role-based authentication (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Certificate-based authentication](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`caching_sha2_password` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | -| [`tidb_sm3_password` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [`tidb_auth_token` authentication](/security-compatibility-with-mysql.md#tidb_auth_token) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [`authentication_ldap_sasl` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | N | -| [`authentication_ldap_simple` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [Password management](/password-management.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [MySQL compatible `GRANT` system](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Dynamic Privileges](/privilege-management.md#dynamic-privileges) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Security Enhanced Mode](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Redacted Log Files](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| Security | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 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 | Y | Y | Y | Y | Y | Y | +| [Encryption at rest (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Role-based authentication (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Certificate-based authentication](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`caching_sha2_password` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | +| [`tidb_sm3_password` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [`tidb_auth_token` authentication](/security-compatibility-with-mysql.md#tidb_auth_token) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [`authentication_ldap_sasl` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | N | +| [`authentication_ldap_simple` authentication](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [Password management](/password-management.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [MySQL compatible `GRANT` system](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Dynamic Privileges](/privilege-management.md#dynamic-privileges) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Security Enhanced Mode](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Redacted Log Files](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | ## Data import and export -| Data import and export | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Fast import using TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Fast import using the `IMPORT INTO` statement](/sql-statements/sql-statement-import-into.md) | Y | Y | N | N | N | N | N | N | N | N | N | -| mydumper logical dumper | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | -| [Dumpling logical dumper](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Transactional `LOAD DATA`](/sql-statements/sql-statement-load-data.md) [^5] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N [^6] | -| [Database migration toolkit (DM)](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) [^7] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Stream data to Amazon S3, GCS, Azure Blob Storage, and NFS through TiCDC](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | Y | Y | E | N | N | N | N | N | N | N | -| [TiCDC supports bidirectional replication between two TiDB clusters](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [DM](/dm/dm-overview.md) supports migrating MySQL 8.0 | Y | E | E | E | E | N | N | N | N | N | N | +| Data import and export | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Fast import using TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Fast import using the `IMPORT INTO` statement](/sql-statements/sql-statement-import-into.md) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| mydumper logical dumper | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | Deprecated | +| [Dumpling logical dumper](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Transactional `LOAD DATA`](/sql-statements/sql-statement-load-data.md) [^5] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N [^6] | +| [Database migration toolkit (DM)](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) [^7] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Stream data to Amazon S3, GCS, Azure Blob Storage, and NFS through TiCDC](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | Y | Y | Y | E | N | N | N | N | N | N | N | +| [TiCDC supports bidirectional replication between two TiDB clusters](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [DM](/dm/dm-overview.md) supports migrating MySQL 8.0 | Y | Y | E | E | E | E | N | N | N | N | N | N | ## Management, observability, and tools -| Management, observability, and tools | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [TiDB Dashboard UI](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Dashboard Continuous Profiling](/dashboard/continuous-profiling.md) | Y | Y | Y | Y | Y | E | E | N | N | N | N | -| [TiDB Dashboard Top SQL](/dashboard/top-sql.md) | Y | Y | Y | Y | Y | E | N | N | N | N | N | -| [TiDB Dashboard SQL Diagnostics](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [TiDB Dashboard Cluster Diagnostics](/dashboard/dashboard-diagnostics-access.md) | Y | Y | Y | Y | E | E | E | E | E | E | E | -| [TiKV-FastTune dashboard](/grafana-tikv-dashboard.md#tikv-fasttune-dashboard) | E | E | E | E | E | E | E | E | E | E | E | -| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables - summary persistence](/statement-summary-tables.md#persist-statements-summary) | E | E | E | N | N | N | N | N | N | N | N | -| [Slow query log](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiUP deployment](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Built-in physical backup](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | -| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | Y | Y | E | E | E | -| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | -| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | E | E | N | N | N | N | N | N | -| [Foreground Quota Limiter](/tikv-configuration-file.md#foreground-quota-limiter) | Y | Y | Y | Y | E | N | N | N | N | N | N | -| [Background Quota Limiter](/tikv-configuration-file.md#background-quota-limiter) | E | E | E | E | N | N | N | N | N | N | N | -| [EBS volume snapshot backup and restore](https://docs.pingcap.com/tidb-in-kubernetes/v1.4/backup-to-aws-s3-by-snapshot) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [PITR](/br/backup-and-restore-overview.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Global memory control](/configure-memory-usage.md#configure-the-memory-usage-threshold-of-a-tidb-server-instance) | Y | Y | Y | Y | N | N | N | N | N | N | N | -| [Cross-cluster RawKV replication](/tikv-configuration-file.md#api-version-new-in-v610) | E | E | E | E | N | N | N | N | N | N | N | -| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-new-in-v50) | E | E | E | E | E | E | E | E | E | E | N | -| [Resource control](/tidb-resource-control.md) | Y | Y | Y | N | N | N | N | N | N | N | N | -| [Runaway Queries management](/tidb-resource-control.md#manage-queries-that-consume-more-resources-than-expected-runaway-queries) | E | E | N | N | N | N | N | N | N | N | N | -| [Background tasks management](/tidb-resource-control.md#manage-background-tasks) | E | E | N | N | N | N | N | N | N | N | N | -| [TiFlash Disaggregated Storage and Compute Architecture and S3 Support](/tiflash/tiflash-disaggregated-and-s3.md) | Y | Y | E | N | N | N | N | N | N | N | N | -| [Selecting TiDB nodes for the Distributed eXecution Framework (DXF) tasks](/system-variables.md#tidb_service_scope-new-in-v740) | Y | Y | N | N | N | N | N | N | N | N | N | -| PD Follower Proxy (controlled by [`tidb_enable_tso_follower_proxy`](/system-variables.md#tidb_enable_tso_follower_proxy-new-in-v530)) | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | -| [Active PD Follower](/tune-region-performance.md#use-the-active-pd-follower-feature-to-enhance-the-scalability-of-pds-region-information-query-service) (controlled by [`pd_enable_follower_handle_region`](/system-variables.md#pd_enable_follower_handle_region-new-in-v760)) | E | N | N | N | N | N | N | N | N | N | N | +| Management, observability, and tools | 8.0 | 7.6 | 7.5 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [TiDB Dashboard UI](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Dashboard Continuous Profiling](/dashboard/continuous-profiling.md) | Y | Y | Y | Y | Y | Y | E | E | N | N | N | N | +| [TiDB Dashboard Top SQL](/dashboard/top-sql.md) | Y | Y | Y | Y | Y | Y | E | N | N | N | N | N | +| [TiDB Dashboard SQL Diagnostics](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [TiDB Dashboard Cluster Diagnostics](/dashboard/dashboard-diagnostics-access.md) | Y | Y | Y | Y | Y | E | E | E | E | E | E | E | +| [TiKV-FastTune dashboard](/grafana-tikv-dashboard.md#tikv-fasttune-dashboard) | E | E | E | E | E | E | E | E | E | E | E | E | +| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables - summary persistence](/statement-summary-tables.md#persist-statements-summary) | E | E | E | E | N | N | N | N | N | N | N | N | +| [Slow query log](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiUP deployment](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Built-in physical backup](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | E | E | +| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | E | E | E | +| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | E | E | +| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | E | E | E | N | N | N | N | N | N | +| [Foreground Quota Limiter](/tikv-configuration-file.md#foreground-quota-limiter) | Y | Y | Y | Y | Y | E | N | N | N | N | N | N | +| [Background Quota Limiter](/tikv-configuration-file.md#background-quota-limiter) | E | E | E | E | E | N | N | N | N | N | N | N | +| [EBS volume snapshot backup and restore](https://docs.pingcap.com/tidb-in-kubernetes/v1.4/backup-to-aws-s3-by-snapshot) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [PITR](/br/backup-and-restore-overview.md) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Global memory control](/configure-memory-usage.md#configure-the-memory-usage-threshold-of-a-tidb-server-instance) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | +| [Cross-cluster RawKV replication](/tikv-configuration-file.md#api-version-new-in-v610) | E | E | E | E | E | N | N | N | N | N | N | N | +| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-new-in-v50) | E | E | E | E | E | E | E | E | E | E | E | N | +| [Resource control](/tidb-resource-control.md) | Y | Y | Y | Y | N | N | N | N | N | N | N | N | +| [Runaway Queries management](/tidb-resource-control.md#manage-queries-that-consume-more-resources-than-expected-runaway-queries) | E | E | E | N | N | N | N | N | N | N | N | N | +| [Background tasks management](/tidb-resource-control.md#manage-background-tasks) | E | E | E | N | N | N | N | N | N | N | N | N | +| [TiFlash Disaggregated Storage and Compute Architecture and S3 Support](/tiflash/tiflash-disaggregated-and-s3.md) | Y | Y | Y | E | N | N | N | N | N | N | N | N | +| [Selecting TiDB nodes for the Distributed eXecution Framework (DXF) tasks](/system-variables.md#tidb_service_scope-new-in-v740) | Y | Y | Y | N | N | N | N | N | N | N | N | N | +| PD Follower Proxy (controlled by [`tidb_enable_tso_follower_proxy`](/system-variables.md#tidb_enable_tso_follower_proxy-new-in-v530)) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | +| [Active PD Follower](/tune-region-performance.md#use-the-active-pd-follower-feature-to-enhance-the-scalability-of-pds-region-information-query-service) (controlled by [`pd_enable_follower_handle_region`](/system-variables.md#pd_enable_follower_handle_region-new-in-v760)) | E | E | N | N | N | N | N | N | N | N | N | N | +| [PD microservices](/pd-microservices.md) | E | N | N | N | N | N | N | N | N | N | N | N | +| [TiDB Distributed eXecution Framework (DXF)](/tidb-distributed-execution-framework.md) | Y | Y | Y | E | N | N | N | N | N | N | N | N | +| [Global Sort](/tidb-global-sort.md) | Y | E | E | N | N | N | N | 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/benchmark/benchmark-tidb-using-sysbench.md b/benchmark/benchmark-tidb-using-sysbench.md index 5977f46af152e..f821bdb1ff03f 100644 --- a/benchmark/benchmark-tidb-using-sysbench.md +++ b/benchmark/benchmark-tidb-using-sysbench.md @@ -20,7 +20,7 @@ server_configs: log.level: "error" ``` -It is also recommended to make sure [`tidb_enable_prepared_plan_cache`](/system-variables.md#tidb_enable_prepared_plan_cache-new-in-v610) is enabled and that you allow sysbench to use prepared statements by using `--db-ps-mode=auto`. See the [SQL Prepared Execution Plan Cache](/sql-prepared-plan-cache.md) for documetnation about what the SQL plan cache does and how to monitor it. +It is also recommended to make sure [`tidb_enable_prepared_plan_cache`](/system-variables.md#tidb_enable_prepared_plan_cache-new-in-v610) is enabled and that you allow sysbench to use prepared statements by using `--db-ps-mode=auto`. See the [SQL Prepared Execution Plan Cache](/sql-prepared-plan-cache.md) for documentation about what the SQL plan cache does and how to monitor it. > **Note:** > diff --git a/best-practices-on-public-cloud.md b/best-practices-on-public-cloud.md index d4677de975273..06497bfaf2f3b 100644 --- a/best-practices-on-public-cloud.md +++ b/best-practices-on-public-cloud.md @@ -180,7 +180,7 @@ To reduce the number of Regions and alleviate the heartbeat overhead on the syst ## After tuning -After the tunning, the following effects can be observed: +After the tuning, the following effects can be observed: - The TSO requests per second are decreased to 64,800. - The CPU utilization is significantly reduced from approximately 4,600% to 1,400%. diff --git a/best-practices/readonly-nodes.md b/best-practices/readonly-nodes.md index 9597e8ddbf6cf..80faadb4da59f 100644 --- a/best-practices/readonly-nodes.md +++ b/best-practices/readonly-nodes.md @@ -127,5 +127,5 @@ spark.tispark.replica_read learner To read data from read-only nodes when backing up cluster data, you can specify the `--replica-read-label` option in the br command line. Note that when running the following command in shell, you need to use single quotes to wrap the label to prevent `$` from being parsed. ```shell -br backup full ... --replica-read-label '$mode:readonly' +tiup br backup full ... --replica-read-label '$mode:readonly' ``` diff --git a/binary-package.md b/binary-package.md index b73e1db15b7b6..bd4f3f135c3ad 100644 --- a/binary-package.md +++ b/binary-package.md @@ -5,7 +5,7 @@ summary: Learn about TiDB installation packages and the specific components incl # TiDB Installation Packages -Before [deploying TiUP offline](/production-deployment-using-tiup.md#deploy-tiup-offline), you need to download the binary packages of TiDB at the [official download page](https://en.pingcap.com/download/). +Before [deploying TiUP offline](/production-deployment-using-tiup.md#deploy-tiup-offline), you need to download the binary packages of TiDB as described in [Prepare the TiUP offline component package](/production-deployment-using-tiup.md#prepare-the-tiup-offline-component-package). TiDB binary packages are available in amd64 and arm64 architectures. In either architecture, TiDB provides two binary packages: `TiDB-community-server` and `TiDB-community-toolkit`. diff --git a/br/backup-and-restore-overview.md b/br/backup-and-restore-overview.md index fb9b040e84706..5e1b4d7cb5e92 100644 --- a/br/backup-and-restore-overview.md +++ b/br/backup-and-restore-overview.md @@ -25,6 +25,7 @@ This section describes the prerequisites for using TiDB backup and restore, incl - PITR only supports cluster-level restore and does not support database-level or table-level restore. - PITR does not support restoring the data of user tables or privilege tables from system tables. - BR does not support running multiple backup tasks on a cluster **at the same time**. +- BR does not support running snapshot backup tasks and data restore tasks on a cluster **at the same time**. - When a PITR is running, you cannot run a log backup task or use TiCDC to replicate data to a downstream cluster. ### Some tips diff --git a/br/backup-and-restore-storages.md b/br/backup-and-restore-storages.md index 09cd3352ec01f..8f589075995ef 100644 --- a/br/backup-and-restore-storages.md +++ b/br/backup-and-restore-storages.md @@ -19,7 +19,7 @@ By default, BR sends a credential to each TiKV node when using Amazon S3, GCS, o Note that this operation is not applicable to cloud environments. If you use IAM Role authorization, each node has its own role and permissions. In this case, you need to configure `--send-credentials-to-tikv=false` (or `-c=0` in short) to disable sending credentials: ```bash -./br backup full -c=0 -u pd-service:2379 --storage 's3://bucket-name/prefix' +tiup br backup full -c=0 -u pd-service:2379 --storage 's3://bucket-name/prefix' ``` If you back up or restore data using the [`BACKUP`](/sql-statements/sql-statement-backup.md) and [`RESTORE`](/sql-statements/sql-statement-restore.md) statements, you can add the `SEND_CREDENTIALS_TO_TIKV = FALSE` option: @@ -32,59 +32,13 @@ BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE; ### URI format description -This section describes the URI format of the storage services: +The URI format of the external storage service is as follows: ```shell [scheme]://[host]/[path]?[parameters] ``` - -
- -- `scheme`: `s3` -- `host`: `bucket name` -- `parameters`: - - - `access-key`: Specifies the access key. - - `secret-access-key`: Specifies the secret access key. - - `session-token`: Specifies the temporary session token. BR does not support this parameter yet. - - `use-accelerate-endpoint`: Specifies whether to use the accelerate endpoint on Amazon S3 (defaults to `false`). - - `endpoint`: Specifies the URL of custom endpoint for S3-compatible services (for example, ``). - - `force-path-style`: Use path style access rather than virtual hosted style access (defaults to `true`). - - `storage-class`: Specifies the storage class of the uploaded objects (for example, `STANDARD` or `STANDARD_IA`). - - `sse`: Specifies the server-side encryption algorithm used to encrypt the uploaded objects (value options: ``, `AES256`, or `aws:kms`). - - `sse-kms-key-id`: Specifies the KMS ID if `sse` is set to `aws:kms`. - - `acl`: Specifies the canned ACL of the uploaded objects (for example, `private` or `authenticated-read`). - - `role-arn`: When you need to access Amazon S3 data from a third party using a specified [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), you can specify the corresponding [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of the IAM role with the `role-arn` URL query parameter, such as `arn:aws:iam::888888888888:role/my-role`. For more information about using an IAM role to access Amazon S3 data from a third party, see [AWS documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html). - - `external-id`: When you access Amazon S3 data from a third party, you might need to specify a correct [external ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) to assume [the IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html). In this case, you can use this `external-id` URL query parameter to specify the external ID and make sure that you can assume the IAM role. An external ID is an arbitrary string provided by the third party together with the IAM role ARN to access the Amazon S3 data. Providing an external ID is optional when assuming an IAM role, which means if the third party does not require an external ID for the IAM role, you can assume the IAM role and access the corresponding Amazon S3 data without providing this parameter. - -
-
- -- `scheme`: `gcs` or `gs` -- `host`: `bucket name` -- `parameters`: - - - `credentials-file`: Specifies the path to the credentials JSON file on the migration tool node. - - `storage-class`: Specifies the storage class of the uploaded objects (for example, `STANDARD` or `COLDLINE`) - - `predefined-acl`: Specifies the predefined ACL of the uploaded objects (for example, `private` or `project-private`) - -
-
- -- `scheme`: `azure` or `azblob` -- `host`: `container name` -- `parameters`: - - - `account-name`: Specifies the account name of the storage. - - `account-key`: Specifies the access key. - - `sas-token`: Specifies the shared access signature (SAS) token. - - `access-tier`: Specifies the access tier of the uploaded objects, for example, `Hot`, `Cool`, or `Archive`. The default value is the default access tier of the storage account. - - `encryption-scope`: Specifies the [encryption scope](https://learn.microsoft.com/en-us/azure/storage/blobs/encryption-scope-manage?tabs=powershell#upload-a-blob-with-an-encryption-scope) for server-side encryption. - - `encryption-key`: Specifies the [encryption key](https://learn.microsoft.com/en-us/azure/storage/blobs/encryption-customer-provided-keys) for server-side encryption, which uses the AES256 encryption algorithm. - -
-
+For more information about the URI format, see [URI Formats of External Storage Services](/external-storage-uri.md). ### URI examples @@ -96,14 +50,14 @@ This section provides some URI examples by using `external` as the `host` parame **Back up snapshot data to Amazon S3** ```shell -./br backup full -u "${PD_IP}:2379" \ +tiup br backup full -u "${PD_IP}:2379" \ --storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}" ``` **Restore snapshot data from Amazon S3** ```shell -./br restore full -u "${PD_IP}:2379" \ +tiup br restore full -u "${PD_IP}:2379" \ --storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}" ``` @@ -113,14 +67,14 @@ This section provides some URI examples by using `external` as the `host` parame **Back up snapshot data to GCS** ```shell -./br backup full --pd "${PD_IP}:2379" \ +tiup br backup full --pd "${PD_IP}:2379" \ --storage "gcs://external/backup-20220915?credentials-file=${credentials-file-path}" ``` **Restore snapshot data from GCS** ```shell -./br restore full --pd "${PD_IP}:2379" \ +tiup br restore full --pd "${PD_IP}:2379" \ --storage "gcs://external/backup-20220915?credentials-file=${credentials-file-path}" ``` @@ -130,14 +84,14 @@ This section provides some URI examples by using `external` as the `host` parame **Back up snapshot data to Azure Blob Storage** ```shell -./br backup full -u "${PD_IP}:2379" \ +tiup br backup full -u "${PD_IP}:2379" \ --storage "azure://external/backup-20220915?account-name=${account-name}&account-key=${account-key}" ``` **Restore the `test` database from snapshot backup data in Azure Blob Storage** ```shell -./br restore db --db test -u "${PD_IP}:2379" \ +tiup br restore db --db test -u "${PD_IP}:2379" \ --storage "azure://external/backup-20220915account-name=${account-name}&account-key=${account-key}" ``` @@ -153,8 +107,8 @@ When storing backup data in a cloud storage system, you need to configure authen Before backup, configure the following privileges to access the backup directory on S3. -- Minimum privileges for TiKV and Backup & Restore (BR) to access the backup directories during backup: `s3:ListBucket`, `s3:PutObject`, and `s3:AbortMultipartUpload` -- Minimum privileges for TiKV and BR to access the backup directories during restore: `s3:ListBucket`, `s3:GetObject`, and `s3:PutObject`. BR writes checkpoint information to the `./checkpoints` subdirectory under the backup directory. When restoring log backup data, BR writes the table ID mapping relationship of the restored cluster to the `./pitr_id_maps` subdirectory under the backup directory. +- Minimum privileges for TiKV and Backup & Restore (BR) to access the backup directories during backup: `s3:ListBucket`, `s3:GetObject`, `s3:DeleteObject`, `s3:PutObject`, and `s3:AbortMultipartUpload` +- Minimum privileges for TiKV and BR to access the backup directories during restore: `s3:ListBucket`, `s3:GetObject`, `s3:DeleteObject`, and `s3:PutObject`. BR writes checkpoint information to the `./checkpoints` subdirectory under the backup directory. When restoring log backup data, BR writes the table ID mapping relationship of the restored cluster to the `./pitr_id_maps` subdirectory under the backup directory. If you have not yet created a backup directory, refer to [Create a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) to create an S3 bucket in the specified region. If necessary, you can also create a folder in the bucket by referring to [Create a folder](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html). @@ -174,7 +128,7 @@ It is recommended that you configure access to S3 using either of the following Associate an IAM role that can access S3 with EC2 instances where the TiKV and BR nodes run. After the association, BR can directly access the backup directories in S3 without additional settings. ```shell - br backup full --pd "${PD_IP}:2379" \ + tiup br backup full --pd "${PD_IP}:2379" \ --storage "s3://${host}/${path}" ``` @@ -241,7 +195,7 @@ You can configure the account used to access GCS by specifying the access key. I - Use BR to back up data to Azure Blob Storage: ```shell - ./br backup full -u "${PD_IP}:2379" \ + tiup br backup full -u "${PD_IP}:2379" \ --storage "azure://external/backup-20220915?account-name=${account-name}" ``` diff --git a/br/backup-and-restore-use-cases.md b/br/backup-and-restore-use-cases.md index f665257734b75..12fedc828d464 100644 --- a/br/backup-and-restore-use-cases.md +++ b/br/backup-and-restore-use-cases.md @@ -1,6 +1,6 @@ --- title: TiDB Backup and Restore Use Cases -summary: TiDB provides snapshot and log backup solutions for specific use cases, such as timely data recovery and business audits. To use point-in-time recovery (PITR), deploy a TiDB cluster >= v6.2.0 and update BR to v7.6.0. Configure backup storage on Amazon S3 and set a backup policy to meet data loss and recovery requirements. Run log and snapshot backups, and use PITR to restore data to a specific time point. Clean up outdated data regularly. For detailed steps, refer to TiDB documentation. +summary: TiDB provides snapshot and log backup solutions for specific use cases, such as timely data recovery and business audits. To use point-in-time recovery (PITR), deploy a TiDB cluster >= v6.2.0 and update BR to v8.0.0. Configure backup storage on Amazon S3 and set a backup policy to meet data loss and recovery requirements. Run log and snapshot backups, and use PITR to restore data to a specific time point. Clean up outdated data regularly. For detailed steps, refer to TiDB documentation. aliases: ['/docs/dev/br/backup-and-restore-use-cases/','/docs/dev/reference/tools/br/use-cases/','/tidb/dev/backup-and-restore-use-cases-for-maintain/'] --- @@ -17,7 +17,7 @@ With PITR, you can satisfy the preceding requirements. ## Deploy the TiDB cluster and BR -To use PITR, you need to deploy a TiDB cluster >= v6.2.0 and update BR to the same version as the TiDB cluster. This document uses v7.6.0 as an example. +To use PITR, you need to deploy a TiDB cluster >= v6.2.0 and update BR to the same version as the TiDB cluster. This document uses v8.0.0 as an example. The following table shows the recommended hardware resources for using PITR in a TiDB cluster. @@ -44,13 +44,13 @@ Install or upgrade BR using TiUP: - Install: ```shell - tiup install br:v7.6.0 + tiup install br:v8.0.0 ``` - Upgrade: ```shell - tiup update br:v7.6.0 + tiup update br:v8.0.0 ``` ## Configure backup storage (Amazon S3) @@ -70,8 +70,8 @@ The detailed steps are as follows: 2. Configure permissions for BR and TiKV to access the S3 directory. It is recommended to grant permissions using the IAM method, which is the most secure way to access the S3 bucket. For detailed steps, refer to [AWS documentation: Controlling access to a bucket with user policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/walkthrough1.html). The required permissions are as follows: - - TiKV and BR in the backup cluster need `s3:ListBucket`, `s3:PutObject`, and `s3:AbortMultipartUpload` permissions of the `s3://tidb-pitr-bucket/backup-data` directory. - - TiKV and BR in the restore cluster need `s3:ListBucket`, `s3:GetObject`, and `s3:PutObject` permissions of the `s3://tidb-pitr-bucket/backup-data` directory. + - TiKV and BR in the backup cluster need `s3:ListBucket`, `s3:GetObject`, `s3:DeleteObject`, `s3:PutObject`, and `s3:AbortMultipartUpload` permissions of the `s3://tidb-pitr-bucket/backup-data` directory. + - TiKV and BR in the restore cluster need `s3:ListBucket`, `s3:GetObject`, `s3:DeleteObject`, and `s3:PutObject` permissions of the `s3://tidb-pitr-bucket/backup-data` directory. 3. Plan the directory structure that stores the backup data, including the snapshot (full) backup and the log backup. diff --git a/br/br-batch-create-table.md b/br/br-batch-create-table.md index 842bad3b156ad..9be3c57f838d5 100644 --- a/br/br-batch-create-table.md +++ b/br/br-batch-create-table.md @@ -27,7 +27,7 @@ BR enables the Batch Create Table feature by default, with the default configura To disable this feature, you can set `--ddl-batch-size` to `1`. See the following example command: ```shell -br restore full \ +tiup br restore full \ --storage local:///br_data/ --pd "${PD_IP}:2379" --log-file restore.log \ --ddl-batch-size=1 ``` diff --git a/br/br-checkpoint-backup.md b/br/br-checkpoint-backup.md index aaf9f7e836db6..286cbbbdd486b 100644 --- a/br/br-checkpoint-backup.md +++ b/br/br-checkpoint-backup.md @@ -35,7 +35,7 @@ To avoid this situation, `br` keeps the `gc-safepoint` for about one hour by def The following example sets `gcttl` to 15 hours (54000 seconds) to extend the retention period of `gc-safepoint`: ```shell -br backup full \ +tiup br backup full \ --storage local:///br_data/ --pd "${PD_IP}:2379" \ --gcttl 54000 ``` diff --git a/br/br-incremental-guide.md b/br/br-incremental-guide.md index 14469e18a08be..a0dac0d3e6d48 100644 --- a/br/br-incremental-guide.md +++ b/br/br-incremental-guide.md @@ -1,6 +1,6 @@ --- title: TiDB Incremental Backup and Restore Guide -summary: Incremental data is the differentiated data between starting and end snapshots, along with DDLs. It reduces backup volume and requires setting `tidb_gc_life_time` for incremental backup. Use `br backup` with `--lastbackupts` for incremental backup and ensure all previous data is restored before restoring incremental data. +summary: Incremental data is the differentiated data between starting and end snapshots, along with DDLs. It reduces backup volume and requires setting `tidb_gc_life_time` for incremental backup. Use `tiup br backup` with `--lastbackupts` for incremental backup and ensure all previous data is restored before restoring incremental data. --- # TiDB Incremental Backup and Restore Guide @@ -13,7 +13,7 @@ Incremental data of a TiDB cluster is differentiated data between the starting s ## Back up incremental data -To back up incremental data, run the `br backup` command with **the last backup timestamp** `--lastbackupts` specified. In this way, br command-line tool automatically backs up incremental data generated between `lastbackupts` and the current time. To get `--lastbackupts`, run the `validate` command. The following is an example: +To back up incremental data, run the `tiup br backup` command with **the last backup timestamp** `--lastbackupts` specified. In this way, br command-line tool automatically backs up incremental data generated between `lastbackupts` and the current time. To get `--lastbackupts`, run the `validate` command. The following is an example: ```shell LAST_BACKUP_TS=`tiup br validate decode --field="end-version" --storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}"| tail -n1` diff --git a/br/br-pitr-guide.md b/br/br-pitr-guide.md index 68d3d9f94ccc9..64418cd1a7198 100644 --- a/br/br-pitr-guide.md +++ b/br/br-pitr-guide.md @@ -19,7 +19,7 @@ Before you back up or restore data using the br command-line tool (hereinafter r > - The following examples assume that Amazon S3 access keys and secret keys are used to authorize permissions. If IAM roles are used to authorize permissions, you need to set `--send-credentials-to-tikv` to `false`. > - If other storage systems or authorization methods are used to authorize permissions, adjust the parameter settings according to [Backup Storages](/br/backup-and-restore-storages.md). -To start a log backup, run `br log start`. A cluster can only run one log backup task each time. +To start a log backup, run `tiup br log start`. A cluster can only run one log backup task each time. ```shell tiup br log start --task-name=pitr --pd "${PD_IP}:2379" \ @@ -48,7 +48,7 @@ checkpoint[global]: 2022-05-13 11:31:47.2 +0800; gap=4m53s ### Run full backup regularly -The snapshot backup can be used as a method of full backup. You can run `br backup full` to back up the cluster snapshot to the backup storage according to a fixed schedule (for example, every 2 days). +The snapshot backup can be used as a method of full backup. You can run `tiup br backup full` to back up the cluster snapshot to the backup storage according to a fixed schedule (for example, every 2 days). ```shell tiup br backup full --pd "${PD_IP}:2379" \ @@ -57,10 +57,10 @@ tiup br backup full --pd "${PD_IP}:2379" \ ## Run PITR -To restore the cluster to any point in time within the backup retention period, you can use `br restore point`. When you run this command, you need to specify the **time point you want to restore**, **the latest snapshot backup data before the time point**, and the **log backup data**. BR will automatically determine and read data needed for the restore, and then restore these data to the specified cluster in order. +To restore the cluster to any point in time within the backup retention period, you can use `tiup br restore point`. When you run this command, you need to specify the **time point you want to restore**, **the latest snapshot backup data before the time point**, and the **log backup data**. BR will automatically determine and read data needed for the restore, and then restore these data to the specified cluster in order. ```shell -br restore point --pd "${PD_IP}:2379" \ +tiup br restore point --pd "${PD_IP}:2379" \ --storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}' \ --full-backup-storage='s3://backup-101/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}' \ --restored-ts '2022-05-15 18:00:00+0800' @@ -80,7 +80,7 @@ Restore KV Files <-------------------------------------------------------------- As described in the [Usage Overview of TiDB Backup and Restore](/br/br-use-overview.md): -To perform PITR, you need to restore the full backup before the restore point, and the log backup between the full backup point and the restore point. Therefore, for log backups that exceed the backup retention period, you can use `br log truncate` to delete the backup before the specified time point. **It is recommended to only delete the log backup before the full snapshot**. +To perform PITR, you need to restore the full backup before the restore point, and the log backup between the full backup point and the restore point. Therefore, for log backups that exceed the backup retention period, you can use `tiup br log truncate` to delete the backup before the specified time point. **It is recommended to only delete the log backup before the full snapshot**. The following steps describe how to clean up backup data that exceeds the backup retention period: @@ -100,7 +100,7 @@ The following steps describe how to clean up backup data that exceeds the backup 4. Delete snapshot data earlier than the snapshot backup `FULL_BACKUP_TS`: ```shell - rm -rf s3://backup-101/snapshot-${date} + aws s3 rm --recursive s3://backup-101/snapshot-${date} ``` ## Performance capabilities of PITR diff --git a/br/br-pitr-manual.md b/br/br-pitr-manual.md index b1cad71f51289..d4c9076ea1949 100644 --- a/br/br-pitr-manual.md +++ b/br/br-pitr-manual.md @@ -1,6 +1,6 @@ --- title: TiDB Log Backup and PITR Command Manual -summary: TiDB Log Backup and PITR Command Manual describes commands for log backup and point-in-time recovery. Use `br log` command to start, pause, resume, stop, truncate, and query log backup tasks. Specify parameters like `start-ts`, `task-name`, `--storage`, and `--pd` for log backup. Use `br log metadata` to view backup metadata and `br restore point` for PITR. Be cautious when pausing and resuming backup tasks. +summary: Introduce the commands used in TiDB log backup and point-in-time recovery (PITR). aliases: ['/tidb/dev/br-log-command-line/'] --- @@ -15,10 +15,10 @@ For more information about log backup and PITR, refer to: ## Perform log backup -You can start and manage log backup using the `br log` command. +You can start and manage log backup using the `tiup br log` command. ```shell -./br log --help +tiup br log --help backup stream log from TiDB/TiKV cluster @@ -37,22 +37,22 @@ Available Commands: Each subcommand is described as follows: -- `br log start`: start a log backup task. -- `br log status`: query the status of the log backup task. -- `br log pause`: pause a log backup task. -- `br log resume`: resume a paused log backup task. -- `br log stop`: stop a log backup task and delete the task metadata. -- `br log truncate`: clean up the log backup data from the backup storage. -- `br log metadata`: query the metadata of the log backup data. +- `tiup br log start`: start a log backup task. +- `tiup br log status`: query the status of the log backup task. +- `tiup br log pause`: pause a log backup task. +- `tiup br log resume`: resume a paused log backup task. +- `tiup br log stop`: stop a log backup task and delete the task metadata. +- `tiup br log truncate`: clean up the log backup data from the backup storage. +- `tiup br log metadata`: query the metadata of the log backup data. ### Start a backup task -You can run the `br log start` command to start a log backup task. This task runs in the background of your TiDB cluster and automatically backs up the change log of KV storage to the backup storage. +You can run the `tiup br log start` command to start a log backup task. This task runs in the background of your TiDB cluster and automatically backs up the change log of KV storage to the backup storage. -Run `br log start --help` to see the help information: +Run `tiup br log start --help` to see the help information: ```shell -./br log start --help +tiup br log start --help start a log backup task Usage: @@ -83,18 +83,18 @@ The example output only shows the common parameters. These parameters are descri Usage example: ```shell -./br log start --task-name=pitr --pd="${PD_IP}:2379" \ +tiup br log start --task-name=pitr --pd="${PD_IP}:2379" \ --storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' ``` ### Query the backup status -You can run the `br log status` command to query the backup status. +You can run the `tiup br log status` command to query the backup status. -Run `br log status --help` to see the help information: +Run `tiup br log status --help` to see the help information: ```shell -./br log status --help +tiup br log status --help get status for the log backup task Usage: @@ -118,7 +118,7 @@ In the example output, `task-name` is used to specify the name of the backup tas Usage example: ```shell -./br log status --task-name=pitr --pd="${PD_IP}:2379" +tiup br log status --task-name=pitr --pd="${PD_IP}:2379" ``` Expected output: @@ -146,12 +146,12 @@ The output fields are described as follows: ### Pause and resume a backup task -You can run the `br log pause` command to pause a running backup task. +You can run the `tiup br log pause` command to pause a running backup task. -Run `br log pause --help` to see the help information: +Run `tiup br log pause --help` to see the help information: ```shell -./br log pause --help +tiup br log pause --help pause a log backup task Usage: @@ -177,15 +177,15 @@ Global Flags: Usage example: ```shell -./br log pause --task-name=pitr --pd="${PD_IP}:2379" +tiup br log pause --task-name=pitr --pd="${PD_IP}:2379" ``` -You can run the `br log resume` command to resume a paused backup task. +You can run the `tiup br log resume` command to resume a paused backup task. -Run `br log resume --help` to see the help information: +Run `tiup br log resume --help` to see the help information: ```shell -./br log resume --help +tiup br log resume --help resume a log backup task Usage: @@ -202,26 +202,26 @@ Global Flags: -u, --pd strings PD address (default [127.0.0.1:2379]) ``` -After the backup task is paused for more than 24 hours, running `br log resume` reports an error, and BR prompts that backup data is lost. To handle this error, refer to [Backup & Restore FAQs](/faq/backup-and-restore-faq.md#what-should-i-do-if-the-error-message-errbackupgcsafepointexceeded-is-returned-when-using-the-br-log-resume-command-to-resume-a-suspended-task). +After the backup task is paused for more than 24 hours, running `tiup br log resume` reports an error, and BR prompts that backup data is lost. To handle this error, refer to [Backup & Restore FAQs](/faq/backup-and-restore-faq.md#what-should-i-do-if-the-error-message-errbackupgcsafepointexceeded-is-returned-when-using-the-br-log-resume-command-to-resume-a-suspended-task). Usage example: ```shell -./br log resume --task-name=pitr --pd="${PD_IP}:2379" +tiup br log resume --task-name=pitr --pd="${PD_IP}:2379" ``` ### Stop and restart a backup task -You can stop a log backup task by running the `br log stop` command and restart a backup task that is stopped by using the original `--storage` directory. +You can stop a log backup task by running the `tiup br log stop` command and restart a backup task that is stopped by using the original `--storage` directory. #### Stop a backup task -You can run the `br log stop` command to stop a log backup task. This command cleans up the task metadata in the backup cluster. +You can run the `tiup br log stop` command to stop a log backup task. This command cleans up the task metadata in the backup cluster. -Run `br log stop --help` to see the help information: +Run `tiup br log stop --help` to see the help information: ```shell -./br log stop --help +tiup br log stop --help stop a log backup task Usage: @@ -240,17 +240,17 @@ Global Flags: > **Note:** > -> Use this command with caution. If you need to pause a log backup task, use `br log pause` and `br log resume` instead. +> Use this command with caution. If you need to pause a log backup task, use `tiup br log pause` and `tiup br log resume` instead. Usage example: ```shell -./br log stop --task-name=pitr --pd="${PD_IP}:2379" +tiup br log stop --task-name=pitr --pd="${PD_IP}:2379" ``` #### Restart a backup task -After running the `br log stop` command to stop a log backup task, you can create a new log backup task in another `--storage` directory or restart the log backup task in the original `--storage` directory by running the `br log start` command. If you restart the task in the original `--storage` directory, pay attention to the following points: +After running the `tiup br log stop` command to stop a log backup task, you can create a new log backup task in another `--storage` directory or restart the log backup task in the original `--storage` directory by running the `tiup br log start` command. If you restart the task in the original `--storage` directory, pay attention to the following points: - Parameters of the `--storage` directory for restarting a task must be the same as the task that is stopped. - The `--start-ts` does not need to be specified. BR automatically starts the backup from the last backup checkpoint. @@ -258,12 +258,12 @@ After running the `br log stop` command to stop a log backup task, you can creat ### Clean up backup data -You can run the `br log truncate` command to clean up the outdated or no longer needed log backup data. +You can run the `tiup br log truncate` command to clean up the outdated or no longer needed log backup data. -Run `br log truncate --help` to see the help information: +Run `tiup br log truncate --help` to see the help information: ```shell -./br log truncate --help +tiup br log truncate --help truncate the incremental log until sometime. Usage: @@ -289,7 +289,7 @@ This command only accesses the backup storage and does not access the TiDB clust Usage example: ```shell -./br log truncate --until='2022-07-26 21:20:00+0800' \ +tiup br log truncate --until='2022-07-26 21:20:00+0800' \ –-storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' ``` @@ -305,12 +305,12 @@ Removing metadata... DONE; take = 24.038962ms ### View the backup metadata -You can run the `br log metadata` command to view the backup metadata in the storage system, such as the earliest and latest timestamp that can be restored. +You can run the `tiup br log metadata` command to view the backup metadata in the storage system, such as the earliest and latest timestamp that can be restored. -Run `br log metadata --help` to see the help information: +Run `tiup br log metadata --help` to see the help information: ```shell -./br log metadata --help +tiup br log metadata --help get the metadata of log backup storage Usage: @@ -330,7 +330,7 @@ The `--storage` parameter is used to specify the backup storage address. Current Usage example: ```shell -./br log metadata –-storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' +tiup br log metadata –-storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' ``` Expected output: @@ -341,12 +341,12 @@ Expected output: ## Restore to a specified point in time (PITR) -You can run the `br restore point` command to perform a PITR on a new cluster or just restore the log backup data. +You can run the `tiup br restore point` command to perform a PITR on a new cluster or just restore the log backup data. -Run `br restore point --help` to see the help information: +Run `tiup br restore point --help` to see the help information: ```shell -./br restore point --help +tiup br restore point --help restore data from log until specify commit timestamp Usage: @@ -379,7 +379,7 @@ The example output only shows the common parameters. These parameters are descri Usage example: ```shell -./br restore point --pd="${PD_IP}:2379" +tiup br restore point --pd="${PD_IP}:2379" --storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' --full-backup-storage='s3://backup-101/snapshot-202205120000?access-key=${access-key}&secret-access-key=${secret-access-key}"' diff --git a/br/br-snapshot-guide.md b/br/br-snapshot-guide.md index 56854bdc932f6..06f34a8287564 100644 --- a/br/br-snapshot-guide.md +++ b/br/br-snapshot-guide.md @@ -22,7 +22,7 @@ Besides basic backup and restore, snapshot backup and restore also provides the > - The following examples assume that Amazon S3 access keys and secret keys are used to authorize permissions. If IAM roles are used to authorize permissions, you need to set `--send-credentials-to-tikv` to `false`. > - If other storage systems or authorization methods are used to authorize permissions, adjust the parameter settings according to [Backup Storages](/br/backup-and-restore-storages.md). -You can back up a TiDB cluster snapshot by running the `br backup full` command. Run `br backup full --help` to see the help information: +You can back up a TiDB cluster snapshot by running the `tiup br backup full` command. Run `tiup br backup full --help` to see the help information: ```shell tiup br backup full --pd "${PD_IP}:2379" \ @@ -33,7 +33,7 @@ tiup br backup full --pd "${PD_IP}:2379" \ In the preceding command: -- `--backupts`: The time point of the snapshot. The format can be [TSO](/glossary.md#tso) or timestamp, such as `400036290571534337` or `2018-05-11 01:42:23`. If the data of this snapshot is garbage collected, the `br backup` command returns an error and `br` exits. If you leave this parameter unspecified, `br` picks the snapshot corresponding to the backup start time. +- `--backupts`: The time point of the snapshot. The format can be [TSO](/glossary.md#tso) or timestamp, such as `400036290571534337` or `2018-05-11 01:42:23`. If the data of this snapshot is garbage collected, the `tiup br backup` command returns an error and `br` exits. If you leave this parameter unspecified, `br` picks the snapshot corresponding to the backup start time. - `--storage`: The storage address of the backup data. Snapshot backup supports Amazon S3, Google Cloud Storage, and Azure Blob Storage as backup storage. The preceding command uses Amazon S3 as an example. For more details, see [URI Formats of External Storage Services](/external-storage-uri.md). - `--ratelimit`: The maximum speed **per TiKV** performing backup tasks. The unit is in MiB/s. @@ -62,7 +62,13 @@ The output is as follows, corresponding to the physical time `2022-09-08 13:30:0 ## Restore cluster snapshots -You can restore a snapshot backup by running the `br restore full` command. Run `br restore full --help` to see the help information: +> **Note:** +> +> - For BR v7.5.0 and earlier versions, the snapshot restore speed per TiKV node is approximately 100 MiB/s. +> - Starting from BR v7.6.0, to address potential restore bottlenecks in scenarios with large-scale Regions, BR supports accelerating restore through the coarse-grained Region scattering algorithm (experimental). You can enable this feature by specifying the command-line parameter `--granularity="coarse-grained"`. +> - Starting from BR v8.0.0, the snapshot restore through the coarse-grained Region scattering algorithm is generally available (GA) and enabled by default. BR improves the snapshot restore speed significantly by implementing various optimizations such as adopting the coarse-grained Region scattering algorithm, creating databases and tables in batches, reducing the mutual impact between SST file downloads and ingest operations, and accelerating the restore of table statistics. According to test results from real-world cases, the SST file download speed for snapshot restore is improved by approximately up to 10 times, the data restore speed per TiKV node stabilizes at 1.2 GiB/s, the end-to-end restore speed is improved by approximately 1.5 to 3 times, and 100 TiB of data can be restored within one hour. + +You can restore a snapshot backup by running the `tiup br restore full` command. Run `tiup br restore full --help` to see the help information: The following example restores the [preceding backup snapshot](#back-up-cluster-snapshots) to a target cluster: @@ -90,7 +96,7 @@ BR supports restoring partial data of a specified database or table from backup **Restore a database** -To restore a database to a cluster, run the `br restore db` command. The following example restores the `test` database from the backup data to the target cluster: +To restore a database to a cluster, run the `tiup br restore db` command. The following example restores the `test` database from the backup data to the target cluster: ```shell tiup br restore db \ @@ -103,7 +109,7 @@ In the preceding command, `--db` specifies the name of the database to be restor **Restore a table** -To restore a single table to a cluster, run the `br restore table` command. The following example restores the `test.usertable` table from the backup data to the target cluster: +To restore a single table to a cluster, run the `tiup br restore table` command. The following example restores the `test.usertable` table from the backup data to the target cluster: ```shell tiup br restore table --pd "${PD_IP}:2379" \ @@ -116,7 +122,7 @@ In the preceding command, `--db` specifies the name of the database to be restor **Restore multiple tables with table filter** -To restore multiple tables with more complex filter rules, run the `br restore full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. The following example restores tables that match the `db*.tbl*` filter rule from the backup data to the target cluster: +To restore multiple tables with more complex filter rules, run the `tiup br restore full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. The following example restores tables that match the `db*.tbl*` filter rule from the backup data to the target cluster: ```shell tiup br restore full \ @@ -208,10 +214,10 @@ The impact of backup on cluster performance can be reduced by limiting the backu - During data restore, TiDB tries to fully utilize the TiKV CPU, disk IO, and network bandwidth resources. Therefore, it is recommended to restore the backup data on an empty cluster to avoid affecting the running applications. - The speed of restoring backup data is much related with the cluster configuration, deployment, and running applications. In internal tests, the restore speed of a single TiKV node can reach 100 MiB/s. The performance and impact of snapshot restore are varied in different user scenarios and should be tested in actual environments. -- Starting from v7.6.0, to accelerate restore speed in large-scale Region scenarios, BR introduces an experimental feature that allows you to enable a coarse-grained Region scatter algorithm by specifying the command-line parameter `--granularity="coarse-grained"`. This algorithm ensures that each TiKV node receives stable and evenly distributed download tasks, thus fully utilizing the resources of each TiKV node and achieving a rapid parallel recovery. In several real-world cases, the snapshot restore speed of the cluster is improved by about 10 times in large-scale Region scenarios. The following is an example: +- BR provides a coarse-grained Region scattering algorithm to accelerate Region restore in large-scale Region scenarios. The algorithm is controlled by the command-line parameter `--granularity="coarse-grained"` and is enabled by default. This algorithm ensures that each TiKV node receives stable and evenly distributed download tasks, thus fully utilizing the resources of each TiKV node and achieving a rapid parallel recovery. In several real-world cases, the snapshot restore speed of the cluster is improved by about 3 times in large-scale Region scenarios. The following is an example: ```bash - br restore full \ + tiup br restore full \ --pd "${PDIP}:2379" \ --storage "s3://${Bucket}/${Folder}" \ --s3.region "${region}" \ @@ -220,6 +226,13 @@ The impact of backup on cluster performance can be reduced by limiting the backu --log-file restorefull.log ``` +- Starting from v8.0.0, the `br` command-line tool introduces the `--tikv-max-restore-concurrency` parameter to control the maximum number of files that BR downloads and ingests per TiKV node. By configuring this parameter, you can also control the maximum length of the job queue (the maximum length of the job queue = 32 \* the number of TiKV nodes \* `--tikv-max-restore-concurrency`), thereby controlling the memory consumption of the BR node. + + In normal cases, `--tikv-max-restore-concurrency` is automatically adjusted based on the cluster configuration, so manual configuration is unnecessary. If the **TiKV-Details** > **Backup & Import** > **Import RPC count** monitoring metric in Grafana shows that the number of files BR downloads remains close to 0 for a long time while the number of files that BR ingests consistently reaches the upper limit, it indicates that ingesting file tasks pile up and the job queue has reached its maximum length. In this case, you can take the following measures to alleviate the task pilling-up issue: + + - Set the `--ratelimit` parameter to limit the download speed, ensuring sufficient resources for ingesting file tasks. For example, if the disk throughput of any TiKV node is `x MiB/s` and the network bandwidth for downloading backup files exceeds `x/2 MiB/s`, you can set the parameter as `--ratelimit x/2`. If the disk throughput of any TiKV node is `x MiB/s` and the network bandwidth for downloading backup files is less than or equal to `x/2 MiB/s`, you can leave the parameter `--ratelimit` unset. + - Increase the `--tikv-max-restore-concurrency` to increase the maximum length of the job queue. + ## See also * [TiDB Backup and Restore Use Cases](/br/backup-and-restore-use-cases.md) diff --git a/br/br-snapshot-manual.md b/br/br-snapshot-manual.md index 89149afb8184b..2906e05298dd5 100644 --- a/br/br-snapshot-manual.md +++ b/br/br-snapshot-manual.md @@ -29,10 +29,10 @@ For more information about snapshot backup and restore, refer to: ## Back up cluster snapshots -You can back up the latest or specified snapshot of the TiDB cluster using the `br backup full` command. For more information about the command, run the `br backup full --help` command. +You can back up the latest or specified snapshot of the TiDB cluster using the `tiup br backup full` command. For more information about the command, run the `tiup br backup full --help` command. ```shell -br backup full \ +tiup br backup full \ --pd "${PD_IP}:2379" \ --backupts '2022-09-08 13:30:00' \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ @@ -42,7 +42,7 @@ br backup full \ In the preceding command: -- `--backupts`: The time point of the snapshot. The format can be [TSO](/glossary.md#tso) or timestamp, such as `400036290571534337` or `2018-05-11 01:42:23`. If the data of this snapshot is garbage collected, the `br backup` command returns an error and 'br' exits. If you leave this parameter unspecified, `br` picks the snapshot corresponding to the backup start time. +- `--backupts`: The time point of the snapshot. The format can be [TSO](/glossary.md#tso) or timestamp, such as `400036290571534337` or `2018-05-11 01:42:23`. If the data of this snapshot is garbage collected, the `tiup br backup` command returns an error and 'br' exits. If you leave this parameter unspecified, `br` picks the snapshot corresponding to the backup start time. - `--ratelimit`: The maximum speed **per TiKV** performing backup tasks. The unit is in MiB/s. - `--log-file`: The target file where `br` log is written. @@ -62,12 +62,12 @@ Backup & Restore (BR) supports backing up partial data of a specified database o ### Back up a database -To back up a database in a cluster, run the `br backup db` command. +To back up a database in a cluster, run the `tiup br backup db` command. The following example backs up the `test` database to Amazon S3: ```shell -br backup db \ +tiup br backup db \ --pd "${PD_IP}:2379" \ --db test \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ @@ -79,12 +79,12 @@ In the preceding command, `--db` specifies the database name, and other paramete ### Back up a table -To back up a table in a cluster, run the `br backup table` command. +To back up a table in a cluster, run the `tiup br backup table` command. The following example backs up the `test.usertable` table to Amazon S3: ```shell -br backup table \ +tiup br backup table \ --pd "${PD_IP}:2379" \ --db test \ --table usertable \ @@ -97,12 +97,12 @@ In the preceding command, `--db` and `--table` specify the database name and tab ### Back up multiple tables with table filter -To back up multiple tables with more criteria, run the `br backup full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. +To back up multiple tables with more criteria, run the `tiup br backup full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. The following example backs up tables that match the `db*.tbl*` filter rule to Amazon S3: ```shell -br backup full \ +tiup br backup full \ --pd "${PD_IP}:2379" \ --filter 'db*.tbl*' \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ @@ -112,22 +112,22 @@ br backup full \ ## Back up statistics -Starting from TiDB v7.5.0, the `br` command-line tool introduces the `--ignore-stats` parameter. When you set this parameter to `false`, the `br` command-line tool supports backing up and restoring statistics of columns, indexes, and tables. In this case, you do not need to manually run the statistics collection task for the TiDB database restored from the backup, or wait for the completion of the automatic collection task. This feature simplifies the database maintenance work and improves the query performance. +Starting from TiDB v7.5.0, the `br` command-line tool introduces the `--ignore-stats` parameter. When you set this parameter to `false`, the `br` command-line tool supports backing up statistics of columns, indexes, and tables. In this case, you do not need to manually run the statistics collection task for the TiDB database restored from the backup, or wait for the completion of the automatic collection task. This feature simplifies the database maintenance work and improves the query performance. If you do not set this parameter to `false`, the `br` command-line tool uses the default setting `--ignore-stats=true`, which means statistics are not backed up during data backup. The following is an example of backing up cluster snapshot data and backing up table statistics with `--ignore-stats=false`: ```shell -br backup full \ +tiup br backup full \ --storage local:///br_data/ --pd "${PD_IP}:2379" --log-file restore.log \ --ignore-stats=false ``` -After backing up data with the preceding configuration, when you restore data, the `br` command-line tool automatically restores table statistics if table statistics are included in the backup: +After backing up data with the preceding configuration, when you restore data, the `br` command-line tool automatically restores table statistics if table statistics are included in the backup (Starting from v8.0.0, the `br` command-line tool introduces the `--load-stats` parameter, which controls whether to restore backup statistics. The default behavior is to restore backup statistics. There is no need to set it to `false` in most cases): ```shell -br restore full \ +tiup br restore full \ --storage local:///br_data/ --pd "${PD_IP}:2379" --log-file restore.log ``` @@ -150,7 +150,7 @@ Since TiDB v5.3.0, you can encrypt backup data by configuring the following para The following is an example: ```shell -br backup full\ +tiup br backup full\ --pd ${PD_IP}:2379 \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ --crypter.method aes128-ctr \ @@ -164,10 +164,10 @@ br backup full\ ## Restore cluster snapshots -You can restore a TiDB cluster snapshot by running the `br restore full` command. +You can restore a TiDB cluster snapshot by running the `tiup br restore full` command. ```shell -br restore full \ +tiup br restore full \ --pd "${PD_IP}:2379" \ --with-sys-table \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ @@ -193,12 +193,12 @@ You can use `br` to restore partial data of a specified database or table from b ### Restore a database -To restore a database to a cluster, run the `br restore db` command. +To restore a database to a cluster, run the `tiup br restore db` command. The following example restores the `test` database from the backup data to the target cluster: ```shell -br restore db \ +tiup br restore db \ --pd "${PD_IP}:2379" \ --db "test" \ --ratelimit 128 \ @@ -214,12 +214,12 @@ In the preceding command, `--db` specifies the name of the database to be restor ### Restore a table -To restore a single table to a cluster, run the `br restore table` command. +To restore a single table to a cluster, run the `tiup br restore table` command. The following example restores the `test.usertable` table from Amazon S3 to the target cluster: ```shell -br restore table \ +tiup br restore table \ --pd "${PD_IP}:2379" \ --db "test" \ --table "usertable" \ @@ -232,12 +232,12 @@ In the preceding command, `--table` specifies the name of the table to be restor ### Restore multiple tables with table filter -To restore multiple tables with more complex filter rules, run the `br restore full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. +To restore multiple tables with more complex filter rules, run the `tiup br restore full` command and specify the [table filters](/table-filter.md) with `--filter` or `-f`. The following example restores tables that match the `db*.tbl*` filter rule from Amazon S3 to the target cluster: ```shell -br restore full \ +tiup br restore full \ --pd "${PD_IP}:2379" \ --filter 'db*.tbl*' \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ @@ -246,12 +246,12 @@ br restore full \ ### Restore execution plan bindings from the `mysql` schema -To restore execution plan bindings of a cluster, you can run the `br restore full` command, including the `--with-sys-table` option and also the `--filter` or `-f` option to specify the `mysql` schema to be restored. +To restore execution plan bindings of a cluster, you can run the `tiup br restore full` command, including the `--with-sys-table` option and also the `--filter` or `-f` option to specify the `mysql` schema to be restored. The following is an example of restoring the `mysql.bind_info` table: ```shell -br restore full \ +tiup br restore full \ --pd "${PD_IP}:2379" \ --filter 'mysql.bind_info' \ --with-sys-table \ @@ -286,7 +286,7 @@ ADMIN RELOAD BINDINGS; After encrypting the backup data, you need to pass in the corresponding decryption parameters to restore the data. Ensure that the decryption algorithm and key are correct. If the decryption algorithm or key is incorrect, the data cannot be restored. The following is an example: ```shell -br restore full\ +tiup br restore full\ --pd "${PD_IP}:2379" \ --storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ --crypter.method aes128-ctr \ diff --git a/br/br-use-overview.md b/br/br-use-overview.md index 4bacceb740063..dd28eadd7b2d9 100644 --- a/br/br-use-overview.md +++ b/br/br-use-overview.md @@ -16,8 +16,8 @@ Before using TiDB backup and restore features, it is recommended that you unders **TiDB provides two types of backup. Which one should I use?** Full backup contains the full data of a cluster at a certain point in time. Log backup contains the data changes written to TiDB. It is recommended to use both types of backup at the same time: -- **[Start log backup](/br/br-pitr-guide.md#start-log-backup)**: Run the `br log start` command to start the log backup task. After that, the task keeps running on all TiKV nodes and backs up TiDB data changes to the specified storage in small batches regularly. -- **Perform [snapshot (full) backup](/br/br-snapshot-guide.md#back-up-cluster-snapshots) regularly**: Run the `br backup full` command to back up the snapshot of the cluster to the specified storage. For example, back up the cluster snapshot at 0:00 AM every day. +- **[Start log backup](/br/br-pitr-guide.md#start-log-backup)**: Run the `tiup br log start` command to start the log backup task. After that, the task keeps running on all TiKV nodes and backs up TiDB data changes to the specified storage in small batches regularly. +- **Perform [snapshot (full) backup](/br/br-snapshot-guide.md#back-up-cluster-snapshots) regularly**: Run the `tiup br backup full` command to back up the snapshot of the cluster to the specified storage. For example, back up the cluster snapshot at 0:00 AM every day. ### How to manage backup data? @@ -53,13 +53,13 @@ If the TiDB cluster is deployed in a self-built data center, the following pract Assume that you need to set the life cycle for each backup data, for example, 7 days. Such a life cycle is called **backup retention period**, which will also be mentioned in backup tutorials. -* To perform PITR, you need to restore the full backup before the restore point, and the log backup between the full backup and the restore point. Therefore, **It is recommended to only delete the log backup before the full snapshot**. For log backups that exceed the backup retention period, you can use `br log truncate` command to delete the backup before the specified time point. +* To perform PITR, you need to restore the full backup before the restore point, and the log backup between the full backup and the restore point. Therefore, **It is recommended to only delete the log backup before the full snapshot**. For log backups that exceed the backup retention period, you can use `tiup br log truncate` command to delete the backup before the specified time point. * For backup data that exceeds the retention period, you can delete or archive the backup directory. ### How to restore data? -- To restore only full backup data, you can use `br restore` to perform a full restore of the specified backup. -- If you have started log backup and regularly performed a full backup, you can run the `br restore point` command to restore data to any time point within the backup retention period. +- To restore only full backup data, you can use `tiup br restore` to perform a full restore of the specified backup. +- If you have started log backup and regularly performed a full backup, you can run the `tiup br restore point` command to restore data to any time point within the backup retention period. ## Deploy and use BR diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 40ef11381c5b0..3cfcc43cde70b 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -1,6 +1,6 @@ --- title: br Command-line Manual -summary: The `br` command-line tool is used for snapshot backup, log backup, and point-in-time recovery (PITR) in TiDB clusters. It consists of sub-commands, options, and parameters, with common options like `--pd` for PD service address and `-s` for storage path. Sub-commands include `br backup`, `br log`, and `br restore`, each with specific functionalities. Backup commands include `full`, `db`, and `table` options, while log backup and restore commands have various tasks for managing backup operations. +summary: The `br` command-line tool is used for snapshot backup, log backup, and point-in-time recovery (PITR) in TiDB clusters. It consists of sub-commands, options, and parameters, with common options like `--pd` for PD service address and `-s` for storage path. Sub-commands include `tiup br backup`, `tiup br log`, and `tiup br restore`, each with specific functionalities. Backup commands include `full`, `db`, and `table` options, while log backup and restore commands have various tasks for managing backup operations. --- # br Command-line Manual @@ -14,26 +14,26 @@ A `br` command consists of sub-commands, options, and parameters. A sub-command The following is a complete `br` command: ```shell -br backup full --pd "${PD_IP}:2379" \ +tiup br backup full --pd "${PD_IP}:2379" \ --storage "s3://backup-data/snapshot-202209081330/" ``` Explanations for the preceding command are as follows: -* `backup`: the sub-command of `br`. -* `full`: the sub-command of `br backup`. +* `backup`: the sub-command of `tiup br`. +* `full`: the sub-command of `tiup br backup`. * `-s` (or `--storage`): the option that specifies the path where the backup files are stored. `"s3://backup-data/snapshot-202209081330/"` is the parameter of `-s`. * `--pd`: the option that specifies the PD service address. `"${PD_IP}:2379"` is the parameter of `--pd`. ### Commands and sub-commands -A `br` command consists of multiple layers of sub-commands. Currently, br command-line tool has the following sub-commands: +A `tiup br` command consists of multiple layers of sub-commands. Currently, br command-line tool has the following sub-commands: -* `br backup`: used to back up the data of the TiDB cluster. -* `br log`: used to start and manage log backup tasks. -* `br restore`: used to restore backup data of the TiDB cluster. +* `tiup br backup`: used to back up the data of the TiDB cluster. +* `tiup br log`: used to start and manage log backup tasks. +* `tiup br restore`: used to restore backup data of the TiDB cluster. -`br backup` and `br restore` include the following sub-commands: +`tiup br backup` and `tiup br restore` include the following sub-commands: * `full`: used to back up or restore all the cluster data. * `db`: used to back up or restore a specified database of the cluster. @@ -53,7 +53,7 @@ A `br` command consists of multiple layers of sub-commands. Currently, br comman ## Commands of full backup -To back up cluster data, run the `br backup` command. You can add the `full` or `table` sub-command to specify the scope of your backup operation: the whole cluster (`full`) or a single table (`table`). +To back up cluster data, run the `tiup br backup` command. You can add the `full` or `table` sub-command to specify the scope of your backup operation: the whole cluster (`full`) or a single table (`table`). - [Back up TiDB cluster snapshots](/br/br-snapshot-manual.md#back-up-cluster-snapshots) - [Back up a database](/br/br-snapshot-manual.md#back-up-a-database) @@ -63,7 +63,7 @@ To back up cluster data, run the `br backup` command. You can add the `full` or ## Commands of log backup -To start log backup and manage log backup tasks, run the `br log` command. +To start log backup and manage log backup tasks, run the `tiup br log` command. - [Start a log backup task](/br/br-pitr-manual.md#start-a-backup-task) - [Query the backup status](/br/br-pitr-manual.md#query-the-backup-status) @@ -74,7 +74,7 @@ To start log backup and manage log backup tasks, run the `br log` command. ## Commands of restoring backup data -To restore cluster data, run the `br restore` command. You can add the `full`, `db`, or `table` sub-command to specify the scope of your restore: the whole cluster (`full`), a single database (`db`), or a single table (`table`). +To restore cluster data, run the `tiup br restore` command. You can add the `full`, `db`, or `table` sub-command to specify the scope of your restore: the whole cluster (`full`), a single database (`db`), or a single table (`table`). - [Point-in-time recovery](/br/br-pitr-manual.md#restore-to-a-specified-point-in-time-pitr) - [Restore cluster snapshots](/br/br-snapshot-manual.md#restore-cluster-snapshots) diff --git a/character-set-and-collation.md b/character-set-and-collation.md index d15f682b247c1..d3b750a6c7b76 100644 --- a/character-set-and-collation.md +++ b/character-set-and-collation.md @@ -553,7 +553,7 @@ INSERT INTO t VALUES ('a'); ``` ```sql -ERROR 1062 (23000): Duplicate entry 'a' for key 't.PRIMARY' # TiDB is compatible with the case-insensitive collation of MySQL. +ERROR 1062 (23000): Duplicate entry 'a' for key 't.PRIMARY' -- TiDB is compatible with the case-insensitive collation of MySQL. ``` ```sql @@ -561,7 +561,7 @@ INSERT INTO t VALUES ('a '); ``` ```sql -ERROR 1062 (23000): Duplicate entry 'a ' for key 't.PRIMARY' # TiDB modifies the `PADDING` behavior to be compatible with MySQL. +ERROR 1062 (23000): Duplicate entry 'a ' for key 't.PRIMARY' -- TiDB modifies the `PADDING` behavior to be compatible with MySQL. ``` > **Note:** diff --git a/check-before-deployment.md b/check-before-deployment.md index 38a5e3b52b935..0b8f957ca52e3 100644 --- a/check-before-deployment.md +++ b/check-before-deployment.md @@ -269,7 +269,7 @@ To check whether the NTP service is installed and whether it synchronizes with t Unable to talk to NTP daemon. Is it running? ``` -3. Run the `chronyc tracking` command to check wheter the Chrony service synchronizes with the NTP server. +3. Run the `chronyc tracking` command to check whether the Chrony service synchronizes with the NTP server. > **Note:** > @@ -630,9 +630,17 @@ Take the following steps to check the current operating system configuration and echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf echo "vm.overcommit_memory = 1">> /etc/sysctl.conf + echo "vm.min_free_kbytes = 1048576">> /etc/sysctl.conf sysctl -p ``` + > **Note:** + > + > - `vm.min_free_kbytes` is a Linux kernel parameter that controls the minimum amount of free memory reserved by the system, measured in KiB. + > - The setting of `vm.min_free_kbytes` affects the memory reclaim mechanism. Setting it too large reduces the available memory, while setting it too small might cause memory request speeds to exceed background reclaim speeds, leading to memory reclamation and consequent delays in memory allocation. + > - It is recommended to set `vm.min_free_kbytes` to `1048576` KiB (1 GiB) at least. If [NUMA is installed](/check-before-deployment.md#install-the-numactl-tool), it is recommended to set it to `number of NUMA nodes * 1048576` KiB. + > - For servers with memory sizes less than 16 GiB, it is recommended to keep the default value of `vm.min_free_kbytes` unchanged. + 10. Execute the following command to configure the user's `limits.conf` file: {{< copyable "shell-regular" >}} diff --git a/choose-index.md b/choose-index.md index 6ef39b09e17b0..3f8a4860eda67 100644 --- a/choose-index.md +++ b/choose-index.md @@ -195,197 +195,406 @@ mysql> EXPLAIN SELECT /*+ use_index_merge(t1, idx) */ * FROM t1 WHERE JSON_OVERL The composite multi-valued index can also be accessed through IndexMerge: ```sql -mysql> CREATE TABLE t2 (a INT, j JSON, b INT, INDEX idx(a, (CAST(j->'$.path' AS SIGNED ARRAY)), b)); -Query OK, 0 rows affected (0.04 sec) - -mysql> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND (1 MEMBER OF (j->'$.path')) AND b=2; -+---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------+ -| Selection_5 | 0.01 | root | | json_memberof(cast(1, json BINARY), json_extract(test.t2.j, "$.path")) | -| └─IndexMerge_8 | 0.00 | root | | type: union | -| ├─IndexRangeScan_6(Build) | 0.00 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 1 2,1 1 2], keep order:false, stats:pseudo | -| └─TableRowIDScan_7(Probe) | 0.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | -+---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------+ -4 rows in set, 1 warning (0.00 sec) +CREATE TABLE t2 (a INT, j JSON, b INT, k JSON, INDEX idx(a, (CAST(j->'$.path' AS SIGNED ARRAY)), b), INDEX idx2(b, (CAST(k->'$.path' AS SIGNED ARRAY)))); +EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND (1 MEMBER OF (j->'$.path')) AND b=2; +EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_CONTAINS((j->'$.path'), '[1, 2, 3]'); +EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_OVERLAPS((j->'$.path'), '[1, 2, 3]'); +EXPLAIN SELECT /*+ use_index_merge(t2, idx, idx2) */ * FROM t2 WHERE (a=1 AND 1 member of (j->'$.path')) AND (b=1 AND 2 member of (k->'$.path')); +``` -mysql> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_CONTAINS((j->'$.path'), '[1, 2, 3]'); +```sql +> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND (1 MEMBER OF (j->'$.path')) AND b=2; ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ +| IndexMerge_7 | 0.00 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 0.00 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 1 2,1 1 2], keep order:false, stats:pseudo | +| └─TableRowIDScan_6(Probe) | 0.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ + +> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_CONTAINS((j->'$.path'), '[1, 2, 3]'); +-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-------------------------------------------------+ | id | estRows | task | access object | operator info | +-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-------------------------------------------------+ -| IndexMerge_9 | 0.10 | root | | type: intersection | +| IndexMerge_9 | 0.00 | root | | type: intersection | | ├─IndexRangeScan_5(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 1,1 1], keep order:false, stats:pseudo | | ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 2,1 2], keep order:false, stats:pseudo | | ├─IndexRangeScan_7(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 3,1 3], keep order:false, stats:pseudo | -| └─TableRowIDScan_8(Probe) | 0.10 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +| └─TableRowIDScan_8(Probe) | 0.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-------------------------------------------------+ -5 rows in set (0.00 sec) -mysql> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_OVERLAPS((j->'$.path'), '[1, 2, 3]'); +> EXPLAIN SELECT /*+ use_index_merge(t2, idx) */ * FROM t2 WHERE a=1 AND JSON_OVERLAPS((j->'$.path'), '[1, 2, 3]'); +---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | id | estRows | task | access object | operator info | +---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| Selection_5 | 8.00 | root | | json_overlaps(json_extract(test.t2.j, "$.path"), cast("[1, 2, 3]", json BINARY)) | -| └─IndexMerge_10 | 0.10 | root | | type: union | +| Selection_5 | 0.24 | root | | json_overlaps(json_extract(test.t2.j, "$.path"), cast("[1, 2, 3]", json BINARY)) | +| └─IndexMerge_10 | 0.30 | root | | type: union | | ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 1,1 1], keep order:false, stats:pseudo | | ├─IndexRangeScan_7(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 2,1 2], keep order:false, stats:pseudo | | ├─IndexRangeScan_8(Build) | 0.10 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 3,1 3], keep order:false, stats:pseudo | -| └─TableRowIDScan_9(Probe) | 0.10 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +| └─TableRowIDScan_9(Probe) | 0.30 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +---------------------------------+---------+-----------+-----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -6 rows in set, 1 warning (0.00 sec) + +> EXPLAIN SELECT /*+ use_index_merge(t2, idx, idx2) */ * FROM t2 WHERE (a=1 AND 1 member of (j->'$.path')) AND (b=1 AND 2 member of (k->'$.path')); ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ +| IndexMerge_8 | 0.00 | root | | type: intersection | +| ├─IndexRangeScan_5(Build) | 0.00 | cop[tikv] | table:t2, index:idx(a, cast(json_extract(`j`, _utf8'$.path') as signed array), b) | range:[1 1 1,1 1 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t2, index:idx2(b, cast(json_extract(`k`, _utf8'$.path') as signed array)) | range:[1 2,1 2], keep order:false, stats:pseudo | +| └─TableRowIDScan_7(Probe) | 0.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------------+-----------------------------------------------------+ ``` -For `OR`/`AND` conditions composed of multiple `member of` expressions that can access the same multi-valued index or multiple multi-valued indexes, due to the single nature of `member of`, IndexMerge `UNION` or `INTERSECTION` can be used to access the multi-valued index: +TiDB can also use IndexMerge to access both multi-valued indexes and normal indexes. For example: ```sql -mysql> CREATE TABLE t3 (a INT, j JSON, b INT, k JSON, INDEX idx(a, (CAST(j AS SIGNED ARRAY))), INDEX idx2(b,(CAST(k as SIGNED ARRAY)))); -Query OK, 0 rows affected (0.04 sec) +CREATE TABLE t3(j1 JSON, j2 JSON, a INT, INDEX k1((CAST(j1->'$.path' AS SIGNED ARRAY))), INDEX k2((CAST(j2->'$.path' AS SIGNED ARRAY))), INDEX ka(a)); +EXPLAIN SELECT /*+ use_index_merge(t3, k1, k2, ka) */ * FROM t3 WHERE 1 member of (j1->'$.path') OR a = 3; +EXPLAIN SELECT /*+ use_index_merge(t3, k1, k2, ka) */ * FROM t3 WHERE 1 member of (j1->'$.path') AND 2 member of (j2->'$.path') AND (a = 3); ``` -Use `UNION`: - ```sql -mysql> EXPLAIN SELECT /*+ use_index_merge(t3, idx) */ * FROM t3 WHERE ((a=1 AND (1 member of (j)))) OR ((a=2 AND (2 member of (j)))); -+---------------------------------+---------+-----------+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+---------------------------------+---------+-----------+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| Selection_5 | 0.08 | root | | or(and(eq(test.t3.a, 1), json_memberof(cast(1, json BINARY), test.t3.j)), and(eq(test.t3.a, 2), json_memberof(cast(2, json BINARY), test.t3.j))) | -| └─IndexMerge_9 | 0.10 | root | | type: union | -| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t3, index:idx(a, cast(`j` as signed array)) | range:[1 1,1 1], keep order:false, stats:pseudo | -| ├─IndexRangeScan_7(Build) | 0.10 | cop[tikv] | table:t3, index:idx(a, cast(`j` as signed array)) | range:[2 2,2 2], keep order:false, stats:pseudo | -| └─TableRowIDScan_8(Probe) | 0.10 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | -+---------------------------------+---------+-----------+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ +> EXPLAIN SELECT /*+ use_index_merge(t3, k1, k2, ka) */ * FROM t3 WHERE 1 member of (j1->'$.path') OR a = 3; ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ +| IndexMerge_8 | 19.99 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t3, index:k1(cast(json_extract(`j1`, _utf8'$.path') as signed array)) | range:[1,1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t3, index:ka(a) | range:[3,3], keep order:false, stats:pseudo | +| └─TableRowIDScan_7(Probe) | 19.99 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + +> EXPLAIN SELECT /*+ use_index_merge(t3, k1, k2, ka) */ * FROM t3 WHERE 1 member of (j1->'$.path') AND 2 member of (j2->'$.path') AND (a = 3); ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ +| IndexMerge_9 | 0.00 | root | | type: intersection | +| ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t3, index:ka(a) | range:[3,3], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t3, index:k1(cast(json_extract(`j1`, _utf8'$.path') as signed array)) | range:[1,1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t3, index:k2(cast(json_extract(`j2`, _utf8'$.path') as signed array)) | range:[2,2], keep order:false, stats:pseudo | +| └─TableRowIDScan_8(Probe) | 0.00 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ ``` -Use `INTERSECTION`: +If several `json_member_of`, `json_contains` or `json_overlaps` conditions are connected with `OR` or `AND`, they need to meet the following requirements to access multi-valued indexes with IndexMerge: ```sql -tidb> EXPLAIN SELECT /*+ use_index_merge(t3, idx, idx2) */ * FROM t3 WHERE ((a=1 AND (1 member of (j)))) AND ((b=1 AND (2 member of (k)))); -+-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ -| IndexMerge_8 | 0.10 | root | | type: intersection | -| ├─IndexRangeScan_5(Build) | 0.10 | cop[tikv] | table:t3, index:idx(a, cast(`j` as signed array)) | range:[1 1,1 1], keep order:false, stats:pseudo | -| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t3, index:idx2(b, cast(`k` as signed array)) | range:[1 2,1 2], keep order:false, stats:pseudo | -| └─TableRowIDScan_7(Probe) | 0.10 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | -+-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ -4 rows in set (0.01 sec) +CREATE TABLE t4(a INT, j JSON, INDEX mvi1((CAST(j->'$.a' AS UNSIGNED ARRAY))), INDEX mvi2((CAST(j->'$.b' AS UNSIGNED ARRAY)))); ``` -### Partially supported scenarios +- For conditions connected with `OR`, each of them needs to be able to be accessed with IndexMerge respectively. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1, 2]') OR json_overlaps(j->'$.a', '[3, 4]'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1, 2]') OR json_length(j->'$.a') = 3; + SHOW WARNINGS; + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1, 2]') OR json_overlaps(j->'$.a', '[3, 4]'); + +----------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +----------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Selection_5 | 31.95 | root | | or(json_overlaps(json_extract(test.t4.j, "$.a"), cast("[1, 2]", json BINARY)), json_overlaps(json_extract(test.t4.j, "$.a"), cast("[3, 4]", json BINARY))) | + | └─IndexMerge_11 | 39.94 | root | | type: union | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_8(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | ├─IndexRangeScan_9(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[4,4], keep order:false, stats:pseudo | + | └─TableRowIDScan_10(Probe) | 39.94 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +----------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + -- json_length(j->'$.a') = 3 cannot be accessed with IndexMerge directly, so TiDB cannot use IndexMerge for this SQL statement. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1, 2]') OR json_length(j->'$.a') = 3; + +-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------------------------+ + | Selection_5 | 8000.00 | root | | or(json_overlaps(json_extract(test.t4.j, "$.a"), cast("[1, 2]", json BINARY)), eq(json_length(json_extract(test.t4.j, "$.a")), 3)) | + | └─TableReader_7 | 10000.00 | root | | data:TableFullScan_6 | + | └─TableFullScan_6 | 10000.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------------------------+ + + > SHOW WARNINGS; + +---------+------+----------------------------+ + | Level | Code | Message | + +---------+------+----------------------------+ + | Warning | 1105 | IndexMerge is inapplicable | + +---------+------+----------------------------+ + ``` + +- For conditions connected with `AND`, some of them need to be able to be accessed with IndexMerge respectively. TiDB can only use IndexMerge to access multi-valued indexes with these conditions. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_contains(j->'$.a', '[1, 2]') AND json_contains(j->'$.a', '[3, 4]'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_contains(j->'$.a', '[1, 2]') AND json_contains(j->'$.a', '[3, 4]') AND json_length(j->'$.a') = 2; + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_contains(j->'$.a', '[1, 2]') AND json_contains(j->'$.a', '[3, 4]'); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | IndexMerge_10 | 0.00 | root | | type: intersection | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | ├─IndexRangeScan_8(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[4,4], keep order:false, stats:pseudo | + | └─TableRowIDScan_9(Probe) | 0.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + + -- json_length(j->'$.a') = 3 cannot be accessed with IndexMerge directly, so TiDB uses IndexMerge to access the other two json_contains conditions, and json_length(j->'$.a') = 3 becomes a Selection operator. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1) */ * FROM t4 WHERE json_contains(j->'$.a', '[1, 2]') AND json_contains(j->'$.a', '[3, 4]') AND json_length(j->'$.a') = 2; + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+----------------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+----------------------------------------------------+ + | IndexMerge_11 | 0.00 | root | | type: intersection | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | ├─IndexRangeScan_8(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[4,4], keep order:false, stats:pseudo | + | └─Selection_10(Probe) | 0.00 | cop[tikv] | | eq(json_length(json_extract(test.t4.j, "$.a")), 2) | + | └─TableRowIDScan_9 | 0.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+----------------------------------------------------+ + ``` + +- All the conditions that are used for the IndexMerge must match the semantics of `OR` or `AND` that connects them. + + - If `json_contains` is connected with `AND`, it matches the semantics. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') AND json_contains(j->'$.b', '[2, 3]'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') OR json_contains(j->'$.b', '[2, 3]'); + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') AND json_contains(j->'$.b', '[2, 3]'); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | IndexMerge_9 | 0.00 | root | | type: intersection | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | └─TableRowIDScan_8(Probe) | 0.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + + -- The conditions do not match the semantics, so TiDB cannot use IndexMerge for this SQL statement as explained above. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') OR json_contains(j->'$.b', '[2, 3]'); + +-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + | TableReader_7 | 10.01 | root | | data:Selection_6 | + | └─Selection_6 | 10.01 | cop[tikv] | | or(json_contains(json_extract(test.t4.j, "$.a"), cast("[1]", json BINARY)), json_contains(json_extract(test.t4.j, "$.b"), cast("[2, 3]", json BINARY))) | + | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + ``` + + - If `json_overlaps` is connected with `OR`, it matches the semantics. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') OR json_overlaps(j->'$.b', '[2, 3]'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') AND json_overlaps(j->'$.b', '[2, 3]'); + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') OR json_overlaps(j->'$.b', '[2, 3]'); + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Selection_5 | 23.98 | root | | or(json_overlaps(json_extract(test.t4.j, "$.a"), cast("[1]", json BINARY)), json_overlaps(json_extract(test.t4.j, "$.b"), cast("[2, 3]", json BINARY))) | + | └─IndexMerge_10 | 29.97 | root | | type: union | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_8(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | └─TableRowIDScan_9(Probe) | 29.97 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ + + -- The conditions do not match the semantics, so TiDB can only use IndexMerge for part of the conditions of this SQL statement as explained above. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') AND json_overlaps(j->'$.b', '[2, 3]'); + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ + | Selection_5 | 15.99 | root | | json_overlaps(json_extract(test.t4.j, "$.a"), cast("[1]", json BINARY)), json_overlaps(json_extract(test.t4.j, "$.b"), cast("[2, 3]", json BINARY)) | + | └─IndexMerge_8 | 10.00 | root | | type: union | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | └─TableRowIDScan_7(Probe) | 10.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ + ``` + + - If `json_member_of` is connected with `OR` or `AND`, it matches the semantics. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') AND 2 member of (j->'$.b') AND 3 member of (j->'$.a'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') OR 2 member of (j->'$.b') OR 3 member of (j->'$.a'); + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') AND 2 member of (j->'$.b') AND 3 member of (j->'$.a'); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | IndexMerge_9 | 0.00 | root | | type: intersection | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | └─TableRowIDScan_8(Probe) | 0.00 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') OR 2 member of (j->'$.b') OR 3 member of (j->'$.a'); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | IndexMerge_9 | 29.97 | root | | type: union | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | └─TableRowIDScan_8(Probe) | 29.97 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + ``` + + - If `json_contains` conditions that contain multiple values are connected with `OR`, or `json_overlaps` conditions that contain multiple values are connected with `AND`, they do not match the semantics, but they match the semantics if they only contain one value. For example: + + ```sql + -- Refer to the preceding examples for conditions that do not match the semantics. The following only provides examples of conditions that match the semantics. + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') AND json_overlaps(j->'$.b', '[2]'); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') OR json_contains(j->'$.b', '[2]'); + ``` + + ```sql + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_overlaps(j->'$.a', '[1]') AND json_overlaps(j->'$.b', '[2]'); + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ + | Selection_5 | 8.00 | root | | json_overlaps(json_extract(test.t4.j, "$.a"), cast("[1]", json BINARY)), json_overlaps(json_extract(test.t4.j, "$.b"), cast("[2]", json BINARY)) | + | └─IndexMerge_9 | 0.01 | root | | type: intersection | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | └─TableRowIDScan_8(Probe) | 0.01 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +---------------------------------+---------+-----------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ + + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE json_contains(j->'$.a', '[1]') OR json_contains(j->'$.b', '[2]'); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + | IndexMerge_8 | 19.99 | root | | type: union | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | └─TableRowIDScan_7(Probe) | 19.99 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+---------------------------------------------+ + ``` + + - When both `OR` and `AND` are used to connect conditions (essentially nested `OR` and `AND`), the conditions that constitute an IndexMerge must either all match the semantics of `OR` or all match the semantics of `AND`, not partially match the semantics of `OR` and partially match the semantics of `AND`. For example: + + ```sql + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') AND (2 member of (j->'$.b') OR 3 member of (j->'$.a')); + EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') OR (2 member of (j->'$.b') AND 3 member of (j->'$.a')); + ``` + + ```sql + -- Only 2 member of (j->'$.b') and 3 member of (j->'$.a') that match the semantics of OR constitute the IndexMerge. 1 member of (j->'$.a') that matches the semantics of AND is not included. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') AND (2 member of (j->'$.b') OR 3 member of (j->'$.a')); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | IndexMerge_9 | 0.00 | root | | type: union | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi2(cast(json_extract(`j`, _utf8'$.b') as unsigned array)) | range:[2,2], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | └─Selection_8(Probe) | 0.00 | cop[tikv] | | json_memberof(cast(1, json BINARY), json_extract(test.t4.j, "$.a")), or(json_memberof(cast(2, json BINARY), json_extract(test.t4.j, "$.b")), json_memberof(cast(3, json BINARY), json_extract(test.t4.j, "$.a"))) | + | └─TableRowIDScan_7 | 19.99 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + -- Only 1 member of (j->'$.a') and 2 member of (j->'$.a') that match the semantics of OR constitute the IndexMerge. 2 member of (j->'$.b') that matches the semantics of AND is not included. + > EXPLAIN SELECT /*+ use_index_merge(t4, mvi1, mvi2) */ * FROM t4 WHERE 1 member of (j->'$.a') OR (2 member of (j->'$.b') AND 3 member of (j->'$.a')); + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | IndexMerge_9 | 0.02 | root | | type: union | + | ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[1,1], keep order:false, stats:pseudo | + | ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t4, index:mvi1(cast(json_extract(`j`, _utf8'$.a') as unsigned array)) | range:[3,3], keep order:false, stats:pseudo | + | └─Selection_8(Probe) | 0.02 | cop[tikv] | | or(json_memberof(cast(1, json BINARY), json_extract(test.t4.j, "$.a")), and(json_memberof(cast(2, json BINARY), json_extract(test.t4.j, "$.b")), json_memberof(cast(3, json BINARY), json_extract(test.t4.j, "$.a")))) | + | └─TableRowIDScan_7 | 19.99 | cop[tikv] | table:t4 | keep order:false, stats:pseudo | + +-------------------------------+---------+-----------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ``` + +If conditions contain nested `OR`/`AND`, or if conditions correspond to only indexed columns after transformations, such as expansion, TiDB might not be able to use IndexMerge or make full use of all conditions. It is recommended to verify the behavior of each specific case. + +The following are some examples: -For `AND`/`ON` conditions composed of multiple expressions where each `item` condition corresponds to multiple different indexes, the specific index to be used varies: +```sql +CREATE TABLE t5 (a INT, j JSON, b INT, k JSON, INDEX idx(a, (CAST(j AS SIGNED ARRAY))), INDEX idx2(b, (CAST(k as SIGNED ARRAY)))); +CREATE TABLE t6 (a INT, j JSON, b INT, k JSON, INDEX idx(a, (CAST(j AS SIGNED ARRAY)), b), INDEX idx2(a, (CAST(k as SIGNED ARRAY)), b)); +``` -* If the path of a single item is also index merge, as long as its logic is consistent with the logic of the external `AND`/`OR`, it can be merged with the external index merge. -* If the path of a single item is also index merge, and it has only one index partial path, then it can be merged with the external index merge regardless of whether its own index merge logic is `AND`/`OR`. +If `AND` is nested in conditions connected by `OR` and subconditions connected by `AND` correspond to the exact columns of a multi-column index, TiDB can usually make full use of the conditions. For example: ```sql -mysql> CREATE TABLE t(j1 JSON, j2 JSON, a INT, INDEX k1((CAST(j1->'$.path' AS SIGNED ARRAY))), INDEX k2((CAST(j2->'$.path' AS SIGNED ARRAY))), INDEX ka(a)); -Query OK, 0 rows affected (0.02 sec) +EXPLAIN SELECT /*+ use_index_merge(t5, idx, idx2) */ * FROM t5 WHERE (a=1 AND 1 member of (j)) OR (b=2 AND 2 member of (k)); ``` ```sql -tidb> EXPLAIN SELECT /*+ use_index_merge(t, k1, k2, ka) */ * FROM t WHERE (1 member of (j1->'$.path')) AND (2 member of (j2->'$.path')) AND (a = 3); -+-------------------------------+---------+-----------+----------------------------------------------------------------------------+---------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------------+---------+-----------+----------------------------------------------------------------------------+---------------------------------------------+ -| IndexMerge_9 | 10.00 | root | | type: intersection | -| ├─IndexRangeScan_5(Build) | 10.00 | cop[tikv] | table:t, index:ka(a) | range:[3,3], keep order:false, stats:pseudo | -| ├─IndexRangeScan_6(Build) | 10.00 | cop[tikv] | table:t, index:k1(cast(json_extract(`j1`, _utf8'$.path') as signed array)) | range:[1,1], keep order:false, stats:pseudo | -| ├─IndexRangeScan_7(Build) | 10.00 | cop[tikv] | table:t, index:k2(cast(json_extract(`j2`, _utf8'$.path') as signed array)) | range:[2,2], keep order:false, stats:pseudo | -| └─TableRowIDScan_8(Probe) | 10.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------------+---------+-----------+----------------------------------------------------------------------------+---------------------------------------------+ -5 rows in set (0.00 sec) +> EXPLAIN SELECT /*+ use_index_merge(t5, idx, idx2) */ * FROM t5 WHERE (a=1 AND 1 member of (j)) OR (b=2 AND 2 member of (k)); ++-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ +| IndexMerge_8 | 0.20 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 0.10 | cop[tikv] | table:t5, index:idx(a, cast(`j` as signed array)) | range:[1 1,1 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t5, index:idx2(b, cast(`k` as signed array)) | range:[2 2,2 2], keep order:false, stats:pseudo | +| └─TableRowIDScan_7(Probe) | 0.20 | cop[tikv] | table:t5 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+----------------------------------------------------+-------------------------------------------------+ ``` -Currently, TiDB only supports using one index to access instead of generating the following plan that uses multiple indexes to access at the same time: +If a single `OR` is nested in conditions connected by `AND` and subconditions connected by `OR` correspond to the indexed columns after expansion, TiDB can usually make full use of the conditions. For example: +```sql +EXPLAIN SELECT /*+ use_index_merge(t6, idx, idx2) */ * FROM t6 WHERE a=1 AND (1 member of (j) OR 2 member of (k)); ``` -Selection -└─IndexMerge - ├─IndexRangeScan(k1) - ├─IndexRangeScan(k2) - ├─IndexRangeScan(ka) - └─Selection - └─TableRowIDScan -``` - -### Unsupported scenarios - -For `OR` conditions composed of multiple expressions that correspond to multiple different indexes, multi-valued indexes cannot be used: ```sql -mysql> create table t(j1 json, j2 json, a int, INDEX k1((CAST(j1->'$.path' AS SIGNED ARRAY))), INDEX k2((CAST(j2->'$.path' AS SIGNED ARRAY))), INDEX ka(a)); -Query OK, 0 rows affected (0.03 sec) - -mysql> explain select /*+ use_index_merge(t, k1, k2, ka) */ * from t where (1 member of (j1->'$.path')) or (2 member of (j2->'$.path')); -+-------------------------+----------+-----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ -| Selection_5 | 8000.00 | root | | or(json_memberof(cast(1, json BINARY), json_extract(test.t.j1, "$.path")), json_memberof(cast(2, json BINARY), json_extract(test.t.j2, "$.path"))) | -| └─TableReader_7 | 10000.00 | root | | data:TableFullScan_6 | -| └─TableFullScan_6 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ -3 rows in set, 3 warnings (0.00 sec) - -mysql> explain select /*+ use_index_merge(t, k1, k2, ka) */ * from t where (1 member of (j1->'$.path')) or (a = 3); -+-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------+ -| Selection_5 | 8000.00 | root | | or(json_memberof(cast(1, json BINARY), json_extract(test.t.j1, "$.path")), eq(test.t.a, 3)) | -| └─TableReader_7 | 10000.00 | root | | data:TableFullScan_6 | -| └─TableFullScan_6 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------+ -3 rows in set, 3 warnings (0.00 sec) ++-------------------------------+---------+-----------+-------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ +| IndexMerge_9 | 0.20 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 0.10 | cop[tikv] | table:t6, index:idx(a, cast(`j` as signed array), b) | range:[1 1,1 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t6, index:idx2(a, cast(`k` as signed array), b) | range:[1 2,1 2], keep order:false, stats:pseudo | +| └─Selection_8(Probe) | 0.20 | cop[tikv] | | eq(test2.t6.a, 1), or(json_memberof(cast(1, json BINARY), test2.t6.j), json_memberof(cast(2, json BINARY), test2.t6.k)) | +| └─TableRowIDScan_7 | 0.20 | cop[tikv] | table:t6 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ ``` -A workaround for the preceding scenario is to rewrite the query using `Union All`: - -The following are some more complex scenarios that are not yet supported. +If multiple `OR` are nested in conditions connected by `AND` and subconditions connected by `OR` need expansion to correspond to the index columns, TiDB might not be able to make full use of all conditions. For example: ```sql -mysql> CREATE TABLE t4 (j JSON, INDEX idx((CAST(j AS SIGNED ARRAY)))); -Query OK, 0 rows affected (0.04 sec) - --- If a query contains the OR condition composed of multiple json_contains expressions, the index cannot be accessed using IndexMerge. -mysql> EXPLAIN SELECT /*+ use_index_merge(t3, idx) */ * FROM t3 WHERE (json_contains(j, '[1, 2]')) OR (json_contains(j, '[3, 4]')); -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -| TableReader_7 | 9600.00 | root | | data:Selection_6 | -| └─Selection_6 | 9600.00 | cop[tikv] | | or(json_contains(test.t3.j, cast("[1, 2]", json BINARY)), json_contains(test.t3.j, cast("[3, 4]", json BINARY))) | -| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -3 rows in set, 1 warning (0.00 sec) - -mysql> SHOW WARNINGS; -+---------+------+----------------------------+ -| Level | Code | Message | -+---------+------+----------------------------+ -| Warning | 1105 | IndexMerge is inapplicable | -+---------+------+----------------------------+ -1 row in set (0.00 sec) +EXPLAIN SELECT /*+ use_index_merge(t6, idx, idx2) */ * FROM t6 WHERE a=1 AND (1 member of (j) OR 2 member of (k)) and (b = 1 OR b = 2); +EXPLAIN SELECT /*+ use_index_merge(t6, idx, idx2) */ * FROM t6 WHERE a=1 AND ((1 member of (j) AND b = 1) OR (1 member of (j) AND b = 2) OR (2 member of (k) AND b = 1) OR (2 member of (k) AND b = 2)); +``` -mysql> EXPLAIN SELECT /*+ use_index_merge(t3, idx) */ * FROM t3 WHERE (json_contains(j, '[1, 2]')) OR (json_contains(j, '[3, 4]')); -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -| TableReader_7 | 9600.00 | root | | data:Selection_6 | -| └─Selection_6 | 9600.00 | cop[tikv] | | or(json_contains(test.t3.j, cast("[1, 2]", json BINARY)), json_contains(test.t3.j, cast("[3, 4]", json BINARY))) | -| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+------------------------------------------------------------------------------------------------------------------+ -3 rows in set, 1 warning (0.01 sec) - --- If a query contains the more complex expression formed by multi-layer OR/AND nesting, the index cannot be accessed using IndexMerge. -mysql> EXPLAIN SELECT /*+ use_index_merge(t3, idx) */ * FROM t3 WHERE ((1 member of (j)) AND (2 member of (j))) OR ((3 member of (j)) AND (4 member of (j))); -+-------------------------+----------+-----------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Selection_5 | 8000.00 | root | | or(and(json_memberof(cast(1, json BINARY), test.t3.j), json_memberof(cast(2, json BINARY), test.t3.j)), and(json_memberof(cast(3, json BINARY), test.t3.j), json_memberof(cast(4, json BINARY), test.t3.j))) | -| └─TableReader_7 | 10000.00 | root | | data:TableFullScan_6 | -| └─TableFullScan_6 | 10000.00 | cop[tikv] | table:t3 | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -3 rows in set, 2 warnings (0.00 sec) +```sql +-- Due to current implementation limitations, (b = 1 or b = 2) does not constitute the IndexMerge, but becomes a Selection operator +> EXPLAIN SELECT /*+ use_index_merge(t6, idx, idx2) */ * FROM t6 WHERE a=1 AND (1 member of (j) OR 2 member of (k)) AND (b = 1 OR b = 2); ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| IndexMerge_9 | 0.20 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 0.10 | cop[tikv] | table:t6, index:idx(a, cast(`j` as signed array), b) | range:[1 1,1 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 0.10 | cop[tikv] | table:t6, index:idx2(a, cast(`k` as signed array), b) | range:[1 2,1 2], keep order:false, stats:pseudo | +| └─Selection_8(Probe) | 0.20 | cop[tikv] | | eq(test.t6.a, 1), or(eq(test.t6.b, 1), eq(test.t6.b, 2)), or(json_memberof(cast(1, json BINARY), test.t6.j), json_memberof(cast(2, json BINARY), test.t6.k)) | +| └─TableRowIDScan_7 | 0.20 | cop[tikv] | table:t6 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +-- If you manually expand the two OR conditions connected with AND, TiDB can make full use of these conditions +> EXPLAIN SELECT /*+ use_index_merge(t6, idx, idx2) */ * FROM t6 WHERE a=1 AND ((1 member of (j) AND b = 1) OR (1 member of (j) AND b = 2) OR (2 member of (k) AND b = 1) OR (2 member of (k) AND b = 2)); ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| IndexMerge_11 | 0.00 | root | | type: union | +| ├─IndexRangeScan_5(Build) | 0.00 | cop[tikv] | table:t6, index:idx(a, cast(`j` as signed array), b) | range:[1 1 1,1 1 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_6(Build) | 0.00 | cop[tikv] | table:t6, index:idx(a, cast(`j` as signed array), b) | range:[1 1 2,1 1 2], keep order:false, stats:pseudo | +| ├─IndexRangeScan_7(Build) | 0.00 | cop[tikv] | table:t6, index:idx2(a, cast(`k` as signed array), b) | range:[1 2 1,1 2 1], keep order:false, stats:pseudo | +| ├─IndexRangeScan_8(Build) | 0.00 | cop[tikv] | table:t6, index:idx2(a, cast(`k` as signed array), b) | range:[1 2 2,1 2 2], keep order:false, stats:pseudo | +| └─Selection_10(Probe) | 0.00 | cop[tikv] | | eq(test.t6.a, 1), or(or(and(json_memberof(cast(1, json BINARY), test.t6.j), eq(test.t6.b, 1)), and(json_memberof(cast(1, json BINARY), test.t6.j), eq(test.t6.b, 2))), or(and(json_memberof(cast(2, json BINARY), test.t6.k), eq(test.t6.b, 1)), and(json_memberof(cast(2, json BINARY), test.t6.k), eq(test.t6.b, 2)))) | +| └─TableRowIDScan_9 | 0.00 | cop[tikv] | table:t6 | keep order:false, stats:pseudo | ++-------------------------------+---------+-----------+-------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ``` Limited by the current implementation of multi-valued indexes, using [`use_index`](/optimizer-hints.md#use_indext1_name-idx1_name--idx2_name-) might return the `Can't find a proper physical plan for this query` error while using [`use_index_merge`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) will not return such an error. Therefore, it is recommended to use `use_index_merge` if you want to use multi-valued indexes. @@ -475,4 +684,4 @@ mysql> SHOW WARNINGS; -- cannot hit plan cache since the JSON_CONTAINS predicat | Warning | 1105 | skip prepared plan-cache: json_contains function with immutable parameters can affect index selection | +---------+------+-------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec) -``` \ No newline at end of file +``` diff --git a/clinic/quick-start-with-clinic.md b/clinic/quick-start-with-clinic.md index 013ed7dfca0d8..56538e1aeda43 100644 --- a/clinic/quick-start-with-clinic.md +++ b/clinic/quick-start-with-clinic.md @@ -34,7 +34,7 @@ Before using PingCAP Clinic, you need to install Diag and prepare an environment
- Go to the [Clinic Server for international users](https://clinic.pingcap.com) and select **Sign in with TiDB Account** to enter the TiDB Cloud login page. If you do not have a TiDB Cloud account, create one on that page. + Go to the [Clinic Server for international users](https://clinic.pingcap.com) and select **Continue with TiDB Account** to enter the TiDB Cloud login page. If you do not have a TiDB Cloud account, create one on that page. > **Note:** > @@ -44,7 +44,7 @@ Before using PingCAP Clinic, you need to install Diag and prepare an environment
- Go to the [Clinic Server for users in the Chinese mainland](https://clinic.pingcap.com.cn) and select **Sign in with AskTUG** to enter the AskTUG community login page. If you do not have an AskTUG account, create one on that page + Go to the [Clinic Server for users in the Chinese mainland](https://clinic.pingcap.com.cn) and select **Continue with AskTUG** to enter the AskTUG community login page. If you do not have an AskTUG account, create one on that page
diff --git a/command-line-flags-for-tidb-configuration.md b/command-line-flags-for-tidb-configuration.md index 1981b1c94f778..6570f1d9694de 100644 --- a/command-line-flags-for-tidb-configuration.md +++ b/command-line-flags-for-tidb-configuration.md @@ -219,6 +219,12 @@ When you start the TiDB cluster, you can use command-line options or environment + Sets the CPU affinity of TiDB servers, which is separated by commas. For example, "1,2,3". + Default: `""` +## `--redact` + ++ Determines whether the TiDB server desensitizes log files when using the subcommand `collect-log`. ++ Default: false ++ When the value is `true`, it is a masking operation, and all fields wrapped in `‹ ›` mark symbols are replaced with `?`. When the value is `false`, it is a restore operation, and all mark symbols are removed. To use this feature, execute `./tidb-server --redact=xxx collect-log ` to desensitize or restore the TiDB server log file specified by `` and output it to ``. For more information, see the system variable [`tidb_redact_log`](/system-variables.md#tidb_redact_log). + ## `--repair-mode` + Determines whether to enable the repair mode, which is only used in the data repair scenario. diff --git a/configure-memory-usage.md b/configure-memory-usage.md index de90b3dbde9d9..71e03b7661184 100644 --- a/configure-memory-usage.md +++ b/configure-memory-usage.md @@ -57,7 +57,7 @@ Currently, the memory limit set by `tidb_server_memory_limit` **DOES NOT** termi > > + During the startup process, TiDB does not guarantee that the [`tidb_server_memory_limit`](/system-variables.md#tidb_server_memory_limit-new-in-v640) limit is enforced. If the free memory of the operating system is insufficient, TiDB might still encounter OOM. You need to ensure that the TiDB instance has enough available memory. > + In the process of memory control, the total memory usage of TiDB might slightly exceed the limit set by `tidb_server_memory_limit`. -> + Since v6.5.0, the configruation item `server-memory-quota` is deprecated. To ensure compatibility, after you upgrade your cluster to v6.5.0 or a later version, `tidb_server_memory_limit` will inherit the value of `server-memory-quota`. If you have not configured `server-memory-quota` before the upgrade, the default value of `tidb_server_memory_limit` is used, which is `80%`. +> + Since v6.5.0, the configuration item `server-memory-quota` is deprecated. To ensure compatibility, after you upgrade your cluster to v6.5.0 or a later version, `tidb_server_memory_limit` will inherit the value of `server-memory-quota`. If you have not configured `server-memory-quota` before the upgrade, the default value of `tidb_server_memory_limit` is used, which is `80%`. When the memory usage of a tidb-server instance reaches a certain proportion of the total memory (the proportion is controlled by the system variable [`tidb_server_memory_limit_gc_trigger`](/system-variables.md#tidb_server_memory_limit_gc_trigger-new-in-v640)), tidb-server will try to trigger a Golang GC to relieve memory stress. To avoid frequent GCs that cause performance issues due to the instance memory fluctuating around the threshold, this GC method will trigger GC at most once every minute. diff --git a/daily-check.md b/daily-check.md index 6d82b984dd4c9..beda3f86b57ea 100644 --- a/daily-check.md +++ b/daily-check.md @@ -38,12 +38,15 @@ You can locate the slow SQL statement executed in the cluster. Then you can opti ![Region panel](/media/region-panel.png) -+ `miss-peer-region-count`: The number of Regions without enough replicas. This value is not always greater than `0`. ++ `down-peer-region-count`: The number of Regions with an unresponsive peer reported by the Raft leader. ++ `empty-region-count`: The number of empty Regions, with a size of smaller than 1 MiB. These Regions are generated by executing the `TRUNCATE TABLE`/`DROP TABLE` statement. If this number is large, you can consider enabling `Region Merge` to merge Regions across tables. + `extra-peer-region-count`: The number of Regions with extra replicas. These Regions are generated during the scheduling process. -+ `empty-region-count`: The number of empty Regions, generated by executing the `TRUNCATE TABLE`/`DROP TABLE` statement. If this number is large, you can consider enabling `Region Merge` to merge Regions across tables. ++ `learner-peer-region-count`: The number of Regions with the learner peer. The sources of learner peers can be various, for example, the learner peers in TiFlash, and the learner peers included in the configured Placement Rules. ++ `miss-peer-region-count`: The number of Regions without enough replicas. This value is not always greater than `0`. ++ `offline-peer-region-count`: The number of Regions during the peer offline process. ++ `oversized-region-count`: The number of Regions with a size larger than `region-max-size` or `region-max-keys`. + `pending-peer-region-count`: The number of Regions with outdated Raft logs. It is normal that a few pending peers are generated in the scheduling process. However, it is not normal if this value is large for a period of time (longer than 30 minutes). -+ `down-peer-region-count`: The number of Regions with an unresponsive peer reported by the Raft leader. -+ `offline-peer-region-count`: The number of Regions during the offline process. ++ `undersized-region-count`: The number of Regions with a size smaller than `max-merge-region-size` or `max-merge-region-keys`. Generally, it is normal that these values are not `0`. However, it is not normal that they are not `0` for quite a long time. diff --git a/dashboard/dashboard-profiling.md b/dashboard/dashboard-profiling.md index b4bb2f0359ffb..7e00f7719ca2e 100644 --- a/dashboard/dashboard-profiling.md +++ b/dashboard/dashboard-profiling.md @@ -26,6 +26,8 @@ The following performance data are currently supported: - Heap: The memory consumption of each internal function on TiDB, TiKV, and PD instances + > Starting from v7.5, TiDB supports the TiKV Heap Profile. The Perl dependency is required in the running environment of TiDB Dashboard. Otherwise an error will occur. + - Mutex: The mutex contention states on TiDB and PD instances - Goroutine: The running state and call stack of all goroutines on TiDB and PD instances diff --git a/dashboard/dashboard-session-sso.md b/dashboard/dashboard-session-sso.md index 27ccf6bce77e8..900c1944824d7 100644 --- a/dashboard/dashboard-session-sso.md +++ b/dashboard/dashboard-session-sso.md @@ -104,7 +104,7 @@ First, create an Okta Application Integration to integrate SSO. ![Sample Step](/media/dashboard/dashboard-session-sso-okta-1.png) -4. In the poped up dialog, choose **OIDC - OpenID Connect** in **Sign-in method**. +4. In the popped up dialog, choose **OIDC - OpenID Connect** in **Sign-in method**. 5. Choose **Single-Page Application** in **Application Type**. diff --git a/data-type-default-values.md b/data-type-default-values.md index 7ac7fa12a2188..7dbdaf2b35a09 100644 --- a/data-type-default-values.md +++ b/data-type-default-values.md @@ -6,9 +6,15 @@ aliases: ['/docs/dev/data-type-default-values/','/docs/dev/reference/sql/data-ty # Default Values -The `DEFAULT` value clause in a data type specification indicates a default value for a column. The default value must be a constant and cannot be a function or an expression. But for the time type, you can specify the `NOW`, `CURRENT_TIMESTAMP`, `LOCALTIME`, and `LOCALTIMESTAMP` functions as the default for `TIMESTAMP` and `DATETIME` columns. +The `DEFAULT` value clause in a data type specification indicates a default value for a column. -Starting from v8.0.0, TiDB supports [specifying expressions as default values](#specify-expressions-as-default-values) for [`BLOB`](/data-type-string.md#blob-type), [`TEXT`](/data-type-string.md#text-type), and [`JSON`](/data-type-json.md#json-type) data types. +You can set default values for all data types. Typically, default values must be constants and cannot be functions or expressions, but there are some exceptions: + +- For time types, you can use `NOW`, `CURRENT_TIMESTAMP`, `LOCALTIME`, and `LOCALTIMESTAMP` functions as default values for `TIMESTAMP` and `DATETIME` columns. +- For integer types, you can use the `NEXT VALUE FOR` function to set the next value of a sequence as the default value for a column, and use the [`RAND()`](/functions-and-operators/numeric-functions-and-operators.md) function to generate a random floating-point value as the default value for a column. +- For string types, you can use the [`UUID()`](/functions-and-operators/miscellaneous-functions.md) function to generate a [universally unique identifier (UUID)](/best-practices/uuid.md) as the default value for a column. +- For binary types, you can use the [`UUID_TO_BIN()`](/functions-and-operators/miscellaneous-functions.md) function to convert a UUID to the binary format and set the converted value as the default value for a column. +- Starting from v8.0.0, TiDB additionally supports [specifying the default values](#specify-expressions-as-default-values) for [`BLOB`](/data-type-string.md#blob-type), [`TEXT`](/data-type-string.md#text-type), and [`JSON`](/data-type-json.md#json-type) data types, but you can only use expressions to set the [default values](#default-values) for them. If a column definition includes no explicit `DEFAULT` value, TiDB determines the default value as follows: @@ -28,39 +34,21 @@ Implicit defaults are defined as follows: ## Specify expressions as default values -> **Warning:** -> -> Currently, this feature is experimental. It is not recommended that you use it in production environments. 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. - -Starting from 8.0.13, MySQL supports specifying expressions as default values in the `DEFAULT` clause. For more information, see [Explicit default handling as of MySQL 8.0.13](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit). - -TiDB has implemented this feature and supports specifying some expressions as default values in the `DEFAULT` clause. Starting from v8.0.0, TiDB supports assigning default values to `BLOB`, `TEXT`, and `JSON` data types. However, these default values can only be set as expressions. The following is an example of `BLOB`: - -```sql -CREATE TABLE t2 (b BLOB DEFAULT (RAND())); -``` - -TiDB currently supports the following expressions: - -* [`RAND()`](/functions-and-operators/numeric-functions-and-operators.md) -* [`UUID()`](/functions-and-operators/miscellaneous-functions.md) -* [`UUID_TO_BIN()`](/functions-and-operators/miscellaneous-functions.md) +Starting from 8.0.13, MySQL supports specifying expressions as default values in the `DEFAULT` clause. For more information, see [Explicit default handling as of MySQL 8.0.13](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit). -Starting from TiDB v8.0.0, the `DEFAULT` clause supports using the following expressions to set default values. +Starting from v8.0.0, TiDB additionally supports specifying the following expressions as default values in the `DEFAULT` clause. * `UPPER(SUBSTRING_INDEX(USER(), '@', 1))` - * `REPLACE(UPPER(UUID()), '-', '')` - -* The `DATE_FORMAT` supports the following formats: - +* `DATE_FORMAT` expressions in the following formats: * `DATE_FORMAT(NOW(), '%Y-%m')` * `DATE_FORMAT(NOW(), '%Y-%m-%d')` * `DATE_FORMAT(NOW(), '%Y-%m-%d %H.%i.%s')` * `DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')` - * `STR_TO_DATE('1980-01-01', '%Y-%m-%d')` -> **Note:** -> -> Currently, the `ADD COLUMN` statement does not support using expressions as default values. +Starting from v8.0.0, TiDB additionally supports assigning default values to `BLOB`, `TEXT`, and `JSON` data types. However, you can only use expressions to set the default values for these data types. The following is an example of `BLOB`: + +```sql +CREATE TABLE t2 (b BLOB DEFAULT (RAND())); +``` diff --git a/ddl-introduction.md b/ddl-introduction.md index 31ec8f0234410..7658ccfae57e7 100644 --- a/ddl-introduction.md +++ b/ddl-introduction.md @@ -77,7 +77,7 @@ absent -> delete only -> write only -> write reorg -> public For users, the newly created index is unavailable before the `public` state. -
+
Before v6.2.0, the process of handling asynchronous schema changes in the TiDB SQL layer is as follows: diff --git a/ddl-v2.md b/ddl-v2.md deleted file mode 100644 index 59db024d00c94..0000000000000 --- a/ddl-v2.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Use TiDB DDL V2 to Accelerate Table Creation -summary: Learn the concept, principles, and implementation details of TiDB DDL V2 for acceleration table creation. ---- - -# Use TiDB DDL V2 to Accelerate Table Creation - -Starting from v7.6.0, the new version V2 of TiDB DDL supports creating tables quickly, which improves the efficiency of bulk table creation. - -TiDB uses the online asynchronous schema change algorithm to change the metadata. All DDL jobs are submitted to the `mysql.tidb_ddl_job` table, and the owner node pulls the DDL job to execute. After executing each phase of the online DDL algorithm, the DDL job is marked as completed and moved to the `mysql.tidb_ddl_history` table. Therefore, DDL statements can only be executed on the owner node and cannot be linearly extended. - -However, for some DDL statements, it is not necessary to strictly follow the online DDL algorithm. For example, the `CREATE TABLE` statement only has two states for the job: `none` and `public`. Therefore, TiDB can simplify the execution process of DDL, and executes the `CREATE TABLE` statement on a non-owner node to accelerate table creation. - -> **Warning:** -> -> This feature is currently an experimental feature and it is not recommended to use in a production environment. This feature might change or be removed without prior notice. If you find a bug, please give feedback by raising an [issue](https://github.com/pingcap/tidb/issues) on GitHub. - -## Compatibility with TiDB tools - -- [TiCDC](https://docs.pingcap.com/tidb/stable/ticdc-overview) does not support replicating the tables that are created by TiDB DDL V2. - -## Limitation - -You can now use TiDB DDL V2 only in the [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) statement, and this statement must not include any foreign key constraints. - -## Use TiDB DDL V2 - -You can enable or disable TiDB DDL V2 by specifying the value of the system variable [`tidb_ddl_version`](/system-variables.md#tidb_ddl_version-new-in-v760) . - -To enable TiDB DDL V2, set the value of this variable to `2`: - -```sql -SET GLOBAL tidb_ddl_version = 2; -``` - -To disable TiDB DDL V2, set the value of this variable to `1`: - -```sql -SET GLOBAL tidb_ddl_version = 1; -``` - -## Implementation principle - -The detailed implementation principle of TiDB DDL V2 for accelerating table creation is as follows: - -1. Create a `CREATE TABLE` Job. - - This step is the same as that of the V1 implementation. The corresponding DDL Job is generated by parsing the `CREATE TABLE` statement. - -2. Execute the `CREATE TABLE` job. - - Different from V1, in TiDB DDL V2, the TiDB node that receives the `CREATE TABLE` statement executes it directly, and then persists the table structure to TiKV. At the same time, the `CREATE TABLE` job is marked as completed and inserted into the `mysql.tidb_ddl_history` table. - -3. Synchronize the table information. - - TiDB notifies other nodes to synchronize the newly created table structure. diff --git a/develop/dev-guide-gui-mysql-workbench.md b/develop/dev-guide-gui-mysql-workbench.md index 29e7daaadc374..fb9b3ac832766 100644 --- a/develop/dev-guide-gui-mysql-workbench.md +++ b/develop/dev-guide-gui-mysql-workbench.md @@ -149,6 +149,19 @@ Connect to your TiDB cluster depending on the TiDB deployment option you have se
+## FAQs + +### How to handle the connection timeout error "Error Code: 2013. Lost connection to MySQL server during query"? + +This error indicates that the query execution time exceeds the timeout limit. To resolve this issue, you can adjust the timeout settings by the following steps: + +1. Launch MySQL Workbench and navigate to the **Workbench Preferences** page. +2. In the **SQL Editor** > **MySQL Session** section, configure the **DBMS connection read timeout interval (in seconds)** option. This sets the maximum amount of time (in seconds) that a query can take before MySQL Workbench disconnects from the server. + + ![MySQL Workbench: adjust timeout option in SQL Editor settings](/media/develop/mysql-workbench-adjust-sqleditor-read-timeout.jpg) + +For more information, see [MySQL Workbench frequently asked questions](https://dev.mysql.com/doc/workbench/en/workbench-faq.html). + ## Next steps - Learn more usage of MySQL Workbench from [the documentation of MySQL Workbench](https://dev.mysql.com/doc/workbench/en/). diff --git a/develop/dev-guide-insert-data.md b/develop/dev-guide-insert-data.md index e8ab1f17b1b8a..628911670e11f 100644 --- a/develop/dev-guide-insert-data.md +++ b/develop/dev-guide-insert-data.md @@ -85,7 +85,7 @@ Due to the default MySQL JDBC Driver settings, you need to change some parameter | Parameter | Means | Recommended Scenario | Recommended Configuration| | :------------------------: | :-----------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------: | | `useServerPrepStmts` | Whether to use the server side to enable prepared statements | When you need to use a prepared statement more than once | `true` | -| `cachePrepStmts` | Whether the client caches prepared statements | `useServerPrepStmts=true` 时 | `true` | +| `cachePrepStmts` | Whether the client caches prepared statements | `useServerPrepStmts=true` | `true` | | `prepStmtCacheSqlLimit` | Maximum size of a prepared statement (256 characters by default) | When the prepared statement is greater than 256 characters | Configured according to the actual size of the prepared statement | | `prepStmtCacheSize` | Maximum number of prepared statement caches (25 by default) | When the number of prepared statements is greater than 25 | Configured according to the actual number of prepared statements | | `rewriteBatchedStatements` | Whether to rewrite **Batched** statements | When batch operations are required | `true` | diff --git a/develop/dev-guide-prepared-statement.md b/develop/dev-guide-prepared-statement.md index deac8b0424c94..1177cb78c0cad 100644 --- a/develop/dev-guide-prepared-statement.md +++ b/develop/dev-guide-prepared-statement.md @@ -203,7 +203,7 @@ The following configurations help you use the TiDB server-side prepared statemen | Parameter | Means | Recommended Scenario | Recommended Configuration| | :------------------------: | :-----------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------: | | `useServerPrepStmts` | Whether to use the server side to enable prepared statements | When you need to use a prepared statement more than once | `true` | -| `cachePrepStmts` | Whether the client caches prepared statements | `useServerPrepStmts=true` 时 | `true` | +| `cachePrepStmts` | Whether the client caches prepared statements | `useServerPrepStmts=true` | `true` | | `prepStmtCacheSqlLimit` | Maximum size of a prepared statement (256 characters by default) | When the prepared statement is greater than 256 characters | Configured according to the actual size of the prepared statement | | `prepStmtCacheSize` | Maximum number of prepared statements (25 by default) | When the number of prepared statements is greater than 25 | Configured according to the actual number of prepared statements | diff --git a/develop/dev-guide-sample-application-aws-lambda.md b/develop/dev-guide-sample-application-aws-lambda.md index 5aed85a520343..df4d3d7f2c3bb 100644 --- a/develop/dev-guide-sample-application-aws-lambda.md +++ b/develop/dev-guide-sample-application-aws-lambda.md @@ -360,7 +360,7 @@ For more information, refer to [Delete data](/develop/dev-guide-delete-data.md). ## Next steps - For more details on how to use TiDB in AWS Lambda Function, see our [TiDB-Lambda-integration/aws-lambda-bookstore Demo](https://github.com/pingcap/TiDB-Lambda-integration/blob/main/aws-lambda-bookstore/README.md). You can also use AWS API Gateway to build a RESTful API for your application. -- Learn more usage of `mysql2` from [the documentation of `mysql2`](https://github.com/sidorares/node-mysql2/tree/master/documentation/en). +- Learn more usage of `mysql2` from [the documentation of `mysql2`](https://sidorares.github.io/node-mysql2/docs/documentation). - Learn more usage of AWS Lambda from [the AWS developer guide of `Lambda`](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html). - Learn the best practices for TiDB application development with the chapters in the [Developer guide](/develop/dev-guide-overview.md), such as [Insert data](/develop/dev-guide-insert-data.md), [Update data](/develop/dev-guide-update-data.md), [Delete data](/develop/dev-guide-delete-data.md), [Single table reading](/develop/dev-guide-get-data-from-single-table.md), [Transactions](/develop/dev-guide-transaction-overview.md), and [SQL performance optimization](/develop/dev-guide-optimize-sql-overview.md). - Learn through the professional [TiDB developer courses](https://www.pingcap.com/education/) and earn [TiDB certifications](https://www.pingcap.com/education/certification/) after passing the exam. diff --git a/develop/dev-guide-sample-application-java-jdbc.md b/develop/dev-guide-sample-application-java-jdbc.md index 5a11710e1ca99..bd3b7373e6557 100644 --- a/develop/dev-guide-sample-application-java-jdbc.md +++ b/develop/dev-guide-sample-application-java-jdbc.md @@ -1,6 +1,7 @@ --- title: Connect to TiDB with JDBC summary: Learn how to connect to TiDB using JDBC. This tutorial gives Java sample code snippets that work with TiDB using JDBC. +aliases: ['/tidb/dev/sample-application-java','/tidb/dev/dev-guide-sample-application-java'] --- # Connect to TiDB with JDBC diff --git a/develop/dev-guide-sample-application-nextjs.md b/develop/dev-guide-sample-application-nextjs.md index 2134903322af9..6ef9504a7321a 100644 --- a/develop/dev-guide-sample-application-nextjs.md +++ b/develop/dev-guide-sample-application-nextjs.md @@ -277,7 +277,7 @@ For more information, refer to [Delete data](/develop/dev-guide-delete-data.md). ## Next steps - For more details on how to build a complex application with ORM and Next.js, see [our Bookshop Demo](https://github.com/pingcap/tidb-prisma-vercel-demo). -- Learn more usage of node-mysql2 driver from [the documentation of node-mysql2](https://github.com/sidorares/node-mysql2/tree/master/documentation/en). +- Learn more usage of node-mysql2 driver from [the documentation of node-mysql2](https://sidorares.github.io/node-mysql2/docs/documentation). - Learn the best practices for TiDB application development with the chapters in the [Developer guide](/develop/dev-guide-overview.md), such as [Insert data](/develop/dev-guide-insert-data.md), [Update data](/develop/dev-guide-update-data.md), [Delete data](/develop/dev-guide-delete-data.md), [Single table reading](/develop/dev-guide-get-data-from-single-table.md), [Transactions](/develop/dev-guide-transaction-overview.md), and [SQL performance optimization](/develop/dev-guide-optimize-sql-overview.md). - Learn through the professional [TiDB developer courses](https://www.pingcap.com/education/) and earn [TiDB certifications](https://www.pingcap.com/education/certification/) after passing the exam. diff --git a/develop/dev-guide-sample-application-nodejs-mysql2.md b/develop/dev-guide-sample-application-nodejs-mysql2.md index dc1c9a5fdcaf5..612e04f72211d 100644 --- a/develop/dev-guide-sample-application-nodejs-mysql2.md +++ b/develop/dev-guide-sample-application-nodejs-mysql2.md @@ -189,7 +189,7 @@ npm start If the connection is successful, the console will output the version of the TiDB cluster as follows: ``` -🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.6.0) +🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.0.0) ⏳ Loading sample game data... ✅ Loaded sample game data. diff --git a/develop/dev-guide-sample-application-nodejs-mysqljs.md b/develop/dev-guide-sample-application-nodejs-mysqljs.md index 460abee9e1495..e050831f0900c 100644 --- a/develop/dev-guide-sample-application-nodejs-mysqljs.md +++ b/develop/dev-guide-sample-application-nodejs-mysqljs.md @@ -189,7 +189,7 @@ npm start If the connection is successful, the console will output the version of the TiDB cluster as follows: ``` -🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.6.0) +🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.0.0) ⏳ Loading sample game data... ✅ Loaded sample game data. diff --git a/develop/dev-guide-sample-application-nodejs-typeorm.md b/develop/dev-guide-sample-application-nodejs-typeorm.md index e693e38c7ae05..681da4620d895 100644 --- a/develop/dev-guide-sample-application-nodejs-typeorm.md +++ b/develop/dev-guide-sample-application-nodejs-typeorm.md @@ -231,7 +231,7 @@ npm start If the connection is successful, the terminal will output the version of the TiDB cluster as follows: ``` -🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.6.0) +🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.0.0) 🆕 Created a new player with ID 2. ℹ️ Got Player 2: Player { id: 2, coins: 100, goods: 100 } 🔢 Added 50 coins and 50 goods to player 2, now player 2 has 100 coins and 150 goods. diff --git a/develop/dev-guide-sample-application-python-sqlalchemy.md b/develop/dev-guide-sample-application-python-sqlalchemy.md index 6b10c1b31d73b..f41c7a90f4672 100644 --- a/develop/dev-guide-sample-application-python-sqlalchemy.md +++ b/develop/dev-guide-sample-application-python-sqlalchemy.md @@ -77,6 +77,10 @@ Connect to your TiDB cluster depending on the TiDB deployment option you've sele
+> **Note:** +> +> Currently, TiDB Serverless clusters have a limitation: if there are no active connections for 5 minutes, they will shut down, which closes all connections. Therefore, when using SQLAlchemy with TiDB Serverless clusters, pooled connections might encounter `OperationalError` such as `Lost connection to MySQL server during query` or `MySQL Connection not available`. To avoid this error, you can set the `pool_recycle` parameter to `300`. For more information, see [Dealing with Disconnects](https://docs.sqlalchemy.org/en/20/core/pooling.html#dealing-with-disconnects) in SQLAlchemy documentation. + 1. Navigate to the [**Clusters**](https://tidbcloud.com/console/clusters) page, and then click the name of your target cluster to go to its overview page. 2. Click **Connect** in the upper-right corner. A connection dialog is displayed. diff --git a/develop/dev-guide-sample-application-ruby-mysql2.md b/develop/dev-guide-sample-application-ruby-mysql2.md index 92529bf2bc0f5..7c60da4a442d4 100644 --- a/develop/dev-guide-sample-application-ruby-mysql2.md +++ b/develop/dev-guide-sample-application-ruby-mysql2.md @@ -190,7 +190,7 @@ ruby app.rb If the connection is successful, the console will output the version of the TiDB cluster as follows: ``` -🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.6.0) +🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.0.0) ⏳ Loading sample game data... ✅ Loaded sample game data. diff --git a/develop/dev-guide-sample-application-ruby-rails.md b/develop/dev-guide-sample-application-ruby-rails.md index 4d8056af2772e..142bac8ec1988 100644 --- a/develop/dev-guide-sample-application-ruby-rails.md +++ b/develop/dev-guide-sample-application-ruby-rails.md @@ -183,7 +183,7 @@ Connect to your TiDB cluster depending on the TiDB deployment option you've sele If the connection is successful, the console will output the version of the TiDB cluster as follows: ``` -🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.6.0) +🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.0.0) ⏳ Loading sample game data... ✅ Loaded sample game data. diff --git a/develop/dev-guide-third-party-tools-compatibility.md b/develop/dev-guide-third-party-tools-compatibility.md index 41f5d1078a5a3..32dc4a0a48749 100644 --- a/develop/dev-guide-third-party-tools-compatibility.md +++ b/develop/dev-guide-third-party-tools-compatibility.md @@ -153,27 +153,27 @@ To ensure data consistency by transaction, you can use `UPDATE` statements to up **Description** -When the `useLocalTransactionState` and `rewriteBatchedStatements` parameters are set to `true` at the same time, the transaction might fail to commit. You can reproduce with [this code](https://github.com/Icemap/tidb-java-gitpod/tree/reproduction-local-transaction-state-txn-error). +When using MySQL Connector/J 8.0.32 or an earlier version, if the `useLocalTransactionState` and `rewriteBatchedStatements` parameters are set to `true` at the same time, the transaction might fail to commit. You can reproduce with [this code](https://github.com/Icemap/tidb-java-gitpod/tree/reproduction-local-transaction-state-txn-error). **Way to avoid** > **Note:** > -> This bug has been reported to MySQL JDBC. To keep track of the process, you can follow this [Bug Report](https://bugs.mysql.com/bug.php?id=108643). +> `useConfigs=maxPerformance` includes a group of configurations. For detailed configurations in MySQL Connector/J 8.0 and MySQL Connector/J 5.1, see [mysql-connector-j 8.0](https://github.com/mysql/mysql-connector-j/blob/release/8.0/src/main/resources/com/mysql/cj/configurations/maxPerformance.properties) and [mysql-connector-j 5.1](https://github.com/mysql/mysql-connector-j/blob/release/5.1/src/com/mysql/jdbc/configs/maxPerformance.properties) respectively. You need to disable `useLocalTransactionState` when using `maxPerformance`. That is, use `useConfigs=maxPerformance&useLocalTransactionState=false`. -**DO NOT** turn on `useLocalTransactionState` as this might prevent transactions from being committed or rolled back. +This bug has been fixed in MySQL Connector/J 8.0.33. Considering updates for the 8.0.x series have ceased, it is strongly recommended to upgrade your MySQL Connector/J to [the latest General Availability (GA) version](https://dev.mysql.com/downloads/connector/j/) for improved stability and performance. ### Connector is incompatible with the server version earlier than 5.7.5 **Description** -The database connection might hang under certain conditions when using MySQL Connector/J 8.0.29 with a MySQL server < 5.7.5 or a database using the MySQL server < 5.7.5 protocol (such as TiDB earlier than v6.3.0). For more details, see the [Bug Report](https://bugs.mysql.com/bug.php?id=106252). +The database connection might hang under certain conditions when using MySQL Connector/J 8.0.31 or an earlier version with a MySQL server < 5.7.5 or a database using the MySQL server < 5.7.5 protocol (such as TiDB earlier than v6.3.0). For more details, see the [Bug Report](https://bugs.mysql.com/bug.php?id=106252). **Way to avoid** -This is a known issue. As of October 12, 2022, MySQL Connector/J has not fixed the issue. +This bug has been fixed in MySQL Connector/J 8.0.32. Considering updates for the 8.0.x series have ceased, it is strongly recommended to upgrade your MySQL Connector/J to [the latest General Availability (GA) version](https://dev.mysql.com/downloads/connector/j/) for improved stability and performance. -TiDB fixes it in the following ways: +TiDB also fixes it in the following ways: - Client side: This bug has been fixed in **pingcap/mysql-connector-j** and you can use the [pingcap/mysql-connector-j](https://github.com/pingcap/mysql-connector-j) instead of the official MySQL Connector/J. - Server side: This compatibility issue has been fixed since TiDB v6.3.0 and you can upgrade the server to v6.3.0 or later versions. diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 8b91fc78c7626..632391c9bf836 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -11,9 +11,54 @@ This document describes various timeouts in TiDB to help you troubleshoot errors TiDB's transaction implementation uses the MVCC (Multiple Version Concurrency Control) mechanism. When the newly written data overwrites the old data, the old data will not be replaced, but kept together with the newly written data. The versions are distinguished by the timestamp. TiDB uses the mechanism of periodic Garbage Collection (GC) to clean up the old data that is no longer needed. -By default, each MVCC version (consistency snapshots) is kept for 10 minutes. Transactions that take longer than 10 minutes to read will receive an error `GC life time is shorter than transaction duration`. +- For TiDB versions earlier than v4.0: -If you need longer read time, for example, when you are using **Dumpling** for full backups (**Dumpling** backs up consistent snapshots), you can adjust the value of `tikv_gc_life_time` in the `mysql.tidb` table in TiDB to increase the MVCC version retention time. Note that `tikv_gc_life_time` takes effect globally and immediately. Increasing the value will increase the life time of all existing snapshots, and decreasing it will immediately shorten the life time of all snapshots. Too many MVCC versions will impact TiKV's processing efficiency. So you need to change `tikv_gc_life_time` back to the previous setting in time after doing a full backup with **Dumpling**. + By default, each MVCC version (consistency snapshots) is kept for 10 minutes. Transactions that take longer than 10 minutes to read will receive an error `GC life time is shorter than transaction duration`. + +- For TiDB v4.0 and later versions: + + For running transactions that do not exceed a duration of 24 hours, garbage collection (GC) are blocked during the transaction execution. The error `GC life time is shorter than transaction duration` does not occur. + +If you need longer read time temporarily in some cases, you can increase the retention time of MVCC versions: + +- For TiDB versions earlier than v5.0: adjust `tikv_gc_life_time` in the `mysql.tidb` table in TiDB. +- For TiDB v5.0 and later versions: adjust the system variable [`tidb_gc_life_time`](/system-variables.md#tidb_gc_life_time-new-in-v50). + +Note that the system variable configuration takes effect globally and immediately. Increasing its value will increase the life time of all existing snapshots, and decreasing it will immediately shorten the life time of all snapshots. Too many MVCC versions will impact the performance of the TiDB cluster. So you need to change this variable back to the previous setting in time. + + + +> **Tip:** +> +> Specifically, when Dumpling is exporting data from TiDB (less than 1 TB), if the TiDB version is later than or equal to v4.0.0 and Dumpling can access the PD address of the TiDB cluster, Dumpling automatically extends the GC time without affecting the original cluster. +> +> However, in either of the following scenarios, Dumpling cannot automatically adjust the GC time: +> +> - The data size is very large (more than 1 TB). +> - Dumpling cannot connect directly to PD, for example, the TiDB cluster is on TiDB Cloud or on Kubernetes that is separated from Dumpling. +> +> In such scenarios, you must manually extend the GC time in advance to avoid export failure due to GC during the export process. +> +> For more details, see [Manually set the TiDB GC time](/dumpling-overview.md#manually-set-the-tidb-gc-time). + + + + + +> **Tip:** +> +> Specifically, when Dumpling is exporting data from TiDB (less than 1 TB), if the TiDB version is later than or equal to v4.0.0 and Dumpling can access the PD address of the TiDB cluster, Dumpling automatically extends the GC time without affecting the original cluster. +> +> However, in either of the following scenarios, Dumpling cannot automatically adjust the GC time: +> +> - The data size is very large (more than 1 TB). +> - Dumpling cannot connect directly to PD, for example, the TiDB cluster is on TiDB Cloud or on Kubernetes that is separated from Dumpling. +> +> In such scenarios, you must manually extend the GC time in advance to avoid export failure due to GC during the export process. +> +> For more details, see [Manually set the TiDB GC time](https://docs.pingcap.com/tidb/stable/dumpling-overview#manually-set-the-tidb-gc-time). + + For more information about GC, see [GC Overview](/garbage-collection-overview.md). diff --git a/develop/dev-guide-use-common-table-expression.md b/develop/dev-guide-use-common-table-expression.md index f9b89a6da9f31..71854c515692f 100644 --- a/develop/dev-guide-use-common-table-expression.md +++ b/develop/dev-guide-use-common-table-expression.md @@ -15,7 +15,7 @@ Since TiDB v5.1, TiDB supports the CTE of the ANSI SQL99 standard and recursion. ## Basic use -A Common Table Expression (CTE) is a temporary result set that can be referred to multiple times within a SQL statement to improve the statement readability and execution efficiency. You can apply the `WITH` statement to use CTE. +A Common Table Expression (CTE) is a temporary result set that can be referred to multiple times within a SQL statement to improve the statement readability and execution efficiency. You can apply the [`WITH`](/sql-statements/sql-statement-with.md) statement to use CTE. Common Table Expressions can be classified into two types: non-recursive CTE and recursive CTE. diff --git a/dm/deploy-a-dm-cluster-using-tiup-offline.md b/dm/deploy-a-dm-cluster-using-tiup-offline.md index 69c70e862bb88..16a4f464f1784 100644 --- a/dm/deploy-a-dm-cluster-using-tiup-offline.md +++ b/dm/deploy-a-dm-cluster-using-tiup-offline.md @@ -46,7 +46,7 @@ This document describes how to deploy a DM cluster offline using TiUP. tiup mirror clone tidb-dm-${version}-linux-amd64 --os=linux --arch=amd64 \ --dm-master=${version} --dm-worker=${version} --dmctl=${version} \ --alertmanager=v0.17.0 --grafana=v4.0.3 --prometheus=v4.0.3 \ - --tiup=v$(tiup --version|grep 'tiup'|awk -F ' ' '{print $1}') --dm=v$(tiup --version|grep 'tiup'|awk -F ' ' '{print $1}') + --dm=v$(tiup --version|grep 'tiup'|awk -F ' ' '{print $1}') ``` The command above creates a directory named `tidb-dm-${version}-linux-amd64` in the current directory, which contains the component package managed by TiUP. @@ -127,7 +127,7 @@ alertmanager_servers: > > - Use `.` to indicate the subcategory of the configuration, such as `log.slow-threshold`. For more formats, see [TiUP configuration template](https://github.com/pingcap/tiup/blob/master/embed/examples/dm/topology.example.yaml). > -> - For more parameter description, see [master `config.toml.example`](https://github.com/pingcap/dm/blob/master/dm/master/dm-master.toml) and [worker `config.toml.example`](https://github.com/pingcap/dm/blob/master/dm/worker/dm-worker.toml). +> - For more parameter description, see [master `config.toml.example`](https://github.com/pingcap/tiflow/blob/master/dm/master/dm-master.toml) and [worker `config.toml.example`](https://github.com/pingcap/tiflow/blob/master/dm/worker/dm-worker.toml). > > - Make sure that the ports among the following components are interconnected: > - The `peer_port` (`8291` by default) among the DM-master nodes are interconnected. diff --git a/dm/deploy-a-dm-cluster-using-tiup.md b/dm/deploy-a-dm-cluster-using-tiup.md index 2d9e061141c6b..26b6cdb054b24 100644 --- a/dm/deploy-a-dm-cluster-using-tiup.md +++ b/dm/deploy-a-dm-cluster-using-tiup.md @@ -144,7 +144,7 @@ alertmanager_servers: > - The TiUP nodes can connect to the `port` of all DM-master nodes (`8261` by default). > - The TiUP nodes can connect to the `port` of all DM-worker nodes (`8262` by default). -For more `master_servers.host.config` parameter description, refer to [master parameter](https://github.com/pingcap/dm/blob/master/dm/master/dm-master.toml). For more `worker_servers.host.config` parameter description, refer to [worker parameter](https://github.com/pingcap/dm/blob/master/dm/worker/dm-worker.toml). +For more `master_servers.host.config` parameter description, refer to [master parameter](https://github.com/pingcap/tiflow/blob/master/dm/master/dm-master.toml). For more `worker_servers.host.config` parameter description, refer to [worker parameter](https://github.com/pingcap/tiflow/blob/master/dm/worker/dm-worker.toml). ## Step 3: Execute the deployment command diff --git a/dm/dm-enable-tls.md b/dm/dm-enable-tls.md index 37dc390701cc9..292be260a1580 100644 --- a/dm/dm-enable-tls.md +++ b/dm/dm-enable-tls.md @@ -109,7 +109,7 @@ This section introduces how to enable encrypted data transmission between DM com ### Enable encrypted data transmission for downstream TiDB -1. Configure the downstream TiDB to use encrypted connections. For detailed operatons, refer to [Configure TiDB server to use secure connections](/enable-tls-between-clients-and-servers.md#configure-tidb-server-to-use-secure-connections). +1. Configure the downstream TiDB to use encrypted connections. For detailed operations, refer to [Configure TiDB server to use secure connections](/enable-tls-between-clients-and-servers.md#configure-tidb-server-to-use-secure-connections). 2. Set the TiDB client certificate in the task configuration file: diff --git a/dm/dm-error-handling.md b/dm/dm-error-handling.md index 6069d8a255233..2ee6a5045c587 100644 --- a/dm/dm-error-handling.md +++ b/dm/dm-error-handling.md @@ -70,7 +70,7 @@ In the error system, usually, the information of a specific error is as follows: Whether DM outputs the error stack information depends on the error severity and the necessity. The error stack records the complete stack call information when the error occurs. If you cannot figure out the error cause based on the basic information and the error message, you can trace the execution path of the code when the error occurs using the error stack. -For the complete list of error codes, refer to the [error code lists](https://github.com/pingcap/dm/blob/master/_utils/terror_gen/errors_release.txt). +For the complete list of error codes, refer to the [error code lists](https://github.com/pingcap/tiflow/blob/master/dm/_utils/terror_gen/errors_release.txt). ## Troubleshooting diff --git a/dm/dm-faq.md b/dm/dm-faq.md index 12e5821c848c0..5ee968c2986e6 100644 --- a/dm/dm-faq.md +++ b/dm/dm-faq.md @@ -25,7 +25,7 @@ Currently, DM does not support it and only supports the regular expressions of t ## If a statement executed upstream contains multiple DDL operations, does DM support such migration? -DM will attempt to split a single statement containing multiple DDL change operations into multiple statements containing only one DDL operation, but might not cover all cases. It is recommended to include only one DDL operation in a statement executed upstream, or verify it in the test environment. If it is not supported, you can file an [issue](https://github.com/pingcap/dm/issues) to the DM repository. +DM will attempt to split a single statement containing multiple DDL change operations into multiple statements containing only one DDL operation, but might not cover all cases. It is recommended to include only one DDL operation in a statement executed upstream, or verify it in the test environment. If it is not supported, you can file an [issue](https://github.com/pingcap/tiflow/issues) to the `pingcap/tiflow` repository. ## How to handle incompatible DDL statements? @@ -55,7 +55,7 @@ When an exception occurs during data migration and the data migration task canno ## How to handle the error returned by the DDL operation related to the gh-ost table, after `online-ddl: true` is set? ``` -[unit=Sync] ["error information"="{\"msg\":\"[code=36046:class=sync-unit:scope=internal:level=high] online ddls on ghost table `xxx`.`_xxxx_gho`\\ngithub.com/pingcap/dm/pkg/terror.(*Error).Generate ...... +[unit=Sync] ["error information"="{\"msg\":\"[code=36046:class=sync-unit:scope=internal:level=high] online ddls on ghost table `xxx`.`_xxxx_gho`\\ngithub.com/pingcap/tiflow/pkg/terror.(*Error).Generate ...... ``` The above error can be caused by the following reason: @@ -365,7 +365,7 @@ To solve this issue, you are recommended to maintain DM clusters using TiUP. In ## Why DM-master cannot be connected when I use dmctl to execute commands? -When using dmctl execute commands, you might find the connection to DM master fails (even if you have specified the parameter value of `--master-addr` in the command), and the error message is like `RawCause: context deadline exceeded, Workaround: please check your network connection.`. But afer checking the network connection using commands like `telnet `, no exception is found. +When using dmctl execute commands, you might find the connection to DM master fails (even if you have specified the parameter value of `--master-addr` in the command), and the error message is like `RawCause: context deadline exceeded, Workaround: please check your network connection.`. But after checking the network connection using commands like `telnet `, no exception is found. In this case, you can check the environment variable `https_proxy` (note that it is **https**). If this variable is configured, dmctl automatically connects the host and port specified by `https_proxy`. If the host does not have a corresponding `proxy` forwarding service, the connection fails. diff --git a/dm/dm-open-api.md b/dm/dm-open-api.md index c0fefce993896..ada86e1cbf718 100644 --- a/dm/dm-open-api.md +++ b/dm/dm-open-api.md @@ -1346,7 +1346,7 @@ curl -X 'GET' \ "name": "string", "source_name": "string", "worker_name": "string", - "stage": "runing", + "stage": "running", "unit": "sync", "unresolved_ddl_lock_id": "string", "load_status": { diff --git a/dm/dm-table-routing.md b/dm/dm-table-routing.md index 63f1089e56ef6..2625c6aaf1fb1 100644 --- a/dm/dm-table-routing.md +++ b/dm/dm-table-routing.md @@ -86,7 +86,7 @@ To migrate the upstream instances to the downstream `test`.`t`, you must create Assuming in the scenario of sharded schemas and tables, you want to migrate the `test_{1,2,3...}`.`t_{1,2,3...}` tables in two upstream MySQL instances to the `test`.`t` table in the downstream TiDB instance. At the same time, you want to extract the source information of the sharded tables and write it to the downstream merged table. -To migrate the upstream instances to the downstream `test`.`t`, you must create routing rules similar to the previous section [Merge sharded schemas and tables](#merge-sharded-schemas-and-tables). In addtion, you need to add the `extract-table`, `extract-schema`, and `extract-source` configurations: +To migrate the upstream instances to the downstream `test`.`t`, you must create routing rules similar to the previous section [Merge sharded schemas and tables](#merge-sharded-schemas-and-tables). In addition, you need to add the `extract-table`, `extract-schema`, and `extract-source` configurations: - `extract-table`: For a sharded table matching `schema-pattern` and `table-pattern`, DM extracts the sharded table name by using `table-regexp` and writes the name suffix without the `t_` part to `target-column` of the merged table, that is, the `c_table` column. - `extract-schema`: For a sharded schema matching `schema-pattern` and `table-pattern`, DM extracts the sharded schema name by using `schema-regexp` and writes the name suffix without the `test_` part to `target-column` of the merged table, that is, the `c_schema` column. diff --git a/dm/maintain-dm-using-tiup.md b/dm/maintain-dm-using-tiup.md index 5707edc917d46..9ae7cf5842eaa 100644 --- a/dm/maintain-dm-using-tiup.md +++ b/dm/maintain-dm-using-tiup.md @@ -394,7 +394,7 @@ All operations above performed on the cluster machine use the SSH client embedde Then you can use the `--native-ssh` command-line flag to enable the system-native command-line tool: -- Deploy a cluster: `tiup dm deploy --native-ssh`. Fill in the name of your cluster for ``, the DM version to be deployed (such as `v7.6.0`) for `` , and the topology file name for ``. +- Deploy a cluster: `tiup dm deploy --native-ssh`. Fill in the name of your cluster for ``, the DM version to be deployed (such as `v8.0.0`) for `` , and the topology file name for ``. - Start a cluster: `tiup dm start --native-ssh`. - Upgrade a cluster: `tiup dm upgrade ... --native-ssh` diff --git a/dm/manually-handling-sharding-ddl-locks.md b/dm/manually-handling-sharding-ddl-locks.md index 9780b5b8172fa..663547ec5b3d1 100644 --- a/dm/manually-handling-sharding-ddl-locks.md +++ b/dm/manually-handling-sharding-ddl-locks.md @@ -55,7 +55,7 @@ You can use `shard-ddl-lock [task] [flags]` to view the DDL lock information on shard-ddl-lock test ``` -
+
Expected output ``` diff --git a/dm/monitor-a-dm-cluster.md b/dm/monitor-a-dm-cluster.md index f40a66dc3d709..2af6bb1ac852e 100644 --- a/dm/monitor-a-dm-cluster.md +++ b/dm/monitor-a-dm-cluster.md @@ -94,7 +94,7 @@ The following metrics show only when `task-mode` is in the `incremental` or `all | total sqls jobs | The number of newly added jobs per unit of time | N/A | N/A | | finished sqls jobs | The number of finished jobs per unit of time | N/A | N/A | | statement execution latency | The duration that the binlog replication unit executes the statement to the downstream (in seconds) | N/A | N/A | -| add job duration | The duration tht the binlog replication unit adds a job to the queue (in seconds) | N/A | N/A | +| add job duration | The duration that the binlog replication unit adds a job to the queue (in seconds) | N/A | N/A | | DML conflict detect duration | The duration that the binlog replication unit detects the conflict in DML (in seconds) | N/A | N/A | | skipped event duration | The duration that the binlog replication unit skips a binlog event (in seconds) | N/A | N/A | | unsynced tables | The number of tables that have not received the shard DDL statement in the current subtask | N/A | N/A | diff --git a/dm/quick-start-create-source.md b/dm/quick-start-create-source.md index a3af12981f8a6..d2c18e1675e2e 100644 --- a/dm/quick-start-create-source.md +++ b/dm/quick-start-create-source.md @@ -84,7 +84,7 @@ The returned results are as follows: After creating a data source, you can use the following command to query the data source: -- If you konw the `source-id` of the data source, you can use the `dmctl config source ` command to directly check the configuration of the data source: +- If you know the `source-id` of the data source, you can use the `dmctl config source ` command to directly check the configuration of the data source: {{< copyable "shell-regular" >}} diff --git a/dm/quick-start-create-task.md b/dm/quick-start-create-task.md index e4888d3dab432..a42af559e0c2a 100644 --- a/dm/quick-start-create-task.md +++ b/dm/quick-start-create-task.md @@ -74,7 +74,7 @@ To run a TiDB server, use the following command: {{< copyable "shell-regular" >}} ```bash -wget https://download.pingcap.org/tidb-community-server-v7.6.0-linux-amd64.tar.gz +wget https://download.pingcap.org/tidb-community-server-v8.0.0-linux-amd64.tar.gz tar -xzvf tidb-latest-linux-amd64.tar.gz mv tidb-latest-linux-amd64/bin/tidb-server ./ ./tidb-server diff --git a/dm/quick-start-with-dm.md b/dm/quick-start-with-dm.md index 26c30a4a2b9d9..3386f01ffa96f 100644 --- a/dm/quick-start-with-dm.md +++ b/dm/quick-start-with-dm.md @@ -6,7 +6,7 @@ aliases: ['/docs/tidb-data-migration/dev/get-started/'] # Quick Start Guide for TiDB Data Migration -This document describes how to migrate data from MySQL to TiDB using [TiDB Data Migration](https://github.com/pingcap/dm) (DM). This guide is a quick demo of DM features and is not recommended for any production environment. +This document describes how to migrate data from MySQL to TiDB using [TiDB Data Migration (DM)](/dm/dm-overview.md). This guide is a quick demo of DM features and is not recommended for any production environment. ## Step 1: Deploy a DM cluster diff --git a/dm/shard-merge-best-practices.md b/dm/shard-merge-best-practices.md index 507f276605019..637f97716cc06 100644 --- a/dm/shard-merge-best-practices.md +++ b/dm/shard-merge-best-practices.md @@ -6,7 +6,7 @@ aliases: ['/docs/tidb-data-migration/dev/shard-merge-best-practices/'] # Best Practices of Data Migration in the Shard Merge Scenario -This document describes the features and limitations of [TiDB Data Migration](https://github.com/pingcap/dm) (DM) in the shard merge scenario and provides a data migration best practice guide for your application (the default "pessimistic" mode is used). +This document describes the features and limitations of [TiDB Data Migration (DM)](/dm/dm-overview.md) in the shard merge scenario and provides a data migration best practice guide for your application (the default "pessimistic" mode is used). ## Use a separate data migration task diff --git a/dumpling-overview.md b/dumpling-overview.md index df2d02a47f7d8..d376f157f9276 100644 --- a/dumpling-overview.md +++ b/dumpling-overview.md @@ -87,7 +87,7 @@ Dumpling exports data to SQL files by default. You can also export data to SQL f {{< copyable "shell-regular" >}} ```shell -dumpling -u root -P 4000 -h 127.0.0.1 --filetype sql -t 8 -o /tmp/test -r 200000 -F 256MiB +tiup dumpling -u root -P 4000 -h 127.0.0.1 --filetype sql -t 8 -o /tmp/test -r 200000 -F 256MiB ``` In the command above: @@ -121,7 +121,7 @@ When you export data to CSV files, you can use `--sql ` to filter the recor {{< copyable "shell-regular" >}} ```shell -./dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test --filetype csv --sql 'select * from `test`.`sbtest1` where id < 100' -F 100MiB --output-filename-template 'test.sbtest1.{{.Index}}' +tiup dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test --filetype csv --sql 'select * from `test`.`sbtest1` where id < 100' -F 100MiB --output-filename-template 'test.sbtest1.{{.Index}}' ``` In the command above: @@ -236,7 +236,7 @@ export AWS_SECRET_ACCESS_KEY=${SecretKey} Dumpling also supports reading credential files from `~/.aws/credentials`. For more information about URI parameter descriptions, see [URI Formats of External Storage Services](/external-storage-uri.md). ```shell -./dumpling -u root -P 4000 -h 127.0.0.1 -r 200000 -o "s3://${Bucket}/${Folder}" +tiup dumpling -u root -P 4000 -h 127.0.0.1 -r 200000 -o "s3://${Bucket}/${Folder}" ``` ### Filter the exported data @@ -246,7 +246,7 @@ Dumpling also supports reading credential files from `~/.aws/credentials`. For m By default, Dumpling exports all databases except system databases (including `mysql`, `sys`, `INFORMATION_SCHEMA`, `PERFORMANCE_SCHEMA`, `METRICS_SCHEMA`, and `INSPECTION_SCHEMA`). You can use `--where ` to select the records to be exported. ```shell -./dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test --where "id < 100" +tiup dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test --where "id < 100" ``` The above command exports the data that matches `id < 100` from each table. Note that you cannot use the `--where` parameter together with `--sql`. @@ -258,7 +258,7 @@ Dumpling can filter specific databases or tables by specifying the table filter {{< copyable "shell-regular" >}} ```shell -./dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test -r 200000 --filter "employees.*" --filter "*.WorkOrder" +tiup dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test -r 200000 --filter "employees.*" --filter "*.WorkOrder" ``` The above command exports all the tables in the `employees` database and the `WorkOrder` tables in all databases. @@ -329,8 +329,8 @@ The `--snapshot` option can be set to a TSO (the `Position` field output by the {{< copyable "shell-regular" >}} ```shell -./dumpling --snapshot 417773951312461825 -./dumpling --snapshot "2020-07-02 17:12:45" +tiup dumpling --snapshot 417773951312461825 +tiup dumpling --snapshot "2020-07-02 17:12:45" ``` The TiDB historical data snapshots when the TSO is `417773951312461825` and the time is `2020-07-02 17:12:45` are exported. diff --git a/dynamic-config.md b/dynamic-config.md index cff4e08482ead..9c6c40a8db132 100644 --- a/dynamic-config.md +++ b/dynamic-config.md @@ -343,10 +343,16 @@ select @@tidb_slow_log_threshold; The following TiDB configuration items can be modified dynamically: | Configuration item | SQL variable | Description | -| :--- | :--- | -| `instance.tidb_enable_slow_log` | `tidb_enable_slow_log` | Whether to enable slow log | -| `instance.tidb_slow_log_threshold` | `tidb_slow_log_threshold` | The threshold of slow log | -| `instance.tidb_expensive_query_time_threshold` | `tidb_expensive_query_time_threshold` | The threshold of a expensive query | +| --- | --- | --- | +| `instance.tidb_enable_slow_log` | `tidb_enable_slow_log` | Controls whether to enable slow log | +| `instance.tidb_slow_log_threshold` | `tidb_slow_log_threshold` | Specifies the threshold of slow log | +| `instance.tidb_expensive_query_time_threshold` | `tidb_expensive_query_time_threshold` | Specifies the threshold of an expensive query | +| `instance.tidb_enable_collect_execution_info` | `tidb_enable_collect_execution_info` | Controls whether to record the execution information of operators | +| `instance.tidb_record_plan_in_slow_log` | `tidb_record_plan_in_slow_log` | Controls whether to record execution plans in the slow log | +| `instance.tidb_force_priority` | `tidb_force_priority` | Specifies the priority of statements that are submitted from this TiDB instance | +| `instance.max_connections` | `max_connections` | Specifies the maximum number of concurrent connections permitted for this TiDB instance | +| `instance.tidb_enable_ddl` | `tidb_enable_ddl` | Controls whether this TiDB instance can become a DDL owner | +| `pessimistic-txn.constraint-check-in-place-pessimistic` | `tidb_constraint_check_in_place_pessimistic` | Controls whether to defer the unique constraint check of a unique index to the next time when this index requires a lock or to the time when the transaction is committed | ### Modify TiFlash configuration dynamically diff --git a/enable-tls-between-components.md b/enable-tls-between-components.md index af73a7887ddfc..3f48566c2da66 100644 --- a/enable-tls-between-components.md +++ b/enable-tls-between-components.md @@ -158,16 +158,17 @@ The Common Name is used for caller verification. In general, the callee needs to To verify component caller's identity, you need to mark the certificate user identity using `Common Name` when generating the certificate, and to check the caller's identity by configuring the `Common Name` list for the callee. +> **Note:** +> +> Currently the `cert-allowed-cn` configuration item of the PD can only be set to one value. Therefore, the `commonName` of all authentication objects must be set to the same value. + - TiDB Configure in the configuration file or command-line arguments: ```toml [security] - cluster-verify-cn = [ - "TiDB-Server", - "TiKV-Control", - ] + cluster-verify-cn = ["TiDB"] ``` - TiKV @@ -176,9 +177,7 @@ To verify component caller's identity, you need to mark the certificate user ide ```toml [security] - cert-allowed-cn = [ - "TiDB-Server", "PD-Server", "TiKV-Control", "RawKvClient1", - ] + cert-allowed-cn = ["TiDB"] ``` - PD @@ -187,7 +186,7 @@ To verify component caller's identity, you need to mark the certificate user ide ```toml [security] - cert-allowed-cn = ["TiKV-Server", "TiDB-Server", "PD-Control"] + cert-allowed-cn = ["TiDB"] ``` - TiFlash (New in v4.0.5) @@ -196,14 +195,14 @@ To verify component caller's identity, you need to mark the certificate user ide ```toml [security] - cert_allowed_cn = ["TiKV-Server", "TiDB-Server"] + cert_allowed_cn = ["TiDB"] ``` Configure in the `tiflash-learner.toml` file: ```toml [security] - cert-allowed-cn = ["PD-Server", "TiKV-Server", "TiFlash-Server"] + cert-allowed-cn = ["TiDB"] ``` ## Reload certificates diff --git a/encryption-at-rest.md b/encryption-at-rest.md index feefd9066b94c..9653ba186c16d 100644 --- a/encryption-at-rest.md +++ b/encryption-at-rest.md @@ -94,6 +94,10 @@ If encryption is enabled (that is, the value of `data-encryption-method` is not TiKV supports KMS encryption for three platforms: AWS, Google Cloud, and Azure. Depending on the platform where your service is deployed, you can choose one of them to configure KMS encryption. +> **Warning:** +> +> Currently, specifying a master key using Google Cloud KMS is experimental. It is not recommended that you use it in production environments. 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. +
@@ -283,7 +287,7 @@ The encryption algorithm currently supported by TiFlash is consistent with that The same master key can be shared by multiple instances of TiFlash, and can also be shared among TiFlash and TiKV. The recommended way to provide a master key in production is via AWS KMS. Alternatively, if using custom key is desired, supplying the master key via file is also supported. The specific method to generate master key and the format of the master key are the same as TiKV. -TiFlash uses the current data key to encrypt all data placed on the disk, including data files, Schmea files, and temporary data files generated during calculations. Data keys are automatically rotated by TiFlash every week by default, and the period is configurable. On key rotation, TiFlash does not rewrite all existing files to replace the key, but background compaction tasks are expected to rewrite old data into new data files, with the most recent data key, if the cluster gets constant write workload. TiFlash keeps track of the key and encryption method used to encrypt each of the files and use the information to decrypt the content on reads. +TiFlash uses the current data key to encrypt all data placed on the disk, including data files, Schema files, and temporary data files generated during calculations. Data keys are automatically rotated by TiFlash every week by default, and the period is configurable. On key rotation, TiFlash does not rewrite all existing files to replace the key, but background compaction tasks are expected to rewrite old data into new data files, with the most recent data key, if the cluster gets constant write workload. TiFlash keeps track of the key and encryption method used to encrypt each of the files and use the information to decrypt the content on reads. ### Key creation @@ -398,19 +402,19 @@ TiFlash also optimizes encrypted metadata operations in v4.0.9, and its compatib To enable S3 server-side encryption when backup to S3 using BR, pass `--s3.sse` argument and set value to "aws:kms". S3 will use its own KMS key for encryption. Example: ``` -./br backup full --pd --storage "s3:///" --s3.sse aws:kms +tiup br backup full --pd --storage "s3:///" --s3.sse aws:kms ``` To use a custom AWS KMS CMK that you created and owned, pass `--s3.sse-kms-key-id` in addition. In this case, both the BR process and all the TiKV nodes in the cluster would need access to the KMS CMK (for example, via AWS IAM), and the KMS CMK needs to be in the same AWS region as the S3 bucket used to store the backup. It is advised to grant access to the KMS CMK to BR process and TiKV nodes via AWS IAM. Refer to AWS documentation for usage of [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html). For example: ``` -./br backup full --pd --storage "s3:///" --s3.sse aws:kms --s3.sse-kms-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 +tiup br backup full --pd --storage "s3:///" --s3.sse aws:kms --s3.sse-kms-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 ``` When restoring the backup, both `--s3.sse` and `--s3.sse-kms-key-id` should NOT be used. S3 will figure out encryption settings by itself. The BR process and TiKV nodes in the cluster to restore the backup to would also need access to the KMS CMK, or the restore will fail. Example: ``` -./br restore full --pd --storage "s3:///" +tiup br restore full --pd --storage "s3:///" ``` ## BR Azure Blob Storage server-side encryption @@ -424,13 +428,13 @@ To specify an encryption scope for the backup data, you can use one of the follo - Include the `--azblob.encryption-scope` option in the `backup` command and set it to the scope name: ```shell - ./br backup full --pd --storage "azure:///" --azblob.encryption-scope scope1 + tiup br backup full --pd --storage "azure:///" --azblob.encryption-scope scope1 ``` - Include `encryption-scope` in the URI and set it to the scope name: ```shell - ./br backup full --pd --storage "azure:///?encryption-scope=scope1" + tiup br backup full --pd --storage "azure:///?encryption-scope=scope1" ``` For more information, see the Azure documentation: [Upload a blob with an encryption scope](https://learn.microsoft.com/en-us/azure/storage/blobs/encryption-scope-manage?tabs=powershell#upload-a-blob-with-an-encryption-scope). @@ -438,7 +442,7 @@ For more information, see the Azure documentation: [Upload a blob with an encryp When restoring the backup, you do not need to specify the encryption scope. Azure Blob Storage automatically decrypts the data. For example: ```shell -./br restore full --pd --storage "azure:///" +tiup br restore full --pd --storage "azure:///" ``` ### Method 2: use an encryption key @@ -448,20 +452,20 @@ To specify an encryption key for the backup data, you can use one of the followi - Include the `--azblob.encryption-key` option in the `backup` command and set it to an AES256 encryption key: ```shell - ./br backup full --pd --storage "azure:///" --azblob.encryption-key + tiup br backup full --pd --storage "azure:///" --azblob.encryption-key ``` - Include `encryption-key` in the URI and set it to an AES256 encryption key. If the key contains URI reserved characters such as `&` and `%`, you need to percent-encode it first: ```shell - ./br backup full --pd --storage "azure:///?encryption-key=" + tiup br backup full --pd --storage "azure:///?encryption-key=" ``` - Set the `AZURE_ENCRYPTION_KEY` environment variable to an AES256 encryption key. Before running, make sure that you remember the encryption key in the environment variable to avoid forgetting it. ```shell export AZURE_ENCRYPTION_KEY= - ./br backup full --pd --storage "azure:///" + tiup br backup full --pd --storage "azure:///" ``` For more information, see the Azure documentation: [Provide an encryption key on a request to Blob storage](https://learn.microsoft.com/en-us/azure/storage/blobs/encryption-customer-provided-keys). @@ -471,18 +475,18 @@ When restoring the backup, you need to specify the encryption key. For example: - Include the `--azblob.encryption-key` option in the `restore` command: ```shell - ./br restore full --pd --storage "azure:///" --azblob.encryption-key + tiup br restore full --pd --storage "azure:///" --azblob.encryption-key ``` - Include `encryption-key` in the URI: ```shell - ./br restore full --pd --storage "azure:///?encryption-key=" + tiup br restore full --pd --storage "azure:///?encryption-key=" ``` - Set the `AZURE_ENCRYPTION_KEY` environment variable: ```shell export AZURE_ENCRYPTION_KEY= - ./br restore full --pd --storage "azure:///" + tiup br restore full --pd --storage "azure:///" ``` diff --git a/error-codes.md b/error-codes.md index 1bba32e0a314b..ff7dd32a95f9a 100644 --- a/error-codes.md +++ b/error-codes.md @@ -432,9 +432,9 @@ TiDB is compatible with the error codes in MySQL, and in most cases returns the * Error Number: 8216 - The usage of automatic random columns is incorrect. + The usage of the `AUTO_RANDOM` columns is incorrect. - See [auto random](/auto-random.md) to modify. + See [`AUTO_RANDOM`](/auto-random.md) to modify. * Error Number: 8223 @@ -464,7 +464,7 @@ TiDB is compatible with the error codes in MySQL, and in most cases returns the * Error Number: 8228 - Unsupported types are specified when using `setval` on Sequence. + Unsupported types are specified when using `SETVAL` on Sequence. See [Sequence documentation](/sql-statements/sql-statement-create-sequence.md#examples) to find the example of the function. diff --git a/explain-index-merge.md b/explain-index-merge.md index 0e68f80ffff58..4fd15aa1ce63e 100644 --- a/explain-index-merge.md +++ b/explain-index-merge.md @@ -92,8 +92,8 @@ When using the intersection-type index merge to access tables, the optimizer can > > - You can use the SQL hint [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) to force the optimizer to apply Index Merge, regardless of the setting of `tidb_enable_index_merge`. To enable Index Merge when the filtering conditions contain expressions that cannot be pushed down, you must use the SQL hint [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-). > -> - If the optimizer can choose the single index scan method (other than full table scan) for a query plan, the optimizer will not automatically use index merge. For the optimizer to use index merge, you need to use the optimizer hint. +> - If the optimizer can choose the single index scan method (other than full table scan) for a query plan, the optimizer will not automatically use index merge. For the optimizer to use index merge, you need to use the optimizer hint. Starting from v8.1.0, you can remove this limitation by setting [Optimizer Fix Control 52869](/optimizer-fix-controls.md#52869-new-in-v810). Removing this limitation enables the optimizer to choose index merge automatically in more queries, but might cause the optimizer to ignore the optimal execution plans. Therefore, it is recommended to conduct sufficient tests on actual use cases before removing this limitation to make sure that it will not cause performance regressions. > -> - Index Merge is not supported in [tempoaray tables](/temporary-tables.md) for now. +> - Index Merge is not supported in [temporary tables](/temporary-tables.md) for now. > > - The intersection-type index merge will not automatically be selected by the optimizer. You must specify the **table name and index name** using the [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) hint for it to be selected. diff --git a/external-storage-uri.md b/external-storage-uri.md index 6f84b5a0f9a9e..090629e331479 100644 --- a/external-storage-uri.md +++ b/external-storage-uri.md @@ -21,7 +21,7 @@ The basic format of the URI is as follows: - `access-key`: Specifies the access key. - `secret-access-key`: Specifies the secret access key. - - `session-token`: Specifies the temporary session token. BR does not support this parameter yet. + - `session-token`: Specifies the temporary session token. BR supports this parameter starting from v7.6.0. - `use-accelerate-endpoint`: Specifies whether to use the accelerate endpoint on Amazon S3 (defaults to `false`). - `endpoint`: Specifies the URL of custom endpoint for S3-compatible services (for example, ``). - `force-path-style`: Use path style access rather than virtual hosted style access (defaults to `true`). @@ -29,7 +29,7 @@ The basic format of the URI is as follows: - `sse`: Specifies the server-side encryption algorithm used to encrypt the uploaded objects (value options: ``, `AES256`, or `aws:kms`). - `sse-kms-key-id`: Specifies the KMS ID if `sse` is set to `aws:kms`. - `acl`: Specifies the canned ACL of the uploaded objects (for example, `private` or `authenticated-read`). - - `role-arn`: When you need to access Amazon S3 data from a third party using a specified [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), you can specify the corresponding [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of the IAM role with the `role-arn` URL query parameter, such as `arn:aws:iam::888888888888:role/my-role`. For more information about using an IAM role to access Amazon S3 data from a third party, see [AWS documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html). + - `role-arn`: When you need to access Amazon S3 data from a third party using a specified [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), you can specify the corresponding [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of the IAM role with the `role-arn` URL query parameter, such as `arn:aws:iam::888888888888:role/my-role`. For more information about using an IAM role to access Amazon S3 data from a third party, see [AWS documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html). BR supports this parameter starting from v7.6.0. - `external-id`: When you access Amazon S3 data from a third party, you might need to specify a correct [external ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) to assume [the IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html). In this case, you can use this `external-id` URL query parameter to specify the external ID and make sure that you can assume the IAM role. An external ID is an arbitrary string provided by the third party together with the IAM role ARN to access the Amazon S3 data. Providing an external ID is optional when assuming an IAM role, which means if the third party does not require an external ID for the IAM role, you can assume the IAM role and access the corresponding Amazon S3 data without providing this parameter. The following is an example of an Amazon S3 URI for TiDB Lightning and BR. In this example, you need to specify a specific file path `testfolder`. diff --git a/faq/manage-cluster-faq.md b/faq/manage-cluster-faq.md index e56982aa51da7..1a6955b1e1cf6 100644 --- a/faq/manage-cluster-faq.md +++ b/faq/manage-cluster-faq.md @@ -73,7 +73,7 @@ TiDB provides a few features and [tools](/ecosystem-tool-user-guide.md), with wh The TiDB community is highly active. The engineers have been keeping optimizing features and fixing bugs. Therefore, the TiDB version is updated quite fast. If you want to keep informed of the latest version, see [TiDB Release Timeline](/releases/release-timeline.md). -It is recommeneded to deploy TiDB [using TiUP](/production-deployment-using-tiup.md) or [using TiDB Operator](https://docs.pingcap.com/tidb-in-kubernetes/stable). TiDB has a unified management of the version number. You can view the version number using one of the following methods: +It is recommended to deploy TiDB [using TiUP](/production-deployment-using-tiup.md) or [using TiDB Operator](https://docs.pingcap.com/tidb-in-kubernetes/stable). TiDB has a unified management of the version number. You can view the version number using one of the following methods: - `select tidb_version()` - `tidb-server -V` diff --git a/faq/migration-tidb-faq.md b/faq/migration-tidb-faq.md index 190deb6e80886..477c9559bc390 100644 --- a/faq/migration-tidb-faq.md +++ b/faq/migration-tidb-faq.md @@ -93,7 +93,7 @@ To migrate all the data or migrate incrementally from DB2 or Oracle to TiDB, see Currently, it is recommended to use OGG. -### Error: `java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation` while using Sqoop to write data into TiDB in `batches` +### Error: `java.sql.BatchUpdateException:statement count 5001 exceeds the transaction limitation` while using Sqoop to write data into TiDB in `batches` In Sqoop, `--batch` means committing 100 `statement`s in each batch, but by default each `statement` contains 100 SQL statements. So, 100 * 100 = 10000 SQL statements, which exceeds 5000, the maximum number of statements allowed in a single TiDB transaction. diff --git a/faq/monitor-faq.md b/faq/monitor-faq.md index 5cfa36a2781cf..8b015916823d8 100644 --- a/faq/monitor-faq.md +++ b/faq/monitor-faq.md @@ -18,7 +18,7 @@ The monitoring system of TiDB consists of Prometheus and Grafana. From the dashb Yes. Find the startup script on the machine where Prometheus is started, edit the startup parameter and restart Prometheus. -```config +``` --storage.tsdb.retention="60d" ``` diff --git a/faq/sql-faq.md b/faq/sql-faq.md index 967cea5adaea1..f28100b19b2a8 100644 --- a/faq/sql-faq.md +++ b/faq/sql-faq.md @@ -151,7 +151,7 @@ TiDB supports modifying the [`sql_mode`](/system-variables.md#sql_mode) system v - Changes to [`GLOBAL`](/sql-statements/sql-statement-set-variable.md) scoped variables propagate to the rest servers of the cluster and persist across restarts. This means that you do not need to change the `sql_mode` value on each TiDB server. - Changes to `SESSION` scoped variables only affect the current client session. After restarting a server, the changes are lost. -## Error: `java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation` while using Sqoop to write data into TiDB in batches +## Error: `java.sql.BatchUpdateException:statement count 5001 exceeds the transaction limitation` while using Sqoop to write data into TiDB in batches In Sqoop, `--batch` means committing 100 statements in each batch, but by default each statement contains 100 SQL statements. So, 100 * 100 = 10000 SQL statements, which exceeds 5000, the maximum number of statements allowed in a single TiDB transaction. diff --git a/functions-and-operators/bit-functions-and-operators.md b/functions-and-operators/bit-functions-and-operators.md index 1430d63bcdb6b..3760495c08e54 100644 --- a/functions-and-operators/bit-functions-and-operators.md +++ b/functions-and-operators/bit-functions-and-operators.md @@ -6,7 +6,7 @@ aliases: ['/docs/dev/functions-and-operators/bit-functions-and-operators/','/doc # Bit Functions and Operators -TiDB supports all of the [bit functions and operators](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html) available in MySQL 5.7. +TiDB supports all of the [bit functions and operators](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html) available in MySQL 8.0. **Bit functions and operators:** @@ -19,3 +19,14 @@ TiDB supports all of the [bit functions and operators](https://dev.mysql.com/doc | [^](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-xor) | Bitwise XOR | | [<<](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_left-shift) | Left shift | | [>>](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_right-shift) | Right shift | + +## MySQL compatibility + +There are some differences between MySQL 8.0 and earlier versions of MySQL in handling bit functions and operators. TiDB aims to follow the behavior of MySQL 8.0. + +## Known issues + +In the following cases, the query results in TiDB are the same as MySQL 5.7 but different from MySQL 8.0. + +- Bitwise operations with binary arguments. For more information, see [#30637](https://github.com/pingcap/tidb/issues/30637). +- The result of the `BIT_COUNT()` function. For more information, see [#44621](https://github.com/pingcap/tidb/issues/44621). diff --git a/functions-and-operators/cast-functions-and-operators.md b/functions-and-operators/cast-functions-and-operators.md index 3eb512f074f69..9ac5cab6eb9d0 100644 --- a/functions-and-operators/cast-functions-and-operators.md +++ b/functions-and-operators/cast-functions-and-operators.md @@ -6,16 +6,64 @@ aliases: ['/docs/dev/functions-and-operators/cast-functions-and-operators/','/do # Cast Functions and Operators -Cast functions and operators enable conversion of values from one data type to another. TiDB supports all of the [cast functions and operators](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html) available in MySQL 5.7. - -## List of cast functions and operators +Cast functions and operators enable conversion of values from one data type to another. TiDB supports all of the [cast functions and operators](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html) available in MySQL 8.0. | Name | Description | | ---------------------------------------- | -------------------------------- | -| [`BINARY`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary) | Cast a string to a binary string | -| [`CAST()`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast) | Cast a value as a certain type | -| [`CONVERT()`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_convert) | Cast a value as a certain type | +| [`BINARY`](#binary) | Cast a string to a binary string | +| [`CAST()`](#cast) | Cast a value as a certain type | +| [`CONVERT()`](#convert) | Cast a value as a certain type | > **Note:** > > TiDB and MySQL display inconsistent results for `SELECT CAST(MeN AS CHAR)` (or its equivalent form `SELECT CONVERT(MeM, CHAR)`), where `MeN` represents a double-precision floating-point number in scientific notation. MySQL displays the complete numeric value when `-15 <= N <= 14` and the scientific notation when `N < -15` or `N > 14`. However, TiDB always displays the complete numeric value. For example, MySQL displays the result of `SELECT CAST(3.1415e15 AS CHAR)` as `3.1415e15`, while TiDB displays the result as `3141500000000000`. + +## BINARY + +The [`BINARY`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary) operator has been deprecated since MySQL 8.0.27. It is recommended to use `CAST(... AS BINARY)` instead both in TiDB and MySQL. + +## CAST + +The [`CAST()`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast) function is used to cast an expression to a specific type. + +This function is also used to create [Multi-valued indexes](/sql-statements/sql-statement-create-index.md#multi-valued-indexes). + +Example: + +```sql +SELECT CAST(0x54694442 AS CHAR); +``` + +```sql ++--------------------------+ +| CAST(0x54694442 AS CHAR) | ++--------------------------+ +| TiDB | ++--------------------------+ +1 row in set (0.0002 sec) +``` + +## CONVERT + +The [`CONVERT()`](https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_convert) function is used to convert between [character sets](/character-set-and-collation.md). + +Example: + +```sql +SELECT CONVERT(0x616263 USING utf8mb4); +``` + +```sql ++---------------------------------+ +| CONVERT(0x616263 USING utf8mb4) | ++---------------------------------+ +| abc | ++---------------------------------+ +1 row in set (0.0004 sec) +``` + +## MySQL compatibility + +- TiDB does not support cast operations on `SPATIAL` types. For more information, see [#6347](https://github.com/pingcap/tidb/issues/6347). +- TiDB does not support `AT TIME ZONE` for `CAST()`. For more information, see [#51742](https://github.com/pingcap/tidb/issues/51742). +- `CAST(24 AS YEAR)` returns 2 digits in TiDB and 4 digits in MySQL. For more information, see [#29629](https://github.com/pingcap/tidb/issues/29629). diff --git a/functions-and-operators/control-flow-functions.md b/functions-and-operators/control-flow-functions.md index 7499c88f4b97f..0d2fa9ce88a12 100644 --- a/functions-and-operators/control-flow-functions.md +++ b/functions-and-operators/control-flow-functions.md @@ -6,11 +6,138 @@ aliases: ['/docs/dev/functions-and-operators/control-flow-functions/','/docs/dev # Control Flow Functions -TiDB supports all of the [control flow functions](https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html) available in MySQL 5.7. +TiDB supports all of the [control flow functions](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html) available in MySQL 8.0. | Name | Description | |:--------------------------------------------------------------------------------------------------|:----------------------------------| -| [`CASE`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#operator_case) | Case operator | -| [`IF()`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if) | If/else construct | -| [`IFNULL()`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull) | Null if/else construct | -| [`NULLIF()`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_nullif) | Return NULL if expr1 = expr2 | +| [`CASE`](#case) | Case operator | +| [`IF()`](#if) | If/else construct | +| [`IFNULL()`](#ifnull) | Null if/else construct | +| [`NULLIF()`](#nullif) | Return `NULL` if expr1 = expr2 | + +## CASE + +The [`CASE`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#operator_case) operator enables you to perform conditional logic and customize query results based on specified conditions. + +Syntax: + +```sql +CASE + WHEN condition1 THEN result1 + WHEN condition2 THEN result2 + ... + ELSE default_result +END +``` + +Example: + +```sql +WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) +SELECT n, CASE WHEN n MOD 2 THEN "odd" ELSE "even" END FROM d; +``` + +``` ++----+----------------------------------------------+ +| n | CASE WHEN n MOD 2 THEN "odd" ELSE "even" END | ++----+----------------------------------------------+ +| 1 | odd | +| 2 | even | +| 3 | odd | +| 4 | even | +| 5 | odd | +| 6 | even | +| 7 | odd | +| 8 | even | +| 9 | odd | +| 10 | even | ++----+----------------------------------------------+ +10 rows in set (0.00 sec) +``` + +## IF() + +The [`IF()`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if) function enables you to perform different actions based on whether a value or expression is true or not. + +Syntax: + +```sql +IF(condition, value_if_true, value_if_false) +``` + +Example: + +```sql +WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) +SELECT n, IF(n MOD 2, "odd", "even") FROM d; +``` + +``` ++----+----------------------------+ +| n | IF(n MOD 2, "odd", "even") | ++----+----------------------------+ +| 1 | odd | +| 2 | even | +| 3 | odd | +| 4 | even | +| 5 | odd | +| 6 | even | +| 7 | odd | +| 8 | even | +| 9 | odd | +| 10 | even | ++----+----------------------------+ +10 rows in set (0.00 sec) +``` + +## IFNULL() + +The [`IFNULL(expr1,expr2)`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull) function is used to handle NULL values in queries. If `expr1` is not `NULL`, it returns `expr1`; otherwise, it returns `expr2`. + +Example: + +```sql +WITH data AS (SELECT NULL AS x UNION ALL SELECT 1 ) +SELECT x, IFNULL(x,'x has no value') FROM data; +``` + +``` ++------+----------------------------+ +| x | IFNULL(x,'x has no value') | ++------+----------------------------+ +| NULL | x has no value | +| 1 | 1 | ++------+----------------------------+ +2 rows in set (0.0006 sec) +``` + +## NULLIF() + +The [`NULLIF(expr1,expr2)`](https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_nullif) function returns `NULL` if both arguments are the same or if the first argument is `NULL`. Otherwise, it returns the first argument. + +Example: + +```sql +WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) +SELECT n, NULLIF(n+n, n+2) FROM d; +``` + +``` ++----+------------------+ +| n | NULLIF(n+n, n+2) | ++----+------------------+ +| 1 | 2 | +| 2 | NULL | +| 3 | 6 | +| 4 | 8 | +| 5 | 10 | +| 6 | 12 | +| 7 | 14 | +| 8 | 16 | +| 9 | 18 | +| 10 | 20 | ++----+------------------+ +10 rows in set (0.00 sec) +``` + +In this example, when `n` equals `2`, both `n+n` and `n+2` equal `4`, making both arguments the same and causing the function to return `NULL`. \ No newline at end of file diff --git a/functions-and-operators/date-and-time-functions.md b/functions-and-operators/date-and-time-functions.md index dd3568582c71c..17ac1032a2e8c 100644 --- a/functions-and-operators/date-and-time-functions.md +++ b/functions-and-operators/date-and-time-functions.md @@ -6,7 +6,7 @@ aliases: ['/docs/dev/functions-and-operators/date-and-time-functions/','/docs/de # Date and Time Functions -TiDB supports all of the [date and time functions](https://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html) available in MySQL 5.7. +TiDB supports all of the [date and time functions](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html) available in MySQL 8.0. > **Note:** > @@ -82,7 +82,7 @@ For details, see [Date and Time Functions](https://dev.mysql.com/doc/refman/8.0/ ## MySQL compatibility -The function `str_to_date()` is supported by TiDB, but is unable to parse all date and time values. In addition, the following date and time formatting options are **not implemented**: +The function `STR_TO_DATE()` is supported by TiDB, but is unable to parse all date and time values. In addition, the following date and time formatting options are **not implemented**: | Format | Description | |--------|---------------------------------------------------------------------------------------| @@ -101,4 +101,4 @@ See [issue #30082](https://github.com/pingcap/tidb/issues/30082) for more detail ## Related system variables -The `default_week_format` variable affects the `WEEK()` function. \ No newline at end of file +The [`default_week_format`](/system-variables.md#default_week_format) variable affects the `WEEK()` function. \ No newline at end of file diff --git a/functions-and-operators/encryption-and-compression-functions.md b/functions-and-operators/encryption-and-compression-functions.md index 181300d313346..342a6f6ceff06 100644 --- a/functions-and-operators/encryption-and-compression-functions.md +++ b/functions-and-operators/encryption-and-compression-functions.md @@ -6,7 +6,7 @@ aliases: ['/docs/dev/functions-and-operators/encryption-and-compression-function # Encryption and Compression Functions -TiDB supports most of the [encryption and compression functions](https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html) available in MySQL 5.7. +TiDB supports most of the [encryption and compression functions](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html) available in MySQL 8.0. ## Supported functions @@ -27,9 +27,15 @@ TiDB supports most of the [encryption and compression functions](https://dev.mys ## Related system variables -The `block_encryption_mode` variable sets the encryption mode that is used for `AES_ENCRYPT()` and `AES_DECRYPT()`. +The [`block_encryption_mode`](/system-variables.md#block_encryption_mode) variable sets the encryption mode that is used for `AES_ENCRYPT()` and `AES_DECRYPT()`. + +The [`validate_password.*`](/system-variables.md) variables affect the `VALIDATE_PASSWORD_STRENGTH()` function. ## Unsupported functions * `DES_DECRYPT()`, `DES_ENCRYPT()`, `OLD_PASSWORD()`, `ENCRYPT()`: these functions were deprecated in MySQL 5.7 and removed in 8.0. * Functions only available in MySQL Enterprise [Issue #2632](https://github.com/pingcap/tidb/issues/2632). + +## MySQL compatibility + +* TiDB does not support the `STATEMENT_DIGEST()` and `STATEMENT_DIGEST_TEXT()` functions. diff --git a/functions-and-operators/information-functions.md b/functions-and-operators/information-functions.md index 2f88e11d70972..eb9484cce28cc 100644 --- a/functions-and-operators/information-functions.md +++ b/functions-and-operators/information-functions.md @@ -6,24 +6,305 @@ aliases: ['/docs/dev/functions-and-operators/information-functions/','/docs/dev/ # Information Functions -TiDB supports most of the [information functions](https://dev.mysql.com/doc/refman/5.7/en/information-functions.html) available in MySQL 5.7. +TiDB supports most of the [information functions](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html) available in MySQL 8.0. ## TiDB supported MySQL functions | Name | Description | |:-----|:------------| -| [`BENCHMARK()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_benchmark) | Execute an expression in a loop | -| [`CONNECTION_ID()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_connection-id) | Return the connection ID (thread ID) for the connection | -| [`CURRENT_USER()`, `CURRENT_USER`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_current-user) | Return the authenticated user name and host name | -| [`DATABASE()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_database) | Return the default (current) database name | -| [`FOUND_ROWS()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows) | For a `SELECT` with a `LIMIT` clause, the number of the rows that are returned if there is no `LIMIT` clause | -| [`LAST_INSERT_ID()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_last-insert-id) | Return the value of the `AUTOINCREMENT` column for the last `INSERT` | -| [`ROW_COUNT()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_row-count) | The number of rows affected | -| [`SCHEMA()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_schema) | Synonym for `DATABASE()` | -| [`SESSION_USER()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_session-user) | Synonym for `USER()` | -| [`SYSTEM_USER()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_system-user) | Synonym for `USER()` | -| [`USER()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_user) | Return the user name and host name provided by the client | -| [`VERSION()`](https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_version) | Return a string that indicates the MySQL server version | +| [`BENCHMARK()`](#benchmark) | Execute an expression in a loop | +| [`CONNECTION_ID()`](#connection_id) | Return the connection ID (thread ID) for the connection | +| [`CURRENT_ROLE()`](#current_role) | Return the role that is in use by the connection | +| [`CURRENT_USER()`, `CURRENT_USER`](#current_user) | Return the authenticated user name and host name | +| [`DATABASE()`](#database) | Return the default (current) database name | +| [`FOUND_ROWS()`](#found_rows) | For a `SELECT` with a `LIMIT` clause, the number of the rows that are returned if there is no `LIMIT` clause | +| [`LAST_INSERT_ID()`](#last_insert_id) | Return the value of the `AUTOINCREMENT` column for the last `INSERT` | +| [`ROW_COUNT()`](#row_count) | The number of rows affected | +| [`SCHEMA()`](#schema) | Synonym for `DATABASE()` | +| [`SESSION_USER()`](#session_user) | Synonym for `USER()` | +| [`SYSTEM_USER()`](#system_user) | Synonym for `USER()` | +| [`USER()`](#user) | Return the user name and host name provided by the client | +| [`VERSION()`](#version) | Return a string that indicates the MySQL server version | + +### BENCHMARK() + +The `BENCHMARK()` function executes the given expression a specified number of times. + +Syntax: + +```sql +BENCHMARK(count, expression) +``` + +- `count`: the number of times the expression to be executed. +- `expression`: the expression to be executed repeatedly. + +Example: + +```sql +SELECT BENCHMARK(5, SLEEP(2)); +``` + +``` ++------------------------+ +| BENCHMARK(5, SLEEP(2)) | ++------------------------+ +| 0 | ++------------------------+ +1 row in set (10.00 sec) +``` + +### CONNECTION_ID() + + + +The `CONNECTION_ID()` function returns the ID of the connection. Based on the value of the [`enable-32bits-connection-id`](/tidb-configuration-file.md#enable-32bits-connection-id-new-in-v730) configuration item for TiDB, this function returns a 32-bit or 64-bit connection ID. + +If [`enable-global-kill`](/tidb-configuration-file.md#enable-global-kill-new-in-v610) is enabled, the connection ID can be used to kill queries across multiple TiDB instances of the same cluster. + + + + + +The `CONNECTION_ID()` function returns the ID of the connection. Based on the value of the [`enable-32bits-connection-id`](https://docs.pingcap.com/tidb/stable/tidb-configuration-file#enable-32bits-connection-id-new-in-v730) configuration item for TiDB, this function returns a 32-bit or 64-bit connection ID. + +If [`enable-global-kill`](https://docs.pingcap.com/tidb/stable/tidb-configuration-file#enable-global-kill-new-in-v610) is enabled, the connection ID can be used to kill queries across multiple TiDB instances of the same cluster. + + + +```sql +SELECT CONNECTION_ID(); +``` + +``` ++-----------------+ +| CONNECTION_ID() | ++-----------------+ +| 322961414 | ++-----------------+ +1 row in set (0.00 sec) +``` + +### CURRENT_ROLE() + + + +The `CURRENT_ROLE()` function returns the current [role](/role-based-access-control.md) for the current session. + + + + + +The `CURRENT_ROLE()` function returns the current [role](https://docs.pingcap.com/tidb/stable/role-based-access-control) for the current session. + + + +```sql +SELECT CURRENT_ROLE(); +``` + +``` ++----------------+ +| CURRENT_ROLE() | ++----------------+ +| NONE | ++----------------+ +1 row in set (0.00 sec) +``` + +### CURRENT_USER() + +The `CURRENT_USER()` function returns the account that is used in the current session. + +```sql +SELECT CURRENT_USER(); +``` + +``` ++----------------+ +| CURRENT_USER() | ++----------------+ +| root@% | ++----------------+ +1 row in set (0.00 sec) +``` + +### DATABASE() + +The `DATABASE()` function returns the database schema that the current session is using. + +```sql +SELECT DATABASE(); +``` + +``` ++------------+ +| DATABASE() | ++------------+ +| test | ++------------+ +1 row in set (0.00 sec) +``` + +### FOUND_ROWS() + +The `FOUND_ROWS()` function returns the number of rows in the result set of the last executed `SELECT` statement. + +```sql +SELECT 1 UNION ALL SELECT 2; +``` + +``` ++------+ +| 1 | ++------+ +| 2 | +| 1 | ++------+ +2 rows in set (0.01 sec) +``` + +```sql +SELECT FOUND_ROWS(); +``` + +``` ++--------------+ +| FOUND_ROWS() | ++--------------+ +| 2 | ++--------------+ +1 row in set (0.00 sec) +``` + +> **Note:** +> +> The `SQL_CALC_FOUND_ROWS` query modifier, which calculates the total number of rows in a result set without considering the `LIMIT` clause, is only accepted if [`tidb_enable_noop_functions`](/system-variables.md#tidb_enable_noop_functions-new-in-v40) is enabled. This query modifier is deprecated starting from MySQL 8.0.17. It is recommended to use `COUNT(*)` instead. + +### LAST_INSERT_ID() + +The `LAST_INSERT_ID()` function returns the ID of the last inserted row in a table that contains an [`AUTO_INCREMENT`](/auto-increment.md) or [`AUTO_RANDOM`](/auto-random.md) column. + +```sql +CREATE TABLE t1(id SERIAL); +Query OK, 0 rows affected (0.17 sec) + +INSERT INTO t1() VALUES(); +Query OK, 1 row affected (0.03 sec) + +INSERT INTO t1() VALUES(); +Query OK, 1 row affected (0.00 sec) + +SELECT LAST_INSERT_ID(); ++------------------+ +| LAST_INSERT_ID() | ++------------------+ +| 3 | ++------------------+ +1 row in set (0.00 sec) + +TABLE t1; ++----+ +| id | ++----+ +| 1 | +| 3 | ++----+ +2 rows in set (0.00 sec) +``` + +> **Note** +> +> - In TiDB, [`AUTO_ID_CACHE`](/auto-increment.md#auto_id_cache) might lead to results that differ from those returned by MySQL. This discrepancy arises because TiDB caches IDs on each node, potentially leading to IDs that are out of order or have gaps. If maintaining strict ID ordering is essential for your application, you can enable [MySQL compatible mode](/auto-increment.md#mysql-compatibility-mode). +> +> - In the preceding example, IDs increase by 2 while MySQL would generate IDs incrementing by 1 in the same scenario. For more compatibility information, see [Auto-increment ID](/mysql-compatibility.md#auto-increment-id). + +### ROW_COUNT() + +The `ROW_COUNT()` function returns the number of affected rows. + +```sql +CREATE TABLE t1(id BIGINT UNSIGNED PRIMARY KEY AUTO_RANDOM); +Query OK, 0 rows affected, 1 warning (0.16 sec) + +INSERT INTO t1() VALUES (),(),(); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +SELECT ROW_COUNT(); ++-------------+ +| ROW_COUNT() | ++-------------+ +| 3 | ++-------------+ +1 row in set (0.00 sec) +``` + +### SCHEMA() + +The `SCHEMA()` function is a synonym for [`DATABASE()`](#database). + +### SESSION_USER() + +The `SESSION_USER()` function is a synonym for [`USER()`](#user). + +### SYSTEM_USER() + +The `SYSTEM_USER()` function is a synonym for [`USER()`](#user). + +### USER() + +The `USER()` function returns the user of the current connection. This might differ slightly from the output of `CURRENT_USER()`, as `USER()` displays the actual IP address instead of a wildcard. + +```sql +SELECT USER(), CURRENT_USER(); +``` + +``` ++----------------+----------------+ +| USER() | CURRENT_USER() | ++----------------+----------------+ +| root@127.0.0.1 | root@% | ++----------------+----------------+ +1 row in set (0.00 sec) +``` + +### VERSION() + +The `VERSION()` function returns the TiDB version in a format that is compatible with MySQL. To get a more detailed result, you can use the [`TIDB_VERSION()`](/functions-and-operators/tidb-functions.md#tidb_version) function. + +```sql +SELECT VERSION(); ++--------------------+ +| VERSION() | ++--------------------+ +| 8.0.11-TiDB-v7.5.1 | ++--------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT TIDB_VERSION()\G +*************************** 1. row *************************** +TIDB_VERSION(): Release Version: v7.5.1 +Edition: Community +Git Commit Hash: 7d16cc79e81bbf573124df3fd9351c26963f3e70 +Git Branch: heads/refs/tags/v7.5.1 +UTC Build Time: 2024-02-27 14:28:32 +GoVersion: go1.21.6 +Race Enabled: false +Check Table Before Drop: false +Store: tikv +1 row in set (0.00 sec) +``` + +The preceding example is from TiDB v7.5.1, which identifies itself as MySQL 8.0.11. + + + +If you want to change the returned version, you can modify the [`server-version`](/tidb-configuration-file.md#server-version) configuration item. + + ## TiDB specific functions @@ -38,3 +319,5 @@ The following function is only supported by TiDB, and there is no equivalent fun * `CHARSET()` * `COERCIBILITY()` * `COLLATION()` +* `ICU_VERSION()` +* `ROLES_GRAPHML()` diff --git a/functions-and-operators/json-functions.md b/functions-and-operators/json-functions.md index 6763335887590..5f53cf940ef1e 100644 --- a/functions-and-operators/json-functions.md +++ b/functions-and-operators/json-functions.md @@ -6,7 +6,7 @@ aliases: ['/docs/dev/functions-and-operators/json-functions/','/docs/dev/referen # JSON Functions -TiDB supports most of the JSON functions that shipped with the GA release of MySQL 5.7. +TiDB supports most of the [JSON functions](https://dev.mysql.com/doc/refman/8.0/en/json-functions.html) available in MySQL 8.0. ## Functions that create JSON values @@ -35,18 +35,16 @@ TiDB supports most of the JSON functions that shipped with the GA release of MyS | Function Name | Description | | --------------------------------- | ----------- | | [JSON_APPEND(json_doc, path, value)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-append) | An alias to `JSON_ARRAY_APPEND` | -| [JSON_ARRAY_APPEND(json_doc, path, value)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-append) | Appends a value to the end of a JSON array at a specified path | -| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-insert) | Inserts an array into the json document and returns the modified document | +| [JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-append) | Appends values to the end of the indicated arrays within a JSON document and returns the result | +| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-insert) | Insert values into the specified locations of a JSON document and returns the result | | [JSON_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-insert) | Inserts data into a JSON document and returns the result | -| [JSON_MERGE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-merge) | A deprecated alias for `JSON_MERGE_PRESERVE` | | [JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-merge-patch) | Merge JSON documents | | [JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-merge-preserve) | Merges two or more JSON documents and returns the merged result | +| [JSON_MERGE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-merge) | A deprecated alias for `JSON_MERGE_PRESERVE` | | [JSON_REMOVE(json_doc, path[, path] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-remove) | Removes data from a JSON document and returns the result | | [JSON_REPLACE(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-replace) | Replaces existing values in a JSON document and returns the result | | [JSON_SET(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-set) | Inserts or updates data in a JSON document and returns the result | | [JSON_UNQUOTE(json_val)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-unquote) | Unquotes a JSON value and returns the result as a string | -| [JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-append) | Appends values to the end of the indicated arrays within a JSON document and returns the result | -| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html#function_json-array-insert) | Insert values into the specified location of a JSON document and returns the result | ## Functions that return JSON value attributes @@ -76,3 +74,12 @@ TiDB supports most of the JSON functions that shipped with the GA release of MyS * [JSON Function Reference](https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html) * [JSON Data Type](/data-type-json.md) + +## Unsupported functions + +- `JSON_SCHEMA_VALID()` +- `JSON_SCHEMA_VALIDATION_REPORT()` +- `JSON_TABLE()` +- `JSON_VALUE()` + +For more information, see [#14486](https://github.com/pingcap/tidb/issues/14486). \ No newline at end of file diff --git a/functions-and-operators/locking-functions.md b/functions-and-operators/locking-functions.md index a9829511825d4..08a261cfa241c 100644 --- a/functions-and-operators/locking-functions.md +++ b/functions-and-operators/locking-functions.md @@ -5,7 +5,7 @@ summary: Learn about user-level locking functions in TiDB. # Locking Functions -TiDB supports most of the user-level [locking functions](https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html) available in MySQL 5.7. +TiDB supports most of the user-level [locking functions](https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html) available in MySQL 8.0. ## Supported functions @@ -20,6 +20,6 @@ TiDB supports most of the user-level [locking functions](https://dev.mysql.com/d ## MySQL compatibility * The minimum timeout permitted by TiDB is 1 second, and the maximum timeout is 1 hour (3600 seconds). This differs from MySQL, where both 0 second and unlimited timeouts (`timeout=-1`) are permitted. TiDB will automatically convert out-of-range values to the nearest permitted value and convert `timeout=-1` to 3600 seconds. -* TiDB does not automatically detect deadlocks caused by user-level locks. Deadlocked sessions will timeout after a maximum of 1 hour, but can also be manually resolved by using `KILL` on one of the affected sessions. You can also prevent deadlocks by always acquiring user-level locks in the same order. +* TiDB does not automatically detect deadlocks caused by user-level locks. Deadlocked sessions will timeout after a maximum of 1 hour, but can also be manually resolved by using [`KILL`](/sql-statements/sql-statement-kill.md) on one of the affected sessions. You can also prevent deadlocks by always acquiring user-level locks in the same order. * Locks take effect on all TiDB servers in the cluster. This differs from MySQL Cluster and Group Replication where locks are local to a single server. * `IS_USED_LOCK()` returns `1` if it is called from another session and is unable to return the ID of the process that is holding the lock. diff --git a/functions-and-operators/miscellaneous-functions.md b/functions-and-operators/miscellaneous-functions.md index e0f3e73f0d9b4..c50284089cee2 100644 --- a/functions-and-operators/miscellaneous-functions.md +++ b/functions-and-operators/miscellaneous-functions.md @@ -6,32 +6,415 @@ aliases: ['/docs/dev/functions-and-operators/miscellaneous-functions/','/docs/de # Miscellaneous Functions -TiDB supports most of the [miscellaneous functions](https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html) available in MySQL 5.7. +TiDB supports most of the [miscellaneous functions](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html) available in MySQL 8.0. ## Supported functions | Name | Description | |:------------|:-----------------------------------------------------------------------------------------------| -| [`ANY_VALUE()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_any-value) | Suppress `ONLY_FULL_GROUP_BY` value rejection | -| [`BIN_TO_UUID()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_bin-to-uuid) | Convert UUID from binary format to text format | -| [`DEFAULT()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_default) | Returns the default value for a table column | -| [`INET_ATON()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet-aton) | Return the numeric value of an IP address | -| [`INET_NTOA()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet-ntoa) | Return the IP address from a numeric value | -| [`INET6_ATON()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet6-aton) | Return the numeric value of an IPv6 address | -| [`INET6_NTOA()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet6-ntoa) | Return the IPv6 address from a numeric value | -| [`IS_IPV4()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_is-ipv4) | Whether argument is an IPv4 address | -| [`IS_IPV4_COMPAT()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_is-ipv4-compat) | Whether argument is an IPv4-compatible address | -| [`IS_IPV4_MAPPED()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_is-ipv4-mapped) | Whether argument is an IPv4-mapped address | -| [`IS_IPV6()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_is-ipv6) | Whether argument is an IPv6 address | -| [`NAME_CONST()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_name-const) | Can be used to rename a column name | -| [`SLEEP()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_sleep) | Sleep for a number of seconds. Note that for [TiDB Serverless](https://docs.pingcap.com/tidbcloud/select-cluster-tier#tidb-serverless) clusters, the `SLEEP()` function has a limitation wherein it can only support a maximum sleep time of 300 seconds. | -| [`UUID()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid) | Return a Universal Unique Identifier (UUID) | -| [`UUID_TO_BIN()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin) | Convert UUID from text format to binary format | -| [`VALUES()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_values) | Defines the values to be used during an INSERT | +| [`ANY_VALUE()`](#any_value) | Suppress `ONLY_FULL_GROUP_BY` value rejection | +| [`BIN_TO_UUID()`](#bin_to_uuid) | Convert UUID from binary format to text format | +| [`DEFAULT()`](#default) | Returns the default value for a table column | +| [`GROUPING()`](#grouping) | Modifier for `GROUP BY` operations | +| [`INET_ATON()`](#inet_aton) | Return the numeric value of an IP address | +| [`INET_NTOA()`](#inet_ntoa) | Return the IP address from a numeric value | +| [`INET6_ATON()`](#inet6_aton) | Return the numeric value of an IPv6 address | +| [`INET6_NTOA()`](#inet6_ntoa) | Return the IPv6 address from a numeric value | +| [`IS_IPV4()`](#is_ipv4) | Whether argument is an IPv4 address | +| [`IS_IPV4_COMPAT()`](#is_ipv4_compat) | Whether argument is an IPv4-compatible address | +| [`IS_IPV4_MAPPED()`](#is_ipv4_mapped) | Whether argument is an IPv4-mapped address | +| [`IS_IPV6()`](#is_ipv6) | Whether argument is an IPv6 address | +| [`IS_UUID()`](#is_uuid) | Whether argument is an UUID | +| [`NAME_CONST()`](#name_const) | Can be used to rename a column name | +| [`SLEEP()`](#sleep) | Sleep for a number of seconds. Note that for [TiDB Serverless](https://docs.pingcap.com/tidbcloud/select-cluster-tier#tidb-serverless) clusters, the `SLEEP()` function has a limitation wherein it can only support a maximum sleep time of 300 seconds. | +| [`UUID()`](#uuid) | Return a Universal Unique Identifier (UUID) | +| [`UUID_TO_BIN()`](#uuid_to_bin) | Convert UUID from text format to binary format | +| [`VALUES()`](#values) | Defines the values to be used during an INSERT | + +### ANY_VALUE() + +The `ANY_VALUE()` function returns any value from a group of values. Typically, it is used in scenarios where you need to include non-aggregated columns in your `SELECT` statement along with a `GROUP BY` clause. + +```sql +CREATE TABLE fruits (id INT PRIMARY KEY, name VARCHAR(255)); +Query OK, 0 rows affected (0.14 sec) + +INSERT INTO fruits VALUES (1,'apple'),(2,'apple'),(3,'pear'),(4,'banana'),(5, 'pineapple'); +Query OK, 5 rows affected (0.01 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +SELECT id,name FROM fruits GROUP BY name; +ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.fruits.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by + +SELECT ANY_VALUE(id),GROUP_CONCAT(id),name FROM fruits GROUP BY name; ++---------------+------------------+-----------+ +| ANY_VALUE(id) | GROUP_CONCAT(id) | name | ++---------------+------------------+-----------+ +| 1 | 1,2 | apple | +| 3 | 3 | pear | +| 4 | 4 | banana | +| 5 | 5 | pineapple | ++---------------+------------------+-----------+ +4 rows in set (0.00 sec) +``` + +In the preceding example, TiDB returns an error for the first `SELECT` statement because the `id` column is non-aggregated and not included in the `GROUP BY` clause. To address the issue, the second `SELECT` query uses `ANY_VALUE()` to get any value from each group and uses `GROUP_CONCAT()` to concatenate all values of the `id` column within each group into a single string. This approach enables you to get one value from each group and all values of the group without changing the SQL mode for non-aggregated columns. + +### BIN_TO_UUID() + +`BIN_TO_UUID()` and `UUID_TO_BIN()` can be used to convert between a textual format UUID and a binary format. Both functions accept two arguments. + +- The first argument specifies the value to be converted. +- The second argument (optional) controls the ordering of the fields in the binary format. + +```sql +SET @a := UUID(); +Query OK, 0 rows affected (0.00 sec) + +SELECT @a; ++--------------------------------------+ +| @a | ++--------------------------------------+ +| 9a17b457-eb6d-11ee-bacf-5405db7aad56 | ++--------------------------------------+ +1 row in set (0.00 sec) + +SELECT UUID_TO_BIN(@a); ++------------------------------------+ +| UUID_TO_BIN(@a) | ++------------------------------------+ +| 0x9A17B457EB6D11EEBACF5405DB7AAD56 | ++------------------------------------+ +1 row in set (0.00 sec) + +SELECT BIN_TO_UUID(0x9A17B457EB6D11EEBACF5405DB7AAD56); ++-------------------------------------------------+ +| BIN_TO_UUID(0x9A17B457EB6D11EEBACF5405DB7AAD56) | ++-------------------------------------------------+ +| 9a17b457-eb6d-11ee-bacf-5405db7aad56 | ++-------------------------------------------------+ +1 row in set (0.00 sec) + +SELECT UUID_TO_BIN(@a, 1); ++----------------------------------------+ +| UUID_TO_BIN(@a, 1) | ++----------------------------------------+ +| 0x11EEEB6D9A17B457BACF5405DB7AAD56 | ++----------------------------------------+ +1 row in set (0.00 sec) + +SELECT BIN_TO_UUID(0x11EEEB6D9A17B457BACF5405DB7AAD56, 1); ++----------------------------------------------------+ +| BIN_TO_UUID(0x11EEEB6D9A17B457BACF5405DB7AAD56, 1) | ++----------------------------------------------------+ +| 9a17b457-eb6d-11ee-bacf-5405db7aad56 | ++----------------------------------------------------+ +1 row in set (0.00 sec) +``` + +See also [UUID()](#uuid) and [Best practices for UUID](/best-practices/uuid.md). + +### DEFAULT() + +The `DEFAULT()` function is used to get the default value of a column. + +```sql +CREATE TABLE t1 (id INT PRIMARY KEY, c1 INT DEFAULT 5); +Query OK, 0 rows affected (0.15 sec) + +INSERT INTO t1 VALUES (1, 1); +Query OK, 1 row affected (0.01 sec) + +UPDATE t1 SET c1=DEFAULT(c1)+3; +Query OK, 1 row affected (0.02 sec) +Rows matched: 1 Changed: 1 Warnings: 0 + +TABLE t1; ++----+------+ +| id | c1 | ++----+------+ +| 1 | 8 | ++----+------+ +1 row in set (0.00 sec) +``` + +In the preceding example, the `UPDATE` statement sets the value of the `c1` column to the default value of the column (which is `5`) plus `3`, resulting in a new value of `8`. + +### GROUPING() + +See [`GROUP BY` modifiers](/functions-and-operators/group-by-modifier.md). + +### INET_ATON() + +The `INET_ATON()` function converts an IPv4 address in dotted-quad notation into a binary version that can be stored efficiently. + +```sql +SELECT INET_ATON('127.0.0.1'); +``` + +``` ++------------------------+ +| INET_ATON('127.0.0.1') | ++------------------------+ +| 2130706433 | ++------------------------+ +1 row in set (0.00 sec) +``` + +### INET_NTOA() + +The `INET_NTOA()` function converts a binary IPv4 address into a dotted-quad notation. + +```sql +SELECT INET_NTOA(2130706433); +``` + +``` ++-----------------------+ +| INET_NTOA(2130706433) | ++-----------------------+ +| 127.0.0.1 | ++-----------------------+ +1 row in set (0.00 sec) +``` + +### INET6_ATON() + +The `INET6_ATON()` function is similar to [`INET_ATON()`](#inet_aton), but `INET6_ATON()` can also handle IPv6 addresses. + +```sql +SELECT INET6_ATON('::1'); +``` + +``` ++--------------------------------------+ +| INET6_ATON('::1') | ++--------------------------------------+ +| 0x00000000000000000000000000000001 | ++--------------------------------------+ +1 row in set (0.00 sec) +``` + +### INET6_NTOA() + +The `INET6_NTOA()` function is similar to [`INET_NTOA()`](#inet_ntoa), but `INET6_NTOA()` can also handle IPv6 addresses. + +```sql +SELECT INET6_NTOA(0x00000000000000000000000000000001); +``` + +``` ++------------------------------------------------+ +| INET6_NTOA(0x00000000000000000000000000000001) | ++------------------------------------------------+ +| ::1 | ++------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### IS_IPV4() + +The `IS_IPV4()` function tests whether the given argument is an IPv4 address or not. + +```sql +SELECT IS_IPV4('127.0.0.1'); +``` + +``` ++----------------------+ +| IS_IPV4('127.0.0.1') | ++----------------------+ +| 1 | ++----------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT IS_IPV4('300.0.0.1'); +``` + +``` ++----------------------+ +| IS_IPV4('300.0.0.1') | ++----------------------+ +| 0 | ++----------------------+ +1 row in set (0.00 sec) +``` + +### IS_IPV4_COMPAT() + +The `IS_IPV4_COMPAT()` function tests whether the given argument is an IPv4-compatible address. + +```sql +SELECT IS_IPV4_COMPAT(INET6_ATON('::127.0.0.1')); +``` + +``` ++-------------------------------------------+ +| IS_IPV4_COMPAT(INET6_ATON('::127.0.0.1')) | ++-------------------------------------------+ +| 1 | ++-------------------------------------------+ +1 row in set (0.00 sec) +``` + +### IS_IPV4_MAPPED() + +The `IS_IPV4_MAPPED()` function tests whether the given argument is an IPv4-mapped address. + +```sql +SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:127.0.0.1')); +``` + +``` ++------------------------------------------------+ +| IS_IPV4_MAPPED(INET6_ATON('::ffff:127.0.0.1')) | ++------------------------------------------------+ +| 1 | ++------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### IS_IPV6() + +The `IS_IPV6()` function tests whether the given argument is an IPv6 address. + +```sql +SELECT IS_IPV6('::1'); +``` + +``` ++----------------+ +| IS_IPV6('::1') | ++----------------+ +| 1 | ++----------------+ +1 row in set (0.00 sec) +``` + +### IS_UUID() + +The `IS_UUID()` function tests whether the given argument is a [UUID](/best-practices/uuid.md). + +```sql +SELECT IS_UUID('eb48c08c-eb71-11ee-bacf-5405db7aad56'); +``` + +``` ++-------------------------------------------------+ +| IS_UUID('eb48c08c-eb71-11ee-bacf-5405db7aad56') | ++-------------------------------------------------+ +| 1 | ++-------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### NAME_CONST() + +The `NAME_CONST()` function is used to name columns. It is recommended to use column aliases instead. + +```sql +SELECT NAME_CONST('column name', 'value') UNION ALL SELECT 'another value'; +``` + +``` ++---------------+ +| column name | ++---------------+ +| another value | +| value | ++---------------+ +2 rows in set (0.00 sec) +``` + +The preceding statement uses `NAME_CONST()` and the following statement uses the recommended way of aliasing columns. + +```sql +SELECT 'value' AS 'column name' UNION ALL SELECT 'another value'; +``` + +``` ++---------------+ +| column name | ++---------------+ +| value | +| another value | ++---------------+ +2 rows in set (0.00 sec) +``` + +### SLEEP() + +The `SLEEP()` function is used to pause the execution of queries for a specified number of seconds. + +```sql +SELECT SLEEP(1.5); +``` + +``` ++------------+ +| SLEEP(1.5) | ++------------+ +| 0 | ++------------+ +1 row in set (1.50 sec) +``` + +### UUID() + +The `UUID()` function returns a universally unique identifier (UUID) version 1 as defined in [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122). + +```sql +SELECT UUID(); +``` + +``` ++--------------------------------------+ +| UUID() | ++--------------------------------------+ +| cb4d5ae6-eb6b-11ee-bacf-5405db7aad56 | ++--------------------------------------+ +1 row in set (0.00 sec) +``` + +See also [Best practices for UUID](/best-practices/uuid.md). + +### UUID_TO_BIN + +See [BIN_TO_UUID()](#bin_to_uuid). + +### VALUES() + +The `VALUES(col_name)` function is used to reference the value of a specific column in the `ON DUPLICATE KEY UPDATE` clause of an [`INSERT`](/sql-statements/sql-statement-insert.md) statement. + +```sql +CREATE TABLE t1 (id INT PRIMARY KEY, c1 INT); +Query OK, 0 rows affected (0.17 sec) + +INSERT INTO t1 VALUES (1,51),(2,52),(3,53),(4,54),(5,55); +Query OK, 5 rows affected (0.01 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +INSERT INTO t1 VALUES(2,22),(4,44) ON DUPLICATE KEY UPDATE c1=VALUES(id)+100; +Query OK, 4 rows affected (0.01 sec) +Records: 2 Duplicates: 2 Warnings: 0 + +TABLE t1; ++----+------+ +| id | c1 | ++----+------+ +| 1 | 51 | +| 2 | 102 | +| 3 | 53 | +| 4 | 104 | +| 5 | 55 | ++----+------+ +5 rows in set (0.00 sec) +``` ## Unsupported functions | Name | Description | |:------------|:-----------------------------------------------------------------------------------------------| -| [`UUID_SHORT()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-short) | Provides a UUID that is unique given certain assumptions not present in TiDB [TiDB #4620](https://github.com/pingcap/tidb/issues/4620) | -| [`MASTER_WAIT_POS()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_master-pos-wait) | Relates to MySQL replication | +| [`UUID_SHORT()`](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-short) | Provides a UUID that is unique given certain assumptions not present in TiDB [TiDB #4620](https://github.com/pingcap/tidb/issues/4620) | \ No newline at end of file diff --git a/functions-and-operators/numeric-functions-and-operators.md b/functions-and-operators/numeric-functions-and-operators.md index ab228e0f1ea40..cf0b088ab1434 100644 --- a/functions-and-operators/numeric-functions-and-operators.md +++ b/functions-and-operators/numeric-functions-and-operators.md @@ -6,11 +6,11 @@ aliases: ['/docs/dev/functions-and-operators/numeric-functions-and-operators/',' # Numeric Functions and Operators -TiDB supports all of the [numeric functions and operators](https://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html) available in MySQL 5.7. +TiDB supports all of the [numeric functions and operators](https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html) available in MySQL 8.0. ## Arithmetic operators -| Name | Description | +| Name | Description | |:----------------------------------------------------------------------------------------------|:----------------------------------| | [`+`](https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html#operator_plus) | Addition operator | | [`-`](https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html#operator_minus) | Minus operator | @@ -24,33 +24,37 @@ TiDB supports all of the [numeric functions and operators](https://dev.mysql.com | Name | Description | |:----------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------| -| [`POW()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_pow) | Return the argument raised to the specified power | -| [`POWER()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_power) | Return the argument raised to the specified power | +| [`ABS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_abs) | Return the absolute value | +| [`ACOS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_acos) | Return the arc cosine | +| [`ASIN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_asin) | Return the arc sine | +| [`ATAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_atan) | Return the arc tangent | +| [`ATAN2(), ATAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_atan2) | Return the arc tangent of the two arguments | +| [`CEIL()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_ceil) | Return the smallest integer value not less than the argument | +| [`CEILING()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_ceiling) | Return the smallest integer value not less than the argument | +| [`CONV()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_conv) | Convert numbers between different number bases | +| [`COS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_cos) | Return the cosine | +| [`COT()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_cot) | Return the cotangent | +| [`CRC32()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_crc32) | Compute a cyclic redundancy check value | +| [`DEGREES()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_degrees) | Convert radians to degrees | | [`EXP()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_exp) | Raise to the power of | -| [`SQRT()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sqrt) | Return the square root of the argument | +| [`FLOOR()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_floor) | Return the largest integer value not greater than the argument | | [`LN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_ln) | Return the natural logarithm of the argument | | [`LOG()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_log) | Return the natural logarithm of the first argument | -| [`LOG2()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_log2) | Return the base-2 logarithm of the argument | | [`LOG10()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_log10) | Return the base-10 logarithm of the argument | +| [`LOG2()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_log2) | Return the base-2 logarithm of the argument | +| [`MOD()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_mod) | Return the remainder | | [`PI()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_pi) | Return the value of pi | -| [`TAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_tan) | Return the tangent of the argument | -| [`COT()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_cot) | Return the cotangent | -| [`SIN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sin) | Return the sine of the argument | -| [`COS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_cos) | Return the cosine | -| [`ATAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_atan) | Return the arc tangent | -| [`ATAN2(), ATAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_atan2) | Return the arc tangent of the two arguments | -| [`ASIN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_asin) | Return the arc sine | -| [`ACOS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_acos) | Return the arc cosine | +| [`POW()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_pow) | Return the argument raised to the specified power | +| [`POWER()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_power) | Return the argument raised to the specified power | | [`RADIANS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_radians) | Return argument converted to radians | -| [`DEGREES()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_degrees) | Convert radians to degrees | -| [`MOD()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_mod) | Return the remainder | -| [`ABS()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_abs) | Return the absolute value | -| [`CEIL()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_ceil) | Return the smallest integer value not less than the argument | -| [`CEILING()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_ceiling) | Return the smallest integer value not less than the argument | -| [`FLOOR()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_floor) | Return the largest integer value not greater than the argument | -| [`ROUND()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_round) | Round the argument | | [`RAND()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_rand) | Return a random floating-point value | +| [`ROUND()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_round) | Round the argument | | [`SIGN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sign) | Return the sign of the argument | -| [`CONV()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_conv) | Convert numbers between different number bases | +| [`SIN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sin) | Return the sine of the argument | +| [`SQRT()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sqrt) | Return the square root of the argument | +| [`TAN()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_tan) | Return the tangent of the argument | | [`TRUNCATE()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate) | Truncate to specified number of decimal places | -| [`CRC32()`](https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_crc32) | Compute a cyclic redundancy check value | + +## Related system variables + +[`div_precision_increment`](/system-variables.md#div_precision_increment-new-in-v800) is used to set the precision for the `/` operator. \ No newline at end of file diff --git a/functions-and-operators/precision-math.md b/functions-and-operators/precision-math.md index fca0983e8ab41..e3916a1b75b92 100644 --- a/functions-and-operators/precision-math.md +++ b/functions-and-operators/precision-math.md @@ -51,7 +51,7 @@ DECIMAL columns do not store a leading `+` character or `-` character or leading DECIMAL columns do not permit values larger than the range implied by the column definition. For example, a `DECIMAL(3,0)` column supports a range of `-999` to `999`. A `DECIMAL(M,D)` column permits at most `M - D` digits to the left of the decimal point. -For more information about the internal format of the DECIMAL values, see [`mydecimal.go`](https://github.com/pingcap/tidb/blob/master/pkg/types/mydecimal.go) in TiDB souce code. +For more information about the internal format of the DECIMAL values, see [`mydecimal.go`](https://github.com/pingcap/tidb/blob/master/pkg/types/mydecimal.go) in TiDB source code. ## Expression handling diff --git a/functions-and-operators/sequence-functions.md b/functions-and-operators/sequence-functions.md new file mode 100644 index 0000000000000..bbf14b6b2e624 --- /dev/null +++ b/functions-and-operators/sequence-functions.md @@ -0,0 +1,18 @@ +--- +title: Sequence Functions +summary: This document introduces sequence functions supported in TiDB. +--- + +# Sequence Functions + +Sequence functions in TiDB are used to return or set values of sequence objects created using the [`CREATE SEQUENCE`](/sql-statements/sql-statement-create-sequence.md) statement. + +| Function name | Feature description | +| :-------------- | :------------------------------------- | +| `NEXTVAL()` or `NEXT VALUE FOR` | Returns the next value of a sequence | +| `SETVAL()` | Sets the current value of a sequence | +| `LASTVAL()` | Returns the last used value of a sequence | + +## MySQL compatibility + +MySQL does not support the functions and statements for creating and manipulating sequences as defined in [ISO/IEC 9075-2](https://www.iso.org/standard/76584.html). diff --git a/functions-and-operators/string-functions.md b/functions-and-operators/string-functions.md index d6c9f6bf1ad7b..746fb53c2b080 100644 --- a/functions-and-operators/string-functions.md +++ b/functions-and-operators/string-functions.md @@ -6,7 +6,7 @@ aliases: ['/docs/dev/functions-and-operators/string-functions/','/docs/dev/refer # String Functions -TiDB supports most of the [string functions](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html) available in MySQL 5.7, some of the [string functions](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html) available in MySQL 8.0, and some of the [functions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlqr/SQL-Functions.html#GUID-93EC62F8-415D-4A7E-B050-5D5B2C127009) available in Oracle 21. +TiDB supports most of the [string functions](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html) available in MySQL 8.0, and some of the [functions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlqr/SQL-Functions.html#GUID-93EC62F8-415D-4A7E-B050-5D5B2C127009) available in Oracle 21. @@ -134,7 +134,7 @@ SELECT CustomerName, BIT_LENGTH(CustomerName) AS BitLengthOfName FROM Customers; ### [`CHAR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char) -The `CHAR()` function is used to get the corresponding character of a specific ASCII value. It performs the opposite operation of `ASCII()`, which returns the ASCII value of a specific character. +The `CHAR()` function is used to get the corresponding character of a specific ASCII value. It performs the opposite operation of `ASCII()`, which returns the ASCII value of a specific character. If multiple arguments are supplied, the function works on all arguments and are then concaternated together. Examples: @@ -188,6 +188,19 @@ SELECT CHAR(50089); +--------------+ ``` +```sql +SELECT CHAR(65,66,67); +``` + +``` ++----------------+ +| CHAR(65,66,67) | ++----------------+ +| ABC | ++----------------+ +1 row in set (0.00 sec) +``` + ### [`CHAR_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char-length) The `CHAR_LENGTH()` function is used to get the total number of characters in a given argument as an integer. @@ -205,10 +218,10 @@ SELECT CHAR_LENGTH("TiDB") AS LengthOfString; ``` ```sql -SELECT CustomerName, CHAR_LENGTH(CustomerName) AS LenghtOfName FROM Customers; +SELECT CustomerName, CHAR_LENGTH(CustomerName) AS LengthOfName FROM Customers; +--------------------+--------------+ -| CustomerName | LenghtOfName | +| CustomerName | LengthOfName | +--------------------+--------------+ | Albert Einstein | 15 | | Robert Oppenheimer | 18 | @@ -223,7 +236,7 @@ SELECT CustomerName, CHAR_LENGTH(CustomerName) AS LenghtOfName FROM Customers; The `CHARACTER_LENGTH()` function is the same as the `CHAR_LENGTH()` function. Both functions can be used synonymously because they generate the same output. -## [`CONCAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat) +### [`CONCAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat) The `CONCAT()` function concatenates one or more arguments into a single string. @@ -406,20 +419,120 @@ Output: ### [`ELT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_elt) -Return string at index number. +The `ELT()` function returns the element at the index number. + +```sql +SELECT ELT(3, 'This', 'is', 'TiDB'); +``` + +```sql ++------------------------------+ +| ELT(3, 'This', 'is', 'TiDB') | ++------------------------------+ +| TiDB | ++------------------------------+ +1 row in set (0.00 sec) +``` + +The preceding example returns the third element, which is `'TiDB'`. ### [`EXPORT_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_export-set) -Return a string such that for every bit set in the value bits, you get an on string and for every unset bit, you get an off string. +The `EXPORT_SET()` function returns a string that consists of a specified number (`number_of_bits`) of `on`/`off` values, optionally separated by `separator`. These values are based on whether the corresponding bit in the `bits` argument is `1`, where the first value corresponds to the rightmost (lowest) bit of `bits`. + +Syntax: + +```sql +EXPORT_SET(bits, on, off, [separator[, number_of_bits]]) +``` + +- `bits`: an integer representing the bit value. +- `on`: the string to be returned if the corresponding bit is `1`. +- `off`: the string to be returned if the corresponding bit is `0`. +- `separator` (optional): the separator character in the result string. +- `number_of_bits` (optional): the number of bits to be processed. If it is not set, `64` (the max size of bits) is used by default, which means that `bits` is treated as an unsigned 64-bit integer. + +Examples: + +In the following example, `number_of_bits` is set to `5`, resulting in 5 values, separated by `|`. Because only 3 bits are given, the other bits are considered unset. Therefore, setting `number_of_bits` to either `101` or `00101` results in the same output. + +```sql +SELECT EXPORT_SET(b'101',"ON",'off','|',5); +``` + +```sql ++-------------------------------------+ +| EXPORT_SET(b'101',"ON",'off','|',5) | ++-------------------------------------+ +| ON|off|ON|off|off | ++-------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, `bits` is set to `00001111`, `on` is set to `x`, and `off` is set to `_`. This causes the function to return `____` for the `0` bits and `xxxx` for the `1` bits. Therefore, when processing with the bits in `00001111` from right to left, the function returns `xxxx____`. + +```sql +SELECT EXPORT_SET(b'00001111', 'x', '_', '', 8); +``` + +```sql ++------------------------------------------+ +| EXPORT_SET(b'00001111', 'x', '_', '', 8) | ++------------------------------------------+ +| xxxx____ | ++------------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, `bits` is set to `00001111`, `on` is set to `x`, and `off` is set to `_`. This causes the function to return `x` for each `1` bit and `_` for each `0` bit. Therefore, when processing with the bits in `01010101` from right to left, the function returns `x_x_x_x_`. + +```sql +SELECT EXPORT_SET(b'01010101', 'x', '_', '', 8); +``` + +```sql ++------------------------------------------+ +| EXPORT_SET(b'01010101', 'x', '_', '', 8) | ++------------------------------------------+ +| x_x_x_x_ | ++------------------------------------------+ +1 row in set (0.00 sec) +``` ### [`FIELD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field) -Return the index (position)of the first argument in the subsequent arguments. +Return the index (position) of the first argument in the subsequent arguments. + +In the following example, the first argument of `FIELD()` is `needle`, and it matches the second argument in the following list, so the function returns `2`. + +```sql +SELECT FIELD('needle', 'A', 'needle', 'in', 'a', 'haystack'); ++-------------------------------------------------------+ +| FIELD('needle', 'A', 'needle', 'in', 'a', 'haystack') | ++-------------------------------------------------------+ +| 2 | ++-------------------------------------------------------+ +1 row in set (0.00 sec) +``` ### [`FIND_IN_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set) Return the index position of the first argument within the second argument. +This function is often used with the [`SET`](/data-type-string.md#set-type) data type. + +In the following example, `Go` is the fourth element in the set `COBOL,BASIC,Rust,Go,Java,Fortran`, so the function returns `4`. + +```sql +SELECT FIND_IN_SET('Go', 'COBOL,BASIC,Rust,Go,Java,Fortran'); ++-------------------------------------------------------+ +| FIND_IN_SET('Go', 'COBOL,BASIC,Rust,Go,Java,Fortran') | ++-------------------------------------------------------+ +| 4 | ++-------------------------------------------------------+ +1 row in set (0.00 sec) +``` + ### [`FORMAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_format) The `FORMAT(X,D[,locale])` function is used to format the number `X` to a format similar to `"#,###,###. ##"`, rounded to `D` decimal places, and return the result as a string. @@ -1160,72 +1273,801 @@ SELECT LOWER(-012); ### [`LPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lpad) -Return the string argument, left-padded with the specified string. +The `LPAD(str, len, padstr)` function returns the string argument, left-padded with the specified string `padstr` to a length of `len` characters. + +- If `len` is less than the length of the string `str`, the function truncates the string `str` to the length of `len`. +- If `len` is a negative number, the function returns `NULL`. +- If any argument is `NULL`, the function returns `NULL`. + +Examples: + +```sql +SELECT LPAD('TiDB',8,'>'); ++--------------------+ +| LPAD('TiDB',8,'>') | ++--------------------+ +| >>>>TiDB | ++--------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT LPAD('TiDB',2,'>'); ++--------------------+ +| LPAD('TiDB',2,'>') | ++--------------------+ +| Ti | ++--------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT LPAD('TiDB',-2,'>'); ++---------------------+ +| LPAD('TiDB',-2,'>') | ++---------------------+ +| NULL | ++---------------------+ +1 row in set (0.00 sec) +``` ### [`LTRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ltrim) -Remove leading spaces. +The `LTRIM()` function removes leading spaces from a given string. + +If the argument is `NULL`, this function returns `NULL`. + +> **Note:** +> +> This function only removes the space character (U+0020) and does not remove other space-like characters such as tab (U+0009) or non-breaking space (U+00A0). + +Examples: + +In the following example, the `LTRIM()` function removes the leading spaces from `' hello'` and returns `hello`. + +```sql +SELECT LTRIM(' hello'); +``` + +``` ++--------------------+ +| LTRIM(' hello') | ++--------------------+ +| hello | ++--------------------+ +1 row in set (0.00 sec) +``` + +In the following example, [`CONCAT()`](#concat) is used to enclose the result of `LTRIM(' hello')` with `«` and `»`. This formatting makes it a bit easier to see that all leading spaces are removed. + +```sql +SELECT CONCAT('«',LTRIM(' hello'),'»'); +``` + +``` ++------------------------------------+ +| CONCAT('«',LTRIM(' hello'),'»') | ++------------------------------------+ +| «hello» | ++------------------------------------+ +1 row in set (0.00 sec) +``` ### [`MAKE_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_make-set) -Return a set of comma-separated strings that have the corresponding bit in bits set. +The `MAKE_SET()` function returns a set of comma-separated strings based on whether a corresponding bit in the `bits` argument is set to `1`. + +Syntax: + +```sql +MAKE_SET(bits, str1, str2, ...) +``` + +- `bits`: controls which subsequent string arguments to include in the result set. If `bits` is set to `NULL`, the function returns `NULL`. +- `str1, str2, ...`: a list of strings. Each string corresponds to a bit in the `bits` argument from right to left. `str1` corresponds to the first bit from the right, `str2` corresponds to the second bit from the right, and so on. If the corresponding bit is `1`, the string is included in the result; otherwise, it is not included. + +Examples: + +In the following example, because all bits are set to `0` in the `bits` argument, the function does not include any subsequent strings in the result and returns an empty string. + +```sql +SELECT MAKE_SET(b'000','foo','bar','baz'); +``` + +``` ++------------------------------------+ +| MAKE_SET(b'000','foo','bar','baz') | ++------------------------------------+ +| | ++------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, because only the first bit from the right is `1`, the function only returns the first string `foo`. + +```sql +SELECT MAKE_SET(b'001','foo','bar','baz'); +``` + +``` ++------------------------------------+ +| MAKE_SET(b'001','foo','bar','baz') | ++------------------------------------+ +| foo | ++------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, because only the second bit from the right is `1`, the function only returns the second string `bar`. + +```sql +SELECT MAKE_SET(b'010','foo','bar','baz'); +``` + +``` ++------------------------------------+ +| MAKE_SET(b'010','foo','bar','baz') | ++------------------------------------+ +| bar | ++------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, because only the third bit from the right is `1`, the function only returns the third string `baz`. + +```sql +SELECT MAKE_SET(b'100','foo','bar','baz'); +``` + +``` ++------------------------------------+ +| MAKE_SET(b'100','foo','bar','baz') | ++------------------------------------+ +| baz | ++------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, because all bits are `1`, the function returns all three strings in a comma-separated result set. + +```sql +SELECT MAKE_SET(b'111','foo','bar','baz'); +``` + +``` ++------------------------------------+ +| MAKE_SET(b'111','foo','bar','baz') | ++------------------------------------+ +| foo,bar,baz | ++------------------------------------+ +1 row in set (0.0002 sec) +``` ### [`MID()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_mid) -Return a substring starting from the specified position. +The `MID(str, pos, len)` function returns a substring starting from the specified `pos` position with the `len` length. + +If any of the arguments are `NULL`, the function returns `NULL`. + +TiDB does not support the two-argument variant of this function. For more information, see [#52420](https://github.com/pingcap/tidb/issues/52420). + +Examples: + +In the following example, `MID()` returns the substring of the input string starting from the second character (`b`) with a length of `3` characters. + +```sql +SELECT MID('abcdef',2,3); +``` + +``` ++-------------------+ +| MID('abcdef',2,3) | ++-------------------+ +| bcd | ++-------------------+ +1 row in set (0.00 sec) +``` ### [`NOT LIKE`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_not-like) Negation of simple pattern matching. +This function performs the inverse operation of [`LIKE`](#like). + +Examples: + +In the following example, `NOT LIKE` returns `0` (False) because `aaa` matches the `a%` pattern. + +```sql +SELECT 'aaa' LIKE 'a%', 'aaa' NOT LIKE 'a%'; +``` + +``` ++-----------------+---------------------+ +| 'aaa' LIKE 'a%' | 'aaa' NOT LIKE 'a%' | ++-----------------+---------------------+ +| 1 | 0 | ++-----------------+---------------------+ +1 row in set (0.00 sec) +``` + +In the following example, `NOT LIKE` returns `1` (True) because `aaa` does not match the `b%` pattern. + +```sql +SELECT 'aaa' LIKE 'b%', 'aaa' NOT LIKE 'b%'; +``` + +``` ++-----------------+---------------------+ +| 'aaa' LIKE 'b%' | 'aaa' NOT LIKE 'b%' | ++-----------------+---------------------+ +| 0 | 1 | ++-----------------+---------------------+ +1 row in set (0.00 sec) +``` + ### [`NOT REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_not-regexp) -Negation of `REGEXP`. +Negation of [`REGEXP`](#regexp). ### [`OCT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_oct) -Return a string containing octal representation of a number. +Return a string containing [octal](https://en.wikipedia.org/wiki/Octal) (base 8) representation of a number. + +Examples: + +The following example generates a sequence of numbers from 0 to 20 using a [recursive common table expression (CTE)](/develop/dev-guide-use-common-table-expression.md#recursive-cte) and then uses the `OCT()` function to convert each number to its octal representation. Decimal values from 0 to 7 have identical representations in octal. Decimal numbers from 8 to 15 correspond to octal numbers from 10 to 17. + +```sql +WITH RECURSIVE nr(n) AS ( + SELECT 0 AS n + UNION ALL + SELECT n+1 FROM nr WHERE n<20 +) +SELECT n, OCT(n) FROM nr; +``` + +``` ++------+--------+ +| n | OCT(n) | ++------+--------+ +| 0 | 0 | +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 4 | 4 | +| 5 | 5 | +| 6 | 6 | +| 7 | 7 | +| 8 | 10 | +| 9 | 11 | +| 10 | 12 | +| 11 | 13 | +| 12 | 14 | +| 13 | 15 | +| 14 | 16 | +| 15 | 17 | +| 16 | 20 | +| 17 | 21 | +| 18 | 22 | +| 19 | 23 | +| 20 | 24 | ++------+--------+ +20 rows in set (0.00 sec) +``` ### [`OCTET_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_octet-length) -Synonym for `LENGTH()`. +Synonym for [`LENGTH()`](#length). ### [`ORD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ord) -Return character code for leftmost character of the argument. +Return the character code for the leftmost character of the given argument. + +This function is similar to [`CHAR()`](#char) but works the other way around. + +Examples: + +Taking `a` and `A` as an example, `ORD()` returns `97` for `a` and `65` for `A`. + +```sql +SELECT ORD('a'), ORD('A'); +``` + +``` ++----------+----------+ +| ORD('a') | ORD('A') | ++----------+----------+ +| 97 | 65 | ++----------+----------+ +1 row in set (0.00 sec) +``` + +If you take the character code obtained from `ORD()` as input, you can get the original characters back using the `CHAR()` function. Note that the output format might vary depending on whether the `binary-as-hex` option is enabled in your MySQL client. + +```sql +SELECT CHAR(97), CHAR(65); +``` + +``` ++----------+----------+ +| CHAR(97) | CHAR(65) | ++----------+----------+ +| a | A | ++----------+----------+ +1 row in set (0.01 sec) +``` + +The following example shows how `ORD()` handles multibyte characters. Here, both `101` and `0x65` are the UTF-8 encoded values for the `e` character, but in different formats. And both `50091` and `0xC3AB` represent the same values, but for the `ë` character. + +```sql +SELECT ORD('e'), ORD('ë'), HEX('e'), HEX('ë'); +``` + +``` ++----------+-----------+----------+-----------+ +| ORD('e') | ORD('ë') | HEX('e') | HEX('ë') | ++----------+-----------+----------+-----------+ +| 101 | 50091 | 65 | C3AB | ++----------+-----------+----------+-----------+ +1 row in set (0.00 sec) +``` ### [`POSITION()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_position) -Synonym for `LOCATE()`. +Synonym for [`LOCATE()`](#locate). ### [`QUOTE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_quote) Escape the argument for use in an SQL statement. +If the argument is `NULL`, the function returns `NULL`. + +Example: + +To display the result directly instead of showing a hexadecimal-encoded value, you need to start the MySQL client with the [`--skip-binary-as-hex`](https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_binary-as-hex) option. + +The following example shows that the ASCII NULL character is escaped as `\0` and the single quote character `'` is escaped as `\'`: + +```sql +SELECT QUOTE(0x002774657374); +``` + +``` ++-----------------------+ +| QUOTE(0x002774657374) | ++-----------------------+ +| '\0\'test' | ++-----------------------+ +1 row in set (0.00 sec) +``` + ### [`REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) Pattern matching using regular expressions. +Examples: + +In this example a number of strings are matched against two regular expressions. + +```sql +WITH vals AS ( + SELECT 'TiDB' AS v + UNION ALL + SELECT 'Titanium' + UNION ALL + SELECT 'Tungsten' + UNION ALL + SELECT 'Rust' +) +SELECT + v, + v REGEXP '^Ti' AS 'starts with "Ti"', + v REGEXP '^.{4}$' AS 'Length is 4 characters' +FROM + vals; +``` + +``` ++----------+------------------+------------------------+ +| v | starts with "Ti" | Length is 4 characters | ++----------+------------------+------------------------+ +| TiDB | 1 | 1 | +| Titanium | 1 | 0 | +| Tungsten | 0 | 0 | +| Rust | 0 | 1 | ++----------+------------------+------------------------+ +4 rows in set (0.00 sec) +``` + +The following example demonstrates that `REGEXP` is not limited to the `SELECT` clause. For example, you can also use it in the `WHERE` clause of the query. + +```sql +SELECT + v +FROM ( + SELECT 'TiDB' AS v + ) AS vals +WHERE + v REGEXP 'DB$'; +``` + +``` ++------+ +| v | ++------+ +| TiDB | ++------+ +1 row in set (0.01 sec) +``` + ### [`REGEXP_INSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-instr) Return the starting index of the substring that matches the regular expression (Partly compatible with MySQL. For more details, see [Regular expression compatibility with MySQL](#regular-expression-compatibility-with-mysql)). +The `REGEXP_INSTR(str, regexp, [start, [match, [ret, [match_type]]]])` function returns the position of the match if the regular expression (`regexp`) matches the string (`str`). + +If either the `str` or `regexp` is `NULL`, then the function returns `NULL`. + +Examples: + +In the example below you can see that the `^.b.$` matches `abc`. + +```sql +SELECT REGEXP_INSTR('abc','^.b.$'); +``` + +``` ++-----------------------------+ +| REGEXP_INSTR('abc','^.b.$') | ++-----------------------------+ +| 1 | ++-----------------------------+ +1 row in set (0.00 sec) +``` + +The following example uses the third argument to look for a match with a different start position in the string. + +```sql +SELECT REGEXP_INSTR('abcabc','a'); +``` + +``` ++----------------------------+ +| REGEXP_INSTR('abcabc','a') | ++----------------------------+ +| 1 | ++----------------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT REGEXP_INSTR('abcabc','a',2); +``` + +``` ++------------------------------+ +| REGEXP_INSTR('abcabc','a',2) | ++------------------------------+ +| 4 | ++------------------------------+ +1 row in set (0.00 sec) +``` + +The following example uses the 4th argument to look for the second match. + +```sql +SELECT REGEXP_INSTR('abcabc','a',1,2); +``` + +``` ++--------------------------------+ +| REGEXP_INSTR('abcabc','a',1,2) | ++--------------------------------+ +| 4 | ++--------------------------------+ +1 row in set (0.00 sec) +``` + +The following example uses the 5th argument to return the value _after_ the mach, instead of the value of the match. + +```sql +SELECT REGEXP_INSTR('abcabc','a',1,1,1); +``` + +``` ++----------------------------------+ +| REGEXP_INSTR('abcabc','a',1,1,1) | ++----------------------------------+ +| 2 | ++----------------------------------+ +1 row in set (0.00 sec) +``` + +The following example uses the 6th argument to add the `i` flag to get a case insensitive match. For more details about regular expression `match_type`, see [`match_type` compatibility](#match_type-compatibility). + +```sql +SELECT REGEXP_INSTR('abcabc','A',1,1,0,''); +``` + +``` ++-------------------------------------+ +| REGEXP_INSTR('abcabc','A',1,1,0,'') | ++-------------------------------------+ +| 0 | ++-------------------------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT REGEXP_INSTR('abcabc','A',1,1,0,'i'); +``` + +``` ++--------------------------------------+ +| REGEXP_INSTR('abcabc','A',1,1,0,'i') | ++--------------------------------------+ +| 1 | ++--------------------------------------+ +1 row in set (0.00 sec) +``` + +Besides `match_type`, the [collation](/character-set-and-collation.md) also influences the matching. The following example uses a case-sensitive and a case-insensitive collation to demonstrate this. + +```sql +SELECT REGEXP_INSTR('abcabc','A' COLLATE utf8mb4_general_ci); +``` + +``` ++-------------------------------------------------------+ +| REGEXP_INSTR('abcabc','A' COLLATE utf8mb4_general_ci) | ++-------------------------------------------------------+ +| 1 | ++-------------------------------------------------------+ +1 row in set (0.01 sec) +``` + +```sql +SELECT REGEXP_INSTR('abcabc','A' COLLATE utf8mb4_bin); +``` + +``` ++------------------------------------------------+ +| REGEXP_INSTR('abcabc','A' COLLATE utf8mb4_bin) | ++------------------------------------------------+ +| 0 | ++------------------------------------------------+ +1 row in set (0.00 sec) +``` + ### [`REGEXP_LIKE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-like) Whether the string matches the regular expression (Partly compatible with MySQL. For more details, see [Regular expression compatibility with MySQL](#regular-expression-compatibility-with-mysql)). +The `REGEXP_LIKE(str, regex, [match_type])` function is used to test if a regular expression matches a string. Optionally the `match_type` can be used to change the matching behavior. + +Examples: + +The following example shows that `^a` matches `abc`. + +```sql +SELECT REGEXP_LIKE('abc','^a'); +``` + +``` ++-------------------------+ +| REGEXP_LIKE('abc','^a') | ++-------------------------+ +| 1 | ++-------------------------+ +1 row in set (0.00 sec) +``` + +This following example shows that `^A` does not match `abc`. + +```sql +SELECT REGEXP_LIKE('abc','^A'); +``` + +``` ++-------------------------+ +| REGEXP_LIKE('abc','^A') | ++-------------------------+ +| 0 | ++-------------------------+ +1 row in set (0.00 sec) +``` + +This example matches `^A` against `abc`, which now matches because of the `i` flag which enabled case insensitive matching. For more details about the regular expression `match_type`, see [`match_type` compatibility](#match_type-compatibility). + +```sql +SELECT REGEXP_LIKE('abc','^A','i'); +``` + +``` ++-----------------------------+ +| REGEXP_LIKE('abc','^A','i') | ++-----------------------------+ +| 1 | ++-----------------------------+ +1 row in set (0.00 sec) +``` + ### [`REGEXP_REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace) Replace substrings that match the regular expression (Partly compatible with MySQL. For more details, see [Regular expression compatibility with MySQL](#regular-expression-compatibility-with-mysql)). +The `REGEXP_REPLACE(str, regexp, replace, [start, [match, [match_type]]])` function can be used to replace strings based on regular expressions. + +Examples: + +In the following example, two o's are replaced by `i`. + +```sql +SELECT REGEXP_REPLACE('TooDB', 'o{2}', 'i'); +``` + +``` ++--------------------------------------+ +| REGEXP_REPLACE('TooDB', 'o{2}', 'i') | ++--------------------------------------+ +| TiDB | ++--------------------------------------+ +1 row in set (0.00 sec) +``` + +The following example starts the match at the third character, causing the regular expression not to match and not do any replacement. + +```sql +SELECT REGEXP_REPLACE('TooDB', 'o{2}', 'i',3); +``` + +``` ++----------------------------------------+ +| REGEXP_REPLACE('TooDB', 'o{2}', 'i',3) | ++----------------------------------------+ +| TooDB | ++----------------------------------------+ +1 row in set (0.00 sec) +``` + +In the following example, the 5th argument is used to set if the first or the second match is used for the replacement. + +```sql +SELECT REGEXP_REPLACE('TooDB', 'o', 'i',1,1); +``` + +``` ++---------------------------------------+ +| REGEXP_REPLACE('TooDB', 'o', 'i',1,1) | ++---------------------------------------+ +| TioDB | ++---------------------------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT REGEXP_REPLACE('TooDB', 'o', 'i',1,2); +``` + +``` ++---------------------------------------+ +| REGEXP_REPLACE('TooDB', 'o', 'i',1,2) | ++---------------------------------------+ +| ToiDB | ++---------------------------------------+ +1 row in set (0.00 sec) +``` + +The following example uses the 6th argument to set the `match_type` for case insensitive matching. For more details about the regular expression `match_type`, see [`match_type` compatibility](#match_type-compatibility). + +```sql +SELECT REGEXP_REPLACE('TooDB', 'O{2}','i',1,1); +``` + +``` ++-----------------------------------------+ +| REGEXP_REPLACE('TooDB', 'O{2}','i',1,1) | ++-----------------------------------------+ +| TooDB | ++-----------------------------------------+ +1 row in set (0.00 sec) +``` + +```sql +SELECT REGEXP_REPLACE('TooDB', 'O{2}','i',1,1,'i'); +``` + +``` ++---------------------------------------------+ +| REGEXP_REPLACE('TooDB', 'O{2}','i',1,1,'i') | ++---------------------------------------------+ +| TiDB | ++---------------------------------------------+ +1 row in set (0.00 sec) +``` + ### [`REGEXP_SUBSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr) Return the substring that matches the regular expression (Partly compatible with MySQL. For more details, see [Regular expression compatibility with MySQL](#regular-expression-compatibility-with-mysql)). +The `REGEXP_SUBSTR(str, regexp, [start, [match, [match_type]]])` function is used to get a substring based on a regular expression. + +The following example uses the `Ti.{2}` regular expression to get the `TiDB` substring of the `This is TiDB` string. + +```sql +SELECT REGEXP_SUBSTR('This is TiDB','Ti.{2}'); +``` + +``` ++----------------------------------------+ +| REGEXP_SUBSTR('This is TiDB','Ti.{2}') | ++----------------------------------------+ +| TiDB | ++----------------------------------------+ +1 row in set (0.00 sec) +``` + ### [`REPEAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_repeat) Repeat a string the specified number of times. +Examples: + +The following example generates a sequence of numbers from 1 to 20 using a [recursive common table expression (CTE)](/develop/dev-guide-use-common-table-expression.md#recursive-cte). For each number in the sequence, the character `x` is repeated the number of times equal to the number itself. + +```sql +WITH RECURSIVE nr(n) AS ( + SELECT 1 AS n + UNION ALL + SELECT n+1 FROM nr WHERE n<20 +) +SELECT n, REPEAT('x',n) FROM nr; +``` + +``` ++------+----------------------+ +| n | REPEAT('x',n) | ++------+----------------------+ +| 1 | x | +| 2 | xx | +| 3 | xxx | +| 4 | xxxx | +| 5 | xxxxx | +| 6 | xxxxxx | +| 7 | xxxxxxx | +| 8 | xxxxxxxx | +| 9 | xxxxxxxxx | +| 10 | xxxxxxxxxx | +| 11 | xxxxxxxxxxx | +| 12 | xxxxxxxxxxxx | +| 13 | xxxxxxxxxxxxx | +| 14 | xxxxxxxxxxxxxx | +| 15 | xxxxxxxxxxxxxxx | +| 16 | xxxxxxxxxxxxxxxx | +| 17 | xxxxxxxxxxxxxxxxx | +| 18 | xxxxxxxxxxxxxxxxxx | +| 19 | xxxxxxxxxxxxxxxxxxx | +| 20 | xxxxxxxxxxxxxxxxxxxx | ++------+----------------------+ +20 rows in set (0.01 sec) +``` + +The following example demonstrates that `REPEAT()` can operate on strings consisting of multiple characters. + +```sql +SELECT REPEAT('ha',3); +``` + +``` ++----------------+ +| REPEAT('ha',3) | ++----------------+ +| hahaha | ++----------------+ +1 row in set (0.00 sec) +``` + ### [`REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_replace) Replace occurrences of a specified string. @@ -1240,7 +2082,7 @@ Return the specified rightmost number of characters. ### [`RLIKE`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) -Synonym for `REGEXP`. +Synonym for [`REGEXP`](#regexp). ### [`RPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_rpad) @@ -1481,7 +2323,7 @@ Output: ## Regular expression compatibility with MySQL -The following sections describe the regular expression compatibility with MySQL. +The following sections describe the regular expression compatibility with MySQL, including `REGEXP_INSTR()`, `REGEXP_LIKE()`, `REGEXP_REPLACE()`, and `REGEXP_SUBSTR()`. ### Syntax compatibility @@ -1498,6 +2340,15 @@ The value options of `match_type` between TiDB and MySQL are: - TiDB does not support `"u"`, which means Unix-only line endings in MySQL. +| `match_type` | MySQL | TiDB | Description | +|:------------:|-------|------|----------------------------------------| +| c | Yes | Yes | Case-sensitive matching | +| i | Yes | Yes | Case-insensitive matching | +| m | Yes | Yes | Multi-line mode | +| s | No | Yes | Matches newlines, same as `n` in MySQL | +| n | Yes | No | Matches newlines, same as `s` in TiDB | +| u | Yes | No | UNIX™ line endings | + ### Data type compatibility The difference between TiDB and MySQL support for the binary string type: @@ -1507,9 +2358,19 @@ The difference between TiDB and MySQL support for the binary string type: ### Other compatibility -The difference between TiDB and MySQL support in replacing empty strings: +- The behavior of replacing empty strings in TiDB is different from MySQL. Taking `REGEXP_REPLACE("", "^$", "123")` as an example: + + - MySQL does not replace the empty string and returns `""` as the result. + - TiDB replaces the empty string and returns `"123"` as the result. + +- The keyword used for capturing groups in TiDB is different from MySQL. MySQL uses `$` as the keyword, while TiDB uses `\\` as the keyword. In addition, TiDB only supports capturing groups numbered from `0` to `9`. + + For example, the following SQL statement returns `ab` in TiDB: + + ```sql + SELECT REGEXP_REPLACE('abcd','(.*)(.{2})$','\\1') AS s; + ``` -The following takes `REGEXP_REPLACE("", "^$", "123")` as an example: +### Known issues -- MySQL does not replace the empty string and returns `""` as the result. -- TiDB replaces the empty string and returns `"123"` as the result. +- [GitHub Issue #37981](https://github.com/pingcap/tidb/issues/37981) \ No newline at end of file diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index ee86bd482b449..4f8683a050f85 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -149,7 +149,7 @@ ORDER BY 4 rows in set (0.031 sec) ``` -`TIDB_DECODE_KEY` returns valid JSON on success and retuns the argument value if it fails to decode. +`TIDB_DECODE_KEY` returns valid JSON on success and returns the argument value if it fails to decode. ### TIDB_DECODE_PLAN diff --git a/get-started-with-tidb-lightning.md b/get-started-with-tidb-lightning.md index 9f929d33ab047..55605a5577bd6 100644 --- a/get-started-with-tidb-lightning.md +++ b/get-started-with-tidb-lightning.md @@ -1,6 +1,7 @@ --- title: Quick Start for TiDB Lightning aliases: ['/docs/dev/get-started-with-tidb-lightning/','/docs/dev/how-to/get-started/tidb-lightning/'] +summary: TiDB Lightning is a tool for importing MySQL data into a TiDB cluster. It is recommended for test and trial purposes only, not for production or development environments. The process involves preparing full backup data, deploying the TiDB cluster, installing TiDB Lightning, starting TiDB Lightning, and checking data integrity. For detailed features and usage, refer to the TiDB Lightning Overview. --- # Quick Start for TiDB Lightning diff --git a/grafana-pd-dashboard.md b/grafana-pd-dashboard.md index 13790d5aa6f41..048dc0c7b3d69 100644 --- a/grafana-pd-dashboard.md +++ b/grafana-pd-dashboard.md @@ -78,7 +78,7 @@ The following is the description of PD Dashboard metrics items: - Store Write rate keys: The total written keys on each TiKV instance - Hot cache write entry number: The number of peers on each TiKV instance that are in the write hotspot statistics module - Selector events: The event count of Selector in the hotspot scheduling module -- Direction of hotspot move leader: The direction of leader movement in the hotspot scheduling. The positive number means scheduling into the instance. The negtive number means scheduling out of the instance +- Direction of hotspot move leader: The direction of leader movement in the hotspot scheduling. The positive number means scheduling into the instance. The negative number means scheduling out of the instance - Direction of hotspot move peer: The direction of peer movement in the hotspot scheduling. The positive number means scheduling into the instance. The negative number means scheduling out of the instance ![PD Dashboard - Hot write metrics](/media/pd-dashboard-hotwrite-v4.png) diff --git a/grafana-tikv-dashboard.md b/grafana-tikv-dashboard.md index d39f714025f05..18579e8bd2fcf 100644 --- a/grafana-tikv-dashboard.md +++ b/grafana-tikv-dashboard.md @@ -459,6 +459,41 @@ This section provides a detailed description of these key metrics on the **TiKV- - Encrypt/decrypt data nanos: The histogram of duration on encrypting/decrypting data each time - Read/write encryption meta duration: The time consumed for reading/writing encryption meta files +### Log Backup + +- Handle Event Rate: The speed of handling write events +- Initial Scan Generate Event Throughput: Incremental scanning speed when generating a new listener stream +- Abnormal Checkpoint TS Lag: The lag of the current checkpoint TS to the present time for each task +- Memory Of Events: An estimated amount of memory occupied by temporary data generated by incremental scanning +- Observed Region Count: The number of Regions currently listened to +- Errors: The number and type of retryable and non-fatal errors +- Fatal Errors: The number and type of fatal errors. Usually, fatal errors cause the task to be paused. +- Checkpoint TS of Tasks: Checkpoint TS for each task +- Flush Duration: The heat map of how long it takes for moving cached data to external storage +- Initial Scanning Duration: The heat map of how long it takes for incremental scanning when creating a new listening stream +- Convert Raft Event Duration: The heat map of how long it takes to transform a Raft log entry into backup data after creating a listening stream +- Command Batch Size: The batch size (within a single Raft group) of the listening Raft command +- Save to Temp File Duration: The heat map of how long it takes to temporarily store a batch of backup data (spanning several tasks) into the temporary file area +- Write to Temp File Duration: The heat map of how long it takes to temporarily store a batch of backup data (from a particular task) into the temporary file area +- System Write Call Duration: The heat map of how long it takes to write a batch of backup data (from a Region) to a temporary file +- Internal Message Type: The type of messages received by the actor responsible for the log backup within TiKV +- Internal Message Handling Duration (P90|P99): The speed of consuming and processing each type of messages +- Initial Scan RocksDB Throughput: The read traffic generated by RocksDB internal logging during incremental scanning +- Initial Scan RocksDB Operation: The number of individual operations logged internally by RocksDB during incremental scanning +- Initial Scanning Trigger Reason: The reason for triggering incremental scanning +- Region Checkpoint Key Putting: The number of checkpoint operations logged to the PD + +> **Note:** +> +> The following monitoring metrics all use TiDB nodes as their data source, but they have some impact on the log backup process. Therefore, they are placed in the **TiKV Details** dashboard for ease of reference. TiKV actively pushes progress most of the time, but it is normal for some of the following monitoring metrics to occasionally not have sampled data. + +- Request Checkpoint Batch Size: The request batch size when the log backup coordinator requests checkpoint information for each TiKV +- Tick Duration \[P99|P90\]: The time taken by the tick inside the coordinator +- Region Checkpoint Failure Reason: The reason why a Region checkpoint cannot advance within the coordinator +- Request Result: The record of the coordinator's success or failure in advancing the Region checkpoint +- Get Region Operation Count: The number of times the coordinator requests Region information from the PD +- Try Advance Trigger Time: The time taken for the coordinator to attempt to advance the checkpoint + ### Explanation of Common Parameters #### gRPC Message Type diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index b345b4fbadf3d..cec210fca4b02 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -51,7 +51,7 @@ As an open-source distributed SQL database with high performance, TiDB can be de
  • x86_64
  • ARM 64
- openEuler 22.03 LTS SP1 + openEuler 22.03 LTS SP1/SP3
  • x86_64
  • ARM 64
@@ -102,7 +102,7 @@ As an open-source distributed SQL database with high performance, TiDB can be de | Libraries required for compiling and running TiDB | Version | | :--- | :--- | | Golang | 1.21 or later | -| Rust | nightly-2022-07-31 or later | +| Rust | nightly-2023-12-28 or later | | GCC | 7.x | | LLVM | 13.0 or later | @@ -112,7 +112,7 @@ Library required for running TiDB: glibc (2.28-151.el8 version) The following CPU architectures are supported: -- x86_64. Starting from TiDB v6.6.0, the [x84-64-v2 instruction set](https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level) is required. +- x86_64. Starting from TiDB v6.6.0, the [x86-64-v2 instruction set](https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level) is required. - ARM 64 ## Software recommendations diff --git a/information-schema/information-schema-columns.md b/information-schema/information-schema-columns.md index 7535816ee6f73..5c675bf4a56d8 100644 --- a/information-schema/information-schema-columns.md +++ b/information-schema/information-schema-columns.md @@ -50,7 +50,7 @@ CREATE TABLE test.t1 (a int); SELECT * FROM COLUMNS WHERE table_schema='test' AND TABLE_NAME='t1'\G ``` -输出结果如下: +The output is as follows: ```sql *************************** 1. row *************************** diff --git a/information-schema/information-schema-ddl-jobs.md b/information-schema/information-schema-ddl-jobs.md index 21f4b69ae5304..c1ec1749cfe8c 100644 --- a/information-schema/information-schema-ddl-jobs.md +++ b/information-schema/information-schema-ddl-jobs.md @@ -7,8 +7,6 @@ summary: Learn the `DDL_JOBS` information_schema table. The `DDL_JOBS` table provides an `INFORMATION_SCHEMA` interface to the [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) command. It provides information about DDL operations in the TiDB cluster, such as the current status, DDL statements, start time, end time, database names, and table names. -{{< copyable "sql" >}} - ```sql USE information_schema; DESC ddl_jobs; @@ -34,8 +32,6 @@ DESC ddl_jobs; 12 rows in set (0.00 sec) ``` -{{< copyable "sql" >}} - ```sql SELECT * FROM ddl_jobs LIMIT 3\G ``` diff --git a/information-schema/information-schema-deadlocks.md b/information-schema/information-schema-deadlocks.md index e755d59cda0f9..debbeb65834c2 100644 --- a/information-schema/information-schema-deadlocks.md +++ b/information-schema/information-schema-deadlocks.md @@ -12,7 +12,7 @@ USE INFORMATION_SCHEMA; DESC deadlocks; ``` -Thhe output is as follows: +The output is as follows: ```sql +-------------------------+---------------------+------+------+---------+-------+ diff --git a/information-schema/information-schema-runaway-watches.md b/information-schema/information-schema-runaway-watches.md index d36711fb69f62..f65d557e574b5 100644 --- a/information-schema/information-schema-runaway-watches.md +++ b/information-schema/information-schema-runaway-watches.md @@ -32,16 +32,12 @@ DESC RUNAWAY_WATCHES; 8 rows in set (0.00 sec) ``` -> **Warning:** -> -> This 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. - ## Examples Query the watch list of runaway queries: ```sql -SELECT * FROM INFORMATION_SCHEMA.RUNAWAY_WATCHES; +SELECT * FROM INFORMATION_SCHEMA.RUNAWAY_WATCHES\G ``` The output is as follows: @@ -77,7 +73,7 @@ QUERY WATCH ADD RESOURCE GROUP rg1 SQL TEXT EXACT TO 'select * from sbtest.sbtes Query the watch list of runaway queries again: ```sql -SELECT * FROM INFORMATION_SCHEMA.RUNAWAY_WATCHES\G; +SELECT * FROM INFORMATION_SCHEMA.RUNAWAY_WATCHES\G ``` The output is as follows: diff --git a/information-schema/information-schema-sequences.md b/information-schema/information-schema-sequences.md index 60a0cb408e2ff..f7e92db6ae99a 100644 --- a/information-schema/information-schema-sequences.md +++ b/information-schema/information-schema-sequences.md @@ -37,7 +37,7 @@ Create a sequence `test.seq` and query the next value of the sequence: ```sql CREATE SEQUENCE test.seq; -SELECT nextval(test.seq); +SELECT NEXTVAL(test.seq); SELECT * FROM sequences\G ``` @@ -45,7 +45,7 @@ The output is as follows: ```sql +-------------------+ -| nextval(test.seq) | +| NEXTVAL(test.seq) | +-------------------+ | 1 | +-------------------+ diff --git a/information-schema/information-schema-slow-query.md b/information-schema/information-schema-slow-query.md index 0dc2c9dc6f3b8..3fdfd89edcd08 100644 --- a/information-schema/information-schema-slow-query.md +++ b/information-schema/information-schema-slow-query.md @@ -24,7 +24,7 @@ DESC SLOW_QUERY; The output is as follows: -```sqlsql +``` +-------------------------------+---------------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------------------+---------------------+------+------+---------+-------+ diff --git a/information-schema/information-schema-tidb-index-usage.md b/information-schema/information-schema-tidb-index-usage.md index 00e57aa9cd906..a98f23667c2e2 100644 --- a/information-schema/information-schema-tidb-index-usage.md +++ b/information-schema/information-schema-tidb-index-usage.md @@ -101,3 +101,7 @@ The output is as follows: - The data in the `TIDB_INDEX_USAGE` table might be delayed by up to 5 minutes. - After TiDB restarts, the data in the `TIDB_INDEX_USAGE` table is cleared. + +## Read more + +- [`sys.schema_unused_indexes`](/sys-schema/sys-schema-unused-indexes.md) \ No newline at end of file diff --git a/information-schema/information-schema-tidb-servers-info.md b/information-schema/information-schema-tidb-servers-info.md index 99164a80ef00c..c51b6f8ff7806 100644 --- a/information-schema/information-schema-tidb-servers-info.md +++ b/information-schema/information-schema-tidb-servers-info.md @@ -50,7 +50,7 @@ The output is as follows: PORT: 4000 STATUS_PORT: 10080 LEASE: 45s - VERSION: 8.0.11-TiDB-v7.6.0 + VERSION: 8.0.11-TiDB-v8.0.0 GIT_HASH: 827d8ff2d22ac4c93ae1b841b79d468211e1d393 BINLOG_STATUS: Off LABELS: diff --git a/information-schema/information-schema.md b/information-schema/information-schema.md index ac9b22bca1a52..43a5b47288636 100644 --- a/information-schema/information-schema.md +++ b/information-schema/information-schema.md @@ -14,7 +14,7 @@ Many `INFORMATION_SCHEMA` tables have a corresponding `SHOW` command. The benefi -| Table Name | Description | +| Table name | Description | |-----------------------------------------------------------------------------------------|-----------------------------| | [`CHARACTER_SETS`](/information-schema/information-schema-character-sets.md) | Provides a list of character sets the server supports. | | [`CHECK_CONSTRAINTS`](/information-schema/information-schema-check-constraints.md) | Provides information about [`CHECK` constraints](/constraints.md#check) on tables. | @@ -57,7 +57,7 @@ Many `INFORMATION_SCHEMA` tables have a corresponding `SHOW` command. The benefi -| Table Name | Description | +| Table name | Description | |-----------------------------------------------------------------------------------------|-----------------------------| | [`CHARACTER_SETS`](/information-schema/information-schema-character-sets.md) | Provides a list of character sets the server supports. | | [`CHECK_CONSTRAINTS`](/information-schema/information-schema-check-constraints.md) | Provides information about [`CHECK` constraints](/constraints.md#check) on tables. | @@ -105,7 +105,7 @@ Many `INFORMATION_SCHEMA` tables have a corresponding `SHOW` command. The benefi > > Some of the following tables are only supported on TiDB Self-Hosted and not supported on TiDB Cloud. To get a full list of unsupported tables on TiDB Cloud, see [System tables](https://docs.pingcap.com/tidbcloud/limited-sql-features#system-tables). -| Table Name | Description | +| Table name | Description | |-----------------------------------------------------------------------------------------|-------------| | [`ANALYZE_STATUS`](/information-schema/information-schema-analyze-status.md) | Provides information about tasks to collect statistics. | | [`CLIENT_ERRORS_SUMMARY_BY_HOST`](/information-schema/client-errors-summary-by-host.md) | Provides a summary of errors and warnings generated by client requests and returned to clients. | @@ -158,7 +158,7 @@ Many `INFORMATION_SCHEMA` tables have a corresponding `SHOW` command. The benefi -| Table Name | Description | +| Table name | Description | |-----------------------------------------------------------------------------------------|-------------| | [`ANALYZE_STATUS`](/information-schema/information-schema-analyze-status.md) | Provides information about tasks to collect statistics. | | [`CLIENT_ERRORS_SUMMARY_BY_HOST`](/information-schema/client-errors-summary-by-host.md) | Provides a summary of errors and warnings generated by client requests and returned to clients. | diff --git a/media/develop/mysql-workbench-adjust-sqleditor-read-timeout.jpg b/media/develop/mysql-workbench-adjust-sqleditor-read-timeout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0891f2741f8e37828ee18f3dc6bea628353241ac GIT binary patch literal 393797 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%0ARh6I_G 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

qI`*rXPWjZTpbGj4ji^&YyJDQO# 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 z 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 literal 384654 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 z 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%0DJhRUEf>_tf*k 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 PE@L%iqr%;h+e7~YGXIyy#et!GAb zbWCe>boAbr=ugkIu`G+z(cPibe)iNPAbpj<5Mr{IadKjKL#sjX#aT7+Nk+zZLiBC$ z7w%8QTv(faW6qYpqN-z`~bzWyY_`6 z>5{MZrSAM|Pi|Z~fT=qBE~vz7OU0*X+ZZaxD@ZSHXF!~q7q7+yW*Mr*WTyDNlbi2d zHs-%fjJX>?)ZIKu9}sAUs>MwOo;!Wa|L3@dy^%|xd-mDT1S#HGfaobM0T{mQ3^m5$Jf11JRa)2^rFI#bg z!gnhe{%bHx1~sHddNt1T&3X7n8=v8Lk=cKl(fyWILwXl8Ji2k{{-4)9uAO?Qs6SZd z!}x