From 3ff99d6434840adb1b321c556ef48d60eb7df065 Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 21 May 2020 17:49:37 +0800 Subject: [PATCH 001/145] .github: add a yml to auto assign new PRs and issues to sig project (#2598) * .github: add a yml to auto assign new PRs and issues to sig project * assign translation/welcome pr to related column * update actions for 5 columns * add unlabeled as a trigger --- .github/workflows/assign_sig_project.yml | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/assign_sig_project.yml diff --git a/.github/workflows/assign_sig_project.yml b/.github/workflows/assign_sig_project.yml new file mode 100644 index 0000000000000..d73dc28d5e752 --- /dev/null +++ b/.github/workflows/assign_sig_project.yml @@ -0,0 +1,52 @@ +name: Auto Assign to Project + +on: + issues: + types: [opened, labeled, closed] + pull_request: + types: [opened, labeled, unlabeled, closed] +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + assign_one_project: + runs-on: ubuntu-latest + name: Assign to Docs SIG Project + steps: + - name: Assign Open Issue + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event.action == 'opened' && github.event = 'issue' + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'Issue: Backlog' + - name: Assign Closed Issue + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event.action == 'closed' && github.event = 'issue' + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'Issue: Resolved' + - name: Assign Open PR + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event.action == 'opened' && github.event = 'pull_request' + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'PR: In Progress' + - name: Assign Closed PR + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event.action == 'closed' && + github.event = 'pull_request' && + ! contains(github.event.pull_request.labels.*.name, 'translation/welcome') + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'PR: Done' + - name: Assign Translation/Welcome PR + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.pull_request.labels.*.name, 'translation/welcome') + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'Translation/Welcome' From f1181c6855df6218095d7c12c1c4bd96bb4a4f70 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 22 May 2020 20:05:57 +0800 Subject: [PATCH 002/145] .github: optimize workflow to involve translation welcome label (#2605) * add missing `=` operator * Update assign_sig_project.yml * update workflow * merge three ci into one * update format --- .github/workflows/assign-to-project.yml | 39 ++++++++++++++++++ .github/workflows/assign_sig_project.yml | 52 ------------------------ 2 files changed, 39 insertions(+), 52 deletions(-) create mode 100644 .github/workflows/assign-to-project.yml delete mode 100644 .github/workflows/assign_sig_project.yml diff --git a/.github/workflows/assign-to-project.yml b/.github/workflows/assign-to-project.yml new file mode 100644 index 0000000000000..4c31e1b09d5b8 --- /dev/null +++ b/.github/workflows/assign-to-project.yml @@ -0,0 +1,39 @@ +name: Assign to Project + +on: + issues: + types: [opened, labeled] + pull_request: + types: [opened, labeled] +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + assign_one_project: + runs-on: ubuntu-latest + name: Assign to Project + steps: + - name: Assign NEW issues to Docs SIG project + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event_name == 'issues' && + github.event.action == 'opened' + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'Issue: Backlog' + - name: Assign NEW pull requests to Docs SIG project + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + github.event_name == 'pull_request' && + github.event.action == 'opened' + with: + project: 'https://github.com/pingcap/docs/projects/1' + column_name: 'PR: In Progress' + - name: Assign issues or PRs with translation-welcome label + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.issue.labels.*.name, 'translation/welcome') || + contains(github.event.pull_request.labels.*.name, 'translation/welcome') + with: + project: 'https://github.com/pingcap/docs/projects/2' + column_name: 'To do' diff --git a/.github/workflows/assign_sig_project.yml b/.github/workflows/assign_sig_project.yml deleted file mode 100644 index d73dc28d5e752..0000000000000 --- a/.github/workflows/assign_sig_project.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Auto Assign to Project - -on: - issues: - types: [opened, labeled, closed] - pull_request: - types: [opened, labeled, unlabeled, closed] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - assign_one_project: - runs-on: ubuntu-latest - name: Assign to Docs SIG Project - steps: - - name: Assign Open Issue - uses: srggrs/assign-one-project-github-action@1.2.0 - if: | - github.event.action == 'opened' && github.event = 'issue' - with: - project: 'https://github.com/pingcap/docs/projects/1' - column_name: 'Issue: Backlog' - - name: Assign Closed Issue - uses: srggrs/assign-one-project-github-action@1.2.0 - if: | - github.event.action == 'closed' && github.event = 'issue' - with: - project: 'https://github.com/pingcap/docs/projects/1' - column_name: 'Issue: Resolved' - - name: Assign Open PR - uses: srggrs/assign-one-project-github-action@1.2.0 - if: | - github.event.action == 'opened' && github.event = 'pull_request' - with: - project: 'https://github.com/pingcap/docs/projects/1' - column_name: 'PR: In Progress' - - name: Assign Closed PR - uses: srggrs/assign-one-project-github-action@1.2.0 - if: | - github.event.action == 'closed' && - github.event = 'pull_request' && - ! contains(github.event.pull_request.labels.*.name, 'translation/welcome') - with: - project: 'https://github.com/pingcap/docs/projects/1' - column_name: 'PR: Done' - - name: Assign Translation/Welcome PR - uses: srggrs/assign-one-project-github-action@1.2.0 - if: | - contains(github.event.pull_request.labels.*.name, 'translation/welcome') - with: - project: 'https://github.com/pingcap/docs/projects/1' - column_name: 'Translation/Welcome' From 180f7b09b1ec2030580581b3c4b6654ac2164cb6 Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 27 May 2020 11:29:18 +0800 Subject: [PATCH 003/145] add doc for dynamic config (#2617) --- TOC.md | 1 + dynamic-config.md | 212 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 dynamic-config.md diff --git a/TOC.md b/TOC.md index 9498a94de02ab..791acafb4fd02 100644 --- a/TOC.md +++ b/TOC.md @@ -267,6 +267,7 @@ + tikv-server - [Configuration Flags](/command-line-flags-for-tikv-configuration.md) - [Configuration File](/tikv-configuration-file.md) + - [Dynamic Configuration Change](/dynamic-config.md) + Security - [Security Compatibility with MySQL](/security-compatibility-with-mysql.md) - [The TiDB Access Privilege System](/privilege-management.md) diff --git a/dynamic-config.md b/dynamic-config.md new file mode 100644 index 0000000000000..b50c519f1ae52 --- /dev/null +++ b/dynamic-config.md @@ -0,0 +1,212 @@ +--- +title: Dynamic Configuration Change +summary: Learn how to use dynamic configuration change. +category: reference +--- + +# Dynamic Configuration Change + +This document describes how to use the dynamic configuration change feature. + +> **Note:** +> +> This feature is experimental. It is **NOT** recommended to use this feature in the production environment. + +The feature of dynamic configuration change is to online update the configuration of components (including TiKV and PD) using SQL statements. + +Dynamic configuration change cannot be used to update the TiDB configuration. If you want to change the behavior of TiDB, modify TiDB's corresponding SQL variables. + +## Common Operations + +This section describes the common operations of dynamic configuration change. + +### View instance configuration + +To view the configuration of all instances in the cluster, use the `show config` SQL statement. The result is as follows: + +``` +show config; ++------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Type | Instance | Name | Value | ++------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| tidb | 127.0.0.1:4001 | advertise-address | 127.0.0.1 | +| tidb | 127.0.0.1:4001 | alter-primary-key | false | +| tidb | 127.0.0.1:4001 | binlog.binlog-socket | | +| tidb | 127.0.0.1:4001 | binlog.enable | false | +| tidb | 127.0.0.1:4001 | binlog.ignore-error | false | +| tidb | 127.0.0.1:4001 | binlog.strategy | range | +| tidb | 127.0.0.1:4001 | binlog.write-timeout | 15s | +| tidb | 127.0.0.1:4001 | check-mb4-value-in-utf8 | true | +... +``` + +You can filter the result in terms of fields. For example: + +``` +show config where type='tidb' +show config where instance in (...) +show config where name like '%log%' +show config where type='tikv' and name='log-level' +``` + +### Modify instance configuration + +To modify configuration according to the instance address and type, use the `set config` SQL statement: + +```sql +set config tikv log.level="info" +set config "127.0.0.1:2379" log.level="info" +``` + +If the modification is successful, `Query OK` is returned: + +``` +set config '127.0.0.1:2379' log.level='info'; +Query OK, 0 rows affected (0.01 sec) +``` + +If an error occurs during the batch modification, a warning is returned: + +``` +set config tikv log-level='warn'; +Query OK, 0 rows affected, 1 warning (0.04 sec) + +show warnings; ++---------+------+---------------------------------------------------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+---------------------------------------------------------------------------------------------------------------+ +| Warning | 1105 | bad request to http://127.0.0.1:20180/config: fail to update, error: "config log-level can not be change" | ++---------+------+---------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +> **Note:** +> +> To avoid confusing dynamic configuration with SQL variables, you can view TiDB configuration using `show config`, but you cannot modify the configuration, which causes an error. If you want to dynamically modify TiDB behaviors, use the corresponding SQL variables. +> +> The names of some configuration items might conflict with TiDB keywords, such as `limit` and `key`. For these configuration items, use backtick `` ` `` to enclose them. For example, ``tikv-client.`store-limit` ``. +> +> The batch modification operation cannot guarantee atomicity. On some instances, this operation might succeed, while on other instances, it might fail. If you modify the configuration of the entire TiKV cluster using `set tikv key=val`, your modification might fail on some instances. You can use `show warnings` to check the result. + +## Supported parameters + +This section lists the parameters supported by dynamic configuration change. + +### PD + +| Parameter | Description | +| --- | --- | +| log.level | Log level | +| cluster-version | Cluster version | +| schedule.max-merge-region-size | Controls the size limit of `Region Merge` (in MB) | +| schedule.max-merge-region-keys | Specifies the upper limit of the `Region Merge` key | +| schedule.patrol-region-interval | Determines the frequency at which `replicaChecker` checks the health state of a Region | +| schedule.split-merge-interval | Determines the time interval of performing split and merge operations on the same Region | +| schedule.max-snapshot-count | Determines the maximum number of snapshots that a single store can send or receive at one time | +| schedule.max-pending-peer-count | Determines the maximum number of pending peers in a single store | +| schedule.max-store-down-time | The downtime after which PD judges that the disconnected store can not be recovered | +| schedule.leader-schedule-policy | Determines the policy of Leader scheduling | +| schedule.leader-schedule-limit | The number of Leader scheduling tasks performed at the same time | +| schedule.region-schedule-limit | The number of Region scheduling tasks performed at the same time | +| schedule.replica-schedule-limit | The number of Replica scheduling tasks performed at the same time | +| schedule.merge-schedule-limit | The number of the `Region Merge` scheduling tasks performed at the same time | +| schedule.hot-region-schedule-limit | The number of hot Region scheduling tasks performed at the same time | +| schedule.hot-region-cache-hits-threshold | Determines the threshold at which a Region is considered hot | +| schedule.high-space-ratio | The threshold ratio below which the capacity of the store is sufficient | +| schedule.low-space-ratio | The threshold ratio above which the capacity of the store is insufficient | +| schedule.tolerant-size-ratio | Controls the `balance` buffer size| +| schedule.enable-remove-down-replica | Determines whether to enable the feature that automatically removes `DownReplica` | +| schedule.enable-replace-offline-replica | Determines whether to enable the feature that migrates `OfflineReplica` | +| schedule.enable-make-up-replica | Determines whether to enable the feature that automatically supplements replicas | +| schedule.enable-remove-extra-replica | Determines whether to enable the feature that removes extra replicas | +| schedule.enable-location-replacement | Determines whether to enable isolation level check | +| schedule.enable-cross-table-merge | Determines whether to enable cross-table merge | +| schedule.enable-one-way-merge | Enables one-way merge, which only allows merging with the next adjacent Region | +| replication.max-replicas | Sets the maximum number of replicas | +| replication.location-labels | The topology information of a TiKV cluster | +| replication.enable-placement-rules | Enables Placement Rules | +| replication.strictly-match-label | Enables the label check | +| pd-server.use-region-storage | Enables independent Region storage | +| pd-server.max-gap-reset-ts | Sets the maximum interval of resetting timestamp (BR) | +| pd-server.key-type| Sets the cluster key type | +| pd-server.metric-storage | Sets the storage address of the cluster metrics | +| pd-server.dashboard-address | Sets the dashboard address | +| replication-mode.replication-mode | Sets the backup mode | + +For detailed parameter description, refer to [PD Configuration File](/pd-configuration-file.md). + +### TiKV + +| Parameter | Description | +| --- | --- | +| refresh-config-interval | The time interval at which the configuration is updated | +| raftstore.sync-log | Whether to force commits to be flushed to raft-log synchronously for persistent storage | +| raftstore.raft-entry-max-size | The maximum size of a single log | +| raftstore.raft-log-gc-tick-interval | The time interval at which the polling task of deleting Raft logs is scheduled | +| raftstore.raft-log-gc-threshold | The soft limit on the maximum allowable count of residual Raft logs | +| raftstore.raft-log-gc-count-limit | The hard limit on the allowable number of residual Raft logs| +| raftstore.raft-log-gc-size-limit | The hard limit on the allowable size of residual Raft logs | +| raftstore.raft-entry-cache-life-time | The maximum remaining time allowed for the log cache in memory | +| raftstore.raft-reject-transfer-leader-duration | Determines the smallest duration that a Leader is transferred to a newly added node | +| raftstore.split-region-check-tick-interval | The time interval at which to check whether the Region split is needed | +| raftstore.region-split-check-diff | The maximum value by which the Region data is allowed to exceed before Region split | +| raftstore.region-compact-check-interval | The time interval at which to check whether it is necessary to manually trigger RocksDB compaction | +| raftstore.region-compact-check-step | The number of Regions checked at one time for each round of manual compaction | +| raftstore.region-compact-min-tombstones | The number of tombstones required to trigger RocksDB compaction | +| raftstore.region-compact-tombstones-percent | The proportion of tombstone required to trigger RocksDB compaction | +| raftstore.pd-heartbeat-tick-interval | The time interval at which a Region's heartbeat to PD is triggered | +| raftstore.pd-store-heartbeat-tick-interval | The time interval at which a store's heartbeat to PD is triggered | +| raftstore.snap-mgr-gc-tick-interval | The time interval at which the recycle of expired snapshot files is triggered | +| raftstore.snap-gc-timeout | The longest time for which a snapshot file is saved | +| raftstore.lock-cf-compact-interval | The time interval at which TiKV triggers a manual compaction for the Lock Column Family | +| raftstore.lock-cf-compact-bytes-threshold | The size out of which TiKV triggers a manual compaction for the Lock Column Family | +| raftstore.messages-per-tick | The maximum number of messages processed per batch | +| raftstore.max-peer-down-duration | The longest inactive duration allowed for a peer | +| raftstore.max-leader-missing-duration | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer verifies with PD whether the peer has been deleted. | +| raftstore.abnormal-leader-missing-duration | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer is seen as abnormal and marked in metrics and logs. | +| raftstore.peer-stale-state-check-interval | The time interval to trigger the check for whether a peer is in the state where a Raft group is missing the leader | +| raftstore.consistency-check-interval | The time interval at which the consistency check is triggered | +| raftstore.raft-store-max-leader-lease | The longest trusted period of a Raft Leader | +| raftstore.allow-remove-leader | Determines whether to allow deleting the main switch | +| raftstore.merge-check-tick-interval | The time interval at which TiKV checks whether a Region needs merge | +| raftstore.cleanup-import-sst-interval | The time interval at which the expired SST file is checked | +| raftstore.local-read-batch-size | The maximum number of read requests processed in one batch | +| coprocessor.split-region-on-table | Enables to split Region by table | +| coprocessor.batch-split-limit | The threshold of Region split in batches | +| coprocessor.region-max-size | The maximum size of a Region | +| coprocessor.region-split-size | The size of the newly split Region | +| coprocessor.region-max-keys | The maximum number of keys allowed in a Region | +| coprocessor.region-split-keys | The number of keys in the newly split Region | +| pessimistic-txn.wait-for-lock-timeout | The max time that a pessimistic transaction in TiKV waits for other transactions to release the lock | +| pessimistic-txn.wake-up-delay-duration | The duration after which a pessimistic transaction is woken up | +| gc.ratio-threshold | The threshold at which Region GC is skipped (the number of GC versions/the number of keys) | +| gc.batch-keys | The number of keys processed in one batch | +| gc.max-write-bytes-per-sec | The max number of bytes that can be written into RocksDB per second | +| {db-name}.max-total-wal-size | The max size of total WAL | +| {db-name}.max-background-jobs | The number of background threads in RocksDB | +| {db-name}.max-open-files | The total number of files that RocksDB can open | +| {db-name}.compaction-readahead-size | The size of `readahead` when compaction is being performed | +| {db-name}.bytes-per-sync | The rate at which OS incrementally synchronizes files to disk while these files are being written asynchronously | +| {db-name}.wal-bytes-per-sync | The rate at which OS incrementally synchronizes WAL files to disk while the WAL files are being written | +| {db-name}.writable-file-max-buffer-size | The maximum buffer size used in WritableFileWrite | +| {db-name}.{cf-name}.block-cache-size | The cache size of a block | +| {db-name}.{cf-name}.write-buffer-size | The size of memtable | +| {db-name}.{cf-name}.max-write-buffer-number | The max number of memtables | +| {db-name}.{cf-name}.max-bytes-for-level-base | The maximum number of bytes at base level (L1) | +| {db-name}.{cf-name}.target-file-size-base | The size of the target file at base level | +| {db-name}.{cf-name}.level0-file-num-compaction-trigger | The maximum number of files at L0 that trigger compaction | +| {db-name}.{cf-name}.level0-slowdown-writes-trigger | The maximum number of files at L0 that trigger write stall | +| {db-name}.{cf-name}.level0-stop-writes-trigger | The maximum number of files at L0 required to completely block write | +| {db-name}.{cf-name}.max-compaction-bytes | The maximum number of bytes written into disk per compaction | +| {db-name}.{cf-name}.max-bytes-for-level-multiplier | The default amplification multiple for each layer | +| {db-name}.{cf-name}.disable-auto-compactions | Enables or disables automatic compaction | +| {db-name}.{cf-name}.soft-pending-compaction-bytes-limit | The soft limit on the pending compaction bytes | +| {db-name}.{cf-name}.hard-pending-compaction-bytes-limit | The hard limit on the pending compaction bytes | +| {db-name}.{cf-name}.titan.blob-run-mode | The mode of processing blob files | + +In the table above, parameters with the `{db-name}` or `{db-name}.{cf-name}` prefix are configurations related to RocksDB. The optional values of `db-name` are `rocksdb` and `raftdb`. + +- When `db-name` is `rocksdb`, the optional values of `cf-name` are `defaultcf`, `writecf`, `lockcf`, and `raftcf`. +- When `db-name` is `raftdb`, the value of `cf-name` can be `defaultcf`. + +For detailed parameter description, refer to [TiKV Configuration File](/tikv-configuration-file.md). From 70df9abc65699f019b2880a8afc2dc9efac46639 Mon Sep 17 00:00:00 2001 From: Keke Yi <40977455+yikeke@users.noreply.github.com> Date: Thu, 28 May 2020 15:28:53 +0800 Subject: [PATCH 004/145] Merge docs special week branch to docs master (#2623) * Update command line flags for pd configruation (#2596) Signed-off-by: nolouch * Remove upgrade-tiflash.md (#2597) * Remove upgrade-tiflash.md Duplicated with TiDB's upgrade manual. * delete a link Co-authored-by: yikeke * Move TiFlash troubleshoot part to a new document (#2602) * best-practice: update massive regions to match 4.0 (#2595) Signed-off-by: Jay Lee * sql-statements: document BACKUP, RESTORE and SHOW [BACKUPS|RESTORES] (#2618) Co-authored-by: ShuNing Co-authored-by: Flowyi Co-authored-by: lei yu Co-authored-by: Jay Co-authored-by: kennytm --- TOC.md | 6 +- .../massive-regions-best-practices.md | 14 +- br/backup-and-restore-storages.md | 82 ++++++++ br/backup-and-restore-tool.md | 2 +- command-line-flags-for-pd-configuration.md | 6 - media/sqlgram/BRIETables.png | Bin 0 -> 4898 bytes media/sqlgram/BackupOption.png | Bin 0 -> 11980 bytes media/sqlgram/BackupStmt.png | Bin 0 -> 3034 bytes media/sqlgram/BackupTSO.png | Bin 0 -> 1418 bytes media/sqlgram/Boolean.png | Bin 0 -> 2919 bytes media/sqlgram/RestoreOption.png | Bin 0 -> 7323 bytes media/sqlgram/RestoreStmt.png | Bin 0 -> 2860 bytes media/sqlgram/ShowBRIEStmt.png | Bin 0 -> 3370 bytes media/sqlgram/ShowLikeOrWhereOpt.png | Bin 4930 -> 2687 bytes sql-statements/sql-statement-backup.md | 190 ++++++++++++++++++ sql-statements/sql-statement-restore.md | 159 +++++++++++++++ sql-statements/sql-statement-show-backups.md | 99 +++++++++ tiflash/maintain-tiflash.md | 66 +----- tiflash/troubleshoot-tiflash.md | 69 +++++++ tiflash/upgrade-tiflash.md | 44 ---- 20 files changed, 613 insertions(+), 124 deletions(-) create mode 100644 br/backup-and-restore-storages.md create mode 100644 media/sqlgram/BRIETables.png create mode 100644 media/sqlgram/BackupOption.png create mode 100644 media/sqlgram/BackupStmt.png create mode 100644 media/sqlgram/BackupTSO.png create mode 100644 media/sqlgram/Boolean.png create mode 100644 media/sqlgram/RestoreOption.png create mode 100644 media/sqlgram/RestoreStmt.png create mode 100644 media/sqlgram/ShowBRIEStmt.png create mode 100644 sql-statements/sql-statement-backup.md create mode 100644 sql-statements/sql-statement-restore.md create mode 100644 sql-statements/sql-statement-show-backups.md create mode 100644 tiflash/troubleshoot-tiflash.md delete mode 100644 tiflash/upgrade-tiflash.md diff --git a/TOC.md b/TOC.md index 791acafb4fd02..0ff644a96239e 100644 --- a/TOC.md +++ b/TOC.md @@ -87,6 +87,7 @@ - [Use Mydumper and TiDB Lightning](/backup-and-restore-using-mydumper-lightning.md) - [Use BR](/br/backup-and-restore-tool.md) - [BR Usage Scenarios](/br/backup-and-restore-use-cases.md) + - [BR storages](/br/backup-and-restore-storages.md) + Identify Abnormal Queries - [Identify Slow Queries](/identify-slow-queries.md) - [Identify Expensive Queries](/identify-expensive-queries.md) @@ -175,6 +176,7 @@ - [`ALTER TABLE`](/sql-statements/sql-statement-alter-table.md) - [`ALTER USER`](/sql-statements/sql-statement-alter-user.md) - [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) + - [`BACKUP`](/sql-statements/sql-statement-backup.md) - [`BEGIN`](/sql-statements/sql-statement-begin.md) - [`COMMIT`](/sql-statements/sql-statement-commit.md) - [`CREATE DATABASE`](/sql-statements/sql-statement-create-database.md) @@ -213,6 +215,7 @@ - [`RENAME INDEX`](/sql-statements/sql-statement-rename-index.md) - [`RENAME TABLE`](/sql-statements/sql-statement-rename-table.md) - [`REPLACE`](/sql-statements/sql-statement-replace.md) + - [`RESTORE`](/sql-statements/sql-statement-restore.md) - [`REVOKE `](/sql-statements/sql-statement-revoke-privileges.md) - [`ROLLBACK`](/sql-statements/sql-statement-rollback.md) - [`SELECT`](/sql-statements/sql-statement-select.md) @@ -220,6 +223,7 @@ - [`SET PASSWORD`](/sql-statements/sql-statement-set-password.md) - [`SET TRANSACTION`](/sql-statements/sql-statement-set-transaction.md) - [`SET [GLOBAL|SESSION] `](/sql-statements/sql-statement-set-variable.md) + - [`SHOW [BACKUPS|RESTORES]`](/sql-statements/sql-statement-show-backups.md) - [`SHOW CHARACTER SET`](/sql-statements/sql-statement-show-character-set.md) - [`SHOW COLLATION`](/sql-statements/sql-statement-show-collation.md) - [`SHOW [FULL] COLUMNS FROM`](/sql-statements/sql-statement-show-columns-from.md) @@ -332,10 +336,10 @@ - [Maintain a TiFlash Cluster](/tiflash/maintain-tiflash.md) - [Monitor TiFlash](/tiflash/monitor-tiflash.md) - [Scale TiFlash](/scale-tidb-using-tiup.md#scale-out-a-tiflash-node) - - [Upgrade TiFlash Nodes](/tiflash/upgrade-tiflash.md) - [Configure TiFlash](/tiflash/tiflash-configuration.md) - [TiFlash Alert Rules](/tiflash/tiflash-alert-rules.md) - [Tune TiFlash Performance](/tiflash/tune-tiflash-performance.md) + - [Troubleshoot a TiFlash Cluster](/tiflash/troubleshoot-tiflash.md) - [FAQ](/tiflash/tiflash-faq.md) + TiDB Binlog - [Overview](/tidb-binlog/tidb-binlog-overview.md) diff --git a/best-practices/massive-regions-best-practices.md b/best-practices/massive-regions-best-practices.md index f06cb6f9e72b3..2850c2f0989e8 100644 --- a/best-practices/massive-regions-best-practices.md +++ b/best-practices/massive-regions-best-practices.md @@ -40,7 +40,7 @@ You can check the following monitoring metrics in Grafana's **TiKV Dashboard**: + `Raft store CPU` in the **Thread-CPU** panel - Reference value: lower than `raftstore.store-pool-size * 85%`. TiDB v2.1 does not have the `raftstore.store-pool-size` configuration item, so you can take this item's value as `1` in v2.1 versions. + Reference value: lower than `raftstore.store-pool-size * 85%`. ![Check Raftstore CPU](/media/best-practices/raft-store-cpu.png) @@ -61,7 +61,7 @@ After finding out the cause of a performance problem, try to solve it from the f ### Method 1: Increase Raftstore concurrency -Raftstore in TiDB v3.0 has been upgraded to a multi-threaded module, which greatly reduces the possibility that a Raftstore thread becomes the bottleneck. +Raftstore has been upgraded to a multi-threaded module since TiDB v3.0, which greatly reduces the possibility that a Raftstore thread becomes the bottleneck. By default, `raftstore.store-pool-size` is configured to `2` in TiKV. If a bottleneck occurs in Raftstore, you can properly increase the value of this configuration item according to the actual situation. But to avoid introducing unnecessary thread switching overhead, it is recommended that you do not set this value too high. @@ -69,13 +69,13 @@ By default, `raftstore.store-pool-size` is configured to `2` in TiKV. If a bottl In the actual situation, read and write requests are not evenly distributed on every Region. Instead, they are concentrated on a few Regions. Then you can minimize the number of messages between the Raft leader and the followers for the temporarily idle Regions, which is the feature of Hibernate Region. In this feature, Raftstore does sent tick messages to the Raft state machines of idle Regions if not necessary. Then these Raft state machines will not be triggered to generate heartbeat messages, which can greatly reduce the workload of Raftstore. -Up to TiDB v3.0.9 or v3.1.0-beta.1, Hibernate Region is still an experimental feature, which is enabled by default in [TiKV master](https://github.com/tikv/tikv/tree/master). You can enable this feature according to your needs. For the configuration of Hibernate Region, refer to [Configure Hibernate Region](https://github.com/tikv/tikv/blob/master/docs/reference/configuration/raftstore-config.md#hibernate-region). +Hibernate Region is enabled by default in [TiKV master](https://github.com/tikv/tikv/tree/master). You can enable this feature according to your needs. For the configuration of Hibernate Region, refer to [Configure Hibernate Region](https://github.com/tikv/tikv/blob/master/docs/reference/configuration/raftstore-config.md#hibernate-region). ### Method 3: Enable `Region Merge` > **Note:** > -> `Region Merge` is enabled in TiDB v3.0 by default. +> `Region Merge` is enabled by default since TiDB v3.0. You can also reduce the number of Regions by enabling `Region Merge`. Contrary to `Region Split`, `Region Merge` is the process of merging adjacent small Regions through scheduling. After dropping data or executing the `Drop Table` or `Truncate Table` statement, you can merge small Regions or even empty Regions to reduce resource consumption. @@ -133,7 +133,7 @@ This section describes some other problems and solutions. PD needs to persist Region Meta information on etcd to ensure that PD can quickly resume to provide Region routing services after switching the PD Leader node. As the number of Regions increases, the performance problem of etcd appears, making it slower for PD to get Region Meta information from etcd when PD is switching the Leader. With millions of Regions, it might take more than ten seconds or even tens of seconds to get the meta information from etcd. -To address this problem, `use-region-storage` is enabled by default in PD in TiDB v3.0. With this feature enabled, PD stores Region Meta information on local LevelDB and synchronizes the information among PD nodes through other mechanisms. +To address this problem, `use-region-storage` is enabled by default in PD since TiDB v3.0. With this feature enabled, PD stores Region Meta information on local LevelDB and synchronizes the information among PD nodes through other mechanisms. ### PD routing information is not updated in time @@ -143,8 +143,8 @@ You can check **Worker pending tasks** under **Task** in the **TiKV Grafana** pa ![Check pd-worker](/media/best-practices/pd-worker-metrics.png) -Currently, pd-worker is optimized for better efficiency in [#5620](https://github.com/tikv/tikv/pull/5620) on [TiKV master](https://github.com/tikv/tikv/tree/master), which is applied since [v3.0.5](/releases/release-3.0.5.md#tikv). If you encounter a similar problem, it is recommended to upgrade to v3.0.5 or later versions. +pd-worker has been optimized for better performance since [v3.0.5](/releases/release-3.0.5.md#tikv). If you encounter a similar problem, it is recommended to upgrade to the latest version. ### Prometheus is slow to query metrics -In a large-scale cluster, as the number of TiKV instances increases, Prometheus has greater pressure to query metrics, making it slower for Grafana to display these metrics. To ease this problem, metrics pre-calculation is configured in v3.0. +In a large-scale cluster, as the number of TiKV instances increases, Prometheus has greater pressure to query metrics, making it slower for Grafana to display these metrics. To ease this problem, metrics pre-calculation is configured since v3.0. diff --git a/br/backup-and-restore-storages.md b/br/backup-and-restore-storages.md new file mode 100644 index 0000000000000..973f06a876715 --- /dev/null +++ b/br/backup-and-restore-storages.md @@ -0,0 +1,82 @@ +--- +title: BR storages +summary: Describes the storage URL format used in BR. +category: reference +--- + +# BR storages + +BR supports reading and writing data on the local filesystem, as well as on Amazon S3 and Google Cloud Storage. These are distinguished by the URL scheme in the `--storage` parameter passed into BR. + +## Schemes + +The following services are supported: + +| Service | Schemes | Example URL | +|---------|---------|-------------| +| Local filesystem, distributed on every node | local | `local:///path/to/dest/` | +| Amazon S3 and compatible services | s3 | `s3://bucket-name/prefix/of/dest/` | +| Google Cloud Storage (GCS) | gcs, gs | `gcs://bucket-name/prefix/of/dest/` | +| Write to nowhere (for benchmarking only) | noop | `noop://` | + +## Parameters + +Cloud storages such as S3 and GCS sometimes require additional configuration for connection. You can specify parameters for such configuration. For example: + +{{< copyable "shell-regular" >}} + +```shell +./br backup full -u 127.0.0.1:2379 -s 's3://bucket-name/prefix?region=us-west-2' +``` + +### S3 parameters + +| Parameter | Description | +|----------:|---------| +| `access-key` | The access key | +| `secret-access-key` | The secret access key | +| `region` | Service Region for Amazon S3 (default to `us-east-1`) | +| `use-accelerate-endpoint` | Whether to use the accelerate endpoint on Amazon S3 (default to `false`) | +| `endpoint` | URL of custom endpoint for S3-compatible services (for example, `https://s3.example.com/`) | +| `force-path-style` | Use path style access rather than virtual hosted style access (default to `false`) | +| `storage-class` | Storage class of the uploaded objects (for example, `STANDARD`, `STANDARD_IA`) | +| `sse` | Server-side encryption algorithm used to encrypt the upload (empty, `AES256` or `aws:kms`) | +| `sse-kms-key-id` | If `sse` is set to `aws:kms`, specifies the KMS ID | +| `acl` | Canned ACL of the uploaded objects (for example, `private`, `authenticated-read`) | + +> **Note:** +> +> It is not recommended to pass in the access key and secret access key directly in the storage URL, because these keys are logged in plain text. BR tries to infer these keys from the environment in the following order: + +1. `$AWS_ACCESS_KEY_ID` and `$AWS_SECRET_ACCESS_KEY` environment variables +2. `$AWS_ACCESS_KEY` and `$AWS_SECRET_KEY` environment variables +3. Shared credentials file on the BR node at the path specified by the `$AWS_SHARED_CREDENTIALS_FILE` environment variable +4. Shared credentials file on the BR node at `~/.aws/credentials` +5. Current IAM role of the Amazon EC2 container +6. Current IAM role of the Amazon ECS task + +### GCS parameters + +| Parameter | Description | +|----------:|---------| +| `credentials-file` | The path to the credentials JSON file on the TiDB node | +| `storage-class` | Storage class of the uploaded objects (for example, `STANDARD`, `COLDLINE`) | +| `predefined-acl` | Predefined ACL of the uploaded objects (for example, `private`, `project-private`) | + +When `credentials-file` is not specified, BR will try to infer the credentials from the environment, in the following order: + +1. Content of the file on the BR node at the path specified by the `$GOOGLE_APPLICATION_CREDENTIALS` environment variable +2. Content of the file on the BR node at `~/.config/gcloud/application_default_credentials.json` +3. When running in GCE or GAE, the credentials fetched from the metadata server. + +## Sending credentials to TiKV + +By default, when using S3 and GCS destinations, BR will send the credentials to every TiKV nodes to reduce setup complexity. + +However, this is unsuitable on cloud environment, where every node has their own role and permission. In such cases, you need to disable credentials sending with `--send-credentials-to-tikv=false` (or the short form `-c=0`): + +{{< copyable "shell-regular" >}} + +```shell +./br backup full -c=0 -u pd-service:2379 -s 's3://bucket-name/prefix' +``` diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index bec3bab903059..498f42f0a23be 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -263,7 +263,7 @@ To restore the cluster data, use the `br restore` command. You can add the `full > - Data are replicated into multiple peers. When ingesting SSTs, these files have to be present on *all* peers. This is unlike back up where reading from a single node is enough. > - Where each peer is scattered to during restore is random. We don't know in advance which node will read which file. > -> These can be avoided using shared storage, e.g. mounting an NFS on the local path, or using S3. With network storage, every node can automatically read every SST file, so these caveats no longer apply. +> These can be avoided using shared storage, for example mounting an NFS on the local path, or using S3. With network storage, every node can automatically read every SST file, so these caveats no longer apply. ### Restore all the backup data diff --git a/command-line-flags-for-pd-configuration.md b/command-line-flags-for-pd-configuration.md index 54685c083ac7b..bf4ed6144d9f2 100644 --- a/command-line-flags-for-pd-configuration.md +++ b/command-line-flags-for-pd-configuration.md @@ -102,12 +102,6 @@ PD is configurable using command-line flags and environment variables. - The path of the PEM file including the X509 key, used to enable TLS - Default: "" -## `--namespace-classifier` - -- To specify the namespace classifier used by PD -- Default: "table" -- If you use TiKV separately, not in the entire TiDB cluster, it is recommended to configure the value to 'default'. - ## `--metrics-addr` - The address of Prometheus Pushgateway, which does not push data to Promethus by default. diff --git a/media/sqlgram/BRIETables.png b/media/sqlgram/BRIETables.png new file mode 100644 index 0000000000000000000000000000000000000000..f737423edcb11f951ebc96be1ab9cd12ae9473f0 GIT binary patch literal 4898 zcmZ{ocTm$$x5iOG1q1{H1yqnGEg&t@5s(t9AOaddl!W>Xy*KHKv_L372)&B*1VU2* z5lo~>3kd-MLy_JDrC;BB=gz$|_q{XE>~qfUKRbKQes*T#ADZYfGx9Lf(9keL^dFeh z(452ljn6L8{vF@_rv2B1??WRCowKtuMn*;gfe;!R3WY*ZD3q|Uu!x8V9*<8;OJinc z9vvN(lat%t-X;=>W@ct4CMFdX6{n}CHa0djH8sh}$==@HZ{NOMU0tP8sg;$LQc_YW zDJkvk?GqCdot>Tj{{DCG-Ze5ZDkvyeSy>Sm7nhZly?_6HS67#(r)Nw|jI^{g2n5p9 z)RdHzl#q}R6BDbgt#xs62?z*?jg1u*6}@xkj;pJyii(P=s%l|jp}M-dv9Ym?jEug% z{^Q4w)zs9GNTipS*OMntQd3ivm6a_mEfp0N9UUDF3=9kn4Wpx@qoSf-ym%omFK=OC zp{J*(q@-kPYYT(H>g($r92~;K!=FBV3V}e}+}wP8e5|ajA|oR;G&HKKs~Z{`+}+(h zJUo1TeXXsn)6>%v5)$(B^L2G~g@lAgMn>l6=QlPs6ciNv{QLp~10OzoSXx>d5fNc$ zXP1Cl$~x8 zv7~|u0Ja!K@5Sl~YCGfOYc-diH|}Uur4^^O<~my6(P|in=|DaXvfZ-8yPhclRgp6a zY-0jdF6M$60w){KBwCq4mO6zK1)ME$7Cd4#KesikJUJ+9E6`U3OnpQ%{ii)`M}}*U z30H_w+>0{_Pj$3{LG7dvw%^ah=N@;B!!;?*ECoNlepKj4hLS$17`8o;Uc9s+G*GuX zB=VWk7stLG)pk()+Eo^Lb)p=75_rOAml)VpA&aMnaqv$|Gx$=+>CKqyocBLU@uO=? z+ms^$)e7-e34Sf&{AhedKaq2yk4T5#{H{@85&X25+)rt^$tR6T?cb#fJ-CEOn=86_ zN9+B}mG5&;U-CU!99rF zj1ON_2=z)5sy1(hb~_#KtxPO&G(Pgspb7L$2eH^(fevUE3lk)a9^qWPZ6;Zqu={oh zFVu_HaBy?u0*blNWKOk_8yvxeoes!4+_JY|FEPFL=g)uu+Rzh_Zhr6Y{t0XxjF?E) z2vLOu4>fa<)O8UfYnDe4S9gjf8jjW2oH1CAyDs-k+%`ykuj=BhoRk`%FDM}^EMbY_ zTRHG5#xJF7aqOi+9X^rln5JSULEM4o4aPruE^7d71&oO`ioEY)5O%(%Ba&G!dps1a z`Cw@tpA@A;3^{N+!m2L5(}$SmP5%UirgLxJYY9I=FRPo79MhyIKMbd%{Oe)DV!o2g zi#RII*edN_+BlomuDdY9V#e1>k3)6b4!tT{u2g)|KHw->!YriVm^B~xp5*P;Dnl{y zjzi?Ay$$M)j9#FCOHLx@vy)VvdCh{p`a_1D13jfE^zX~j9@uPkd8eUz4Q@9Y{`Q-! z%>lBGXyZ1(7kLk*=9!+NMig!r@(%gO2~31=U=KnT40nT{`j2@WIp8Lu?oDlcusPlV z3$Z)2e307^RURM?rX#>g>uHjXZZ|?&Zhk|hYYs`H2NloH_02@Py^O8+=)F&?@!ePZ zG9Bh~^>GWQJk1r;oj!j7sZvEA=bOq~x zYLHWSabVH)#F_FkixAt(;KkO9>p#0o(Qt=#D@%1p-|L6Vx2CzS1N}9#CF&=2()ap$ zpC06Z-;m?V4vUhcZ0H(Xu3%Ym=uXJas3rFXmi?M#ets0<8)RGiqr=T<$FQJZua#{| zI+hR*lO7vaSFt-_D%t-oW_FD^WCTgP&jd(R;yoQ0_0O-t(8HSPml1)F{r)r?ly}UZ z6d?g`*9l%fpb2X#1GQc_LMAUiYOl`@zD-u#GgJP+-ej60$sj}4N0B9NgN|-Wf1GFfWhXTv2bsD8df7WE;H7*}u$1W=h z=^1>(8g7yeYwLljQ!&+B%g=;3m%6PQ<<3{w24xJFgg)J5@d(|t4mKQK+tkdExXW9S zDUD_q;(WQ>y3~AJ=v7tkHFgoQ0|P zFE$Nw<_<`C(uSD6&thi?DR>s}DLneknzeJD8#Med**4-DcMH;Y7x0BgrS>Pvwq5aJ zo0L7#eDdv%hw~*Zk-_63I?CdCZ)JtcnA^PnPEatZao4OTVYoF8Xtn1Mw>K8~xMBT} z4GB5|N?POT8#}(gxP^cjzDg2Jn4ta23Z)}s`gPL_2~h+q)>Kd*&^;@bPoTO*0oia4 zYmUsmEhbG|HAbwT5Rz>}rrVFzr<1Z1fP%@&wEI3Cky4sCBTTF3J8KF+;daIz+-CS0el>Qw-g1hs{$*l z^tjQK;ZYN5PP048{Lt5A{qt`7A1TGxdwT1ZZ1)0f~&m|&@UD5A^6vm_2F+EOI zjeBn=CPICVYTFT`6i!$|ANaEBt(BKyZdIAEEFl<+JIo<0{Pxb?D=KtbXdHD_3(QJB zUxnBGwaOYA3yME?za$FqB3a+_-2V{nB(dy;?#*%KA)k*{i1(iCMl4#4;<>I?x58__ zb(gL>Iponr0+C&Eiw6uEV&`&J)g?3+Qb8AZCHTS_uZ&HEy-!luRLAsueUYWP; zuK;d16<<}6kR_~Mw(I=c57sA%o(4r09A7(kM&~;iEEjoX#!opU;R#|kNxe&~iM5^C zCS;=*L^l|ek5})VNO}lDnZcvosysjplK>TPI^(DCkQGhBCO0xGuy!4rCo zz}InOX^j>9_I+IpcVV3za!2IGmHQo+y}$7|BobSC|U9J7-4+ol=00}5Cpfm zA;La$8(ItmpvcMXo=bygNYG1Q0n39~NMT<2S8e}Gmex3bB3bf6%427+T~d}Qdcb~7 zJz82GTEdp=WZRwx=5;%=K8UKXGbM;hx(ZF@6K6%i~xQWSAaVqaCMWPg!8Aq z{OIoaM#NZc+ZS>V!Ul3n%$QfA_oK^hfcMJG{a zDu71ApvF!vx0ajtkcc4gR} z%N_ONlAVlTR8c3AA4(*{;tS9hH3M%G@R%$Ha53W?OCX!TLmbQ~w$L`P0!<8wX%2xsF=zT`NF>&_FeVTOM&;RwBS% z8`nCkeR$yddq?SCFsoK&ps|JZ3G(9cnR?)JWN-Ywz7FmNMnUJluLusnE|Uqq$ANWI9nsMfvX|D-+z%Qlxc&>Pu$`&UsJvi-{hD>4$ zElw#wIJwc%(k$BUA_q1Onjw~75N}=s{pBx_d+231};D(|u`joR0lEH^%SK2q*-cDj+5BvWbJsXlXKCqL&3 z#j5^zTcu!qH}&$PvNyRV3_7yEUC<5zt{j4KV1HAo;i%kvM$kuhU*j)iOv@JNKS zO*NU#|Dw^t$)n3Rd*{&#jsUiqj{N2?8;d+PY_x`Fwp6lfqk$f{poZy}O@md!Nc(mK zmYa^u*smMD&Ybw#QYi6{LZZ2PaF4x{{QJ^O2}NgLBQG2>YVmvLh7&%h>WI4q%^rPVH23HoS;|n|e z`11?nKGUE-wAW@nONstw>dT~PcYcyO7m{Zaz;u=l#$l(hcF)P)?VWa9d$U2GP$TE9 za!2||?=d2=@IJSQ1kf{4%w|zV`O+Zx^)zGfCz2(UyoNiQ9LqUqSODiHE--{t6$MLE zmd&o*MW%Jx1(i)$54lzA_A)N&Tr6_{Ce}%&8{?Z!qfvL8>&ZO*0QnPXMTz-)sp)69 z*B$?g4m84)R^nN?rllotI%LAar zIuoM@f3j<_-F;WZvThA=`FAMCP_IPKsQ#P0$l)+D?%8KdcKFE`a?aDN=e{Ssj7|=y zT#)Dj*01%swdBVP3E_T>_>vN-)L_SVy8Ks-$#cy~1MdnBn!yW6J;S!R$EcXwO_WZY zcoQM>N6x%x1Yskmrm{iX+FJZ8F%kTLPYgZRtSextH~WtY z@67&l;mW3C5eCtww%jCR(yF-`uAU_5$P_wQB#a>oMYiZGPIEnk;AXez0MA@k9TOUP z4GQUUh^=chNEH+q17u6N!yS(JY9Rvu`6x_t#OHC206Z{MugJ~@7(-yRB^APm>4QjP z%S-KHr<`RDFcfEIVKkbScJv8eL?W&(_Wgh<(_*AlF_A45JU$hQ&-!A_>dE>NjY?N~1vo{Z`)K83t3AP=| z?3IhnI@TI?7)@+1Tqo1T3|l>l&A_Sct~Y%C6KQXM>Gc_nlFx$3Tiz|fzkgpe5FL{T JwOaO3{{h~DnRoyI literal 0 HcmV?d00001 diff --git a/media/sqlgram/BackupOption.png b/media/sqlgram/BackupOption.png new file mode 100644 index 0000000000000000000000000000000000000000..4425d81c996e06d6d8f3d2cd8e70a826456bba40 GIT binary patch literal 11980 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�~LoqQiMn*>E<>i5afns7}f`WopR#rVdJw!xAu&}UZ zW@gLF%TG^FT3T9AP*B|5+?SV^*x1->YimNG{HOo`3O`9iK~#9!?Va~y+DI11MG$%- zlGqRs#uPaQgN-Y0v7NTbrfu%Fw=27MyVraB|9`nD8i7Cp$*2*%?+=L>2|UAm^ya-m zGf$FG@4Y@qSJ(ll1u8?jy1*_#Ex_}Cchl6jh$m_hp5;{keEnIu{5$LgR7UaKRN*f6 z0xGL`0^*56JW+@z;)y~$QHUqvi9$RPPZZ*bLOc;q6yk|OJP}XS+Tf{G5l>XwcvfYq zYB)SK@)pfiV(8?bnp{IXQIX-(*Ei z*^uM6HHrlX7KLIC2IlsTdSbHds&aq$ZYL zV4K>eJXOZ5C&jZ$38#FrQ<{Nzq894j#d9B^JXM{>07fQuR4!$KW(Dy*snH{TCN+Bwp0cKS;^`XPZ-M9B z;I1^_Ep}B7bp$8DLL)McGb{;mlfhlmScGo42X`klqJE`Q7GiMs@I95mId)bKZKo12 za@TDvY3Qyyp%F8v^n#i!@T5V{)WnigMuD6OjY8llnS&$juAHfTPz(^cJE0LhVwCCR zpvLg5&=bTZ)p_LZ%-`!Gnwpg9^Ak%U@Ra(1{%6iq90!9f@-?Rftu?|^8uYQt@}&MiiWJX?)6yk|^q7Y9M;)!^o5KqJt@kBgPYlvs5oTgqOo~Q+Q{?IX+MewoX!5x_ZuKn`McBb(>8VB@dte$~*ritfu9PL(MoMk*)o=e6(_37E?h-Z3uo{VFu z-iu>B!+4$s|MFVkhce=s0G=_eS?Ztp^lB#XJP5Il@DJ)2nZUD=M?Bkc?dJe+m03I$ z2=O7-aA+Z(Dd8Ear^4t0yur@`o}s=w1=No+fai&}R(PI9v&)h)j;Vfsf+s(JFYuH= z_1*y?Sv+I2Bk}0kiY79OYs~olA$*)!JVV{u06Qn?<0%E7Y{-E8_B8SJF=LLf=06zV zWej+VeO4;2OcJq1!2rWz2Jl>~UA2niKuA6pk7pELDFN`@C@|I83zHn#?xV?yH`oQ_ zWrrSj3mwTW=&;k>Sv+Amo|8O0#`MmARsK?zYqBjZHazQv!lcz3c01j89*4klD(8xK zVj%m1n%IOmD4zX;_1RUcJ^Qf2^SQ@_lvm_Sh2uSbqId`ol^}RZ(pI6cC0OM>Mey6E zuebOGb=H+GJiGLD;TCv0d3X$##6%Ol>etJ$SkEnSABtOW+l?pO4o`1QT@VUSNn4*i zhab$waSn$9&WCVF@l@3wJ5k(G!3$6iJhyH0$xMoEUs!+DIi6db+F3jW)#35vd3c5t;sdp-NdK3B%wgI}fI-cA1Xi;~Y&tQ0pO7M!aYO<68A|DXj2HSAq8Pa;v zJ=GSb^!1~S?+soa8uIZ2yRb#V;d7E)5Ch2xAZ+J zS`1Iwa9K;44eQR}-qfbk@z`l2w5I3MM;7-26k=LiFGocZ$gb$vzzOTCeMSV|l z`qEnNdvZKEeaw)GPRbc zr5PHD+stopudP0~udf^q$+2}gR2@9kL-?>oBX@H8(h3r}Gizz`A)Jv)=Zt11mO5-G zG^xSaS{+YawtdeUHIiO@8c(MZEV}c+lg4!wcjRtg zn-4r~4wk$T6OSd#gaj%Roj8c&~T`9P7osD#cZmS*v!&a=j>CvO>RfF5RIX|3@T911}9 zdixa5j$K&1{4Bt)Mp6E(6$sCG71fWL5Y>;GhH>jUuQ{Hb*(tHlF3Feb6#7k=A)X20 z*{n)Z#q(FrJmA?1ScZ6}g{L!dmPb5qD^&c@@&`BX6;=Tq-N zb{BIPA%)`opygkY447#C0^{myQSoGe_5kX^pCw;@~?-*Wt-IgC!IQ@ cP^j4Te`c~V<`K0bkpKVy07*qoM6N<$f}OnYVE_OC literal 0 HcmV?d00001 diff --git a/media/sqlgram/BackupTSO.png b/media/sqlgram/BackupTSO.png new file mode 100644 index 0000000000000000000000000000000000000000..29ea0bf28a549b892ca0a08eccd0271178ae4e84 GIT binary patch literal 1418 zcmV;51$Fv~P)+9>Osj0}w z$WBg9t*x!s*Vn5=NEG#T3DJeieK-SjQpP!#xTwEt7CoeBA zJUl!zGc&upyRNRTDk>^!YHB$-Igyc(FfcH8cXvNOKTAtXK|w(}Iyx;aEml@m%gf6s zC@8tPxm8tFXJ==GgoJ5nY31eRJv}|l%*;18H-&|TkdTnc$;mrAJ3c->-QC@cjEt|Z zuhP=ewVQQYxiVDy32?r82eBTx=L_5lYm|RXMUZ+YEa4y)*uY z29BFt*+jdJ=SM7+NTFLg%2uh}t*<%F*MI2Q(;jzf=Z#p-v`VCOa!{)M6{q>Sp|<(i z1Lo9DK<&qHhA5kgLc5QeWCPO%oir$jzcjDgkxs!>iFE&btYby#TKobDl>ma%JZ%5~ zSCSor-lsF7ggDM%C4KEGG$FgB+ti`>t^Qap+L3M%%&L+!bm?1wPzohM^iHUg7*!CI zWXF?puLr=L7w_s?eP=wsAE4~8VZdFUnbbg4qH@trY-D?FEd2}UI6z6dySQ~&@3i^^ zz;|9e;6_mi>J+B_5!3##)$-`3*V+<4e*`FLx{nemjYlPen55TfiTw2?KXQPx4Tg?Y)0eDPsUuAIUn z`ry<~)bqxjwWrM(jF_tr9ZcO4G>CTHUz669fap`|2Oj=j0C`l$We*CS(|o&$f9 za3ein!$`uJ+0m4ILi!tmhOC?lX72&wPZCkd`1A;rd@M&`ifinH)$B7**;uv~gEiIy zJwq*nPk7CwpX(whotB8&oMEOD;p*e7bjq$S%+?%~Zup#v5jKp{DQO0$M}{iLIFo;Q z@VL_dc{xrdmw(|@TG=u)xxCh@v~p$~f)b=sDy32?rE+hTzit#6B`I%0u~Cll`a7ed zm}M#ZjRIp(lJaJ;@unPQ6+$YdQYxiVDy32?rLqv^(_8t(=SnG$hq-)Mja!AkpWhY0 zm*d9=pzIBf4nP^R-cBl|@*tJ-gHRf?Dl2Ws=C%e@S!raX3@e|ghSD5nbl;&_VP!_e z6XZgZ3M*%3M)!4tQ??RH)3dX>aSKOR3iaz&U@_CO#MBC|b&sWVXIf@&ukBqXQ3i)_ zKx(CpafVqm^02#0xmkn%SLtjP=?kUb{;|oG#uc`+oGdPe%MV+XtUMjB)Zo)%?yw?# zwlmdO+VcrGcE*c>@e*J%xzIwY^E-|ni@@#$e(RrzJu+oa7EaSI%QI&jhhGwkwA1E!vo`D^) z27g7lEYcU0U1i_KlGWySYGMukigH<`@0anjiHg!aNlMDtT@j^7f3KC1i}d$f8MR1% z|1-8Gl~O5{QYn>EDV0*Wx5}KVC#t1<+HU7jx7~wEDQkIE=T}adPgG2q(+^}`)np`y Yf5q>DI^O$z&Hw-a07*qoM6N<$f*ugIZU6uP literal 0 HcmV?d00001 diff --git a/media/sqlgram/Boolean.png b/media/sqlgram/Boolean.png new file mode 100644 index 0000000000000000000000000000000000000000..cedd61a77534488a8bf4dabe3f4e2a6e405824a3 GIT binary patch literal 2919 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 R`zinc002ovPDHLkV1lXqVsHQe literal 0 HcmV?d00001 diff --git a/media/sqlgram/RestoreOption.png b/media/sqlgram/RestoreOption.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff807478df1590886ae3e39c887093adfec934b GIT binary patch literal 7323 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 literal 0 HcmV?d00001 diff --git a/media/sqlgram/RestoreStmt.png b/media/sqlgram/RestoreStmt.png new file mode 100644 index 0000000000000000000000000000000000000000..7fae5bc1152b7463e4ba21b44e4d1194a3f013ac GIT binary patch literal 2860 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 KYK`*q*Z&461#3hA diff --git a/sql-statements/sql-statement-backup.md b/sql-statements/sql-statement-backup.md new file mode 100644 index 0000000000000..284b9be0db186 --- /dev/null +++ b/sql-statements/sql-statement-backup.md @@ -0,0 +1,190 @@ +--- +title: BACKUP | TiDB SQL Statement Reference +summary: An overview of the usage of BACKUP for the TiDB database. +category: reference +--- + +# BACKUP + +This statement is used to perform a distributed backup of the TiDB cluster. + +The `BACKUP` statement uses the same engine as the [BR tool](/br/backup-and-restore-use-cases.md) does, except that the backup process is driven by TiDB itself rather than a separate BR tool. All benefits and warnings of BR also apply in this statement. + +Executing `BACKUP` requires `SUPER` privilege. Additionally, both the TiDB node executing the backup and all TiKV nodes in the cluster must have read or write permission to the destination. + +The `BACKUP` statement is blocked until the entire backup task is finished, failed, or canceled. A long-lasting connection should be prepared for executing `BACKUP`. The task can be canceled using the [`KILL TIDB QUERY`](/sql-statements/sql-statement-kill.md) statement. + +Only one `BACKUP` and [`RESTORE`](/sql-statements/sql-statement-restore.md) task can be executed at a time. If a `BACKUP` or `RESTORE` statement is already being executed on the same TiDB server, the new `BACKUP` execution will wait until all previous tasks are finished. + +`BACKUP` can only be used with "tikv" storage engine. Using `BACKUP` with the "mocktikv" engine will fail. + +## Synopsis + +**BackupStmt:** + +![BackupStmt](/media/sqlgram/BackupStmt.png) + +**BRIETables:** + +![BRIETables](/media/sqlgram/BRIETables.png) + +**BackupOption:** + +![BackupOption](/media/sqlgram/BackupOption.png) + +**Boolean:** + +![Boolean](/media/sqlgram/Boolean.png) + +**BackupTSO:** + +![BackupTSO](/media/sqlgram/BackupTSO.png) + +## Examples + +### Back up databases + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 'local:///mnt/backup/2020/04/'; +``` + +```sql ++------------------------------+-----------+-----------------+---------------------+---------------------+ +| Destination | Size | BackupTS | Queue Time | Execution Time | ++------------------------------+-----------+-----------------+---------------------+---------------------+ +| local:///mnt/backup/2020/04/ | 248665063 | 416099531454472 | 2020-04-12 23:09:48 | 2020-04-12 23:09:48 | ++------------------------------+-----------+-----------------+---------------------+---------------------+ +1 row in set (58.453 sec) +``` + +In the example above, the `test` database is backed up into the local filesystem. The data is saved as SST files in the `/mnt/backup/2020/04/` directories distributed among all TiDB and TiKV nodes. + +The first row of the result above is described as follows: + +| Column | Description | +| :-------- | :--------- | +| `Destination` | The destination URL | +| `Size` | The total size of the backup archive, in bytes | +| `BackupTS` | The TSO of the snapshot when the backup is created (useful for [incremental backup](#incremental-backup)) | +| `Queue Time` | The timestamp (in current time zone) when the `BACKUP` task is queued. | +| `Execution Time` | The timestamp (in current time zone) when the `BACKUP` task starts to run. | + +### Back up tables + +{{< copyable "sql" >}} + +```sql +BACKUP TABLE `test`.`sbtest01` TO 'local:///mnt/backup/sbtest01/'; +``` + +{{< copyable "sql" >}} + +```sql +BACKUP TABLE sbtest02, sbtest03, sbtest04 TO 'local:///mnt/backup/sbtest/'; +``` + +### Back up the entire cluster + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE * TO 'local:///mnt/backup/full/'; +``` + +Note that the system tables (`mysql.*`, `INFORMATION_SCHEMA.*`, `PERFORMANCE_SCHEMA.*`, …) will not be included into the backup. + +### Remote destinations + +BR supports backing up data to S3 or GCS: + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?region=us-west-2'; +``` + +The URL syntax is further explained in [BR storages](/br/backup-and-restore-storages.md). + +When running on cloud environment where credentials should not be distributed, set the `SEND_CREDENTIALS_TO_TIKV` option to `FALSE`: + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?region=us-west-2' + SEND_CREDENTIALS_TO_TIKV = FALSE; +``` + +### Performance fine-tuning + +Use `RATE_LIMIT` to limit the average upload speed per TiKV node to reduce network bandwidth. + +By default, every TiKV node would run 4 backup threads. This value can be adjusted with the `CONCURRENCY` option. + +Before backup is completed, `BACKUP` would perform a checksum against the data on the cluster to verify correctness. This step can be disabled with the `CHECKSUM` option if you are confident that this is unnecessary. + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-06/' + RATE_LIMIT = 120 MB/SECOND + CONCURRENCY = 8 + CHECKSUM = FALSE; +``` + +### Snapshot + +Specify a timestamp, TSO or relative time to backup historical data. + +{{< copyable "sql" >}} + +```sql +-- relative time +BACKUP DATABASE `test` TO 'local:///mnt/backup/hist01' + SNAPSHOT = 36 HOUR AGO; + +-- timestamp (in current time zone) +BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02' + SNAPSHOT = '2020-04-01 12:00:00'; + +-- timestamp oracle +BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03' + SNAPSHOT = 415685305958400; +``` + +The supported units for relative time are: + +* MICROSECOND +* SECOND +* MINUTE +* HOUR +* DAY +* WEEK + +Note that, following SQL standard, the units are always singular. + +### Incremental backup + +Supply the `LAST_BACKUP` option to only backup the changes between the last backup to the current snapshot. + +{{< copyable "sql" >}} + +```sql +-- timestamp (in current time zone) +BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02' + LAST_BACKUP = '2020-04-01 12:00:00'; + +-- timestamp oracle +BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03' + LAST_BACKUP = 415685305958400; +``` + +## MySQL compatibility + +This statement is a TiDB extension to MySQL syntax. + +## See also + +* [RESTORE](/sql-statements/sql-statement-restore.md) +* [SHOW BACKUPS](/sql-statements/sql-statement-show-backups.md) diff --git a/sql-statements/sql-statement-restore.md b/sql-statements/sql-statement-restore.md new file mode 100644 index 0000000000000..d47aabb676dfd --- /dev/null +++ b/sql-statements/sql-statement-restore.md @@ -0,0 +1,159 @@ +--- +title: RESTORE | TiDB SQL Statement Reference +summary: An overview of the usage of RESTORE for the TiDB database. +category: reference +--- + +# RESTORE + +This statement performs a distributed restore from a backup archive previously produced by a [`BACKUP` statement](/sql-statements/sql-statement-backup.md). + +The `RESTORE` statement uses the same engine as the [BR tool](/br/backup-and-restore-use-cases.md), except that the restore process is driven by TiDB itself rather than a separate BR tool. All benefits and caveats of BR also apply here. In particular, **`RESTORE` is currently not ACID-compliant**. Before running `RESTORE`, ensure that the following requirements are met: + +* The cluster is "offline", and the current TiDB session is the only active SQL connection to access all tables being restored. +* When a full restore is being performed, the tables being restored should not already exist, because existing data might be overridden and causes inconsistency between the data and indices. +* When an incremental restore is being performed, the tables should be at the exact same state as the `LAST_BACKUP` timestamp when the backup is created. + +Running `RESTORE` requires `SUPER` privilege. Additionally, both the TiDB node executing the backup and all TiKV nodes in the cluster must have read permission from the destination. + +The `RESTORE` statement is blocking, and will finish only after the entire backup task is finished, failed, or canceled. A long-lasting connection should be prepared for running `RESTORE`. The task can be canceled using the [`KILL TIDB QUERY`](/sql-statements/sql-statement-kill.md) statement. + +Only one `BACKUP` and `RESTORE` task can be executed at a time. If a `BACKUP` or `RESTORE` task is already running on the same TiDB server, the new `RESTORE` execution will wait until all previous tasks are done. + +`RESTORE` can only be used with "tikv" storage engine. Using `RESTORE` with the "mocktikv" engine will fail. + +## Synopsis + +**RestoreStmt:** + +![RestoreStmt](/media/sqlgram/RestoreStmt.png) + +**BRIETables:** + +![BRIETables](/media/sqlgram/BRIETables.png) + +**RestoreOption:** + +![RestoreOption](/media/sqlgram/RestoreOption.png) + +**Boolean:** + +![Boolean](/media/sqlgram/Boolean.png) + +## Examples + +### Restore from backup archive + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE * FROM 'local:///mnt/backup/2020/04/'; +``` + +```sql ++------------------------------+-----------+----------+---------------------+---------------------+ +| Destination | Size | BackupTS | Queue Time | Execution Time | ++------------------------------+-----------+----------+---------------------+---------------------+ +| local:///mnt/backup/2020/04/ | 248665063 | 0 | 2020-04-21 17:16:55 | 2020-04-21 17:16:55 | ++------------------------------+-----------+----------+---------------------+---------------------+ +1 row in set (28.961 sec) +``` + +In the example above, all data is restored from a backup archive at the local filesystem. The data is read as SST files from the `/mnt/backup/2020/04/` directories distributed among all TiDB and TiKV nodes. + +The first row of the result above is described as follows: + +| Column | Description | +| :-------- | :--------- | +| `Destination` | The destination URL to read from | +| `Size` | The total size of the backup archive, in bytes | +| `BackupTS` | (not used) | +| `Queue Time` | The timestamp (in current time zone) when the `RESTORE` task was queued. | +| `Execution Time` | The timestamp (in current time zone) when the `RESTORE` task starts to run. | + +### Partial restore + +You can specify which databases or tables to restore. If some databases or tables are missing from the backup archive, they will be ignored, and thus `RESTORE` would complete without doing anything. + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE `test` FROM 'local:///mnt/backup/2020/04/'; +``` + +{{< copyable "sql" >}} + +```sql +RESTORE TABLE `test`.`sbtest01`, `test`.`sbtest02` FROM 'local:///mnt/backup/2020/04/'; +``` + +### Remote destinations + +BR supports restoring data from S3 or GCS: + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-05/?region=us-west-2'; +``` + +The URL syntax is further explained in [BR storages](/br/backup-and-restore-storages.md). + +When running on cloud environment where credentials should not be distributed, set the `SEND_CREDENTIALS_TO_TIKV` option to `FALSE`: + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-05/?region=us-west-2' + SEND_CREDENTIALS_TO_TIKV = FALSE; +``` + +### Performance fine-tuning + +Use `RATE_LIMIT` to limit the average download speed per TiKV node to reduce network bandwidth. + +By default, TiDB node would run 128 restore threads. This value can be adjusted with the `CONCURRENCY` option. + +Before restore is completed, `RESTORE` would perform a checksum against the data from the archive to verify correctness. This step can be disabled with the `CHECKSUM` option if you are confident that this is unnecessary. + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-06/' + RATE_LIMIT = 120 MB/SECOND + CONCURRENCY = 64 + CHECKSUM = FALSE; +``` + +### Incremental restore + +There is no special syntax to perform incremental restore. TiDB will recognize whether the backup archive is full or incremental and take appropriate action. You only need to apply each incremental restore in correct order. + +For instance, if a backup task is created as follows: + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 's3://example-bucket/full-backup' SNAPSHOT = 413612900352000; +BACKUP DATABASE `test` TO 's3://example-bucket/inc-backup-1' SNAPSHOT = 414971854848000 LAST_BACKUP = 413612900352000; +BACKUP DATABASE `test` TO 's3://example-bucket/inc-backup-2' SNAPSHOT = 416353458585600 LAST_BACKUP = 414971854848000; +``` + +then the same order should be applied in the restore: + +{{< copyable "sql" >}} + +```sql +RESTORE DATABASE * FROM 's3://example-bucket/full-backup'; +RESTORE DATABASE * FROM 's3://example-bucket/inc-backup-1'; +RESTORE DATABASE * FROM 's3://example-bucket/inc-backup-2'; +``` + +## MySQL compatibility + +This statement is a TiDB extension to MySQL syntax. + +## See also + +* [BACKUP](/sql-statements/sql-statement-backup.md) +* [SHOW RESTORES](/sql-statements/sql-statement-show-backups.md) diff --git a/sql-statements/sql-statement-show-backups.md b/sql-statements/sql-statement-show-backups.md new file mode 100644 index 0000000000000..9ae112ee44335 --- /dev/null +++ b/sql-statements/sql-statement-show-backups.md @@ -0,0 +1,99 @@ +--- +title: SHOW [BACKUPS|RESTORES] | TiDB SQL Statement Reference +summary: An overview of the usage of SHOW [BACKUPS|RESTORES] for the TiDB database. +category: reference +--- + +# SHOW [BACKUPS|RESTORES] + +This statement shows a list of all queued and running [`BACKUP`](/sql-statements/sql-statement-backup.md) and [`RESTORE`](/sql-statements/sql-statement-restore.md) tasks. + +Use `SHOW BACKUPS` to query `BACKUP` tasks and use `SHOW RESTORES` to query `RESTORE` tasks. Both statements require `SUPER` privilege to run. + +## Synopsis + +**ShowBRIEStmt:** + +![ShowBRIEStmt](/media/sqlgram/ShowBRIEStmt.png) + +**ShowLikeOrWhereOpt:** + +![ShowLikeOrWhereOpt](/media/sqlgram/ShowLikeOrWhereOpt.png) + +## Examples + +In one connection, execute the following statement: + +{{< copyable "sql" >}} + +```sql +BACKUP DATABASE `test` TO 's3://example-bucket/backup-01/?region=us-west-1'; +``` + +Before the backup completes, run `SHOW BACKUPS` in a new connection: + +{{< copyable "sql" >}} + +```sql +SHOW BACKUPS; +``` + +```sql ++--------------------------------+---------+----------+---------------------+---------------------+-------------+------------+ +| Destination | State | Progress | Queue_Time | Execution_Time | Finish_Time | Connection | ++--------------------------------+---------+----------+---------------------+---------------------+-------------+------------+ +| s3://example-bucket/backup-01/ | Backup | 98.38 | 2020-04-12 23:09:03 | 2020-04-12 23:09:25 | NULL | 4 | ++--------------------------------+---------+----------+---------------------+---------------------+-------------+------------+ +1 row in set (0.00 sec) +``` + +The first row of the result above is described as follows: + +| Column | Description | +| :-------- | :--------- | +| `Destination` | The destination URL (with all parameters stripped to avoid leaking secret keys) | +| `State` | State of the task | +| `Progress` | Estimated progress in the current state as a percentage | +| `Queue_Time` | When the task was queued | +| `Execution_Time` | When the task was started; the value is `0000-00-00 00:00:00` for queueing tasks | +| `Finish_Time` | (not used for now) | +| `Connection` | Connection ID running this task | + +The connection ID can be used to cancel a backup/restore task via the [`KILL TIDB QUERY`](/sql-statements/sql-statement-kill.md) statement. + +{{< copyable "sql" >}} + +```sql +KILL TIDB QUERY 4; +``` + +```sql +Query OK, 0 rows affected (0.00 sec) +``` + +### Filtering + +Use the `LIKE` clause to filter out tasks by matching the destination URL against a wildcard expression. + +{{< copyable "sql" >}} + +```sql +SHOW BACKUPS LIKE 's3://%'; +``` + +Use the `WHERE` clause to filter by columns. + +{{< copyable "sql" >}} + +```sql +SHOW BACKUPS WHERE `Progress` < 25.0; +``` + +## MySQL compatibility + +This statement is a TiDB extension to MySQL syntax. + +## See also + +* [BACKUP](/sql-statements/sql-statement-backup.md) +* [RESTORE](/sql-statements/sql-statement-restore.md) diff --git a/tiflash/maintain-tiflash.md b/tiflash/maintain-tiflash.md index 0eb27af2fd56b..56dbc77524497 100644 --- a/tiflash/maintain-tiflash.md +++ b/tiflash/maintain-tiflash.md @@ -7,7 +7,7 @@ aliases: ['/docs/dev/reference/tiflash/maintain/'] # Maintain a TiFlash Cluster -This document describes how to perform common operations when you maintain a TiFlash cluster, including checking the TiFlash version, taking TiFlash nodes down, and troubleshooting TiFlash. This document also introduces critical logs and a system table of TiFlash. +This document describes how to perform common operations when you maintain a TiFlash cluster, including checking the TiFlash version, and taking TiFlash nodes down. This document also introduces critical logs and a system table of TiFlash. ## Check the TiFlash version @@ -102,70 +102,6 @@ To manually delete the replication rules in PD, take the following steps: curl -v -X DELETE http://:/pd/api/v1/config/rule/tiflash/table-45-r ``` -## TiFlash troubleshooting - -This section describes some commonly encountered issues when using TiFlash, the reasons, and the solutions. - -### TiFlash replica is always unavailable - -This is because TiFlash is in an abnormal state caused by configuration errors or environment issues. Take the following steps to identify the faulty component: - -1. Check whether PD enables the `Placement Rules` feature (to enable the feature, see the step 2 of [Add TiFlash component to an existing TiDB cluster](/tiflash/deploy-tiflash.md#add-tiflash-component-to-an-existing-tidb-cluster): - - {{< copyable "shell-regular" >}} - - ```shell - echo 'config show replication' | /path/to/pd-ctl -u http://: - ``` - - The expected result is `"enable-placement-rules": "true"`. - -2. Check whether the TiFlash process is working correctly by viewing `UpTime` on the TiFlash-Summary monitoring panel. - -3. Check whether the TiFlash proxy status is normal through `pd-ctl`. - - {{< copyable "shell-regular" >}} - - ```shell - echo "store" | /path/to/pd-ctl -u http://: - ``` - - The TiFlash proxy's `store.labels` includes information such as `{"key": "engine", "value": "tiflash"}`. You can check this information to confirm a TiFlash proxy. - -4. Check whether `pd buddy` can correctly print the logs (the log path is the value of `log` in the [flash.flash_cluster] configuration item; the default log path is under the `tmp` directory configured in the TiFlash configuration file). - -5. Check whether the value of `max-replicas` in PD is less than or equal to the number of TiKV nodes in the cluster. If not, PD cannot replicate data to TiFlash: - - {{< copyable "shell-regular" >}} - - ```shell - echo 'config show replication' | /path/to/pd-ctl -u http://: - ``` - - Reconfirm the value of `max-replicas`. - -6. Check whether the remaining disk space of the machine (where `store` of the TiFlash node is) is sufficient. By default, when the remaining disk space is less than 20% of the `store` capacity (which is controlled by the `low-space-ratio` parameter), PD cannot schedule data to this TiFlash node. - -### TiFlash query time is unstable, and the error log prints many `Lock Exception` messages - -This is because large amounts of data are written to the cluster, which causes that the TiFlash query encounters a lock and requires query retry. - -You can set the query timestamp to one second earlier in TiDB. For example, if the current time is '2020-04-08 20:15:01', you can execute `set @@tidb_snapshot='2020-04-08 20:15:00';` before you execute the query. This makes less TiFlash queries encounter a lock and mitigates the risk of unstable query time. - -### Some queries return the `Region Unavailable` error - -If the load pressure on TiFlash is too heavy and it causes that TiFlash data replication falls behind, some queries might return the `Region Unavailable` error. - -In this case, you can balance the load pressure by adding more TiFlash nodes. - -### Data file corruption - -Take the following steps to handle the data file corruption: - -1. Refer to [Take a TiFlash node down](#take-a-tiflash-node-down) to take the corresponding TiFlash node down. -2. Delete the related data of the TiFlash node. -3. Redeploy the TiFlash node in the cluster. - ## TiFlash critical logs | Log Information | Log Description | diff --git a/tiflash/troubleshoot-tiflash.md b/tiflash/troubleshoot-tiflash.md new file mode 100644 index 0000000000000..c246d5d09c747 --- /dev/null +++ b/tiflash/troubleshoot-tiflash.md @@ -0,0 +1,69 @@ +--- +title: Troubleshoot a TiFlash Cluster +summary: Learn common operations when you troubleshoot a TiFlash cluster. +category: reference +--- + +# Troubleshoot a TiFlash Cluster + +This section describes some commonly encountered issues when using TiFlash, the reasons, and the solutions. + +## TiFlash replica is always unavailable + +This is because TiFlash is in an abnormal state caused by configuration errors or environment issues. Take the following steps to identify the faulty component: + +1. Check whether PD enables the `Placement Rules` feature (to enable the feature, see the step 2 of [Add TiFlash component to an existing TiDB cluster](/tiflash/deploy-tiflash.md#add-tiflash-component-to-an-existing-tidb-cluster): + + {{< copyable "shell-regular" >}} + + ```shell + echo 'config show replication' | /path/to/pd-ctl -u http://: + ``` + + The expected result is `"enable-placement-rules": "true"`. + +2. Check whether the TiFlash process is working correctly by viewing `UpTime` on the TiFlash-Summary monitoring panel. + +3. Check whether the TiFlash proxy status is normal through `pd-ctl`. + + {{< copyable "shell-regular" >}} + + ```shell + echo "store" | /path/to/pd-ctl -u http://: + ``` + + The TiFlash proxy's `store.labels` includes information such as `{"key": "engine", "value": "tiflash"}`. You can check this information to confirm a TiFlash proxy. + +4. Check whether `pd buddy` can correctly print the logs (the log path is the value of `log` in the [flash.flash_cluster] configuration item; the default log path is under the `tmp` directory configured in the TiFlash configuration file). + +5. Check whether the value of `max-replicas` in PD is less than or equal to the number of TiKV nodes in the cluster. If not, PD cannot replicate data to TiFlash: + + {{< copyable "shell-regular" >}} + + ```shell + echo 'config show replication' | /path/to/pd-ctl -u http://: + ``` + + Reconfirm the value of `max-replicas`. + +6. Check whether the remaining disk space of the machine (where `store` of the TiFlash node is) is sufficient. By default, when the remaining disk space is less than 20% of the `store` capacity (which is controlled by the `low-space-ratio` parameter), PD cannot schedule data to this TiFlash node. + +## TiFlash query time is unstable, and the error log prints many `Lock Exception` messages + +This is because large amounts of data are written to the cluster, which causes that the TiFlash query encounters a lock and requires query retry. + +You can set the query timestamp to one second earlier in TiDB. For example, if the current time is '2020-04-08 20:15:01', you can execute `set @@tidb_snapshot='2020-04-08 20:15:00';` before you execute the query. This makes less TiFlash queries encounter a lock and mitigates the risk of unstable query time. + +## Some queries return the `Region Unavailable` error + +If the load pressure on TiFlash is too heavy and it causes that TiFlash data replication falls behind, some queries might return the `Region Unavailable` error. + +In this case, you can balance the load pressure by adding more TiFlash nodes. + +## Data file corruption + +Take the following steps to handle the data file corruption: + +1. Refer to [Take a TiFlash node down](#take-a-tiflash-node-down) to take the corresponding TiFlash node down. +2. Delete the related data of the TiFlash node. +3. Redeploy the TiFlash node in the cluster. diff --git a/tiflash/upgrade-tiflash.md b/tiflash/upgrade-tiflash.md deleted file mode 100644 index f1afa313fd6d5..0000000000000 --- a/tiflash/upgrade-tiflash.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Upgrade TiFlash Nodes -summary: Learn how to upgrade TiFlash nodes. -category: reference -aliases: ['/docs/dev/reference/tiflash/upgrade/'] ---- - -# Upgrade TiFlash Nodes - -> **Note:** -> -> To upgrade TiFlash from the Pre-RC version to a later version, contact [PingCAP](mailto:info@pingcap.com) for more information and help. - -Currently, you cannot upgrade TiFlash by running the `tiup cluster upgrade` command. Instead, take the following steps to upgrade TiFlash: - -Before the upgrade, make sure that the cluster is started. To upgrade TiFlash nodes, take the following steps: - -1. Refer to [Scale in a TiFlash node](/scale-tidb-using-tiup.md#sclale-in-a-tiflash-node), and scale in all the TiFlash nodes. - -2. Run the upgrade command: - - {{< copyable "shell-regular" >}} - - ```shell - tiup cluster upgrade test v4.0.0-rc - ``` - -3. Run the scale-out command: - - {{< copyable "shell-regular" >}} - - ```shell - tiup cluster scale-out test scale-out.yaml - ``` - -4. View the cluster status: - - {{< copyable "shell-regular" >}} - - ```shell - tiup cluster display test - ``` - -5. Access the monitoring platform using your browser, and view the status of the cluster. From a3ce0dde27d8de36a6a80d2f40c4e62f62549ecc Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 28 May 2020 15:36:57 +0800 Subject: [PATCH 005/145] refine format of dynamic config doc (#2622) * refine format of dynamic config doc * Update dynamic-config.md * Update dynamic-config.md * Update dynamic-config.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> * Update dynamic-config.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- dynamic-config.md | 242 ++++++++++++++++++++++++---------------------- 1 file changed, 128 insertions(+), 114 deletions(-) diff --git a/dynamic-config.md b/dynamic-config.md index b50c519f1ae52..97629ff4b14b7 100644 --- a/dynamic-config.md +++ b/dynamic-config.md @@ -24,8 +24,13 @@ This section describes the common operations of dynamic configuration change. To view the configuration of all instances in the cluster, use the `show config` SQL statement. The result is as follows: -``` +{{< copyable "sql" >}} + +```sql show config; +``` + +```sql +------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Type | Instance | Name | Value | +------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -42,7 +47,7 @@ show config; You can filter the result in terms of fields. For example: -``` +```sql show config where type='tidb' show config where instance in (...) show config where name like '%log%' @@ -60,18 +65,29 @@ set config "127.0.0.1:2379" log.level="info" If the modification is successful, `Query OK` is returned: -``` -set config '127.0.0.1:2379' log.level='info'; +```sql Query OK, 0 rows affected (0.01 sec) ``` If an error occurs during the batch modification, a warning is returned: -``` +{{< copyable "sql" >}} + +```sql set config tikv log-level='warn'; +``` + +```sql Query OK, 0 rows affected, 1 warning (0.04 sec) +``` + +{{< copyable "sql" >}} +```sql show warnings; +``` + +```sql +---------+------+---------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------------------------------------------------------------------------+ @@ -80,13 +96,11 @@ show warnings; 1 row in set (0.00 sec) ``` -> **Note:** -> -> To avoid confusing dynamic configuration with SQL variables, you can view TiDB configuration using `show config`, but you cannot modify the configuration, which causes an error. If you want to dynamically modify TiDB behaviors, use the corresponding SQL variables. -> -> The names of some configuration items might conflict with TiDB keywords, such as `limit` and `key`. For these configuration items, use backtick `` ` `` to enclose them. For example, ``tikv-client.`store-limit` ``. -> -> The batch modification operation cannot guarantee atomicity. On some instances, this operation might succeed, while on other instances, it might fail. If you modify the configuration of the entire TiKV cluster using `set tikv key=val`, your modification might fail on some instances. You can use `show warnings` to check the result. +To avoid confusing dynamic configuration with SQL variables, you can view TiDB configuration using `show config`, but you cannot modify the configuration, which causes an error. If you want to dynamically modify TiDB behaviors, use the corresponding SQL variables. + +The names of some configuration items might conflict with TiDB keywords, such as `limit` and `key`. For these configuration items, use backtick `` ` `` to enclose them. For example, ``tikv-client.`store-limit` ``. + +The batch modification operation cannot guarantee atomicity. On some instances, this operation might succeed, while on other instances, it might fail. If you modify the configuration of the entire TiKV cluster using `set tikv key=val`, your modification might fail on some instances. You can use `show warnings` to check the result. ## Supported parameters @@ -95,114 +109,114 @@ This section lists the parameters supported by dynamic configuration change. ### PD | Parameter | Description | -| --- | --- | -| log.level | Log level | -| cluster-version | Cluster version | -| schedule.max-merge-region-size | Controls the size limit of `Region Merge` (in MB) | -| schedule.max-merge-region-keys | Specifies the upper limit of the `Region Merge` key | -| schedule.patrol-region-interval | Determines the frequency at which `replicaChecker` checks the health state of a Region | -| schedule.split-merge-interval | Determines the time interval of performing split and merge operations on the same Region | -| schedule.max-snapshot-count | Determines the maximum number of snapshots that a single store can send or receive at one time | -| schedule.max-pending-peer-count | Determines the maximum number of pending peers in a single store | -| schedule.max-store-down-time | The downtime after which PD judges that the disconnected store can not be recovered | -| schedule.leader-schedule-policy | Determines the policy of Leader scheduling | -| schedule.leader-schedule-limit | The number of Leader scheduling tasks performed at the same time | -| schedule.region-schedule-limit | The number of Region scheduling tasks performed at the same time | -| schedule.replica-schedule-limit | The number of Replica scheduling tasks performed at the same time | -| schedule.merge-schedule-limit | The number of the `Region Merge` scheduling tasks performed at the same time | -| schedule.hot-region-schedule-limit | The number of hot Region scheduling tasks performed at the same time | -| schedule.hot-region-cache-hits-threshold | Determines the threshold at which a Region is considered hot | -| schedule.high-space-ratio | The threshold ratio below which the capacity of the store is sufficient | -| schedule.low-space-ratio | The threshold ratio above which the capacity of the store is insufficient | -| schedule.tolerant-size-ratio | Controls the `balance` buffer size| -| schedule.enable-remove-down-replica | Determines whether to enable the feature that automatically removes `DownReplica` | -| schedule.enable-replace-offline-replica | Determines whether to enable the feature that migrates `OfflineReplica` | -| schedule.enable-make-up-replica | Determines whether to enable the feature that automatically supplements replicas | -| schedule.enable-remove-extra-replica | Determines whether to enable the feature that removes extra replicas | -| schedule.enable-location-replacement | Determines whether to enable isolation level check | -| schedule.enable-cross-table-merge | Determines whether to enable cross-table merge | -| schedule.enable-one-way-merge | Enables one-way merge, which only allows merging with the next adjacent Region | -| replication.max-replicas | Sets the maximum number of replicas | -| replication.location-labels | The topology information of a TiKV cluster | -| replication.enable-placement-rules | Enables Placement Rules | -| replication.strictly-match-label | Enables the label check | -| pd-server.use-region-storage | Enables independent Region storage | -| pd-server.max-gap-reset-ts | Sets the maximum interval of resetting timestamp (BR) | -| pd-server.key-type| Sets the cluster key type | -| pd-server.metric-storage | Sets the storage address of the cluster metrics | -| pd-server.dashboard-address | Sets the dashboard address | -| replication-mode.replication-mode | Sets the backup mode | +| :--- | :--- | +| `log.level` | The log level | +| `cluster-version` | The cluster version | +| `schedule.max-merge-region-size` | Controls the size limit of `Region Merge` (in MB) | +| `schedule.max-merge-region-keys` | Specifies the upper limit of the `Region Merge` key | +| `schedule.patrol-region-interval` | Determines the frequency at which `replicaChecker` checks the health state of a Region | +| `schedule.split-merge-interval` | Determines the time interval of performing split and merge operations on the same Region | +| `schedule.max-snapshot-count` | Determines the maximum number of snapshots that a single store can send or receive at one time | +| `schedule.max-pending-peer-count` | Determines the maximum number of pending peers in a single store | +| `schedule.max-store-down-time` | The downtime after which PD judges that the disconnected store can not be recovered | +| `schedule.leader-schedule-policy` | Determines the policy of Leader scheduling | +| `schedule.leader-schedule-limit` | The number of Leader scheduling tasks performed at the same time | +| `schedule.region-schedule-limit` | The number of Region scheduling tasks performed at the same time | +| `schedule.replica-schedule-limit` | The number of Replica scheduling tasks performed at the same time | +| `schedule.merge-schedule-limit` | The number of the `Region Merge` scheduling tasks performed at the same time | +| `schedule.hot-region-schedule-limit` | The number of hot Region scheduling tasks performed at the same time | +| `schedule.hot-region-cache-hits-threshold` | Determines the threshold at which a Region is considered hot | +| `schedule.high-space-ratio` | The threshold ratio below which the capacity of the store is sufficient | +| `schedule.low-space-ratio` | The threshold ratio above which the capacity of the store is insufficient | +| `schedule.tolerant-size-ratio` | Controls the `balance` buffer size| +| `schedule.enable-remove-down-replica` | Determines whether to enable the feature that automatically removes `DownReplica` | +| `schedule.enable-replace-offline-replica` | Determines whether to enable the feature that migrates `OfflineReplica` | +| `schedule.enable-make-up-replica` | Determines whether to enable the feature that automatically supplements replicas | +| `schedule.enable-remove-extra-replica` | Determines whether to enable the feature that removes extra replicas | +| `schedule.enable-location-replacement` | Determines whether to enable isolation level check | +| `schedule.enable-cross-table-merge` | Determines whether to enable cross-table merge | +| `schedule.enable-one-way-merge` | Enables one-way merge, which only allows merging with the next adjacent Region | +| `replication.max-replicas` | Sets the maximum number of replicas | +| `replication.location-labels` | The topology information of a TiKV cluster | +| `replication.enable-placement-rules` | Enables Placement Rules | +| `replication.strictly-match-label` | Enables the label check | +| `pd-server.use-region-storage` | Enables independent Region storage | +| `pd-server.max-gap-reset-ts` | Sets the maximum interval of resetting timestamp (BR) | +| `pd-server.key-type` | Sets the cluster key type | +| `pd-server.metric-storage` | Sets the storage address of the cluster metrics | +| `pd-server.dashboard-address` | Sets the dashboard address | +| `replication-mode.replication-mode` | Sets the backup mode | For detailed parameter description, refer to [PD Configuration File](/pd-configuration-file.md). ### TiKV | Parameter | Description | -| --- | --- | -| refresh-config-interval | The time interval at which the configuration is updated | -| raftstore.sync-log | Whether to force commits to be flushed to raft-log synchronously for persistent storage | -| raftstore.raft-entry-max-size | The maximum size of a single log | -| raftstore.raft-log-gc-tick-interval | The time interval at which the polling task of deleting Raft logs is scheduled | -| raftstore.raft-log-gc-threshold | The soft limit on the maximum allowable count of residual Raft logs | -| raftstore.raft-log-gc-count-limit | The hard limit on the allowable number of residual Raft logs| -| raftstore.raft-log-gc-size-limit | The hard limit on the allowable size of residual Raft logs | -| raftstore.raft-entry-cache-life-time | The maximum remaining time allowed for the log cache in memory | -| raftstore.raft-reject-transfer-leader-duration | Determines the smallest duration that a Leader is transferred to a newly added node | -| raftstore.split-region-check-tick-interval | The time interval at which to check whether the Region split is needed | -| raftstore.region-split-check-diff | The maximum value by which the Region data is allowed to exceed before Region split | -| raftstore.region-compact-check-interval | The time interval at which to check whether it is necessary to manually trigger RocksDB compaction | -| raftstore.region-compact-check-step | The number of Regions checked at one time for each round of manual compaction | -| raftstore.region-compact-min-tombstones | The number of tombstones required to trigger RocksDB compaction | -| raftstore.region-compact-tombstones-percent | The proportion of tombstone required to trigger RocksDB compaction | -| raftstore.pd-heartbeat-tick-interval | The time interval at which a Region's heartbeat to PD is triggered | -| raftstore.pd-store-heartbeat-tick-interval | The time interval at which a store's heartbeat to PD is triggered | -| raftstore.snap-mgr-gc-tick-interval | The time interval at which the recycle of expired snapshot files is triggered | -| raftstore.snap-gc-timeout | The longest time for which a snapshot file is saved | -| raftstore.lock-cf-compact-interval | The time interval at which TiKV triggers a manual compaction for the Lock Column Family | -| raftstore.lock-cf-compact-bytes-threshold | The size out of which TiKV triggers a manual compaction for the Lock Column Family | -| raftstore.messages-per-tick | The maximum number of messages processed per batch | -| raftstore.max-peer-down-duration | The longest inactive duration allowed for a peer | -| raftstore.max-leader-missing-duration | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer verifies with PD whether the peer has been deleted. | -| raftstore.abnormal-leader-missing-duration | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer is seen as abnormal and marked in metrics and logs. | -| raftstore.peer-stale-state-check-interval | The time interval to trigger the check for whether a peer is in the state where a Raft group is missing the leader | -| raftstore.consistency-check-interval | The time interval at which the consistency check is triggered | -| raftstore.raft-store-max-leader-lease | The longest trusted period of a Raft Leader | -| raftstore.allow-remove-leader | Determines whether to allow deleting the main switch | -| raftstore.merge-check-tick-interval | The time interval at which TiKV checks whether a Region needs merge | -| raftstore.cleanup-import-sst-interval | The time interval at which the expired SST file is checked | -| raftstore.local-read-batch-size | The maximum number of read requests processed in one batch | -| coprocessor.split-region-on-table | Enables to split Region by table | -| coprocessor.batch-split-limit | The threshold of Region split in batches | -| coprocessor.region-max-size | The maximum size of a Region | -| coprocessor.region-split-size | The size of the newly split Region | -| coprocessor.region-max-keys | The maximum number of keys allowed in a Region | -| coprocessor.region-split-keys | The number of keys in the newly split Region | -| pessimistic-txn.wait-for-lock-timeout | The max time that a pessimistic transaction in TiKV waits for other transactions to release the lock | -| pessimistic-txn.wake-up-delay-duration | The duration after which a pessimistic transaction is woken up | -| gc.ratio-threshold | The threshold at which Region GC is skipped (the number of GC versions/the number of keys) | -| gc.batch-keys | The number of keys processed in one batch | -| gc.max-write-bytes-per-sec | The max number of bytes that can be written into RocksDB per second | -| {db-name}.max-total-wal-size | The max size of total WAL | -| {db-name}.max-background-jobs | The number of background threads in RocksDB | -| {db-name}.max-open-files | The total number of files that RocksDB can open | -| {db-name}.compaction-readahead-size | The size of `readahead` when compaction is being performed | -| {db-name}.bytes-per-sync | The rate at which OS incrementally synchronizes files to disk while these files are being written asynchronously | -| {db-name}.wal-bytes-per-sync | The rate at which OS incrementally synchronizes WAL files to disk while the WAL files are being written | -| {db-name}.writable-file-max-buffer-size | The maximum buffer size used in WritableFileWrite | -| {db-name}.{cf-name}.block-cache-size | The cache size of a block | -| {db-name}.{cf-name}.write-buffer-size | The size of memtable | -| {db-name}.{cf-name}.max-write-buffer-number | The max number of memtables | -| {db-name}.{cf-name}.max-bytes-for-level-base | The maximum number of bytes at base level (L1) | -| {db-name}.{cf-name}.target-file-size-base | The size of the target file at base level | -| {db-name}.{cf-name}.level0-file-num-compaction-trigger | The maximum number of files at L0 that trigger compaction | -| {db-name}.{cf-name}.level0-slowdown-writes-trigger | The maximum number of files at L0 that trigger write stall | -| {db-name}.{cf-name}.level0-stop-writes-trigger | The maximum number of files at L0 required to completely block write | -| {db-name}.{cf-name}.max-compaction-bytes | The maximum number of bytes written into disk per compaction | -| {db-name}.{cf-name}.max-bytes-for-level-multiplier | The default amplification multiple for each layer | -| {db-name}.{cf-name}.disable-auto-compactions | Enables or disables automatic compaction | -| {db-name}.{cf-name}.soft-pending-compaction-bytes-limit | The soft limit on the pending compaction bytes | -| {db-name}.{cf-name}.hard-pending-compaction-bytes-limit | The hard limit on the pending compaction bytes | -| {db-name}.{cf-name}.titan.blob-run-mode | The mode of processing blob files | +| :--- | :--- | +| `refresh-config-interval` | The time interval at which the configuration is updated | +| `raftstore.sync-log` | Determines whether to force commits to be flushed to raft-log synchronously for persistent storage | +| `raftstore.raft-entry-max-size` | The maximum size of a single log | +| `raftstore.raft-log-gc-tick-interval` | The time interval at which the polling task of deleting Raft logs is scheduled | +| `raftstore.raft-log-gc-threshold` | The soft limit on the maximum allowable count of residual Raft logs | +| `raftstore.raft-log-gc-count-limit` | The hard limit on the allowable number of residual Raft logs| +| `raftstore.raft-log-gc-size-limit` | The hard limit on the allowable size of residual Raft logs | +| `raftstore.raft-entry-cache-life-time` | The maximum remaining time allowed for the log cache in memory | +| `raftstore.raft-reject-transfer-leader-duration` | Determines the smallest duration that a Leader is transferred to a newly added node | +| `raftstore.split-region-check-tick-interval` | The time interval at which to check whether the Region split is needed | +| `raftstore.region-split-check-diff` | The maximum value by which the Region data is allowed to exceed before Region split | +| `raftstore.region-compact-check-interval` | The time interval at which to check whether it is necessary to manually trigger RocksDB compaction | +| `raftstore.region-compact-check-step` | The number of Regions checked at one time for each round of manual compaction | +| `raftstore.region-compact-min-tombstones` | The number of tombstones required to trigger RocksDB compaction | +| `raftstore.region-compact-tombstones-percent` | The proportion of tombstone required to trigger RocksDB compaction | +| `raftstore.pd-heartbeat-tick-interval` | The time interval at which a Region's heartbeat to PD is triggered | +| `raftstore.pd-store-heartbeat-tick-interval` | The time interval at which a store's heartbeat to PD is triggered | +| `raftstore.snap-mgr-gc-tick-interval` | The time interval at which the recycle of expired snapshot files is triggered | +| `raftstore.snap-gc-timeout` | The longest time for which a snapshot file is saved | +| `raftstore.lock-cf-compact-interval` | The time interval at which TiKV triggers a manual compaction for the Lock Column Family | +| `raftstore.lock-cf-compact-bytes-threshold` | The size out of which TiKV triggers a manual compaction for the Lock Column Family | +| `raftstore.messages-per-tick` | The maximum number of messages processed per batch | +| `raftstore.max-peer-down-duration` | The longest inactive duration allowed for a peer | +| `raftstore.max-leader-missing-duration` | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer verifies with PD whether the peer has been deleted. | +| `raftstore.abnormal-leader-missing-duration` | The longest duration allowed for a peer to be in the state where a Raft group is missing the leader. If this value is exceeded, the peer is seen as abnormal and marked in metrics and logs. | +| `raftstore.peer-stale-state-check-interval` | The time interval to trigger the check for whether a peer is in the state where a Raft group is missing the leader | +| `raftstore.consistency-check-interval` | The time interval at which the consistency check is triggered | +| `raftstore.raft-store-max-leader-lease` | The longest trusted period of a Raft Leader | +| `raftstore.allow-remove-leader` | Determines whether to allow deleting the main switch | +| `raftstore.merge-check-tick-interval` | The time interval at which TiKV checks whether a Region needs merge | +| `raftstore.cleanup-import-sst-interval` | The time interval at which the expired SST file is checked | +| `raftstore.local-read-batch-size` | The maximum number of read requests processed in one batch | +| `coprocessor.split-region-on-table` | Enables to split Region by table | +| `coprocessor.batch-split-limit` | The threshold of Region split in batches | +| `coprocessor.region-max-size` | The maximum size of a Region | +| `coprocessor.region-split-size` | The size of the newly split Region | +| `coprocessor.region-max-keys` | The maximum number of keys allowed in a Region | +| `coprocessor.region-split-keys` | The number of keys in the newly split Region | +| `pessimistic-txn.wait-for-lock-timeout` | The max time that a pessimistic transaction in TiKV waits for other transactions to release the lock | +| `pessimistic-txn.wake-up-delay-duration` | The duration after which a pessimistic transaction is woken up | +| `gc.ratio-threshold` | The threshold at which Region GC is skipped (the number of GC versions/the number of keys) | +| `gc.batch-keys` | The number of keys processed in one batch | +| `gc.max-write-bytes-per-sec` | The max number of bytes that can be written into RocksDB per second | +| `{db-name}.max-total-wal-size` | The max size of total WAL | +| `{db-name}.max-background-jobs` | The number of background threads in RocksDB | +| `{db-name}.max-open-files` | The total number of files that RocksDB can open | +| `{db-name}.compaction-readahead-size` | The size of `readahead` when compaction is being performed | +| `{db-name}.bytes-per-sync` | The rate at which OS incrementally synchronizes files to disk while these files are being written asynchronously | +| `{db-name}.wal-bytes-per-sync` | The rate at which OS incrementally synchronizes WAL files to disk while the WAL files are being written | +| `{db-name}.writable-file-max-buffer-size` | The maximum buffer size used in WritableFileWrite | +| `{db-name}.{cf-name}.block-cache-size` | The cache size of a block | +| `{db-name}.{cf-name}.write-buffer-size` | The size of memtable | +| `{db-name}.{cf-name}.max-write-buffer-number` | The max number of memtables | +| `{db-name}.{cf-name}.max-bytes-for-level-base` | The maximum number of bytes at base level (L1) | +| `{db-name}.{cf-name}.target-file-size-base` | The size of the target file at base level | +| `{db-name}.{cf-name}.level0-file-num-compaction-trigger` | The maximum number of files at L0 that trigger compaction | +| `{db-name}.{cf-name}.level0-slowdown-writes-trigger` | The maximum number of files at L0 that trigger write stall | +| `{db-name}.{cf-name}.level0-stop-writes-trigger` | The maximum number of files at L0 required to completely block write | +| `{db-name}.{cf-name}.max-compaction-bytes` | The maximum number of bytes written into disk per compaction | +| `{db-name}.{cf-name}.max-bytes-for-level-multiplier` | The default amplification multiple for each layer | +| `{db-name}.{cf-name}.disable-auto-compactions` | Enables or disables automatic compaction | +| `{db-name}.{cf-name}.soft-pending-compaction-bytes-limit` | The soft limit on the pending compaction bytes | +| `{db-name}.{cf-name}.hard-pending-compaction-bytes-limit` | The hard limit on the pending compaction bytes | +| `{db-name}.{cf-name}.titan.blob-run-mode` | The mode of processing blob files | In the table above, parameters with the `{db-name}` or `{db-name}.{cf-name}` prefix are configurations related to RocksDB. The optional values of `db-name` are `rocksdb` and `raftdb`. From a631e53a27303272ff07691f83cbe9d0aa670a1d Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 28 May 2020 18:43:31 +0800 Subject: [PATCH 006/145] how-to: add key visualizer document (#2571) * how-to: add key visualizer document * refine language * Update key-visualizer-monitoring-tool.md * Update key-visualizer-monitoring-tool.md * Apply suggestions from code review * address comment * Apply suggestions from code review Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> * Update key-visualizer-monitoring-tool.md * Apply suggestions from code review Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> Co-authored-by: pingcap-github-bot --- TOC.md | 1 + key-visualizer-monitoring-tool.md | 162 ++++++++++++++++++ media/dashboard/keyvisualizer/continue.png | Bin 0 -> 18680 bytes media/dashboard/keyvisualizer/overview.png | Bin 0 -> 208239 bytes media/dashboard/keyvisualizer/period.png | Bin 0 -> 32896 bytes media/dashboard/keyvisualizer/sequential.png | Bin 0 -> 33504 bytes media/dashboard/keyvisualizer/toolbar.png | Bin 0 -> 54421 bytes .../dashboard/keyvisualizer/tooltip-copy.png | Bin 0 -> 22239 bytes media/dashboard/keyvisualizer/tooltip.png | Bin 0 -> 49951 bytes media/dashboard/keyvisualizer/well_dist.png | Bin 0 -> 28399 bytes 10 files changed, 163 insertions(+) create mode 100644 key-visualizer-monitoring-tool.md create mode 100644 media/dashboard/keyvisualizer/continue.png create mode 100644 media/dashboard/keyvisualizer/overview.png create mode 100644 media/dashboard/keyvisualizer/period.png create mode 100644 media/dashboard/keyvisualizer/sequential.png create mode 100644 media/dashboard/keyvisualizer/toolbar.png create mode 100644 media/dashboard/keyvisualizer/tooltip-copy.png create mode 100644 media/dashboard/keyvisualizer/tooltip.png create mode 100644 media/dashboard/keyvisualizer/well_dist.png diff --git a/TOC.md b/TOC.md index 0ff644a96239e..a21bd0e2f24cf 100644 --- a/TOC.md +++ b/TOC.md @@ -75,6 +75,7 @@ + Monitor - [Overview](/tidb-monitoring-framework.md) - [Monitor a TiDB Cluster](/monitor-a-tidb-cluster.md) + - [Monitor Traffic Using Key Visualizer](/key-visualizer-monitoring-tool.md) + Migrate - [Migration Tools User Guide](/ecosystem-tool-user-guide.md) + Migrate from MySQL diff --git a/key-visualizer-monitoring-tool.md b/key-visualizer-monitoring-tool.md new file mode 100644 index 0000000000000..107b1ca428bce --- /dev/null +++ b/key-visualizer-monitoring-tool.md @@ -0,0 +1,162 @@ +--- +title: Key Visualizer +summary: Learn how to monitor traffic using the Key Visualizer tool. +category: how-to +--- + +# Key Visualizer + +Key Visualizer is a feature for analyzing the usage of TiDB and troubleshooting the traffic hotspot. The feature generates a visual report of the metrics of the TiDB cluster over a period of time. With this visual report, you can quickly and intuitively observe the overall cluster hotspot and traffic distribution. + +## Access Key Visualizer + +As one of the offerings of TiDB Dashboard, Key Visualizer is directly integrated into PD instances and does not require a separate deployment. You can access TiDB Dashboard on any PD instance via your browser by using the following address: + +{{< copyable "" >}} + +``` +http://PDAddress:PDPort/dashboard +``` + +> **Note:** +> +> + If multiple PD instances exist, you can use any PD instance address to access TiDB Dashboard. +> + By default, `PDPort` is `2379`. If you have modified the corresponding PD parameter during deployment, use the modified PD port. +> + You need to use the `root` account of TiDB to log into TiDB Dashboard. + +## Interface demonstration + +The following image is a demonstration of the Key Visualizer interface: + +![Key Visualizer Interface](/media/dashboard/keyvisualizer/overview.png) + +From the interface above, you can see the following objects: + ++ A large heatmap that shows changes of the overall traffic over time. ++ The detailed information of a certain coordinate point. ++ Information of tables, indexes, and so on (on the left side of the heatmap). + +## Basic concepts + +This section introduces the basic concepts that relate to Key Visualizer. + +### Region + +In a TiDB cluster, the stored data is distributed among TiKV instances. Logically, TiKV is a huge and orderly key-value map. The whole key-value space is divided into many segments and each segment consists of a series of adjacent keys. Such segment is called a `Region`. + +For detailed introduction of Region, refer to [TiDB Internal (I) - Data Storage](https://pingcap.com/blog/2017-07-11-tidbinternal1/#region). + +### Hotspot + +When you use the TiDB database, the hotspot issue is typical, where high traffic is concentrated on a small range of data. Because consecutive data ranges are often processed on the same TiKV instance, the TiKV instance on which the hotspot occurs becomes the performance bottleneck of the whole application. The hotspot issue often occurs in the following scenarios: + ++ Write adjacent data into a table with the `AUTO_INCREMENT` primary key, which causes a hotspot issue on this table. ++ Write adjacent time data into the time index of a table, which causes a hotspot issue on the table index. + +For more details about hotspot, refer to [Highly Concurrent Write Best Practices](/best-practices/high-concurrency-best-practices.md#hotspot-causes) + +### Heatmap + +The heatmap is the core part of Key Visualizer, which shows the change of a metric over time. The X-axis of the heatmap indicates the time. The Y-axis of the heatmap indicates the consecutive Regions based on key ranges that cover all schemas and tables of the TiDB cluster. + +Colder colors in the heatmap indicate lower read and write traffic of Regions in that period of time. Hotter (brighter) colors indicate higher traffic. + +### Region compression + +A TiDB cluster might have up to hundreds of thousands of Regions. It is difficult to display so many Regions on screen. Therefore, on each heatmap, these Regions are compressed into 1,500 consecutive ranges, each range called a Bucket. In the heatmap, because hotter instances need more attention, Key Visualizer tends to compress a large number of Regions with lower traffic into one Bucket, and displays the Region with higher traffic also in one Bucket. + +## Use Key Visualizer + +This section introduces how to use Key Visualizer. + +![Toolbar](/media/dashboard/keyvisualizer/toolbar.png) + +### Observe a certain period of time or Region range + +When you open Key Visualizer, the heatmap of the entire database over the recent six hours is displayed by default. In this heatmap, the closer to the right side (current time), the shorter the time interval corresponding to each column of Buckets. If you want to observe a specific time period or a specific Region range, you can zoom in to get more details. The specific instructions are as follows: + +1. Scroll up or down in the heatmap. +2. Click and drag one of the following buttons to select the range. + + Click the **Select & Zoom** button. Then click and drag this button to select the area to zoom in. + + Click the **Reset** button to reset the Region range to the entire database. + + Click the **time selection box** (at the position of `6 hours` on the interface above) and select the observation time period again. + +> **Note:** +> +> If you follow step 2 in the instruction above, the heatmap is redrawn, which might be very different from the original heatmap. This difference is normal because if you observe in more detail, the granularity of the Region compression has changed, or the basis of `hot` in a specific range has changed. + +### Adjust brightness + +The heatmap uses colors of different brightnesses to indicate the Bucket traffic. Colder colors in the heatmap indicate lower read and write traffic of the Region in that period of time. Hotter (brighter) colors indicate higher traffic. If the color is too cold or too hot, it is difficult to observe in details. In this situation, you can click the **Brightness** button and then use the slider to adjust the brightness of the page. + +> **Note:** +> +> When Key Visualizer displays the heatmap of an area, it defines the basis of being cold and hot according to the traffic of this area. When the traffic in the entire area is relatively even, even if the overall traffic is low in value, you might still see a large bright-colored area. Remember to include the value into your analysis. + +### Select metrics + +You can view a metric you are interested in by selecting this metric in the **metrics selection box** (at the `Write (bytes)` position in the interface above): + +* `Read (bytes)`: Read traffic. +* `Write (bytes)`: Write traffic. +* `Read (keys)`: The number of read rows. +* `Write (keys)`: The number of written rows. +* `All`: The sum of read and write traffic. + +### Refresh and automatic refresh + +To regain a heatmap based on the current time, click the **Refresh** button. If you need to observe the traffic distribution of the database in real time, click the down arrow on the right side of the **Refresh** button and select a fixed time interval for the heatmap to automatically refresh at this interval. + +> **Note:** +> +> If you adjust the time range or Region range, the automatic refresh is disabled. + +### See Bucket details + +You can hover your mouse over the Bucket you are interested in to view the detailed information of this Region range. The image below is an example of this information: + +![Bucket details](/media/dashboard/keyvisualizer/tooltip.png) + +If you want to copy this information, click a Bucket. Then, the page with relevant details is temporarily pinned. Click on the information, and you have copied it to the clipboard. + +![Copy Bucket details](/media/dashboard/keyvisualizer/tooltip-copy.png) + +## Common heatmap types + +This section shows and interprets four common types of heatmap in Key Visualizer. + +### Evenly distributed workload + +![Balanced ](/media/dashboard/keyvisualizer/well_dist.png) + +In the heatmap above, bright and dark colors are a fine-grained mix. This indicates that reads or writes are evenly distributed over time and among key ranges. The workload is evenly distributed to all nodes, which is ideal for a distributed database. + +### Periodically reads and writes + +![Periodically](/media/dashboard/keyvisualizer/period.png) + +In the heatmap above, there is an alternating brightness and darkness along the X-axis (time) but the brightness is relatively even along the Y-axis (Region). This indicates that the reads and writes change periodically, which might occur in scenarios of periodically scheduled tasks. For example, the big data platform periodically extracts data from TiDB every day. In this kind of scenarios, pay attention to whether the resources are sufficient during peak usage. + +## Concentrated reads or writes + +![Concentrated](/media/dashboard/keyvisualizer/continue.png) + +In the heatmap above, you can see several bright lines. Along the Y-axis, the fringes around the bright lines are dark, which indicates that the Regions corresponding to bright lines have high read and write traffic. You can observe whether the traffic distribution is expected by your application. For example, when all services are associated with the user table, the overall traffic of the user table can be high, so it is reasonable to show bright lines in the heatmap. + +In addition, the height of the bright lines (the thickness along the Y-axis) is important. Because TiKV has its own Region-based hotspot balancing mechanism, the more Regions involved in the hotspot, the better it is for balancing traffic across all TiKV instances. The thicker and more bright lines indicate that hotspots are more scattered, and TiKV is better used. The thinner and fewer bright lines indicate that hotspots are more concentrated, and the hotspot issue is more obvious in TiKV, which might requires manual intervention. + +### Sequential reads or writes + +![Sequential](/media/dashboard/keyvisualizer/sequential.png) + +In the heatmap above, you can see a bright line. This means that the data reads or writes are sequential. Typical scenarios of sequential data reads or writes are importing data or scanning tables and indexes. For example, you continuously write data to tables with auto-increment IDs. + +Regions in the bright areas are the hotspots of read and write traffic, which often become the performance bottleneck of the entire cluster. In this situation, you might need to readjust the primary key for the application. By doing this, you scatter Regions much as possible to spread the pressure across multiple Regions. You can also schedule application tasks during the low-peak period. + +> **Note:** +> +> In this section, only the common types of heatmap are shown. Key Visualizer actually displays the heatmap of all schemas and tables in the entire cluster, so you might see different types of heatmap in different areas, or mixed results of multiple heatmap types. Use the heatmap based on the actual situation. + +## Address hotspot issues + +TiDB has some built-in features to mitigate the common hotspot issue. Refer to [Highly Concurrent Write Best Practices](/best-practices/high-concurrency-best-practices.md) for details. diff --git a/media/dashboard/keyvisualizer/continue.png b/media/dashboard/keyvisualizer/continue.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3160cb29c1509e4b327b0b9af2be149150740a GIT binary patch literal 18680 zcmeHu2{_bk+xL(yvPD$Hv=Uje??jRmMY1nt&oXvn9cx5LNM$Xgl3lhj#u6e+w(K*O zEZN4|490l>(|sGg_xpU```*v|#Gq1nMS4{T? zyGG~>wvV^t6^B=lXC>7x9&KP?cyX1DIp_VcAB)yM)~}v@eQD&hdTdOPKKBInUQjF7 zy#zk(%V*v#-qNW_Ip9n6j0sK)JsHQ8tju|?(*2yT%dYw3p}_H%BO-Ar%jV*W65=XsY&k_qQ?1nVjcidLM{McyTiMTE zwuO4Gc)!C(gPqu}4Ll5yQ{Mderp}O}{_#zZMSb|qCvV=e&nHY%H{1D{sk_}1{~@LO zj3vL<=#m4UP((j&f^5_I(!0$STe|>Pkr`6x-jJE@GOG_OF^p&+)KwQ&ruLoR@w z=I!Q!kiDXJ1F0>+EHpt;S43yy-oJ>ewU^^1hbf<-SUrg}?|aY0sMe^Ze1@;PSGt>$|v2z44+{*leXx2R{};=%<_CVTP= z3p8IJnbb0zU-`o4^WIQ3q-)~#rlktkisHnI*u})u1o&6DCpg?5Q7|9 z;L4BOj;$kpa(6(^Z&C{$A9>?Zv8oKZopB(Y*TS6Peb9mT&Gb-mMJ5X6Iw__Dhm~lb z(ZVkT&l^x#2M(H(@lsBiQ|i;bt36jpxd1{2%4Zzpq-d@^@61&iVn4=UEN?O zq!Dr$N~5lgV*1-z2|* zTn|Y{xr56eQ(u)_rQM9U$4f7+)P7Ueopmm{xa+DIS!%HLD{ot7!(c%b{w_mz_Mr$a zmCnrmFPiJpL*ZoC=`8L&eMUDO?NWI3!jaFlmIKD`59QY0FQR%+N$Auo)O=699mwKB z)lqLUMjKPh;-Zii-r1Nmp^IavW>yR`tK%L+;MmDi&96D1!yT>&eHePZ{*dzdm%)Y6 zh3U?R6>gY>mR~*1> zJv(b7%OvY`*5@q2Zr@_I!Qh1}45xFRoc(ssmC~DMQ+QKk^L%CcD~+OToc29l^49CE zuB~^j(M=uBj_TIx%N)|#d3&(;!W{Yivmb(dp7MrkL>|>uznuT;J=I=%XU3`CxlPbOFaZ#enlP)VIu|mnQv(8bC&&S}?au4#|y=DXGn0}Y`KPY>B2_4FQ) z%^bgS>56iuNapC3{znSOOCG62mqhCwmpq0Rt-FzO{oJ!Q;Xzy1?kt;%I%niKe%z`7 zdkE=(Uxcg>0Jfofpbz`f{3 z<|sw|2Nxvx!*yF^>gGO(eRx!OTi>b7p=6=FxcpivU)hkON9T+Ci;k&x5lvNnRsBu% z*46C}$v(-$WvoUJqqs$x;hr+g!ouQ{MYcilLHQEN;+Y}#!Tw>iM}{ng%s1&?8Doz# zGCs1_vQEwpUdpL*DVH_-G?P+p*=X4mtx?UyFo!ZLoIZ2;nT~m$Jo!=pO^1-Wj>ZmvI^?{c~;L!)5)*=etGVaJ60I$ zz0|%W)GQUt95X02{hGSLqPqE1?48)oG}APZPO45PA&vsEg5w1oC@NGDN(0e}WAY33 zpWftL-yEC&o{WJvV}%sikq*ezfX=3&*dsBcGC$&wiHe=D5||B$A1pAI6WF2jS;^Gg zajXG655DxJEF;H3&6CZSeOtBAzVHGRwk#VXWWz9HOT%`UOPj5m?H%`vqlQO(6x;YN zh`v{NFFA7B?+&huM)|Vk$JPiAV^P6$qvpjEGvZDi6)bV3pKzbveG0#&d8_!%)0J7A z%cNc`lEaZh;Gt6_*~O7(eHXF!7A@B9!P1pdm}Fo2)W=tJxs*(5Hj7T=G-4jXl9^Hp z<;FE%sk}N>B(Bb5=c;Ye4gdD|n{G=gi`tD8(G|Z)^+>5~>BNK=2~`3gAlkE8AL6Ud z`Cb=H_4AM1NvJ<>lk?(w`*R=L7ad}#QiNS->9^8UyL9NqYC}^q8A-%BL{jH?!K5NP z#lf#MRbhmB-TItkgk!lPX;xb{`5g;vl#zUw3I#NquJPi9^f7@6$bWIbK&&v$MN9Br7zI6-KZUb%-ovPEXI~`MP zA z(k-3qnp?@`=r8=5kmp_EIW$yq#DY&EFEd}~{rvk!?;K1aB>|0FTDq^^+4t4;!R@cx zKkcm^1`jxUTYPDHaKk#eRni}?j_+x2A5Z46U%by>##GMg;9V?kH~&2y0m~n@F3$5C zo&l^XRd&KN<;~i=++n*aH*a~vf;SkHxVPT6&`G42WQCXms(r+Sz>m{inde4k?|Axa zeM|d_K>2d~7+lI7>>M!r8X?x@-oLo}c?pc^O>$aUmZ5FYHIUi8c3M;ri78cFY)JJmO)3*oSPUZ~e#HOq$x-GxQ z3?7)N?i5eO%Auikll6osE_Q6WcbT~9YE|#ZQV**8V%g;KRPE>H{7_?Qk3`=M{D)cl z6a6d&=<17`S7vV1wcC`tIw7h}oZ-72cz7t>3hR#19g#$sZ3{KS7MIo+cYZT z7%_4aiarE=0!~M-g=H%~GKWoTKCMz-cHqR$ZDP$~OZRv0|h0)3YUqN08gM^>A=2>PNkhI)AdG9 zfgBjg!7d7*Th6h?%nU{mcFXxA?|3N4dPn_jZ7-*dFTI|ARmZ|OzEfLkFABOU0P=fE ze`pgeF)CIgi}^>c;{@Jt*QItBhY#ob>1l>UvI zU=@g~6z}oZampPGI7`cke+w+~rT5BEE?9 z^9P;ocGmlEa&r5VEr3BG;x|GU1%-wF(K0Kj-Tz@3@tZ%E{p9P9*U1q#lhJauvjPYv zlBIA_?&k~s)7UQL^ZrVYu9P}^SIa)cn5!XmcO34ZR!*BlKN`w8C5)xv+uKeYj zKUc~L5#{uY-2OO}pQFI3DA39Ykxp2F*3-lO2M8qHpnmz%Z7A8|sQ;rW8xQVfbm|}+ z{wV3<{NRS*mq1TuDTdzaBg{GxnNOCrRUekUam~Gx7r}ZmtNRU~?ybY(+PAXr+`oO9 zU-zW;`*&n5k#FcCwUrZi8OY`;s*hH_Z2Dlr5`lQ%59h*Y%5A$s{ONDK>T6pXfn&YW ze5d_z)N)u9T6)GUEp^BBNZO$X4dWGSLgW-QOkkxz5E(fIo1wYgOLz|_@VGZ7L_@R0 zKu#J6q970U4L)lZN1Xn1PT<(mp}qAqOjp6+3LgC@YzIk0G)o<%xuE~Lyq1gN&vymQ zAJI24L7>!dcwLIG{rv^2?~>lp;F=JvuiMpsk_Wu+v7wT)7DAz&E zHf9~uw`bFQ%l#e85o4WgPQ$io-hPv5HhMB={}2=n6Ym9Z1-ofY7m3kTKv3SE**bfo z3#tbsH9p0Wy2m{@HgN1OTL>Rz2%oH9^AaE=VX^XVURJ9p8;HjN^+Y48J9>J)=(|(o z+Yk81C(EVai5*>ATRu2VBRrQMwh@=?aIVnIINvS#2JRBy?d2j-Gp&nxkP)5t>hUB= z^Z}BX&ob z#j2;X%%hS|$DHs}!N1SMJrTNXY=2v_VqrzYi$c#qFTaugW-|j9BRAB|<8<}(kSjhV z{-n_eXV=7oq~$OLvt>1Gs?)8q;Q>Fj_^QYy!JuZD^45j?=ob(6WE7~RLbjVDLcfxD zZcotQLLIU?{~T?U+MW(5WxNa=Lou1z?TMOZZNC79x6Mj&CTvmauXS#)zJ7>7<{4fCpbEqG0%~t~ivvvB6kScDx?J zR*$eYSeGvTe12foW88z$!?(enU{}s%x`sw#;N#*vl*qNdoj>+^NUbo8ZirVLlw4|I zf8)PLS@jCFeAui{7}nr|(C zr7l+pk)yZkyzHQ*g(4I|IJi-S#xzqq7f&;Vn#vrze8ND_Xk{+)Ww>7Y-1zf;pKrcN z6EJSX^vsa4HWt8JG#ch9JY$vc=q-42$C-T@*8}<_d_Qc@RZ!5h34$v+oo4n`km7$d zWyl!GEP?t!m$wsbkF-Hypc?(tFmD*l>n zsl@RSOVL3ce5#0vS8?5#&O#dS9{tm;vHGy^1Dz zvd2aMfB$(4{WnHdX`9_z4@zLum}d0jqM9NhzYg^}HHk?Z`Qp+p%dc#zfR-61&=+_I zaPFe9v4;dhI|tv5(QB-f+>wUIr{390W%YlcxW19|N~7i`q!8JTe%sZM&$-h+`(#ca z1F)D{x`>Rkd)|PIJPI%np{)n&`@U?q})IF{MFLIFL z#|7X&JNvj}!G`!!xudt5(STc3}ObV;q7nA$il2x;tP7wE& zrEgL-)0UqmKhMQ)F7037`o zrrNhe-9+_ZDbsSaFP(=t$wSdxKM$_ZIyk*Zl0JnY5c~vs`_AlnHL!4Y;F!YMXXT_5 zW3mMtUHMJD_&rY;Sermj=aJi%fasiBL~nhlGfoq2SCODv5$D-C5sAG0dV8lmq~}Z9 z6oNmDup22a2Xz&+?vb;Em5a0w&#a=@J+^07Q|!1`zwi;V3 zknaixbUix+eK_*9O|IUZ-aqU;!Nse~M%?UDHVq@P)R+Jh#(B z`%_r`bi7pl2&xh-4n8XA3N6Sq%l-k?1NPzUO8Ltf3IS*M_ouW15hZ$N0-_^TE=llA zYH5)P_#U%-;78)P{J8j$5r1-lj-|^h_MgpYnjKuWdxE;UmZiC6*EWcZOQN9~&{4LM zG}uaPSm)-TnV-Q=o)%??v+`d7It1i;VO1~oiGIz>G?GKH=DBY_0zkxJo4dbn9M80s zoYN1t4ev8n%EUBc^d^^N_)6y2g6f>5IJGvPn{52Bphhz(Xhm^Q)ra4HTr0=~WSpav zI>x@C8yg$;$QD@|W0f)aT<+>7*)8u)jZvO$@4_4jmStHxUmtV@1TuMKpBB2)fGxN2 zi7D^7P$hF;AXD+>C?Ms&O!`NGk-K+ZGVd=N2IBkhFf?r64(e$Vkh-s1^O)mVW?XXXxT=esYVFBZVfApWYa!(Dk28Ggmj--Fi*vuo$(=AJ5I8#Za)7Zh~PTuKvRCqq|shIOgzm)-09 z;0o;g{P+D#VEPnLi2oCF#_l{1@c*p1vpm!#LY1SbXkh(y_7eZ-@o}o~*`91vH3i>J zO?r|+%uI!@b=;3{99Y$%2d4XkH~=XT90syvm< z(}?Qp)vUBv5Vucq`L z>3@p+l2yXik2?VrD+=?zcNCABuD$F^YOpWk!!1R5JxB_GGQlXV$~hIL=_t|Al@sG( zl2sbx;zq3ahm8KYs)I{Y>2_|7uJL!HSmjr0ZKAHr>^!S+Nk_Hu>?>C&kT{Qjqx~iK zHwAM4zdr>?wx<`l<+)=BiiA4wPtk&FmRg~l3iAR<5XJ)O^U(RJEB%&Y&n3!c)6D`b z9O}4lZx=b4K}VbG`8`L6o5CA%)2jT$s;zT_`A1R9-56Om*pq-+8wgE0fG@^#`x*e1 z*kRj~V;uiPu>uqf*MuP?d=UIaS;-mlGXES20|+`#2~=Sv*qeBmSEb`_k50aw0%W(z zO|pIF5*;BSF~7Y?p_mn>($&&+4JX0io>XsNRxxTN@~y=M?+9+DN*=G7IgWoWJz~N@ zBzHxS;F+f~iF=W&HnE!`nAe2X6dU{=yE|LXvpa1jf3SLO4LRBqFYn0~gzJ^jNK#PQ zuMR2#$4v2{qv?A(2o47-3=6F)Qh~w?;2rFWpe7PKp8ynKW*}aWWLlAQrIi5|L0{6n zg$dRn@yXO|S2NIexQ@#WLxKd-2r8pJD!Y64DBX#m;7pwOHj(T}@!f0X4fN9Mss z=Cv>o=lPaAgl6eRgO}OT?O`HV^gp5yIMi^XJz}{BWyb=;SF2g%XvZx^4|mT*qdOqnwN^ znp$wS$8b}Sw|QjvoomcALwN)B9ciS7FREIF8FJd$BM7mrX}m*kN`C}EU3kmy?YmNI z0FbkBTRXq!gUHBV0tWy0rwoV=H+y#G2;$LNp^R%7Czutn3U@QXS1|&*Vk0kY`qKu6 z2{Do8jv(?ja**Iw)6|SRA>1gMX8M>N{ z9D-E!!n^|E1+m^|B=kVU-{$fLv60uf{8fc1u;=TlNp~ZGN^}5T_xFo`FyTd9t{Bei zj-q>_-nRGmPVUY404~48oHR}hqBVC1;cn^t5*ZFz`^F|YC?^K>Om^DZS&3^u@H0Nd zdW8rC3}IqT2cx$I3LATN7oM|2R(c39_XhJ`SR6lJX~p=|?Q%a=_MP3ypj*l4kkLkh z4ZOHMBonvhJM)ky-ystV<4T9PZTDbC*ZO_Z9hqtUzAY38DRcPPUI5I$iSB0Fo^b@$ zY65XCmDihb-;|qx6P%>v)gqacIS=5nH501CNvo7B0LiS7Cy-1CT*yKMG#(*O-Q!86 zM9l2sbG@i^w?2y?w~CB*SGmb|dy=Sf$aDRXy`P&U!~5mLVvu%#`Rjz>6tCr3N1NWK z8*X`&19$7n^t3m@FJ9&t%?3akLxL+&4~zuSs4OSo3y?|4Qtw;Xzl@*!H8Ttucb3X;TV~XQDfr>TskI&eOgXrGFp0m! zaYVkn*Sa9OiC)0yyUZuP8QZmqE3?P8qVCy$Zr+_x+`>xJ`I+NiODnqA#QLtU2Bjjp z;55dnV=SEkc)kL`4viWYvlNrrP?Db1mI0bmCT2=XW59({z{tdcGS5DTWxzdIdG^XL zR~U@|lFn|!E_0HE@)YJNZ5mk-lc?c|^^JP}&XLjnO!@Mcwc{T$>2sSC6+DI(rTy>g zNvq{KB^sESVch(U6ns5AJU*vmHyf^%&)lwj__lLxV$dXM3L^nXIB);`|FVRE;C=27 zgbKjNZchD3xfAu-Rpkmlx5q(CqR0H&{ylk5BpC@nc)CCOfOKd3i4R<1Gn!IE($Z@O zX_m6TI_i^@@;#uGf7!yw>RR4#A&CV8O5h^c!)=RnFT{HmT#;m0ewVaqF)huKfn*MZ zw5c|*>01wur+ajPbAc%NdyAhU{Vj{%dI5Nzpx-v~+g|`_(Qn`RJB|Qx;de~^cjp%i zEkn5KErn`NchlI_6anG|qia<9QU|xLw1$9Z74Rd=cw_u6(1u5+g_Ko;Y|Qi;45iMr z+%}@aHTm1KE0U5baN$iL%~Z})5hdkF6lH8cn(4Vh>V+dCrvtJipVI4#<_oYsz#Zb;e;2^R1( zYTH_hT0vrX+yctr{C>uggQ4;KxC6x8o_3$4|BcLZ8eQ|vrlEhG|1GB#C5e!e8kb@Z zaOn-#7<*Y_cJ<=pe@FKLv2`zL6z3pSw^FhqDHX~Hh>N;eGAzmT`w-{+4m+Ad!9FTj zXzoXNlDsHXhDa9B66ZJidF5<6heIg)PTUoksbSj|&=lv4E=R9lhPE5Qru~R@RHwUd za<8tt*FpR;vg2YbWW;SjJ&7djMxfbXg1Qz*8juDGUryidvwMZFk_%AN;>d&*NCON& z<6(1}JL%T`rg2951_xazVG;>YmaMonQ$SZ>@OG@6nmzdu{Obvtg6&o(PSXfU@bInZpaqZHq22TB7`MpHW_< z!udmzukWI=6dq1h6XHN#V9P?5gE$C(wSP3P0Sqi>ZPjW2Xl?+ib#5W@7gSgi zK!rO#!%6iRjTmsA$%Xva_CXdIKmsyC7*Y)f{&Lw|n3G|Cq@;{;1wio1aCS(=<0f0z zkd$(%prBIn$*#dtgpI9V;rf$h38RJ5#uNat<8;b3-zE3Orp_WGXl2=!qqk$;R`1>1 zCD4bCaC)>0m8;YOyPE=D z{tDH2QAKS0xHv@rz8imYW)kDaPMM=&{dkNGfb#%7O^#kg>Z7x-W~y*z90fyO5mNf$e{x7*_=rT&x=EwpEVSjiSBJTYdf0F zs?S&$hzCLg%B8;qAbx;2{v(Q~_mK~CfXiTk%d-1NR(2SOWZEmD`wB;Q4v1ub*(eA% zf3j@u)p%!`_p&Q=gIZ09p@;oAiKcFi#&rw5vAH~@zU@!Pa5SNPy62VXek>oz#2JZn2sEOVioIP< z8>0s4dGv%UYh?uqqss?PhfNLv*FQKU95|8PG6HvlJ>OOHQ)3)nGk-^x{|zHStL3en zrcua)S$&nZF7quGHZ`dGBg<8~9o=txR)Fk9NT&`(N$meGxK&v@w7SwdnVeeNOKz|V zM5-LqJjVU@vIusjk;!&l(sc`1_yf>(DgONLPI1n?9%5uQ(#j0`qT42LbE+wA#OOu- z_8la(QA+lm63z0sc^I}R1X4i=Z(9y^({QSK5#;z%QG2Sh?Scm2_b%N3@e4ujsq18~gcyr3IKhJdnU_d}q2x)B6uq3_ch-$@O~8KnR` z?6dQLbg}XYXqvDYOi&<&=WD>N#$UD|7APIv@Av1>+$O@#eeKC4*cqG%z`OTNUXUuJ zHvsIcH(Fgu+E*J;(zjo;4M?QD14#S5#ZSK$^jj9c^#XA4|IgaUE_cEymvF&hqbTAZ O@v5t8Ud~rG5B?8MVs~c% literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/overview.png b/media/dashboard/keyvisualizer/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb3601e2464282d26e6571e5b8dffb378611f94 GIT binary patch literal 208239 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 z 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≫-k@xp8E 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 HMmPQk_jOWp literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/period.png b/media/dashboard/keyvisualizer/period.png new file mode 100644 index 0000000000000000000000000000000000000000..9b83945e2b80f69e0ade07a740c81ed9d61fce6e GIT binary patch literal 32896 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�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 MGmL4@-s6}5AA0~b%m4rY literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/sequential.png b/media/dashboard/keyvisualizer/sequential.png new file mode 100644 index 0000000000000000000000000000000000000000..8b93b2940889cafe62b9a3649f304248ed84673d GIT binary patch literal 33504 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
Y^G%`0 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 v`++#=zu!*8AYKY=V$f!R@=V` Date: Thu, 28 May 2020 20:23:00 +0800 Subject: [PATCH 007/145] add Coprocessor cache doc (#2616) * Update command line flags for pd configruation (#2596) Signed-off-by: nolouch * Remove upgrade-tiflash.md (#2597) * Remove upgrade-tiflash.md Duplicated with TiDB's upgrade manual. * delete a link Co-authored-by: yikeke * add Coprocessor cache doc * Update coprocessor-cache.md * Update tidb-configuration-file.md * Apply suggestions from code review Co-authored-by: Wenxuan * Update tidb-configuration-file.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> Co-authored-by: ShuNing Co-authored-by: Flowyi Co-authored-by: yikeke Co-authored-by: Wenxuan Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- TOC.md | 1 + coprocessor-cache.md | 39 ++++++++++++++++++++++++++++++++++++++ tidb-configuration-file.md | 28 +++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 coprocessor-cache.md diff --git a/TOC.md b/TOC.md index a21bd0e2f24cf..89453bf36810d 100644 --- a/TOC.md +++ b/TOC.md @@ -315,6 +315,7 @@ - [Execution Plan Binding](/execution-plan-binding.md) - [Access Tables Using `IndexMerge`](/index-merge.md) - [Statement Summary Table](/statement-summary-tables.md) + - [Coprocessor Cache](/coprocessor-cache.md) - [Tune TiKV](/tune-tikv-performance.md) + Key Monitoring Metrics - [Overview](/grafana-overview-dashboard.md) diff --git a/coprocessor-cache.md b/coprocessor-cache.md new file mode 100644 index 0000000000000..a6bfb10d15cac --- /dev/null +++ b/coprocessor-cache.md @@ -0,0 +1,39 @@ +--- +title: Coprocessor Cache +summary: Learn the features of Coprocessor Cache. +category: reference +--- + +# Coprocessor Cache + +Starting from v4.0, the TiDB instance supports caching the results of the calculation that is pushed down to TiKV (the Coprocessor Cache feature), which can accelerate the calculation process in some scenarios. + +## Configuration + +You can configure Coprocessor Cache via the `tikv-client.copr-cache` configuration items in the TiDB configuration file. For details about how to enable and configure Coprocessor Cache, see [TiDB Configuration File](/tidb-configuration-file.md#tikv-clientcopr-cache-new-in-v400). + +## Feature description + ++ When a SQL statement is executed on a single TiDB instance for the first time, the execution result is not cached. ++ Calculation results are cached in the memory of TiDB. If the TiDB instance is restarted, the cache becomes invalid. ++ The cache is not shared among TiDB instances. ++ Only push-down calculation result is cached. Even if cache is hit, TiDB still need to perform subsequent calculation. ++ The cache is in the unit of Region. Writing data to a Region causes the Region cache to be invalid. For this reason, the Coprocessor Cache feature mainly takes effect on the data that rarely changes. ++ When push-down calculation requests are the same, the cache is hit. Usually in the following scenarios, the push-down calculation requests are the same or partially the same: + - The SQL statements are the same. For example, the same SQL statement is executed repeatedly. + + In this scenario, all the push-down calculation requests are consistent, and all requests can use the push-down calculation cache. + + - The SQL statements contain a changing condition, and the other parts are consistent. The changing condition is the primary key of the table or the partition. + + In this scenario, some of the push-down calculation requests are the same with some previous requests, and these calculation requests can use the cached (previous) push-down calculation result. + + - The SQL statements contain multiple changing conditions and the other parts are consistent. The changing conditions exactly match a compound index column. + + In this scenario, some of the push-down calculation requests are the same with some previous requests, and these calculation requests can use the cached (previous) push-down calculation result. + ++ This feature is transparent to users. Enabling or disabling this feature does not affect the calculation result and only affects the SQL execution time. + +## Check the cache effect + +Currently (TiDB v4.0.0-rc.2), Coprocessor cache is still an experimental feature. Users cannot learn how many push-down requests hit the cache in a SQL statement, or understand the overall cache hits. The corresponding monitoring and checking method will be introduced in later TiDB versions. diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 9e62cd3b22163..3b1f6d30fdcdd 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -6,6 +6,7 @@ aliases: ['/docs/dev/reference/configuration/tidb-server/configuration-file/'] --- + # TiDB Configuration File @@ -417,6 +418,33 @@ The Plan Cache configuration of the `PREPARE` statement. - The threshold of the TiKV load. If the TiKV load exceeds this threshold, more `batch` packets are collected to relieve the pressure of TiKV. It is valid only when the value of `tikv-client.max-batch-size` is greater than `0`. It is recommended not to modify this value. - Default value: `200` +## tikv-client.copr-cache New in v4.0.0 + +This section introduces configuration items related to the Coprocessor Cache feature. + +### `enable` + +- Determines whether to enable [Coprocessor Cache](/coprocessor-cache.md). +- Default value: `false` (which means that Coprocessor Cache is disabled by default) + +### `capacity-mb` + +- The total size of the cached data. When the cache space is full, old cache entries are evicted. +- Default value: `1000` +- Unit: MB + +### `admission-max-result-mb` + +- Specifies the largest single push-down calculation result set that can be cached. If the result set of a single push-down calculation returned on the Coprocessor is larger than the result set specified by this parameter, the result set is cached. Increasing this value means that more types of push-down requests are cached, but also cause the cache space to be occupied more easily. Note that the size of each push-down calculation result set is generally smaller than the size of the Region. Therefore, it is meaningless to set this value far beyond the size of a Region. +- Default value: `10` +- Unit: MB + +### `admission-min-process-ms` + +- Specifies the minimum calculation time for a single push-down calculation result set that can be cached. If the calculation time of a single push-down calculation on the Coprocessor is less than the time specified by this parameter, the result set is not cached. Requests that are processed quickly do not need to be cached, and only the requests that take a long time to process need to be cached, which makes the cache less likely to be evicted. +- Default value: `5` +- Unit: ms + ### txn-local-latches Configuration related to the transaction latch. It is recommended to enable it when many local transaction conflicts occur. From edfe2f7b867c02a7778b090fce3f5bfe7697ddda Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 29 May 2020 11:49:22 +0800 Subject: [PATCH 008/145] how-to: fix meta info in scale-tidb-using-tiup.md (#2594) Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- scale-tidb-using-tiup.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scale-tidb-using-tiup.md b/scale-tidb-using-tiup.md index a83843591231e..4fbe155127632 100644 --- a/scale-tidb-using-tiup.md +++ b/scale-tidb-using-tiup.md @@ -1,7 +1,8 @@ --- title: Scale the TiDB Cluster Using TiUP -summary: -Category: how-to +summary: Learn how to scale the TiDB cluster using TiUP. +category: how-to +aliases: ['/docs/dev/how-to/scale/with-tiup/'] --- # Scale the TiDB Cluster Using TiUP From 052e9b93fd1a7758854e6003b1887752287dc1a5 Mon Sep 17 00:00:00 2001 From: Tai Le Date: Fri, 29 May 2020 11:51:01 +0800 Subject: [PATCH 009/145] Update Go requirements (#2600) * Update Go requirements * Apply suggestions from code review Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- pd-control.md | 2 +- pd-recover.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pd-control.md b/pd-control.md index 1ec037f80d108..32f63a80cb8aa 100644 --- a/pd-control.md +++ b/pd-control.md @@ -11,7 +11,7 @@ As a command line tool of PD, PD Control obtains the state information of the cl ## Compile from source code -1. [Go](https://golang.org/) Version 1.9 or later +1. [Go](https://golang.org/) Version 1.13 or later because the Go modules are used. 2. In the root directory of the [PD project](https://github.com/pingcap/pd), use the `make` command to compile and generate `bin/pd-ctl` > **Note:** diff --git a/pd-recover.md b/pd-recover.md index 82ec778b65a15..00a27cbd3e455 100644 --- a/pd-recover.md +++ b/pd-recover.md @@ -11,7 +11,7 @@ PD Recover is a disaster recovery tool of PD, used to recover the PD cluster whi ## Source code compiling -1. [Go](https://golang.org/) Version 1.9 or later +1. [Go](https://golang.org/) Version 1.13 or later because the Go modules are used. 2. In the root directory of the [PD project](https://github.com/pingcap/pd), use the `make` command to compile and generate `bin/pd-recover` ## Usage From 7c1e78446fb6d9c19c79506d369feef40e5240c1 Mon Sep 17 00:00:00 2001 From: yiwu-arbug Date: Thu, 28 May 2020 20:59:47 -0700 Subject: [PATCH 010/145] reference/security: add encryption-at-rest doc (#2410) Signed-off-by: Yi Wu --- .gitignore | 1 + TOC.md | 1 + encryption-at-rest.md | 128 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 encryption-at-rest.md diff --git a/.gitignore b/.gitignore index fd9ffe0c2b502..35a883df07476 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ out gen .DS_Store +*.swp /node_modules/ diff --git a/TOC.md b/TOC.md index 89453bf36810d..d5d19f4cb2530 100644 --- a/TOC.md +++ b/TOC.md @@ -72,6 +72,7 @@ - [Enable TLS For MySQL Clients](/encrypted-connections-with-tls-protocols.md) - [Enable TLS Between TiDB Components](/enable-tls-between-components.md) - [Generate Self-signed Certificates](/generate-self-signed-certificates.md) + - [Encryption-At-Rest](/encryption-at-rest.md) + Monitor - [Overview](/tidb-monitoring-framework.md) - [Monitor a TiDB Cluster](/monitor-a-tidb-cluster.md) diff --git a/encryption-at-rest.md b/encryption-at-rest.md new file mode 100644 index 0000000000000..f66ece8295f60 --- /dev/null +++ b/encryption-at-rest.md @@ -0,0 +1,128 @@ +--- +title: Encryption-At-Rest for TiKV +summary: Learn how to enable encryption-at-rest to protect sensitive data. +category: reference +--- + +# Encryption-At-Rest for TiKV New in v4.0.0 + +Encryption-at-rest means that data is encrypted when it is stored. For databases, this feature is also referred to as TDE (transparent data encryption). This is opposed to encryption in flight (TLS) or encryption in use (rarely used). Different things could be doing encryption-at-rest (SSD drive, file system, cloud vendor, etc), but by having TiKV do the encryption before storage this helps ensure that attackers must authenticate with the database to gain access to data. For example, when an attacker gains access to the physical machine, data cannot be accessed by copying files on disk. + +TiKV supports encryption-at-rest starting from v4.0.0. The feature allows TiKV to transparently encrypt data files using [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) in [CTR](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation) mode. To enable encryption-at-rest, an encryption key must be provided by user and this key is called master key. The master key can be provided via AWS KMS (recommended), or specifying a key stored as plaintext in a file. TiKV automatically rotates data keys that it used to encrypt actual data files. Manually rotating the master key can be done occassionally. Note that encryption-at-rest only encrypts data at rest (i.e. on disk) and not while data is transferred over network. It is advised to use TLS together with encryption-at-rest. + +Also from v4.0.0, BR supports S3 server-side encryption (SSE) when backing up to S3. A customer owned AWS KMS key can also be used together with S3 server-side encrytion. + +## Caveats + +The current version of TiKV encryption has some drawbacks that we are working actively to address in the future versions. + +* When a TiDB cluster is deployed, the majority of user data is stored in TiKV nodes, and that data will be encrypted when encryption is enabled. However, a small amount of user data is stored in PD nodes as metadata (for example, secondary index keys used as TiKV region boundaries). As of v4.0.0, PD doesn't support encryption-at-rest. It is recommended to use storage-level encryption (for example, file system encryption) to help protect sensitive data stored in PD. +* As of v4.0.0, TiFlash doesn't support encryption-at-rest. When deploying TiKV with TiFlash, data stored in TiFlash is not encrypted. +* TiKV currently does not exclude encryption keys and user data from core dumps. It is advised to disable core dumps for the TiKV process when using encryption-at-rest. This is not currently handled by TiKV itself. +* TiKV tracks encrypted data files using the absolute path of the files. As a result, once encryption is turned on for a TiKV node, the user should not change data file paths config such as `storage.data-dir`, `raftstore.raftdb-path`, `rocksdb.wal-dir` and `raftdb.wal-dir`. +* TiKV info log contains user data for debugging purposes. The info log and this data in it are not encrypted. + +## TiKV Encryption-At-Rest + +### Overview + +TiKV currently supports encrypting data using AES128, AES192 or AES256, in CTR mode. TiKV uses envelope encryption. As a result, two types of keys are used in TiKV when encryption is enabled. + +* Master key. The master key is provided by user and is used to encrypt the data keys TiKV generates. Management of master key is external to TiKV. +* Data key. The data key is generated by TiKV and is the key actually used to encrypt data. The data key is automatically rotated by TiKV. + +The same master key can be shared by multiple instances of TiKV. The recommended way to provide a master key in production is via AWS KMS. Create a customer master key (CMK) through AWS KMS, and then provide the CMK key ID to TiKV in the config file. The TiKV process needs access to the KMS CMK while it is running, which can be done by using an [IAM role](https://aws.amazon.com/iam/). If TiKV fails to get access to the KMS CMK, it will fail to start or restart. If TiKV loses access to the KMS CMK while it is running, data key rotation will be temporarily disabled. Refer to AWS documentation for [KMS](https://docs.aws.amazon.com/kms/index.html) and [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) usage. + +Alternatively, if using custom key is desired, supplying the master key via file is also supported. The file needs to contain a 256 bits (or 32 bytes) key encoded as hex string. The file should end with a newline (i.e. "\n") and contain nothing else. Persisting the key on disk, however, leaks the key, so the key file is only suitable to be stored on tempfs in RAM. + +Data keys are generated by TiKV and passed to the underlying storage engine (i.e. RocksDB). All files written by RocksDB, including SST files, WAL files, and the MANIFEST file, are encrypted by the current data key. Other temporary files used by TiKV that may include user data are also encrypted using the same data key. Data keys are automatically rotated by TiKV every week by default, but the period is configurable. On key rotation, TiKV does not rewrite all existing files to replace the key, but RocksDB compaction are expected to rewrite old data into new data files, with the most recent data key, if the cluster gets constant write workload. TiKV 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. + +Regardless of data encryption method, data keys are encrypted using AES256 in GCM mode for additional authentication. This required the master key to be 256 bits (32 bytes), when passing from file instead of KMS. + +### Configuring Encryption + +To enable encryption, you can add the encryption section in TiKV's config file: + +``` +[security.encryption] +data-encryption-method = aes128-ctr +data-key-rotation-period = 7d +``` + +Possible values for `data-encryption-method` are "aes128-ctr", "aes192-ctr", "aes256-ctr" and "plaintext". The default value is "plaintext", which means encryption is not turned on. `data-key-rotation-period` defines how often TiKV rotates the data key. Encryption can be turned on for a fresh TiKV cluster, or an existing TiKV cluster, though only data written after encryption is enabled is guaranteed to be encrypted. To disable encryption, remove `data-encryption-method` in the config file, or reset it to "plaintext", and restart TiKV. To change encryption method, update `data-encryption-method` in the config file and restart TiKV. + +The master key has to be specified if encryption is enabled (i.e. `data-encryption-method` is not "plaintext"). To specify a AWS KMS CMK as master key, add the `encryption.master-key` section after the `encryption` section: + +``` +[security.encryption.master-key] +type = "kms" +key-id = "0987dcba-09fe-87dc-65ba-ab0987654321" +region = "us-west-2" +endpoint = "https://kms.us-west-2.amazonaws.com" +``` + +The `key-id` specifies the key id for the KMS CMK. The `region` is the AWS region name for the KMS CMK. The `endpoint` is optional and doesn't need to be specified normally, unless you are using a AWS KMS compatible service from a non-AWS vendor. + +To specify a master key that's stored in a file, the master key config would look like the following: + +``` +[security.encryption.master-key] +type = "file" +path = "/path/to/key/file" +``` + +Here `path` is the path to the key file. The file must contain a 256 bits (or 16 bytes) key encoded as hex string, end with a newline ("\n") and contain nothing else. Example of the file content: + +``` +3b5896b5be691006e0f71c3040a29495ddcad20b14aff61806940ebd780d3c62 +``` + +### Rotating the Master Key + +To rotate master key, you have to specify both of the new master key and old master key in the config, and restart TiKV. Use `security.encryption.master-key` to specify the new master key, and use `security.encryption.previous-master-key` to specify the old master key. The config format for `security.encryption.previous-master-key` is the same as `encryption.master-key`. On restart TiKV must access both of the old and new master key, but once TiKV is up and running, TiKV will only need access to the new key. It is okay to leave the `encryption.previous-master-key` config in the config file from that on. Even on restart, TiKV only tries to use the old key if it fails to decrypt existing data using the new master key. + +Currently online master key rotation is not supported, so you need to restart TiKV. It is advised to do a rolling restart to a running TiKV cluster serving online query. + +Here is an example config for rotating the KMS CMK: + +``` +[security.encryption.master-key] +type = "kms" +key-id = "50a0c603-1c6f-11e6-bb9e-3fadde80ce75" +region = "us-west-2" + +[security.encryption.previous-master-key] +type = "kms" +key-id = "0987dcba-09fe-87dc-65ba-ab0987654321" +region = "us-west-2" +``` + +### Monitoring + +To monitor encryption-at-rest, if you deploy TiKV with Grafana, you can look at the **Encryption** panel in the **TiKV-Details** dashboard. There are a few metrics to look for: + +* Encryption initialized: 1 if encryption is initialized during TiKV startup, 0 otherwise. In case of master key rotation, after encryption is initialized, TiKV do not need access to the previous master key. +* Encryption data keys: number of existings data keys. The number is bumped by 1 after each time data key rotation happened. Use this metrics to monitor if data key rotation works as expected. +* Encrypted files: number of encrypted data files currently exists. Compare this number to existings data files in the data directory to estimate portion of data being encrypted, when turning on encryption for a previously unencrypted cluster. +* Encryption meta file size: size of the encryption meta data files. +* Read/Write encryption meta duration: the extra overhead to operate on metadata for encryption. + +## BR S3 server-side encryption + +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 +``` + +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 (e.g. 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.region --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:/// --s3.region " +``` From d352c22a38e3a2b6c92f547649dffeb8ca5d3d53 Mon Sep 17 00:00:00 2001 From: Qiannan Date: Fri, 29 May 2020 16:06:36 +1200 Subject: [PATCH 011/145] config: update default path of temp-storage-path (#2599) Signed-off-by: Qiannan Lyu --- tidb-configuration-file.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 3b1f6d30fdcdd..33b6cfef44089 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -33,8 +33,8 @@ The TiDB configuration file supports more options than command-line parameters. ### `tmp-storage-path` + Specifies the temporary storage path for some operators when a single SQL statement exceeds the memory quota specified by `mem-quota-query`. -+ Default value: `/tidb/tmp-storage` -+ It only takes effect when `oom-use-tmp-storage` is `true`. ++ Default value: `/_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage`. `MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=` is the `Base64` encoding result of `:/:`. ++ This configuration takes effect only when `oom-use-tmp-storage` is `true`. ### `tmp-storage-quota` From 8d74e0259cfc9073a30a0b5eaca7cff283646462 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 1 Jun 2020 19:52:51 +0800 Subject: [PATCH 012/145] how-to: update server recommendations for tidb deployment (#2650) --- hardware-and-software-requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 0283aa1a28b3e..c1f1eac28e51e 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -28,7 +28,7 @@ As an open source distributed NewSQL database with high performance, TiDB can be ## Server recommendations -You can deploy and run TiDB on the 64-bit generic hardware server platform in the Intel x86-64 architecture. The requirements and recommendations about server hardware configuration for development, test and production environments are as follows: +You can deploy and run TiDB on the 64-bit generic hardware server platform in the Intel x86-64 architecture. The requirements and recommendations about server hardware configuration (ignoring the resources occupied by the operating system itself) for development, test, and production environments are as follows: ### Development and test environments From f015e11195c2b6bf9874eb5e3a417f17bb8096f5 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 2 Jun 2020 13:39:53 +0800 Subject: [PATCH 013/145] toc: remove dynamic config change from toc (#2657) --- TOC.md | 1 - 1 file changed, 1 deletion(-) diff --git a/TOC.md b/TOC.md index d5d19f4cb2530..5aecfc981a03b 100644 --- a/TOC.md +++ b/TOC.md @@ -273,7 +273,6 @@ + tikv-server - [Configuration Flags](/command-line-flags-for-tikv-configuration.md) - [Configuration File](/tikv-configuration-file.md) - - [Dynamic Configuration Change](/dynamic-config.md) + Security - [Security Compatibility with MySQL](/security-compatibility-with-mysql.md) - [The TiDB Access Privilege System](/privilege-management.md) From e55e549432535a38903e15ec0b63862ce5ad376c Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 2 Jun 2020 18:37:56 +0800 Subject: [PATCH 014/145] how-to: update hardware-and-sofware-requirements (#2658) * how-to: update hardware-and-sofware-requirements * Update TOC.md * Apply suggestions from code review Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> * Update hardware-and-software-requirements.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> * Update hardware-and-software-requirements.md Co-authored-by: yikeke Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- TOC.md | 2 +- hardware-and-software-requirements.md | 39 ++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/TOC.md b/TOC.md index 5aecfc981a03b..bfe148c478f1e 100644 --- a/TOC.md +++ b/TOC.md @@ -50,7 +50,7 @@ - [TiDB Lightning Tutorial](/get-started-with-tidb-lightning.md) - [TiSpark Quick Start Guide](/get-started-with-tispark.md) + Deploy - - [Hardware Recommendations](/hardware-and-software-requirements.md) + - [Software and Hardware Requirements](/hardware-and-software-requirements.md) + From Binary Tarball - [For Testing Environments](/test-deployment-from-binary-tarball.md) - [For Production Environments](/production-deployment-from-binary-tarball.md) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index c1f1eac28e51e..8d3c05b4a2373 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -7,9 +7,7 @@ aliases: ['/docs/dev/how-to/deploy/hardware-recommendations/'] # Software and Hardware Recommendations -## About - -As an open source distributed NewSQL database with high performance, TiDB can be deployed in the Intel architecture server and major virtualization environments and runs well. TiDB supports most of the major hardware networks and Linux operating systems. +As an open source distributed NewSQL database with high performance, TiDB can be deployed in the Intel architecture server, ARM architecture server, and major virtualization environments and runs well. TiDB supports most of the major hardware networks and Linux operating systems. ## Linux OS version requirements @@ -26,9 +24,29 @@ As an open source distributed NewSQL database with high performance, TiDB can be > - A large number of TiDB tests have been run on the CentOS 7.3 system, and in our community there are a lot of best practices in which TiDB is deployed on the Linux operating system. Therefore, it is recommended to deploy TiDB on CentOS 7.3 or later. > - The support for the Linux operating systems above includes the deployment and operation in physical servers as well as in major virtualized environments like VMware, KVM and XEN. +## Software recommendations + +### Control Machine + +| Software | Version | +| :--- | :--- | +| sshpass | 1.06 or later | +| TiUP | 0.6.2 or later | + +> **Note:** +> +> It is required that you deploy TiUP on the Control Machine to operate and manage TiDB clusters. + +### Target machines + +| Software | Version | +| :--- | :--- | +| sshpass | 1.06 or later | +| numa | 2.0.12 or later | + ## Server recommendations -You can deploy and run TiDB on the 64-bit generic hardware server platform in the Intel x86-64 architecture. The requirements and recommendations about server hardware configuration (ignoring the resources occupied by the operating system itself) for development, test, and production environments are as follows: +You can deploy and run TiDB on the 64-bit generic hardware server platform in the Intel x86-64 architecture or on the hardware server platform in the ARM architecture. The requirements and recommendations about server hardware configuration (ignoring the resources occupied by the operating system itself) for development, test, and production environments are as follows: ### Development and test environments @@ -44,6 +62,7 @@ You can deploy and run TiDB on the 64-bit generic hardware server platform in th > - In the test environment, the TiDB and PD instances can be deployed on the same server. > - For performance-related test, do not use low-performance storage and network hardware configuration, in order to guarantee the correctness of the test result. > - For the TiKV server, it is recommended to use NVMe SSDs to ensure faster reads and writes. +> - If you only want to test and verify the features, follow [Quick Start Guide for TiDB](/quick-start-with-tidb.md) to deploy TiDB on a single machine. > - The TiDB server uses the disk to store server logs, so there are no special requirements for the disk type and capacity in the test environment. ### Production environment @@ -73,15 +92,21 @@ As an open source distributed NewSQL database, TiDB requires the following netwo | TiKV | 20160 | the TiKV communication port | | PD | 2379 | the communication port between TiDB and PD | | PD | 2380 | the inter-node communication port within the PD cluster | +| TiFlash | 9000 | the TiFlash TCP service port | +| TiFlash | 8123 | the TiFlash HTTP service port | +| TiFlash | 3930 | the TiFlash RAFT and Coprocessor service port | +| TiFlash | 20170 |the TiFlash Proxy service port | +| TiFlash | 20292 | the port for Prometheus to pull TiFlash Proxy metrics | +| TiFlash | 8234 | the port for Prometheus to pull TiFlash metrics | | Pump | 8250 | the Pump communication port | | Drainer | 8249 | the Drainer communication port | +| TiCDC | 8300 | the TiCDC communication port | | Prometheus | 9090 | the communication port for the Prometheus service| -| Pushgateway | 9091 | the aggregation and report port for tikv-importer | | Node_exporter | 9100 | the communication port to report the system information of every TiDB cluster node | | Blackbox_exporter | 9115 | the Blackbox_exporter communication port, used to monitor the ports in the TiDB cluster | | Grafana | 3000 | the port for the external Web monitoring service and client (Browser) access| -| Grafana | 8686 | the grafana_collector communication port, used to export the Dashboard as the PDF format | -| Kafka_exporter | 9308 | the Kafka_exporter communication port, used to monitor the binlog Kafka cluster | +| Alertmanager | 9093 | the port for the alert web service | +| Alertmanager | 9094 | the alert communication port | ## Web browser requirements From 9a799538a5f12544fca7d7b0f4495891b7646f5d Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 4 Jun 2020 12:44:03 +0800 Subject: [PATCH 015/145] *: add backslashes to br tags (#2673) --- .../expressions-pushed-down.md | 2 +- production-deployment-using-tiup.md | 38 +++++++++---------- quick-start-with-tidb.md | 10 ++--- sql-mode.md | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/functions-and-operators/expressions-pushed-down.md b/functions-and-operators/expressions-pushed-down.md index 4860957afca9d..94a061df6e6c8 100644 --- a/functions-and-operators/expressions-pushed-down.md +++ b/functions-and-operators/expressions-pushed-down.md @@ -17,7 +17,7 @@ When TiDB reads data from TiKV, TiDB tries to push down some expressions (includ | [Comparison functions and operators](/functions-and-operators/operators.md#comparison-functions-and-operators) | <, <=, =, != (<>), >, >=, [`<=>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to), [`IN()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in), IS NULL, LIKE, IS TRUE, IS FALSE, [`COALESCE()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce) | | [Numeric functions and operators](/functions-and-operators/numeric-functions-and-operators.md) | +, -, *, /, [`ABS()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs), [`CEIL()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceil), [`CEILING()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceiling), [`FLOOR()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_floor) | | [Control flow functions](/functions-and-operators/control-flow-functions.md) | [`CASE`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case), [`IF()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if), [`IFNULL()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull) | -| [JSON functions](/functions-and-operators/json-functions.md) | [JSON_TYPE(json_val)][json_type],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_OBJECT(key, val[, key, val] ...)][json_object],
[JSON_ARRAY([val[, val] ...])][json_array],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | +| [JSON functions](/functions-and-operators/json-functions.md) | [JSON_TYPE(json_val)][json_type],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_OBJECT(key, val[, key, val] ...)][json_object],
[JSON_ARRAY([val[, val] ...])][json_array],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | | [Date and time functions](/functions-and-operators/date-and-time-functions.md) | [`DATE_FORMAT()`](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format) | ## Blacklist specific expressions diff --git a/production-deployment-using-tiup.md b/production-deployment-using-tiup.md index 82dbd3c177e7d..42ce26ddae489 100644 --- a/production-deployment-using-tiup.md +++ b/production-deployment-using-tiup.md @@ -308,10 +308,10 @@ The following sections provide a cluster configuration template for each of the | Instance | Count | Physical Machine Configuration | IP | Other Configuration | | :-- | :-- | :-- | :-- | :-- | -| TiKV | 3 | 16 Vcore 32GB * 1 | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration;
Global directory configuration | -| TiDB |3 | 16 Vcore 32GB * 1 | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration;
Global directory configuration | -| PD | 3 |4 Vcore 8GB * 1 |10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration;
Global directory configuration | -| TiFlash | 1 | 32 VCore 64 GB * 1 | 10.0.1.10 | Default port configuration;
Global directory configuration | +| TiKV | 3 | 16 Vcore 32GB * 1 | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration;
Global directory configuration | +| TiDB |3 | 16 Vcore 32GB * 1 | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration;
Global directory configuration | +| PD | 3 |4 Vcore 8GB * 1 |10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration;
Global directory configuration | +| TiFlash | 1 | 32 VCore 64 GB * 1 | 10.0.1.10 | Default port configuration;
Global directory configuration | #### Edit the configuration file template topology.yaml @@ -645,10 +645,10 @@ You need to fill in the result in the configuration file (as described in the St | Instance | Count | Physical Machine Configuration | IP | Other Configuration | | :-- | :-- | :-- | :-- | :-- | -| TiKV | 6 | 32 Vcore 64GB * 3 | 10.0.1.1
10.0.1.2
10.0.1.3 | 1. Distinguish between instance-level port and status_port;
2. Configure `readpool` and `storage` global parameters and the `raftstore` parameter;
3. Configure instance-level host-dimension labels;
4. Configure numa to bind cores| -| TiDB | 6 | 32 Vcore 64GB * 3 | 10.0.1.7
10.0.1.8
10.0.1.9 | Configure numa to bind cores | -| PD | 3 | 16 Vcore 32 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Configure `location_lables` parameter | -| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data` | +| TiKV | 6 | 32 Vcore 64GB * 3 | 10.0.1.1
10.0.1.2
10.0.1.3 | 1. Distinguish between instance-level port and status_port;
2. Configure `readpool` and `storage` global parameters and the `raftstore` parameter;
3. Configure instance-level host-dimension labels;
4. Configure numa to bind cores| +| TiDB | 6 | 32 Vcore 64GB * 3 | 10.0.1.7
10.0.1.8
10.0.1.9 | Configure numa to bind cores | +| PD | 3 | 16 Vcore 32 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Configure `location_lables` parameter | +| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data` | #### Edit the configuration file template topology.yaml @@ -930,12 +930,12 @@ Key parameters of TiDB: | Instance | Count | Physical Machine Configuration | IP | Other Configuration | | :-- | :-- | :-- | :-- | :-- | -| TiKV | 3 | 16 Vcore 32 GB | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration | -|TiDB | 3 | 16 Vcore 32 GB | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration;
`enable_binlog` enabled;
`ignore-error` enabled | -| PD | 3 | 4 Vcore 8 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration | -| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port configuration;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data,/data2/tiflash/data` for [multi-disk deployment](/tiflash/tiflash-configuration.md#multi-disk-deployment) | -| Pump| 3 | 8 Vcore 16GB |10.0.1.6
10.0.1.7
10.0.1.8 | Default port configuration;
The GC time is set to 7 days | -| Drainer | 1 | 8 Vcore 16GB | 10.0.1.9 | Default port configuration;
Set default initialization commitTS | +| TiKV | 3 | 16 Vcore 32 GB | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration | +|TiDB | 3 | 16 Vcore 32 GB | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration;
`enable_binlog` enabled;
`ignore-error` enabled | +| PD | 3 | 4 Vcore 8 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration | +| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port configuration;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data,/data2/tiflash/data` for [multi-disk deployment](/tiflash/tiflash-configuration.md#multi-disk-deployment) | +| Pump| 3 | 8 Vcore 16GB |10.0.1.6
10.0.1.7
10.0.1.8 | Default port configuration;
The GC time is set to 7 days | +| Drainer | 1 | 8 Vcore 16GB | 10.0.1.9 | Default port configuration;
Set default initialization commitTS | #### Edit the configuration file template topology.yaml @@ -1107,11 +1107,11 @@ alertmanager_servers: | Instance | Count | Physical Machine Configuration | IP | Other Configuration | | :-- | :-- | :-- | :-- | :-- | -| TiKV | 3 | 16 VCore 32 GB | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration | -| TiDB | 3 | 16 VCore 32 GB | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration | -| PD | 3| 4 VCore 8 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration | -| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port configuration;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data,/data2/tiflash/data` for [multi-disk deployment](/tiflash/tiflash-configuration.md#multi-disk-deployment) | -| CDC | 3 | 8 VCore 16GB | 10.0.1.6
10.0.1.7
10.0.1.8 | Default port configuration | +| TiKV | 3 | 16 VCore 32 GB | 10.0.1.1
10.0.1.2
10.0.1.3 | Default port configuration | +| TiDB | 3 | 16 VCore 32 GB | 10.0.1.7
10.0.1.8
10.0.1.9 | Default port configuration | +| PD | 3| 4 VCore 8 GB | 10.0.1.4
10.0.1.5
10.0.1.6 | Default port configuration | +| TiFlash | 1 | 32 VCore 64 GB | 10.0.1.10 | Default port configuration;
Customized deployment directory - the `data_dir` parameter is set to `/data1/tiflash/data,/data2/tiflash/data` for [multi-disk deployment](/tiflash/tiflash-configuration.md#multi-disk-deployment) | +| CDC | 3 | 8 VCore 16GB | 10.0.1.6
10.0.1.7
10.0.1.8 | Default port configuration | #### Edit the configuration file template topology.yaml diff --git a/quick-start-with-tidb.md b/quick-start-with-tidb.md index b1b465364c954..89dec3067d8ed 100644 --- a/quick-start-with-tidb.md +++ b/quick-start-with-tidb.md @@ -126,11 +126,11 @@ The smallest TiDB cluster topology is as follows: | Instance | Count | IP | Configuration | |:-- | :-- | :-- | :-- | -| TiKV | 3 | 10.0.1.1
10.0.1.1
10.0.1.1 | Avoid conflict between the port and the directory | -| TiDB | 1 | 10.0.1.1 | The default port
Global directory configuration | -| PD | 1 | 10.0.1.1 | The default port
Global directory configuration | -| TiFlash | 1 | 10.0.1.1 | The default port
Global directory configuration | -| Monitor | 1 | 10.0.1.1 | The default port
Global directory configuration | +| TiKV | 3 | 10.0.1.1
10.0.1.1
10.0.1.1 | Avoid conflict between the port and the directory | +| TiDB | 1 | 10.0.1.1 | The default port
Global directory configuration | +| PD | 1 | 10.0.1.1 | The default port
Global directory configuration | +| TiFlash | 1 | 10.0.1.1 | The default port
Global directory configuration | +| Monitor | 1 | 10.0.1.1 | The default port
Global directory configuration | Other requirements for the deployment machine: diff --git a/sql-mode.md b/sql-mode.md index 24ae25071ce20..4dd8f77c4eecf 100644 --- a/sql-mode.md +++ b/sql-mode.md @@ -43,7 +43,7 @@ Ensure that you have `SUPER` privilege when setting SQL mode at `GLOBAL` level, | `NO_ZERO_IN_DATE` | Strict mode, where dates with a month or day part of `0` are not accepted. If you use the `IGNORE` option, TiDB inserts '0000-00-00' for a similar date. In non-strict mode, this date is accepted but a warning is returned. (full support) | `NO_ZERO_DATE` | Does not use '0000-00-00' as a legal date in strict mode. You can still insert a zero date with the `IGNORE` option. In non-strict mode, this date is accepted but a warning is returned. (full support)| | `ALLOW_INVALID_DATES` | In this mode, the system does not check the validity of all dates. It only checks the month value ranging from `1` to `12` and the date value ranging from `1` to `31`. The mode only applies to `DATE` and `DATATIME` columns. All `TIMESTAMP` columns need a full validity check. (full support) | -| `ERROR_FOR_DIVISION_BY_ZERO` | If this mode is enabled, the system returns an error when handling division by `0` in data-change operations (`INSERT` or `UPDATE`).
If this mode is not enabled, the system returns a warning and `NULL` is used instead. (full support) | +| `ERROR_FOR_DIVISION_BY_ZERO` | If this mode is enabled, the system returns an error when handling division by `0` in data-change operations (`INSERT` or `UPDATE`).
If this mode is not enabled, the system returns a warning and `NULL` is used instead. (full support) | | `NO_AUTO_CREATE_USER` | Prevents `GRANT` from automatically creating new users, except for the specified password (full support)| | `HIGH_NOT_PRECEDENCE` | The precedence of the NOT operator is such that expressions such as `NOT a BETWEEN b AND c` are parsed as `NOT (a BETWEEN b AND c)`. In some older versions of MySQL, this expression is parsed as `(NOT a) BETWEEN b AND c`. (full support) | | `NO_ENGINE_SUBSTITUTION` | Prevents the automatic replacement of storage engines if the required storage engine is disabled or not compiled. (syntax support only)| From 4feb360a483994a944e6e3feda6d3fa67102a6e0 Mon Sep 17 00:00:00 2001 From: YiniXu9506 Date: Thu, 4 Jun 2020 13:19:27 +0800 Subject: [PATCH 016/145] add backslash to input tag --- deploy-tidb-from-dbdeployer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy-tidb-from-dbdeployer.md b/deploy-tidb-from-dbdeployer.md index 1432e6d0de2dc..0821103544996 100644 --- a/deploy-tidb-from-dbdeployer.md +++ b/deploy-tidb-from-dbdeployer.md @@ -16,12 +16,12 @@ Similar to [Homebrew](/deploy-tidb-from-homebrew.md), the DBdeployer installatio > Internally this installation uses goleveldb as the storage engine. It is much slower than TiKV, and any benchmarks will be unreliable.
- + - +

m4_-}m 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 literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/toolbar.png b/media/dashboard/keyvisualizer/toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..2401481a847547a6c699d5d8e64d6501ec6601ef GIT binary patch literal 54421 zcmeFXbyQrS?g0Bf&a{xB*jc@VC! zP%$YT88Sr_06QQo<7>IW>ZgE$d^OBSb$U`~Qll(!du>VkT$Qo`I;JmOV}4(sqSswP z>z#LCM=<{#pW^A-9XeE}O_!Xy-yy6L4P!jDL~tEdiCL`_1~htUHyi+3uuF(+n}VVr zMl)m?l%lZ!mH(Z&y~66H{tbjDnkPjD1vL_s$@m2cg{&FcF9rGA2QD~hP+=+Lc7$Q%w{fq_aJ+#7R*o;vY!P_HBXur%$Bv?xlKCWxaVeX zIb{#)MYTeo`9jGn+3WatlyL>eH>02NS?G#|PZLas1}YrT9-_rcM|h!V)GDJCruPf* zVBkOOVgSiJksdZ#;uuLKW!`NWHC`Tnl%~L7)nPObFAPhmBx)Bc43nB!TA|7L0T3Mj z?7$?++w_B316(n4rnFmP*KlhaCf;HA#4I~7Vi8vcWiV$X{r%%N-C>D{=R!a5D}{CxaSO5UpMHDw>$_n<jWiCIzOn`kRvz35akKoQeIuvOU!&*qJg2CxxjoQ3BU}m;r=d{| zcmUY-Ju57ng9BT2s0@e+##ePHl_(W`1a<27iu!|XbppqX3jO%p?_5JIxd{||;P2(U z1iDabdR#Z<-4K27L7{isB*;zy@IBG*g*Gs$upN-=k#>UUdeM7@d!<`4JdkR_#6BhL zi(Ln{vt*@8W{T=atcb11T9Lb8lDtQhqKL;IiN+C&puUh6FLanem?55FnW0p{I6%`1 zwUWQ3kc?*=R&l^@jp)emO7seUPUVxDF5y;!p}D{zGvPFWH{mTxa`2xK#V;gK$|@C} z`}UpK8M85cNs3>(Q{FqTpuo6dyM|3#GQVD_u(y7@TyjdZC@mXq=yj?&P@8o%WvEB0_o`Pj zoiKGBw|CUIlHRQ!=gP=oKO;0@r?X2m_%cxXQs7f3#HhoF#ki|!RnKk9Vqjr{Z$ewY zV&LBU6C7cI`#s65asIGWt%jqI=l55m&iTjG8(Riryim37a#QEpM{5SFeCtF`ZEGHD z1nVp-RjVhvWIB#^sx3?PbM=9Lsfsw@BCl{}WOd%`>~v&BlTR_IE z&|Wa_HGi9)nRYIyX`fyBd^&K7c6v7m9O{puC7k8kUDSN4!#CE5=I6LA2#uBWA99J+ z-bNjg2WW6sJFnzqS7*b3zk=!YoNA*noU@hWTW9DFM6u5Ez>b7*)a5`d44bJdl zTIJJ?UyBzWm74hdg9S)wG}=bXpC*vDleSRIBhQ%TVVeHX5MUu$d?df8C>SR`EHk#0 zb(2j3uGz-;cJ-6X^zL0tz)e6&uhQmM!x|c?hOgJ$)HG(!lL;%iD;%wzTkq|YS`>Se z=A^Rs#P_U6JhMo0Ky1FHq*VsCWUau8^SC*sbmo&(Lym%P5-H>I>P$!3_&~?iaUb_6 zuTU6eIkg5H{GPri_oDhs*`3aR6`=BJ(RneN(qK!N3w{s^YT_(QTpgu3jofr(>BHnga%G1NryNa51>pD+y*ri;n{ndoly)DYYbssDc8A1lp8(oMN;xFR#!wP&>3(B--3 z)(C!koDZ=Gp7L2aw%mqY{J@ngll(wJ#G~$El`B6#@5*;~A9#Ck(ySmSU|(dcBDpt` zno!~!@qExvJ6UF25~x5TfNi%srFFZw>)5rIKKYa>cwY|&Bl3FlW-#6Bnz!!z)-_ss zElkUjrNro?gPvz`*ODAHwyRxqWm{dgJ$7$S33~|@ZSYpSUS%(s1Do;Is8*_53Vcfr zs|Qxw^mTn!mrs_x|LEO!Ufm^}u6vNWonPl|Z9ZiW#O}wI6Ke}r`))n_v9tYlHn3j& zJb(4&)~UAU*)?#TOTf|RwvQywH}foKW&KL$)oUMY!aS~b>~-++)0@Ye4<4wf z$n$5QxZ|Gc2Qf!QHSBxE%GM9%k<3uhwaP>bt=3S-fxqhHy(yu~3p^ZXggQGU%A05$ zI`}x6%+Ci!-PqW#d$FKY=%Gmdh>8YggoFrm^U}Fs`!%Jdw-=Yc-(1}ww8hmmN@jq| z!JXj0P5=nn`j5iioP!$QU`kxWcJn1$jv>Os%0yGzR9+s64$?=0f`cZ2f`{~=A(sF& z;s5MQK+{0M{_8#r6jZ1M6x_erC_vi3KZthu*E9dUg~^5a9~KCcxv>AE4=wW7)SRs_ z4ALOmNohGkLE%yUy`ZI4D9)jvgrKCwgul2!A7>$UP>LtD9Lay8rO^_ChYbS&^9)?X zQB%n)EA2H{UgRxTbhjh&tE;!l=~1XOF&zhy=)yje$|xZR_=){szv=~nd>q#*TuaV6 zy{|fLyRI_0R-4;Zd{=dKofWdm%UVU^KS3i)3Bh2+`N2_;{>NSa=*;ej=;y~yuYaLhZjOVlS`VrIX?7XfA?Rbfrmyj6F~T{hWFnGO@n04eZ}%$c=2z(2?-1J zrN#RHr_TPHnI9Yq48f!q>VFoK|7k{{^nS{2*Z4mP-TyKp^$+k1VIzV4=Mduj4I$wF zh4BBLlm9P-|LG$A|Klt)_(h?_z1O>VJ#Z#pGCP?qe>5*I63$ovM*)<9sn95K3SF+0 ziuLF&Z#Yuu!zZzu;8-XeV`^up(rxFQn4FBcyqwVf*CgX)g`rokl(L+!lwP)~mtQi9 zWDIe*S7NjT!73H?d$hZn;8N7K?Q~vpnw38iJNO)RV+cl) zha|I9D42p${a^KR-GPRflv9W>1^eK6+S@rDGG~|=I#h}J=8vuFfs3U!eh)GR0mueI zo)h&8s4H#~#-{=Am{JW?@O1w*pyYS{S*~mD8-r|#{l2ePIUK2sDWQW$aowyGelVsf zx-R%F7vqn1_yT--@o*GV@!hqD8aE7#wt>`?wN}We1%lci)_!|tZd!z-EP9`|vGN~~ zRm?;;rGZ0xZWH6KQz>#-?exuugW+q7FReXppR8BL-` zOwS3Ig?NPoW0vi1+S>kf+CD_qOi1RRmX_x9OHHFlmbtUx+K0Gd0YBT+P2*}}dwI{* zmfUN<;~R1mE%c%2p~#`wVR@Fzl0`0MqrgWRJ?s=exWTaQ+9Swljh(I-M}K2#+IaXG z-kBY(O>K@FsyDOaZl-2qPMfPk4~b&M2~k3$9?#)R&5AYQ#mIJh5D!ceQchLI}kEtSZX0}snsAcU5;Tna*U%sVHHkmWGRD>NT}^T z(VSHt$@VQz$-*#!l)&RxtJMm8&pxe6i{cWkRqgNG$Wl-+%4T9jtWtD!#rU|L|AvnM zc>jBZ0WOO;lQ6zdVBuYprN4vVp?vSGI;WO3ct+v%2h-gJYoYe#LK?vR7bGXTH8+rsuLiFddPfoI<$x6n`2e?+yh9KVqI9pBhak$-{>e*y?<{PO$u z{;%N#()h##2k(ykfB2L?I#Q|G0aUUuC8@tZ=9C>Luz`vJ8rcdJuDH0EGi2QZsyRBQ}V8-yx8v4jV80kKmXr2tn_$H)7A=e{_`tg5MR;Bc%Um`2R5`|J8f_ zcNB&C7B4|VdU^lE3xv=hwBWlCYuG;-c3)EGZdyI88`miP-$3^7XaS^~ivWod2Pr-z zz5Lhw#oz&3v+7SuaMkUnZBFxAW<~2Sr>;BeY8tvp_o7XZb$@9Ksff!xuiiE_ z%V$_OEwUDG7D@jfEKLZ6Y|ef3W8c+>FQMzA@4#tf=W6gLU#sOCYs%!?m>kbR37f@J zRmlwWon8`g19+4#?CIZsKTb#no<@NDscHo14<|NMR&B;AMy__BF3BI{M9_hb*CHNh~b69#EssH?`^Vo!0mR^G=%o>@&_ummaC$SAg z!F%Dy*E>*-&sE0ym%#$G(RGs7^U&+08m}VuO#Wj-3|UCpwKZ|WkP(8}mWDWya<{Y3 zT&)dEKWSP0;_>H2qv++dqk+6@eeDXQ`1(ukaVC8BARjcDWFPi)Em?KSx_1%5sr?%* z_GPKfX}ZYq02xCo$;Q3@l`+HhnX3eXZWBfAXN|0@uk$amt{q5U36P^Opo=>qlvS+o z>)uj8&y>1uo52UE#xeNcg_%3AXB@s)F*f}+GI)4BvGtW5BJuS~6IernAje7fC4ot= z%{Si5dl zsy?gjLqEWbbrZw4F+QkZ501~uCF=J6^K^2R<8SXu0f)|eTuX^izv{Bgc+&NBYEhEq zBJ&sSwTj1>K^=1iK-k`#*Xt6e+eNdIyRN&=gA&0P3y+m;;uM!P_q`v9-l=I0CxQSrD!^u3ih5k zbOQ4-ainrkg$qZ6RDIbJ1ngGYSWo3`_>zdPx_dU?u90UCR^EN++`MF!$Ca(J)~*DF z{5VSHov7(c&N=(`reQW-Z2MxKJusRydoZAQlEbx%;meXx-QiK4xvSErMeRCJi?tuq z9c}Bi-Cz1F`1Syn#R7!%>?~Q6V>Fx74)}mB-sg~qYZtiy6vK_N?HN@8Pa=WYnf0YVHhx~lo4AM1XfAW1h zdrMMX`+{J@9p(>-f+9c1%bo9=t2-X-$MyEk+ocLJCtqJyd5j0vDvH_ralC?wEnT6W z%ilu+P1|kv5GF+f($28@86Hyqy2hjmAv}*#8)kw}T0EOU*rPZ(Pb+)H8Eeb>d!NBtN<13kVYLtzNW&kdQB_`|_;5cYm_5mVw=#3?aM!-huZ$R*;dN|GLeF2I z|9Y9ijAPw;r-sMWFo^!ra|c=Z2MeHAXAj8q(?cgM!<-<++UNBb#o%``)YUCE@Vf6K z(Yv+(YSQoc6t3u%KUbgWFiLxnAIT(B<8xCn_WJn=u=r^5ULr*_Ye7!)?ry%h%UR3x zP-H1FFb?c}>bOH{veZWg8OO`ul3mE%#t3yz=BYzUyE%7c#xCbCOADm${@w5?<3+Za ze7dh|&A^aGwsb}@1{b8ryo1DE*l6}sWjB?R4sXK&0>4bh9xI-g*k2*_1IN2)dUtKJ zqt}%~)e0QTS&`F`omml=#$g3aEACGhmncs=XJ)f!;52z{+q4`}fZ0Nt2o`qXp%DS5O`+BYQ)C2krV#ZWX`d7T3_Sp4=3e$$b zhj`cOil}dZW1KeD9}#q?=Z#KO9=TBklqrB#Fb(82ZHMKo%R_>%7vUfthZ5dZ+Rj6@ z8alMEs5rUnL6bWqubU*J{ccs1=NzpgI-y_UB$iL|MM!PWSbv1ZSL$B-! z+|gd;GO1GlE#Mlc=30zfgP%PGwNk1K`I9~Rt8`OlOf>LjCGbLuK)P%xKG#P^kE!&gvlTg=#q0r% zQZ9k2%OCWHZM`qjoi0oqEozK-1~Pvk`1A7naWG9JS-2#ep1rasDA1rLHq-DO-LAXR z1}a1v-Ahvf->O}%o}C;9e)w4NhV$AOrty$+r7H{Yqz1Ne@{KDQ=;?onsN{9r@JCFJ zmcS`sf1DJ2dlm~#M!!kvx-Ocz51cL`iPy(|dN}hbT$d+^;@%_ute}&J< z73yJcDxmZD6Kl2zOLE^$InW*E2mNse-|?lM7)r00*=zG%J1aV~v{#Vec~I|DylVi* zyFuYCfqoYylZb0$-cm0B+4qT<>c$CKk7r{-jg>&o3yln74lTF5>;R~qm6xJ z!!LF1BotFr-3e5)x$tXv5v5yBw#+K+W}BYw5dSjlo`h)U;Cnr;>hO{4W}3Pm%7Doh zrjCg?`}8z_TRLy7)abE|+?Ts`(Dl}!+aPJ>4$p+o1Mq(RH>SaEz*K^h5qso2!(5_z zDz9C(9NIU4-S6*HhW$q-vRO0t**e}gzjmB~k*Ln++H04|*E1LFN+8Dv@-;MUe-M- z%8J+25pe?x1npLquE%=cogQDA&ANY>aA}lSbQx%feWt~V>;8tF>*%y%Kg6g5H%Lzq z8cojj0p{8;lw%N>UZqt})d@ijUDl=WMgt}GwQb@%DU!#jP#F{60utYw3jHEp2wU(T z_I9TdCI=WgX$YX8i}$c)UqoG}FLV@V+GgFj5D?BdhaI;aRfmII0zL)N61<;}tEd3j zq*U(>Wk7*(5YFj@KL@2?s1_Q1F-UyirVTG2J+7O^>^`6LU`EP1Raf=Kq~efwMXD1sUl@SGVAnK*^MWyW^Z-7GpW>=;D6$D889_ub`+?8Ntk)4)e zsXGRnicqigYkXghWHCxQs#0^#Oh`@v&FAlp(RNIGp%S0FjJPdb)&XLYyf8hU1=xmm z#HzN@1?N@9c9#iC2SD;6PfDu2a~2A9d7Df{2J1h6Xc39#hEdj#klqG~fES<=&m8fhY?l>pPK`LMO6_U zAcq;JN9!NEYo3+nheVRCKHj@l${}e^ra#tpG;mj%w11p7JVmgst1Ze!o$;IMww;Ew zUN0CuO8to+Go9U(tYW--I15IslFqPBpUH`E-VpHab?WuI-zur5t$BMAWS(K}KzY00 zTWr|DQyn0%5&wJ!Vm(>vRT|}go{u%1u?1(-7I$RIR%plR@LaVJZ(CngFOtuw zZ2YY2#^n1XIUC%(uEWzzGqzrnA-lZtjc&Dg<7MiplI}Aj4$pGlir_Om-`-3PbGCej zEl*MtbL!e26MZBf1gTa{{8y78!kaqFNd+RQ3h+c&J(!D$jOiMMkt2G|zpxyFk~X|= zN!~6cxa4;iPDUsUy(bN`3Ofz<><;bt!oOtGqoPdYshbiJnPCY^oo>@Y zsPsWmgKVk;YI{v5Q`dKc}!vwrS-7DN3s)DvvojBa8!5Ev=$6kM(n z&5>4_nphT#nm-eBL<&|9J!Eg5tjp9zmS_p^Z{=1~qM8+gUy5}XXzI{0teb3opO$xc z!7NK!(O4n%5UF69r@Q#O*qDfoPqb8flJ~4bg;p+0;^_`TCH1sY_#o4ZY(NRMoEA?qaQlf!%e=ZZQ`N z__!(T8BF_=g^ER<^NgbRYJw*N6*UhH=cVoPTc2+OMB6=pQzQ+qe#CkeT5WH@hc;Ml z|FNby3^5nA$Ea9RGRZ%B+kR#7=3198-rFM_yjeN(xuY++t2`96d&4~ZboxPJVdv9W zk&iCZ9eH&iPk0l`%uz$p9KM{cEYUza*Y}Z5*D_Ut1=6GI7tt>95VG#@INZT7%~d#w#E)T(c-X1#k=XdBO& zVN0DHQe!z^BPzLn^ezK`0h5)VP5-o_CQY!bxTWhT!iNx{`yG?kIMnv?Knl1}KkIYC z>jh@TEG*%C1UY{P!n(&Fw1YPBcAYlERUHdB-Vz|r>wUxG^{81jExyF7RSgYl?Aa5@ zd57cA(8ybWtm%w&F!Wgt38;-dXlD=fw4LU3tg%pZFfc}Y)ptHJm$NS5Ox3xCZ<$VT zblI?U;``b@OWB<9VNkgmg#GYGV;=X;jcL`U8TWt%BeV2-al)7mo*@gj*Lfg`P75B+ zR|XYAR;g{2EOMO1I=>TR;;U3NoPA~VCbg`6?$`@v5PHmP=~gTPpy0c)m|DL@^9iLq z&%T^%oNx2K+~rUMN2X-!(P`@)hiJTR+wqX4KXq6-q1m zAZowG&LUj&$|*tOz^uf_qGl=8e71^jmZ{A2Qy!7_!=;dLSnu2V+sisV+Thz0=uMl> z=F-jS{(jrtlpm%z3T<<>a1EuWkJZ0kaT=uQc?_m3q zwQX8A#C4j*8iGa22Is(qpPAyDm-FQkjN}Slg6iN3P@dE*xmkyer?O3Z&;q$46c2F^ z7bW`e!NPN}0B~6>m^Nw$aD9ONr}yjUhKaZp(jhM59X4y8Lw$rSac_~|_r%6=q&j?- zb2-s6mP-@QWYP7UQ@dV$glkGo3u916Z^lBnzNm1y@?SajNio)2VnqZ{hohZsj5U3H zA7^v)QW5wkX9qW9A1~BuJk%auHq(l#O_koC5g=5Wf?2GsHG$_bo`ap=t+xME23Y)2 zB&1t)3r4AnfcF2?$DgcNf?5W5u)MCOKi# zs&%2}!8^0i`;Y=I5ZSjAsSWov)fp@&e2{*Frd5*ezc_KNJ9iR& zvSUuqHWl#Lw7PND5+ePZH7?^Z=ZuplQz6KO-wGi2>-&ZRwMC5T@48>+%$#5M(C{Nc zlA#zFg>ia(0}kLuz6mMM)Mc=bXWKR2a@n~@`xP-gef_Jf;rPQUN%1V_fQN-^=gX+m zkuD1QfZ)8MB_$w6;Ih@dV6jR3w>OGyDesz#c(11G(qjF=oIbeljz~Ldj;^Ef>qrea zUEZx~^(rP9Ym1Y9)cH3M$GhTuzW3b;So}fY?!@_EBNR;Ns&}ba5g8$vq-P+=6!o1K zZ%tE98vo~jsq7W`v8O;Qr>^#Re4yDXaeFllK_+dM_nOY5h#^Bq6EK(P?#B6msagAn zjl=dp3jnnCa?w~cZB=qoJOg`LSI&;}^0L%A6L=bwP$Jv+`;8dH#D6vtscNJWLmqK7 z=x9~3mF98Tx4Uis(YDz(n>FE82>>Uk13!f5q^$#3TuG;*W4wl@=Vb;?o*lwb$e(HYuRl(GyF?V@U zEE=4LqR1`*oWFU0NGZQHGyJDroI3HwQ7PAGJWo}2J9SbJjUzGJ=@#GOCQOnq|4+BM zchI0_)W-qG>guVq!izAn9|%*N%T}tKL7?j*=Afiki*^R-pxLeS3CU7Bbyt( zY2~o#E_NOkxpTfLq~bskGeYNX77^+UjtHfdo-ohJu+P~nWG}ptSjp``!S6pLnX>A6o9b)@2 z_jZn)SvH>$k(aahy?|BzwBP%M5o-cxZnmUGP5|xG>nak)) z6ZT8%UUJ?Za{3$8^X5Eu==HTc993!zG>!RtyuNwx_Q5>RRUsR+NFY4e{NR+xAFgl? zKg>cKU;>jkW3NNwl+V5J-SHL7sYW?j?I*2HE~oNXRDHEl()wt zK*v}>Du5^b&hN^Lu(YI%*PU8PKPl|^h;V6l2 zFmG^A=(8~rE0mevBPjXcpbCkOL=7RIsEtat2RA{T!FVbEocI1P9LkB%%Ns;3L!ZYOsDY4KDtIxM zYx9ltgZH~r#@W+Qm^4oA8(NcXUJZ^;%5{n@^1IG6?=i*~jOw(btqdW;Pyr*UwZS|z zaqaLse}B(J#w8`Mrxt-?8?z0ShCHcI0jO+iq=()_PZ8h5y#QNililpD4R~gnzMZ!p zcncq&FC7!QKy|-r66`=mwZb(L_2ri0t}LUCXw!;8KfXVmH0!JM+pL|HYGnK(iFTjj zEG8~`EdVL-i+lHSL2v5pzbn-zxZ%5=#s9cix|f#~d8d7ihQYI++ux4sEqVyJEo&}Y zzv?1;n87oBX`b4#J9|Kw&VD=80DWx&O}qcyMX=$a@pqz*V&J=|YLG<}rHxd!>BplzJjL>Q zu>LqkY!&E3U?I!e=0I?s$y4v_5jNlU)vTcX^RCr22^a@q(T|jv;m0vYKitkR!ifn zE(#XSStT>tF*@3A&P6k#rmyv)jk@_NRvS;*Wdf-XZRy#ylg$v>*j053o6yd!eC zZ6#^7i!}#sPvd3#CI(MFS?XP-&zMUZe}qS!l^=8*;0^rwAy&9LiO+nP{su{DAt;_o z!{_F5P1$yeWy{;p$)UrMrp2wf^qpI>8%XJA|C~`rBu)PNsF7CJPZ6I^`Lmc#SuV;f z-4sM00;fsH^bZ+}eBq4vKl0cFVs$Y~{rMH^^@*{gsv1%>pLrrH4hg@;|JdyqHjQp# z#I-PdHOVWwia!cJQ-Z$zP^ecB2!`?lJV+BoPe(nwbGd0a^Z`^!jrazo#+`HJHkc20 zX?$z6CGfW=#;$pyvCeSTsN6%d+5$MCcLInu*)ut22-j@8LLtQ@ORW;44WY7OuJ)K9 zn0ODi`Nnc=+m+rwZSQUiqJa?(Gs$`Kzsxi9(WLl=c*AW0gAs=B&KUKc0N{IsJ&B_8 ztuPL1<UN!6mh5se=iQjz?N2_BG4E5Nncoss5kb>YW&MuicxPk?^ro#y@T{us1>OB_ zNX%WhsFx#SL7%9#OFLlFsAk83D14KwZ%<2#1 zN_%J5@Jqjp`Y|E+Pj~GtH|P|{j~X+BQ$6Pak!oUW2KRW)t| z4ztK6NSHpGgbum5UiHdmax_BfaV~4;)AEMoOcpA-9#u~lsnY+LoWczTAz^~B8{;nS6Tn$NCRL?tt-B#Ucp zeFS!`(+pen-orju5|qUe&z5yvn$4HBPt}#*{Cdy|$Q-7NA`j{(m)wuga^33H>RPoo zvs~}CFh0M;MuNvaA4Qvf1lgNL?Qs1xsXJZXWL~D|d|T&YT=35jOjqe|x8HpL?EU^} z`q6&v>QLT;GhMuGr9iUkj^OD&1;tW_FdP_57nRwsMimGZ;-?Il$PMhp7+}xh4YGxa z{y;zuU^XY6elKFLOBv3tIK3XDKeD9P0F!dIs40?po@&d3@HgL z+=&6ffN2@yKbb}{=|1lk!d>xAM&N7caDF^^K+8D>T*QM?+xcT>M+DGpPl?cMd3sh7 zOhxvHO$fbGdntKl+}&_!-8RXbYWqs1_&U(v^BlDPD`Z0)@k}N{J>#VdbcSg8!1Mw4 z(Rg}GgZbY`Vi(wGBZigOSSA^BjAtBKB#HMOX8^{{k4Gf-x}6=a_82Ye?t4^j_B8<9 z;r(4;x_u0$GZImO&Za6c!>e(>J54DtU@BZCL=*$^eL_B`8`JzX5%{0+DdOSwe@M@hc^WWFwmZ=Mm%!hmYlvAyX&t$8Q*Tc?iD zVj#JZ=m;?J$t#Odg0Q3M{R~Edg1f!-Q;EIwGndtuCF1t1H{>Ti&|^1-@rzY0;0VbVMLE{R#RSnm$}Pot?7$3>JK&VvU>@qrx&XskGZ`n zeMxV`rInG><=l(*C63qm}{ib^^%q9%qjEZ&n73zsa%1T6X zIlDetsGnVDj#{Sevi1H$c*Eh~3Drt@ehU|4@#5GUa31HRRHaM5vgqd0btNu!w zD`>sw{QOX?H`2=FB8a8ah^=+(WXba+7*R`&K&}rk6S;Y;j&{^8o^I8woik(-oT4WM z(U1o&%dHPL5CDD(%XHl|TFGkGM}4d71q=|_I)5va#si;)w(CY&-{^>hy zr+X;^e)RcsH4$x=Nj}~eS^I=H>p+K9D(g2L7nMFlANINYfk-4YK7=q^yHfi-+5$J& zToi7=jon~N$LfGP1gkD4uRMjFoCz(IuIO80xW$(iDhcyjRVBW7rdfU?gI-bs1ma>w zt7|V(FRuh`{I;c}AJc_$HGu}G!pbu;MssYLU*+Yo5f~)W2NDHnD3w}Bt0YRZ?Gkl|A&x53orRhjEJwVc}di8vZs)l=#s}VZJ#|Pp9RNRO_=Vr=x2{qQ{g*?HlmC1YJ`c7r?|4nitCU zaPF9Dk^rnyeiiN@b1%yjN&(L7>yERQ+xcDy8$u8!v4sh@rFwHBX8Ut2C-sh4zLlD^ zcza3{d?5Ov48Z3Q@T07`z{W<7WU`0q>wahVN? za3RdLbJJ(5GN;Ds*dLmb)QmBD;Sq4Xft)L%UFfj+b#~m;0BF;SjR)OJxMZlS@y(ll zdvE_5nwN!-v9&C;nnt+e=?$tFojwM5SDH(*hxCl$^{_Q2Wm9*oT(&VErYby!xWDcf zh>*mQnB_cjBCHSi)eHg?o(a#4ADOR}HGK-x>|%gHXt6t{hSV=^hU)m$avq50XZ-4g zoso^zJ`Yce*LBR5vYsHLgcv9+L^8A)f`(%~H@VK|1H#E3si&>{vE2w-^paUuUshFu z$$8wSdg^1)CV8FOCJSLmQ`-)I^SP<$IUYU2D;F-`spebM0cpm_L`2#9jFH_%4-@f> zHp{%siEoiNdj4*W!9keT&i?fCM3IgUx1%?Dt{Si2OfOaUeHoC)F0T8`-6iUZ7kxX< zLX1{ha4l+jyTkIL%Lp~pfS%)l>P7llEUF5G4|PUF_25ik)~ODkWaWs9wS&@x5@E1T}NPcRE(Nt#eG2DLUR9IL@zgyz>I-Dr1 zowGPmblOf;U?NZ?UV%RA6OJ4EW$Jgj-35%I4O|VKX@@UzL1TnpB0n>)M%Jzt;@cm| zwf%%JCBXpT#xF*eMd!Wd-5Og_0|NwX@27fkz=TM0i` zwkV~n;-EYfaP__vS0u@eNV`X_)^qtbU{32T?lJYCT@&qPyZWm>sR8)Bo6O^XZtc+JpzQz7-dEx@#q=fr{nFr60TE9yp5!Zx6 z#sY`86ZO1w6l~my{o8p#7klk!Zk2CL&OXwf^TXj1ptSpidUB9d$CW(NM~^FeF5z6a zH@7c09oW!KiXduO8heW~w9Pe0jT7%Cr1T+gIM{@KTeG4qxS{=rc}5)9Nu;_6;Pi8# z6~Qw1#FjH;^SD?irlDZsO@z9@|#NbxmCGLpq6}`mmj&eD1!bhS7Ge%V@m_I z_6^!qgVsVvQZ5&n{x!*%^3+}~@1x$P{X{ni5QMofdMuc^ouMOnhkZfi+@6>8O-N(r zFqlXw8CLc-C*lC!*KrpO*?9QqZ7<}yqok5{0ogKXlQIQd^!5O1H2K(3D`lJ*z+$;~ z5?O|Yp_66Pw)5ptu8s-!$oRxD6!!q{sD$dc$Sb8fhtvLuU@+6#W@*W;$;e{8BE^U! zTD!rKHy*N0@CL;~v~!2jXH3+3UUL<~)+_KbUGWaWsSl0>Q<+K{p8ImluziQ|G8Bs1 zKiqBFztz(1%(5EUdG=j#Ne_8B>poi7#Vm3xfQu4*KdZiCVt|`NS4&cf9cqds7$}4%SflRq)R0PL&zS*YE47 zg%ZCgOFY#2Ap1IHYi&oMb7fPE7mSyd?lUNVjS^=$k*t_u<4HkKSd#|#-NjQycLBwM z4e1m;r=H}7uu;#=!xVsyk#9$!SIbs|&kMf44MUSGS%9lzG%?7k9O5Ebtg~@Nn^FXo zqRCtx6NRXxfCW81gg9P*9uOgn8h|0B^2RLLPMFL@&mo{(fztpWCOkd^B?bI zK1Nj_-E~}a-CeF-Fcp0CcsbJ7pGRXsqao)uZp$xKOnqd_2D@d`U?0)X|4<)nQ5Jm9xuNtp_>qXB+mb+JTb?Y7HW4n%5o+(m87G{RW1j8qPUjO-n-x z9|LBt2i3#q8#gfns=5Wcja`%@W|J176<>8JsA%IU#OZ4CwwajI|`(i>X_O^Od1ZxvM zeilv1b(+hwo0k|TkHy;pTPc0NTZ$W$z>D)*G-mCkqspUEb*H8hd|Eh=OP_NhN@g-F(29_&R+}Iv#lb!xbKB5dm|00UxpcbQsalSQO_RYQ@ z?I3$#&Z&~6(KOon{lrNg+iGCujUH<; z?(+$W>FmH_o56%iXDN_IKHaKmZTft704F(?iLd7nDP;6Ls`JxXJ1hUa9{ud%-iIS5 z+{$wSW0Jt%;R9cy1O>f0U!EKzF$Wge8eisBA?H$c6M*V3kK>EiPoE~!eADH98H;~> z<8Oa^n6vWO@7$Y7KrhuOrcumdR5c}50ep?6EB@xSUNT>#!SCqP!20C2&A+W&p{<~; zMUByi8UjUbWt50sU~?ZiIcMN-Y+D|c?Da6FuUBmm;7`Rf#cmFq2Y!vmoK&;aRZA*V z6D>_)507Mp!l(q0sU^MT#$LVozh|W`9i0T8zUMZX| zO+9RLsV=bG5QM<+(6J1_n~ddz+pL>pzsnX*6rnLJrQXNM_bOS--3}r{t5M4ib&DB( zlUDRl`Oft-&W@!w&D*3F4uCnjlsu=b=(#le-DJ=;`spbR>_z2$Tc5*N@++@zD3M)F z&qVp{hX#m(D^t0qDc;NDr;D>;h0|en`YdWiC~AA`4K#$kN#$Pe9-$y(qOYJ7_l<9_Lw*)R{|G2*=kYk}lI z)%H!*Yvm!&M)@$&Yy>-xfQrrfq{Vn?ZU`}^G{rL>Ytz@J zI@o6u$Iku!6WOZuA6=u5^M;2q*3^G+KPf=;I{Et%Vm}%n=n8PXA&z!t`J=1*d6c5$ z^oCfY?LKghO6xGSNyFVihlF3<1<~Wk#^Xtf*?7%o5msT*jy!o z`t?n{j#kn!;C5moKKM(U?=;4c9=m(UW~@&U`2No#KtY^2+vK(LD_x;+r<} z_NH~yU-g5gCl%*Iptm6>CdpN{CsJ+oHay7>e7?=xAe%WKP&(e0hcB;KAqTT>rmuch zo$ePUvMctSF*7@oYk=P%s6d3~Quozc3VI{vmz`4QCRILt4(C22%!(IVoiyo$8FptB zlbSv0We;h+Ed2=+*%k&mt_|jlwL`&|Nj97d*LY zFZ_0c(bRp@Heo;Afug|svQmr0eNT!vc++P#tMDQeQz8)&l1+Drl##nY?X&H}cgd%Z zHlO^`IwJzrtwGRW>?5^b!oR3b2vekKtVH;nA`}-GXiQ{dc}*G}LWl;#j*C+R%e^+y zoL}XGTwCIsEAd*Hsr$T!@(ZyQ{Vk;0zPqQ}+uV1?ds8^q@i4mYv~-`votFa-+nzK_ zNsWBN&EHk@CB`Hh=}!tV9*?%_1n+z6NK3_s$CGbpzQYDNXGK63yl=5H@87T#Hfql0 z&G?eEsNbPZv~UL|n2}iZy4Y20MXI5OdzatCc9-pp8>>u0ekZ`0MS_WnLE#<;U*@nP5b7v(@w3XkLy6Ui=9#Y&Bvz0 zY4NZ!&Y+o*;&f=}?3s!@x8tmivgkc0&Z+1RV0nt(z=zy#>&PFI8e}U;p8)0eufAK~ zJ@bOr&k{Q@%SrBv^&AJf%?`>2HyO{bxceTC;Q7*^Puk(_eMqI=O~1u(lG@n3Bq= z&d!^jIVTS<^Q;S68&A?zFM1zn5x3y}fT?X)%iaAkAMF_6O~BEvj#fc9;W;QGrP{Cc zG-=POdpLLk6rU~Tr19hPrkAOQ>iHNlo|hJjLV5=%AFSqQ1`2fzwN3a<+nzcpz&=+P zUL21qs+OVZhHu{J)?9c*={KL8p&gb;;87H28KYAFrZIyOPBKuN`S^#@5-Cu#ZK&*K zEfD2J_0imT8!;enYgUo&(6^)_QrnHG(h=q6hUUz`Ob9&dASO^1&++J8i}N6^jDVR< zrazx-&EGfKxTwA=TpCz0Y&{ zon!dX454JI17K zH8cucVzeg|u-2s!x1zWiW^vlX=IgQ3*E3q{q>k$DHfGpNo)a0(J5}0Z%jn2?x1!a7M}{>Ha#wUysvoj=Lhm2*J7eFe z=#u==2ARGe{qWd_xzl~!BtbT-10v{LZk0bb*eCeHw8={@_3W2LTo8*@#l*J#tUfvL zimc0d=GfV5on6)&8)F_bt&WAJ4h`$E=1}BR23+}$`9yP6tb};riXQe67@^| z5oKr)mz6kn5zZzCGdO6X9`p>?(S5PMbKi)gwl!QYaoT6HF2EFGrrY>>I^70o!uk|T zwW69#-H$keg)0BmaOY7;QmC88tcQ5jk-7Tv2WyDL{==-W>*%um2xH$Zyy9>|3EKh^ zZWUtL2Vx@9 zGNDMrRIo@DNX{z?9ys6d7_A>f^-?&Bq>F8My(~}x>SUu^w4=Gg6SMmyLV`S}Rt;_j zQQCw&FC&=+^FVIU-lVwyNKI1+!ky-il+tJj<*duOb~kpYi`T;-(RRtCF`xN*6izgb>rOmFf;P|w6uus^%+g!h;yIs&g+NZp(sj)sy&y}Kl3H3ZJT7s=Ji<_14G*8>`=ouR6ml373(EtAlqg2#Xu9F=B%L2% z-ohb2Kx@_E!{zMxAv|Dfnmndy!<=>SPPyXqQn}jb4tWPv*M|eeJhAH5c(PL}1Xl;( zt`TpvK)Sqd6o=HOqQfMtD{Qt3=&HDlLeb@MZ0d3(zucK>njwPHO)x*E5hrj~Dnc$- z*^Nawa#i!k-x8v`*K_We%22&UyFdTnc_yKCw~^^_kB9mxBxgVc2c$f^0T5c*J;P_vND}^ViEhchpzE%?Np&=22k^2#^a38 z6Im-5ckG1ft~Go)^#(ttJo##0-$HVO#c6x_4N&lVeX>6O)_T?%&n9={!e>>TsPhvN zt1i!T-xi$xZzsjjrU;9vd(xF#_R!fS4l_&=ou1=I5^4jyr1=b z_jw*T%aUhCKKk0ite!>oa53H#Xdw;3tz1Bnb66A)3de0 zma?sx?^4PK59EZW6$IR7JXaGt-;um{^H4x>`sfMEW+s<+ZqhOPpg++Y4WK5Et0*(t z25ZeMI8qp0C9cukF`!#k(GUF~-u0er z60mLmUH&X?Q6YfuKAq1UZQORgBq#ZjYV=`jU*tu6hgjCGU^;vERPRe|F*Y%|HiY+4 ze~?5p1#aFsO!&qMwgJk5c61)A6yN-kF;w=J>i4mkXw3`%F0ar(!G765nuS#&Ac~7j9R`{9g zpde1f4Q#74FSDQ5{1^-lTgW*-J^ENjK_E_Atdt&TK{JEa!h6?$gFxYCi@y6pjQdFC zzS{n_xJk*)1036}@JKWT#Nj^o+E`ljQsoV+v@EQe3$L!nr9BcI(fe4Bs)=WcU3j!t z?VkJl;^FCiUY|Ybt6>k}Q7_wG!)hW)P6F3L$ zJbU(TVg0cpKi^^sHcN{`4)%b?*@fM&1mF^DLv`e$v$bi4@Mr;q#D@7;us|*_PTQ0^ z1pEy6V|RVwv*g!k*k;eD>s*4RCw=tiNZbMw7l`F!!C3Fw^C~b+gs39j?OduPjcot6 z2>zuwf8QLHNpPUCCid~{(k+Vq_dKFal7R0xW2f7rG&L>U{0}NP6726Z(@v1)yd__(9jXasB-%cVsp7!%)zTA)<77KGa)_c<&9son+L917Q1t;z9;5Hb zHvXJReQ}bg5Y16_rtHmA`Bbth)FKetA)@8}a4Cb=Oap9vnE5&d(FL@GI?YGQWksn< z)FvUQ`))-WJDGsm+F#tsc-wNTm0Z1PVYF55jvqZf)bc&=qv*(9r=kx6RwL0jXTH=# z)L7^5Y_czx>I@l9Q%y1;xy?v-^fcFh&im()d5D&*!w#)+e75cT?MSW=Igt?Nf_QK=k~s{M zD13(E%R}-GX0995)Ay(INmPVCpQa;VI~4FeBHMW4-;WCa-HsREDMZHM1N3)Bh6~TV z52%b1>4`cHXnyB;NDGY4z(2LtKSL5mnsIiWLaz>qWceNd=#s2j!V! z`dGY)e-Q1aP9Kj{$By^g{+y6bB-zNXZdl+j8>e{H>U!V5E?Cfl=@E4@y3npE#fws_ zo2Cq_qzI0%cZrhGUu&yHZOocjhPpH!B~k#GCc$^$LYe^!6lZcPGcdthGsfXj1b#d} z2aE7!E*O4zWc1WkU+fuPXl$q3p_vNzZ=@5ni@q(bbP(5@T2~x5g5E8)SYUgKNHIo_vKEiB&a=ok>lTI zu^Gc{HeGUA9c_QvZRX@jp>5m5=)*R+Uag1fVKQn6w5{w4+1-z`{Rq6AHgj1wTvT8r zOEL2NRmU*3s-l$4FO02A3cubo|6zFfkR%JPgY3z24$yy7S36+oZa~Y2 zTi;_JsH#0eru8Rg>bq!1(jE|muEs2A9d~yWaW-sdW^knlCvU2VUNFo7O|NS&-DbsK z&BWYK6}y%4+Ro!^g43_jEI7!59J|8AM&z6@%u>woy12ClsG$o{3w0pEi72mmEt13R zK>1JwVLgc@Grp60aq9S*PIgHhEb_QCg>nHXoe!xeG&MhC2$`fJQ=g1CEYodW-f|Sks~y<7XiGrc{S>+hA-x0zJE3wM9W=8-^D4 z)Xe{O`uPrsdie#PLQEim9+AkD8?KStJVn7v`Qew>3tOs1I&$R} z)1;bX`!QdJ;+c%T=u@r`^974neAou0Im`;%c6gn1(afKPK}wh#plC5KzQd}`hMk^8 z@wrCxI(j_AsT;IEycpHkBPFo;&fT&P&3WJYZ?xRq(62TVntqPq+^`_JY{#XXd_IXL z8VUIXSrYQfE86L?1Mf&Fv>C-p-`LYvQVX3eh~aL=vl~N!m6(Y-d{~wGNH9aTQb}P= zg4y;ZYzR{EkWx(cQ;rZ%f`iXy$Rl~hGc9K*1H^p7699v_Pu`?nm^B=P>&Hv62}=vI z%>TfIeeakIZxQr>qSTe+$540oTQ%O)sz%mZHh03DD@GG49db@^G2_f_n12{TfG(ly z4F^lb%~4?8-6`%b0~@COO2d22xU)?IS(6l*Dra>(j+8?JJ7OkFGI4L!QqiAOsI_qW zZH0k>7Ov!lDacpMC9HUKqajCBzxA0t-n<)hy}VDt>`bb*&Kr8-t&C@2or(NhWI43c zFXV-Kx#N*1uuA>h;yDv5v89|*p5=!HveejFQJf#V$to%mJCciX+~9dgq6=}M*_fK1 zTo;DTJkv#^HfGrJJ%Wadyup5c<~tOXn=2t8qLbvlnGhBho;2I0**t$lJmD*R4} zp)5&h=77-pyIH^7=kfc&j&Qa1lIL1WOM_cq__~(pMGPAixIo*DpV^~>%bZ@)HVi#e zaGBt_XGpc*mffm^>2~Kn(w`>=#&hFc-Mebc8(41Fkham}&O6lE_J|i3yHSc<8#H~G z&N#_gDk~A(3C2oUw`4#=!9N#5c=Mtxs-t#S{b@#axC^}I5@T+v)VcdZ0`m0VV~(RP8)WA|*K zt9qSJ#+exdWt;FrutewyVJp(reL-q;+u+ah)ERg`>;=D-9kAK_pdETx5qFfLh3kDA z`&dnG0NK)2LvDz z4}b{C{KU>a5@HjTJQ%$v&$ZzSEqX)h-3pHJezqKjI2nkrqN!fZvk^ux3fx$h*%I&O zy*O7b92KNyvMV>9lnaxVJa*nPq%SxLaMg`5>h}0PE0pmGV}>oI)V!c!JFj!K^gBbp z;@QCWm~h?pY58${HgsGiLG;zs?@c~uoM$B|LBU%VH>jY1uHsg8*(`l9&bbDs!9;LvmvqkfG8 zn@@kfrnFS-4^*UNqUN9N(W+td?QdaAPI#tD0}~3`d?bE4^`P9BnX?a3lO@a6p2Vm`NKho~9C5D)jrhqCV0c4tGsvZU6 zb0Gx`6pqkbgaDJy4mE;5<*>8>o$nd<89$tkw=&0S5VCFisT!+}sei;?bGYP}ME!aD zoodH5wE`|@S(0MDUYoFOR6nvsO1lQ8(F>EFa^=u*JkDA#&NHBs&Z)<_ zeK)vW-R+xiekiOD_Vl||>=k5Tjv^Z7Sn|44_H#AgkMAOz3T(d9weV}5P662t=k43f zxT`9r8r66xgt}OAU)HIX8mb)r6pmtxi2Sdf347E!d@+?H+Pal=jxD%M82~IyWzu?h z?#w6fHtMCBJ6 zmsg|v3%V=t(cMv*uuvihFGNu%(2*q8{Q>jjr;wV|vWxSRINBegYZdAs`-FL904NT4 zIO?M25?pqkqy_vIWAb}_c6yzWao^9@ak(v5T-u#ts@W!dUw*G+0xA6)V2&O1Eay9X5QIT9JTpmy*SYuiAZ(HY1!6IAi=%Rj`&dO>=5#$)Qa@?c!@6iI7EL%+6 zw~lY_F(EFJv@fCW9z;nkI|z2dMwoZj_hXe!KGipBBIJ$AaJysL>2^h_mpfd_KIwP> z!uyExq>*Gop0(a=P14uxmdV7$okjJq-@6AT;BjMaxM4pM^GUXc0!|@$K($3ZiArG1 zrJY7SF&fShX-My^9`2#+;H_jWM*c6*T^B?u+j~cive0o|ZBZ>cpg}Iu4t%zbf=m33 z;Re9U7=5R*Xss!+RJz4joF^um?4$8X?7{y1p#wBHH zio^60bqys9{#G4++MwVJjg-P({PM8H`{=lMAEXA)MWUnng> zsGpSv?TO(59~<-P03UxMw&bVP7}kIoWBW2})5sdAfw%9NgCmOp5Bm3TOD1vf+U?2k zVbZOkUM8YTr%HzZr4{-QtC-to4gNv?RQq`mrl9Tnn)y>FO8?*@waIda2!JUIuPL zK-AbL9U#sH$mn_Igtx*O6t>=F@;{dTp_v;8ubfNlb*t(UJ+`qFHLMaOMh&Ajrv1mO zv&&(43nlI46Df9-Opb3f;;dJ#?>qxdxburrBoFC3Io@Jq&N1y;xZapT-;b{V*rZ!W7lL6{|W$$rs>aQ!p`L5D9{}ukXzYjOs;k*3N&d0Knqzul%&V*EtfwE6|lHhW!a#?j_EN zj>}GfQMfWHtv9_L9J0oIm8EX>Cx5BVudC*sW#7Wwi0i9ERg-#a$U|MDf)%rW9d)~JwJB(dW}58W$n+`?QP*w-P zOieLF*J}{XC*{suP%8i!NVdF=W^H+S*=gEvaWGCbK{@*ZWE+fbgK0WWLGewHS$#^> z7=Ttyv%`u{ap==k&Xk*Um8okFSJ#g?EzrHYl517mShXt*U>_xiwAKB@WBTnVz3Ja# z_(i%4)qYo2APBV;rxjtr>zrdNs`+wyK5R4U`mxCv&<`X+N-|7jD99~gYBx)$FmtG| zvwTH6zh2tg?Pwt`d$p+ER$ejO z{b(5_;3;!djXvDw+{5B*|BWc7M)=-k@a}4@nqHjyzHBq{vk({tq(QK_<}`=|WLfBZ z-5<}v6EY(YPWE5R)JvW>)kZnUDZ*!cgZKgnYbC7MdRimB<8m6+=BZGg+{A$#{-tkx zeL^!EdzniXFB@aq4}rLGfs0qC{`6Q)bq~6m#r#)bSqf`TgL)>%!1__^^H?!Wuxf@P>Qj>Ob6Q(FH`!I z;ckkD*bTli49*0c$G!fCzK3Mb2?FO&917M22fJEbqiC0%NFuyEgA?QG9ekcG3oat; ze$Sp*Dh{sdZC||rBnkJp#V{)3>S*lw-#;G_OwtgbS|xq&Hr3XH*nO_!VpWp=#wHN( zim*7T7gbX(&qZs?zIDm!GY#PZ`w3tgXZHwaz8HHQ9P8M^KcYrqhf&K(Kf{!28^Z%x zc6vTa90#@CSr?*%1F7acZd|M{Hu))L#OtwU(NY^&bIBVSkYUfFLiL(w@%uuDIBh1yC@j!w!q#cELpnJC;Um~gDBPxn)()^AEd z3F9wsk5EaAoh_h#OzI#4A)htXy>8$Su}KzQYZ+3`x2-;ZnM-I@PexDp^mvcfK9y8VB2#+T0eD)DrTVvUmS+m74rz zDX1}XYhyS=G@M&yK#X422)BG2U?lk^NsM|^B@mD^bumx!>A~H>Zn*1JHlW1d8yi?| z3y}kiV`WjMMx~{yp2ZpdIxhS_0}+j{h-{il%MfnYux!oP2tBt-ibZmCeQzbD?B&Rn zM0~S=TjDGDaVHGC*R6E~`mj`v;pRvG8`(&npwV;yA!q` zTB2oUYntBYj`udnWmSshtPtC|7nxCX)K3!JkFPZ0E6-4pS6VW~ANyXN$$<93Ofl=@ zqz#vqcQF1lj{hC&TdX?zx3&zsq-}OcUs;Nl>YL=Cs+)2iwL|iv1RG8Nj1*Xp-WV~o z7JKP^LRhQ*5wN?)J7=((BrE48o(Aau3KfW=+&KQdUt*>iB;z)!Sq-P`3kUzm508B;Bg3$DfvnntvN0)UOi)1=~AEU{izt-ym~vD&VH`BH>;>FBSw0uQciFfklRA zkt{fOObK>zaluTdTy{;6Yg81B{;$C;g-OMPzcXFpPmtG0$}1t_tkN*f3wNe!VuhS) zL*ZR;mp_dChVL~1G4)z_;0x=-b{p3eHx2x5k*$P<<^M$1=ElKTV#{+P)2M^MPV?sk z0%u*P>@^(3|491#MSTbD1>ei+q?k9QlGo-Le+ue3*m1iui9fXNYfSvjne+%8{aK;o zYps}d6Wx}{#EPDO?hhC0Vpfib%N+tbZpKh)hfXr~ICrZX$$u(14R`m;>NmvVNl&L9 zlTvw2BQ2fTbYtuk5J&#jTN)jfrqkfv&ep{fcWJ5!q4Njq9SJlM6%@G|w;%M@Uu};r zuaLrMWq2FTaKM^BsAFHS;$}*j81Ov;c>>v@_HiYy;wk#m)?$g5#t_z^-F2{rz|ywq zFC?_St6lq#dtLsU=7UAGcUz+_G|x0TZG7uIrZ@VJRdy_$RyA9of?3R?gs{6YxlV!H zA<{dmc?$n$9{+5>ehc#KZolwj6;W}yaxs)X3P~Q!IS~ua@lWjY6`H%d>0SDuFgD*G zf#qO5H2h*sNUStzc@S#vf<2rci-zuI9hxcaP8`RIE>!Y~u9JNl&<3jSF%$g9zkIB^ZJHV>vf7 zpl;j#bJ%l@%ELjTDpKLJx4M+hc=GQw{15Q}BXnSRyUwsnUTVW`SdMUR8HP;6$Ns4a z57ZIQ$e6a(slJB4h%o~y{D2#_w3FWa6+AB$@s}h6<N#qdv{34Z1*FML;eV||3UZ7dC(7vJExprl zn{q2l*Cw5YJj9t&KCAbYW&19uq%pRRr%@U94BEJO)y|L>t6u8tQa`?14E;)SL>;CR z#m^5!8^JMMPM0ESc4X=Y{B}{Krn7`(><04g!|9bf#<~ID;f`19{PIq~wmLzoDBCg{ z{;iAH*tDzGOR_~1Xwd4Jn@3Jvg>d2}0#p<m^Ma#t@)SieviV4 z5X*5&ru@`YQB2HHwr{Zyjf*(s55IFE0$g>v zKJ5u7DH^T?C)u$p7DFdusz-Mrs57U(bOl4*O{cy^Qy^td+d6;H(t^rP$12y{%3?L`%rK^$(9?{WQ(0bv#gBgAO$Ot*ft;4r;2K{6+3Ror@(9 zJs3t!pM4abu9?y9#37%6?VKHpFYTUasKBq{GC~#=L5m!Q*S*R^t#22v=na>egFLSm z;h$;-nkpO#alR{SWax@RLgK{jzoNN-rQY`YLu?$^lpET8_pS-a;fCcT9-u~0Jj z{F0Y}On2^H2a+MC-M*B3A%w68{KiW{rA_a2$}Opk;|`naj{r#j&IGSZDRn8CI@>Mt zQE{J4vu1W{T%%dn3^iNE^<(Qrp-}o*SkgtMb_h& z5Hk=Bm(^LU4mAtqhIAm+Uv@LLaAd_~s?k~>PPv_#VdEQ@S&6O}&v2A`b-EC+SIN{I zVH9#59J?up_s|u+FDH~R)uUx>G|B!3J^gO`$@4MQ!WP4N%aMtz_ouE+om1kk#}^9c zigTn)WhHI*laKhvnC6Zv7^hnV*+^zP5vyHocK)X0wE<@VJ3AnIFTVx`13+bye%nG9 zL_%Gz^m-0S#vEITtE~IvJ|uSM#ar6-GaAe6Z7kc}eaMrW#${fHd%3BPS!uwV`bb0} zbIRL5M_URzZ{_#}4ax^yK|6}A?2GEO*@V>ohIo924=@U#67Pyt-^^+sC0^w97IN(z z3!CLUm}T_kJ$st36iv5tootTl4$x7y2SxUgU&M*7B4o6|ocDUaJ{q|QZw=ilbBvqq z?7uln-WoZ4+-*V<%n?nmQlQEx2yqw6;JbK3PsE!LH&!G`INn}Kxb(s2$c1vBgwA8r zE9t!+O#i77Pfx(k_``6HQ$47D7*WyPbK`cT< zO(u!ShBX94aW*bs`kvF%rX0hr-^JHLzR}>J~x;7Lq~tP!E%)R?cK)$ z&$cc6gKg^h=e+#6NLX&!Cf_>mXboLUaO&piAbg5)e9sc4mbl28I&_qJ+qd%0PPNGj zv!|pp#?^hp0LGQSS5hplZTY&8a6vrvQJ|{%WxxjFNpXQ%=03oFpHw?(< z^Wp_5bO*Ms&Ka*RPJhs^;5x7}nbT!+{)f9=!wrj>?S`41P@Cgi-R@FC_t4Pym?f@X zUXXTy%J>VZbf=OMlap<9f7lM%B<7(1*I1j;aOOS2yr8z48V-5k!^(a3mv;fq37ATZ zgsoznB&i*M#6#ng_#fWuA2<6JD^TX{sO$WR^S0gXrr}x<&;eU_O?0~9sHw>1t_kf$FE=-;UnYIzPd?j)bEEvpQGrQ!E4eaG@r7)tNNTml%-uOg6~{T-N=-_e+1DD8;5N( zyCq+K{C~3h%TG}U<3LW!l42fMB}_Y^0vBlbFUiDXVXR0znB~-wy|l4s%4r*c<$2aG z1t@fr^A);GFYo!slYm1qez*4uVX^WnJx*jj;RmZ_*OS4}PSDkAHyXsP*cD!_ zP#Xaq$_H8e&pDOR5iwAae*OWd&fJK$dV`{yL-EKgr}^DdK#{?;$j~{o5iNgIkcRwOpbnE4e;({dhd@j0WBa03IH@~>!TVkB#MmW80ck+Q;|H|y_lI!e*5tGi2EI% z`ovi(a|&~8W3-10q=D1~&pxP!YsB9EaC>hHLrnXbH0juF8LeoITeqc2{blsj;?&iM zYRRG>*K%on_!{%Zb{;5zvAdXF7t)t!jmc9umuEd1+1br_4jiG|d9Ntn-#K6P?rJ=o z3$-07&;h%(iSLiK;@^VJh!x%k@%4ysQLmJP z86RlhMl&XX6aBX;qpui}lk-W8-8vmo`lJ{_RzBr0WZ0# zfnN?@?XV}n(BWkEnp>=!cqBBwh3oe==RU9M|WIqXHi$>9mSZrg}j z*4Wsq2DB9`bT&s0UGg&rEV@uVLLg=~gso_Eq7k5ATpu%y*lX->!Co=W`U&4%hED;_ z$jG56W$8Mgv*}x5<;Y73X6NP1xWM^^QGl!vmTRHEB&}({Ba&`l3zS_Vr%?1iu4j9r zqBa)*Ek_sA!_|WFNuG{72+a3!dXB+d7XZuCqM!SXjAZx4PXh(S$Ucb^>+BRO6gyQC zhBW~4ZZ|m~N4Msu9A^mrO@&BOZE^q7qR=o3N$=W^C@60~LPN(Ql)C)G+|c|*CUnwe z!Um}VEV=CF;TvoPKV8O*uODmxaPVN}NBBKCDf$URii(YWWSn|SK{N#tZr6PI1JDvZ zvT}vSGUTI99UE5~&jSMkPkFC36gBR@tlolAi(bpAn)a}oL0Bg{k8Gi50`ysJJ;|b@ z*Y{4b(=RNa$}3-|ar!U;I5Y2l`J=}3z2bvbPFAVxX8k?VK+p@LVvpx`wdvs^oydpI zD=#EpELceFP|k=dqd(dEatsq{n)NeVxmJx#@vLJE7jCggPXVo5i!pz0v^6nvUNzy+ zK{EwtXDLfLaS_uWScP#jdeW^1NrT6`bER*T{#j^JLN^J8R~O44kN+VOlyF2C(mvzl z2aUq*gI91f<;5FXoSM%xFi?YORffv^d9T2JPF+VFHF-p=iY2N2B6iCGRN}>z>Vlx%{sYA8Q$H z&wu9>3(9{f-Pp`8etw7mf1m7&SQ^)K!RBY{HBR_SRj5nFbG%(d0u<{lL1EMPv<0jYc^&xymYc~iC6T`X8bC)ow^r)YedBmoKVzY7mIfQj zS3sZiX(%QDo_7P1Im@t@ZIO7^;d2_~2~;Cb0W5vLE=Wt@J6-%Q5SqF+8j(`~RSAML zI>fU{N2W!@Zsi)RWqb3b#m@E|x3!u3*Fz=e2@(XK}7ezO3W%J9l1xLpQh$d8N?0^c_P6>!NZ1X+$# z01?9akh-cfK;WSI@T{Nc<06+%N!Uv@CCq9$S1LR zJMc~z?T@5~Z<5|w+|X7|7O8A_jZAiR0pd{}+#Z7B8S_e0cuc<8TDHWV7Mi5UNhq zKHAX4-7sEds_jyb=RcLAJVM%)6=T`A`X0bbJ{Wr}eGZ!RKA1up0PH{|-=ME8zejk@ zGlC6H1~jC>`t7-z69+Lwfz35*B8uW6tvxR1L%u!T%Nr4I|Cpq=fs!$_J<)(RW(sCS| zzH^BcDxy#oskO2JRdX|iV+M^=D#Ei^2SD>x_t|zFl)boqv*qR#ibl~DXsD}Sxd;Lp z!=d}jLu{N_zlJ81qGEaI|BCv*!&kFE+G7C~ZSJ6d1+%xFtGY8Qn7VWqhaKKOtx%!9 zu{OnX{bBK&-2u51WW0tt%M>=X^-tTnj4PWkXl-Go5n!cY&DPZ(MW{J*}uGpE|$Os6}`0mv?`|!00_tYhbUB z!4s&GNXF3FS?poUo&na@6u@bsT)okBay)xm;7Nu@Fw0n$MI4J1nMWZgeZ1VF9+j%v z0<4IRJ^;wdBv3E2G9w89OG^+Q0#Eyvt@aXsFK6~1kl;{P4=S*Mh)Dh%XV}etL|EP* zD)~z^=xbBFJxDBED`|I5E63VekEzRkqUU+iDkRx z!AzB}<+3=9AdX8?X>r--8z!(t`43RqsQHk2&!5Hxf#YAr{Zzn9=NF>qsDWK_EJ z)pSt*S(Z0{vPfA51H6UDjkZ9N8Qe-xRck3w?+LKX{LWgcCLOyHoY}9!4e%clCrRz* zza5a}BdI>V2_rxJNm*)}c@z_7V4t9siI%cm-CPJ;9f_(~>9W_iKOXOEa2ps@zC|qJ zUpbRyXfu$ujK-dokX(ue7;6b29CN#F+J8S-D(xpmxp@!kA<;9h%isI*WB7rHBmd8u z`JW5Xd=1FcI&_Ltjl&84TwK3@m_QaU;q9SJi;0OT(DkyknPCRqLVd)(fzkF}_x2Az zjG@%|C=p&0-3yK)-0yO2KU{8X9=*;MJXsO)t$l-B6nTYVQ9Cw<^FQ|`WDZC3E$mIn z|8iY3NAmk#he(OW;qhZ5o>B}QpQaE4AL1?TU@1&r5IjrZDG@ZGS*PKq;veDuQWJGg zn(Jn(6>pW>g&KQ<3o&&^n2MGbs`u$HUZJn3mPPEnTwP6cJ}O*|sO4% z{dVN`+tdHOov#N*h38PzGGswU5-MXiR#7CA`TV;FdDhVzu(CU~x$W9a37YZ)=HtD> z@2wk$i!uk*MHeGS$j0+(AV_XeJw^Xt>7rwKJa4WuE@T>b>Go{od<4I1WWkQ!S+1;X zzqA+1Xvr~|>wIQstS0&~#`&ytzi$G;!cpaX1dnC36ItCx7D_r}T8v!lz4_hcpM2rU zX-m~#o1-$Ai>>^kr+HNM#kw)!`eL$p`JwAbY9nKRnACtIG#dJ;eCD)jk1`R?Y%1D!{WX1?1JxIWJ5Mq-QG!PvyR_uLDNON z)H#Ug`p?Oy{9A9SnV~ePJ6t4+Q%{u=25cV0$_|Dj1*;x$^|<(8a1ASg}s>0?>@VVPr=>BDdvk~5)SEOpbhOzU+$T=9*qt1yxw zTfVA$U{7dK(%mwfqXyY3YE>;2iMrP&60F>%J#EL9KT7w&Q*Q4p>q?xRbWTs7zPd2Z z?>zHgYgv7gH{cW*5IMdj)`9k=>#QpM=7U(}Up^)}PG@b?*bGb!NmWT&YfX<5HmM4^ zNfuJZp!@uhE?(1I?-faO1QW6x>z}sY>3Organ60b@m}`;l4wb;0jj+FQOo_zl2+j8 z_38i%r}tjjmgC9%f)DIKys1cU@f#Rhb_X}gkWN{&Nm^TCU+{VFw_`_%^sWbk5t$t1 zOc`8I*^vmY9gx7rOoRxeFHS3>*WVkYf7CDnpr3(%QLt@45By=?U@vggwkQPtWjwJd zk|L)Jme|?i4Ln`pfFH}6ZGo^S`{z5N2bB$6*)Bx5&kKg_y-X<~MbAA_LCmd7d$Jp? zsphSxOZn#M6aG%KlEe!Y8WTr7UJ?>P!D5~6fs~mAlNRls7qW>F*#zSd=<#+~@lNQj zsJ= zIx}}fsZ9$N^o#ja8-}FNmTJ5C55Zq9Mn7*sZH;P6S4YPZKX@@fgB@RRg*K!<eGe4pfv>G+drxtq6d(CU*dvI*kawd4~AxErpXYMLg#cGo5+3p$w9=#oR8 zP2`z@qx{Vlc$qR-HY77ZyCMcD+f9!>ZmaJ^9xNR3ceT2J3?3&ui`@jDIvc&#co-dy z``bVH&fWB%>1vlG4*xq|jNmGzN{DNjV|K-IP+NV^{~<=T9NNpKGkH>DHc(;gy(=J6 zT;cIdSDTFXhv1tQG zj{F;e;}H)iW*$f^9}bq3FmdLEFYA3*0tkj1%DSO1(!?1e4 zoZ#i3m4yh=4==U64^SmeFW#=_?g2Ax7e%!{dAC(-`Sbtvbsg|f|NlRtM4~c6p+z#w9)}WAR`$p! zaW)yr8ApXOqO9zd?VL^4DWwo+o)w~W=gue`IgbDPTHn6E`u=3=xN*Ab|Oh~lndyK}(XQ-c7BVsm|6RRwmygzhy7I%tg#n{Xg3;3O|@U2l0Z=T0( z;8h119xoY!;*`Z_m)(jJLN;SD>;9eF_ICc9XhDaurG*ah_%Xai*XkLEV)hV^-R0pQ zM4)ob$f7mL4Tg5dTY59I{ZV}38tfKEmKN!IufJ|k$u7Vml4EdRm`(GbOS ze%B1~+PSw*vRb};e7(5rUB#VT>s|*R@PFzMI1P0?Fd$T*$+On&_Sm)|&OslW!iV}Q z!Ft*0wBL%gpq`p>B$^+At}LC9A|^z$9k1CW_L++yyZ!p?r;IqsAGV%<>3G3FO?QLY z#3oA8QO}%Kuw)4#yMt{dQaQ~kNLar4QPFlrwUEtOJOdShG{Syg>+p$;Nxsj+RiCLn zvE5zXdpD!Ysm8b_6-N6bzwff&O(DsQ_Z`kDM7iwkr5dHBYS%;gTl_=E{T~NhI-dKH zMyqs&l(g60LMe7_V$-bKZ8@~-qwWeRc5Qf1>P)A^N~2NU|I&Ym9BD+%%8SG zS&4!@U@Ot($N%k2fe7w&a2@o9$vCZByj#)EuB11lhh9#x*@;S62SQ3$cwiu+b5ff1 zC^p#43hu!sNVHQ$Dq*(1o-jV?#6wu_)QxJ#CRYFaJ-^wcN%|*BHU*^e$HEERUMj-f zP2F^fH=1i1jTBtP*5Zh->o-+ViYD*_2y#Rq zxt*XBUD@d2{J$Z}4(fp8V(_iaW?7?sEWchHN<|GN`>)F0`eRNmo@~*LDtvPB9vIzgkq~2K^R#eDvmT`FeBHU4TqZ!=@1Cf-s_%*;d{AWMIDN<^Q4A4#9jO?6#p^B z0m95f?ku$>tQWtTeBx5(RB5`Vn~>=BH0S)rYNib2t#qx`c*B#D);r|r^tgc zl{Zfs|1meXqg0%wu{wN=KJAJns+k;AidJ1X@9mn@$pt0#xUxEGaPM^*-lm4i4zJjZ zEZtcJy%e6QMzB3|sTpZQRP|kwJb9R#`xb~X5(VQgxwb`exW;Np6>7BJ!O)px5bQ1k ztVO3D1!@o|rf5lz51jOd1Z;kJJr2@u3H`3sgGR3LhDHvz)|@A=fzzWw#(&-;HQeN# z_CT;=wQvzJli;)&tKvXON7!&Svh=mB1ql0V+u1~6i~0dLJHD%^xD;PAd_AJx!8BO; z@s6ST6KUNgogRpe$2AAlRmk{zavK*~w0TR9@VX{h?0LgMMN@C6jM5O|FO^KF{}`oQ zPFuHiA_LVpglu{)8oi<+t53|~Wa2pJ zzcvfn&nrpG$e5HjaRz!f59*d=Vm`LVehbD4@s?a#qv&{J%h^~;hsFg;n&J?;fospem*h} zV$!V*0a%$SUel`qx0w^Ih!;U^dRSp8sI8<6B~}Kgwu^*mS7Tt~Y{MKt7H(21*o^~> z$Fc7MJ5GKfWpXpm>M1$ZZ{b<i`(2O}(``H$u}*t=VlHfK3Cf&=){|Ew3>* zRDiR{&{fZ<*oHp5PfRx!fU>u00gZxb%DU)tD*&)}x7_?caE)IJJHnRYmJ<@yk>^z8 zdMZ3c>YcmF8fbsc?`r7FF_~){p3r>*B5E24x78TKWpWN80lYmz{>ZO%lTx4T9ca|I z{R{-zq)Er!+_y8~E^$i4;z!Jc?*RmkF}RVjvgzi^VOnZBFTEgwPDP+44>h#Cbf#Kq zV+5VLHIM@Zku}i=EqFUuEf3UkoLJlE2iUFgRwkvZ6L}MF_sP%cx*1L{+4pFkYoLVQ zS}9V(H@S@L4(jTD0NtJ+x-lDAYcSSQ*r5%A)i$2n|MNMY4uSju8dTAmJ9yMa%h=l_ z@$pY7ZVNk$=$!ie#7%YUqP}5w{?t&p^Bj2pgPTii=TN!1x+{ zbK#Y<3)erd^y?(vweuFY4tdrBN)_p^O@g;>-baDVeJCd|;Qa@%8J2>PlyWN%Y;OYq zc2g1yO6*j+l^MN1PZb4bre!FHLgmfua>E-Rv&}MYv&c8tEz-22w|#`t>^dH~6YLB~ z9M}V0R_xvo1EdJ;GzCe@Ptka>X4T|EX>PslWCrv}oy4?!E@pst)DGWpjI?u13v%7t zCs{bbyo>#+d+-LRQSbrogR_eP^hyJuz+P_8<}r@%V3rnW+1Ol0%a0p8_Hi_j3eYJQ z5-ce@-z75Od8YHFj{_UxW0h(5<#*nQiAAK4L+oXl8mYoS0sGZ>r2nf~KVwuAs{y95 zR0|Y?;~7V75m0uV>%pY>PmwXdLTH>~FqO2mS;2njm`!ih=Nk`|6B!C1g6IqHg+h|4 zxgF;MDOl`X4*fjMFXn~VCtIy0ZSIW41)-m}H__XXT~{DVEV#a&h=#>xKj-A9A-$PN z9a)WDuLbo9G&eRub1w9n>(^TNMy-b%>Qw}LgDALknzJrIdI7W)T`zCgbJ<~lLB(e{ zjN1;HdNb6`-bhR&6;5l(DxtsgXxecGXtwvH@)>;>AMLe6L0zh&@a3L9liFYkEY_9#N{=QHfA667soezwJJqG*aHMJqBpqzj|1SUF;h zV*`fNu%-QzS}D_daEk(Q~P)-Rr3J1kjvMdsZ}q}WJ%g8pM)kd#h!{^!J8i;%xR`_9@oM}V ziXy_}Y?HC53FL#rM5FHvOoe>J$`oi zWt`Rf>@9gn4E>H09Dg8>!|MSk}dfp-vC6@(*7Il#@-$&M#p z!f2Rrv{cm*CR?UlrU@3l>;W(GanP70>EqTG+lXbiPs1Z@!PyMl{`>Dp@uOl&AM)pl**J_>xYgqL3~tW(+yeE2Iz9ya6L9B>PsgY z(_?eFIq|jz226GG3bEJLp=ffp+p*F;3 zBi=Pi$FyhcdR}8{%Z^^g*4mT7KJRX-Yk7>HC<7Q}d>9`>qvehPHQpkC!lo+`vysvc zGS>zhfd5s+2RbTJ*MgI(@thp9NGX$0Ce!aUT0vnLE{l>zMC+AibhgOXER+yrL?_C=_gEq}I*U_3m1A5LF|}XPIWF`#J>w(^y`)6$ zS2A4DF6!1sGsv#J^CZI)RFJuN3F1WYISZdT!9&@hUu>cwQa2CP!q&?a(tnt0Ce_*2g8!4$35xx%odP#=TiwV_7+a4AYnje@NdEC?{iNE9BG zbJZKyM`vrq@~u0?_vxahpN69}&uuclVN%ao_l2O2caRp6MPjUr*GvvzD2my?zlF8KBG zo8n=)DBM%IEa>>G^rOH@oX@2vEbo}8w(vnJ7yEINE+gr_pExq&T|M-o{b@Z66Np1r zlN3+2{CP8M<5NRby5{N(Fm?%(R;GP?@p3L?y(8h;MaS#2l#gqiDnkKvmAWy1w?68C zugQZQ)E}rxaO)@8%hx!NHPlbWNVnvCBsa~pF~qPX^Yo@RU(Y};u1DEEU_s%v9Vcu1 zZaEc>nTXJyXTj-4A01CC!oIOLIo5PKGk4buwErjZ@}^z`O$e8kiUc=M`LIS^a@cnc zE!3A*?YMWy0s%9MT$q45W(0AnvP9McIny{0w|rWOjDYFepC}r-SRlV7S*Tce#uQ7W z5R?=S@f{FtEo`5k04*gm7G3sFNW%u1P7%9xO$XmxJtEV;bttd=Q8pRII7oUW8rVzW zHn&9Qt^~)dp|;6WE_ud`RE0YlN)0J>&17Sg$sI3EhF_9guK@Co^G?5lQ@&-|0~NY+ zGLW6c^;GMiG#q@Bul^{nCjE3ed~2P;Jw*mcnO+>i84gJ>4i#9s)aT9mN$kB@1WggR zo#(`@zd`GD_cfq3eU;t@ua+*Re17|CHPLQv-EI^aI*6$@XcZPL@ButIi7>COxb$ei z`_W<_ChfVH7j$Cz@ywcWLRHt{DbS6WVcY!bM*qq~pT^cEAh*y?J4qCjWZknL=SUTh zkQ2-KxF}I|$Y;#|QOBsut+>~g%F;>lSVKFe*f^wZGaeDv5fLZO;I)F7)V;suA*2QwKS5<%A zp`Z;9^*mws^3p*n$(1ncx;tf#E5>EOiCI{pT0;8I2rAy^oUeXlzzk8rgZSu{v88V= zia-V$sg+iZ5SIe0bJ?|4#H*E*P=`AV#x_iGc(;YR>e7)>c+J$fP&!Pt2GL+hka%@a zw}L)dASjy<=PK0ul;;k9D$kbQsOowj_G8VM>+(=Fg;fL1A(L0LGLv1eUvoqTrRNuT zW*xO7Le@ddAw%BP7Zd4#+BP%2PJ6~+k_gGqG<`C#K?0=@EBY%-2IOyoAo!Z$wBTg! z1BF6kDbF7U&U=b*Vjzl!v%)~dxj5_taGO2h!hN`d4*YmyGl9ONJt*ql&}y9jl?x?Y z+!52tvdeoYSP44LdwsbuZ?a?bwcPfK`e>Q};4!?nFxa8`&2dw~zQm4Er2vh3@mw`3 z(EdlpDU*$}eDLDh6cc=yiHlXLSEZTw?)13JHgN760Q1IQvV^3_`^Xkw9EabE3vBE7 zPajm|&2M-{iP1NdyZKU_rz;c%h0$9Z-dwce13h_`=j0Y0nR_i>CF>-=C{u#%y7G=? zo;90@KUa{>6L#3+zJAYfO-DK-z?)4gP*HCoD~x-IY78e9<*>|~ z7S%!#VcngqgraZpr@EhCe|DcD?hDANq)z9|Tb_4=`?XS^sw07#$CGPCx=aifJm=Aw zWoL+j7gtuDaI|?m8jdfUR{AanytkM%?iJ8Vdyp61Ey(LZiGHrF4|JNvh9*HkI{rH# zVlvuV=$9k_`uG;58n;vWZk8_5&PGL1&Ly4aXK9_h0x;#yzy;Vgw?mae+xv3@C2RO-smFzwebj3WZPE>!$LB5s4N#^h^;J(f zC_0^sL02g@s$?hhCJO%e@_>cY2X3XudG~0#IZuV`h+ilesx&I%C-QB8xgli0*%(s` zeIBGs=d`^7s6i>L(qM6tSn3n+S6-Nylpgi8O@*;DZ@YxOsW0!mz2`AnWfaiP$}*mL z+L8;~$aUGfr}e(DNf~d=0DbE0d88M9x(IqeK+K#xC(k%r2aX#FJ3IT#&=h#%jM*(o z)OJNFFh(Eg*KFY-E(djOP<)V#lcW$N`U?@nMw11-10Y}$>cfRdQ8-kZd?JgBf zy5KGHws+!8U-xRDW>$pEXuDU)rMxbq4@mJw;a+rJ`O1e%t4V7y$VA@bj2L5@GQzGZX!4I;UOp0GKGZ+~= zIOT2v*l1sIC-PGMQ5)7B{c8@mG;{49Yqciv0ULd3>QnA{(2SX;qq)yZO)S)vTi=RU zHV!jMn+F_x)E$)nyO!ajk*G)>otcKKyG`R? zDGy&MeLGrtrCs>UIH=2Twrf(+b8LyJzGIuAigf$ZPGpT-XZWVt)$)v+MmNQFx$U~T zbn4=+24{za3pXyNMz z=_6TL_n(*@&&*0?p&Jy}^J2f5qk*-eqL&;lG``1KGI&`F!Yrwozwm-7HlgsShKi|! zo=pVIx!{cHxl(+?3hV7b1IT8&)$n_s@%BxisqV43Jr$yu%bAuWCz^>x7w(>llAge= zyeq)5_%s(268i-0v+MH+L9j|pN`V#eMmXv!q?%=~J`)d7E<&61P|pp@=yoWt%3E!g zwP&c3)A05AAmitcfk%k8${A=qqj?Ev8HeN`NS)xTTD^;}V}J%H1Ky0nI1G=KQ0;X= zF3J%-8fNoSQq$#&GEM2EoFK7HLCp~c*oB5gMG69EG^g9j>C~|tkUKB&E-yVLe^LgB zaVywz(^-U!k|^NnHn}+H!jm{8?0I47y(!|0dI_X|V&0W-omk@cpdE2(NR!-GaIk(A zC+j#UjTQ*X$BH_3=&u!8r9Xr-pL*I-(I?0{vnu^C(m==&ueG8UcZ{Z^hzUb__~lVB z+jV31z?FajB|Go_h)X9wv^>Y*_T|M2qa1q29zF9VbCfe)HA|c%9gd3(0OvXlMO?3L z-ZI}{foxNKSX3u0%g-fv&j|3kCrnr2f|niVFyeOy>T-4+l5_+hUO4C~-I$+eoD@2x z|G~z4r*HW9Nxmy8v%rb^uu~lNDJfkvwmM7T=I($-JqU+H;mwb8mFS1@x}Q~u=lZ3a zzc5Zd$-efQqJ%?f`ZN~b{8G^=vh0HuEGv|sAkG~fOrfYG^ZS*;xM2lom8cH-)Pnu0 ztr~@2%&FLDrmlY7QY>Zenmlk#F%R z>$+u9YPoIkR$@3TiX{vXp&#S{lpny&dD;llF`!)H^q}-IX{&!Nt27?AmDEfS;+K3O zXp)0|$Y&v#G%Dy0Dxt0~7J7EezJ~8Eva}!89+VFlDsU}u{ghPNxOB-XpVeg03ZpUE z0F- zFPR>d+VuHU!+MJriqnBTbafr~9uns98Rf8eU0~%bA0Ie z0h!Cs^RDHB{wkvD& zh-gFt`rXBcpg?k?X}QG(UWv9-I8!&h_YySS(|sl7ZJb-OijMw9Hc@;5Uk8tW0N5Ua zuFP@xtfU+v=>qIl+SYj(MDWAsR;IPZ%B`G;=K#H*yX&?h)ma2hw2X2A4%D3nTy})N znB?B0d63gBu$TMQUn;7fiMtrpkFPGs47pQGJ$ujvL2G3eHxoeeF)!P zgc1`d+Xh`GTGs3aD@s6|dN9DSwY(YYl@nTONa}y;(Flb8%Mh=eS;QxAVg2`-8{+^i zF1e-B>`gP!|D``;t7-!@rXslQeZZ%$;|O6IkPG4*hk98;Ub3FRELJjz)MYka@>W&3 zN_h6z7hLVj1zOIrGe5C7hb8o^ydl*vo|HSews`xsyuY=S&cXmv!O{6HD6+xQG&Nd3 z)j102Kuq=UxBu47Hz?llCL*8&?bf?oyINZcm`GJoRJ9KHtaRHq(2k3@YU>^5i_LuOf&a9Tc84 zrca+8Et*pEJ{Y0M#3n6D9O7`>viF;5w11;MUY7TW>IL&WX|LGPAW+x{C!YtaAdzk3 z-MrU*qd~smy;Zg14>RH^LQeA;jXoGXrNW)#Le>ERJ=-6aG-Byd$`Ie;IetLvBcbe!Pq>_=e1Uni3Qb7M+pN38Y6NQd0jTkE77FX8hLU?iZ|c zy|Jftw7+7n*l@ynmrBH}f3*K|dV@Kss1Hh>aIw(!+CC?J18?ZjnztV7Td@NxJrV|3_8vGj zO*d&V)$`>a1Bi)mIV&r%B*R>q!hp9UQLEOyZQnb$N2xE`< zp;{yM0$c{t$j<-^1=uM$!g340+>2lPdLqJXgCcf$w!<59K&E(S>-9euiI;BgzI~x1 zOT~sZ(W=d=ZZg6-;=lOmrz}t8eL${4d^=sLA?)+MUlZ|batijFfNUTuyZr-t>6l-$*+KAj)!CUs?EfQSqkKd@A?DEcG`Y3fajv|h_R|g%UA9vs@i!g2 zUuf#k>niyzRV6TWkTw&1Zb*nvt3`V7jY&}K01lhT4Rvtb@9>w^IZVBbMWf4EQ~vo) zELuU_P*r)GIQBnYbyTEm)UkMQuD=NSM70^C;%yrDY}Y&Y;OgjWy~MfKnJ4{N>>0?lugeOP#rH^GjL&YZh_*!F8d?I$MMocsEwt;zafR zomUr4gc3f)mN<@!In7(GEb(U?!5oVbvL>%zn($k8LMWlS62)Z0vNy~Vl@{+)(R4p1 z9C7-K`tb#WiL@r`5xR`-^m9&dLg-DxlF#Z~*;+OwPDS%7HqDFMv_*d0SyGwMVtV8d z+h0x=Sc;&g9l^qWHmgBF@jEgmZ~c|l4K@h`QOqYCZg#UMg z(eb{Y=DanXa4v+h_jCnXsw?_(#uq>9u)XFV$;UY@?|Qf=m6iNfKk&~(l=+%=Ny^`w z;c_of!H^>s`h|&+9=tt!s7jgAbfFmzv>?eNRmwqCjvC5(xbc64%HJjm2TDb^gnPGw z_!Fp8)_u$aaui-2I7Px1n~YZH&X9DSUOZmd|KzOgrP3G7GM%s5)c)sufZIfeTH@_$ z|A;HO+)P?XU&$QaO%iyWO+lQDl?Fo;UYh}#5%$SQo(y%TaH1$pf?M%)ovz+r-o^p! z#*sQ(t;PF$<&L#Ho1>GLpFco_hbN}eg$FCM)3ZRt*4+7Kjx*SflX%VQ&z&DPKFT%`pe zL_}27pW85lri2SaYOmmluEv4OhY|05{G~#b!+AP^Vqa7 zyp-GvB9l(mEEyaVMAjfuxLs-l!EWy>yRT^Qr4XpGhCpy`c z%Aj@P$cSYIwmU6_u(JQ}XB#ZaIqRMoztD@r&Am?TjMA6-24IBH=Xvyr*KG({XZ2aK z3Qz3p{>q`&M$9j~yLcyR_wEw13s)O36M!f1KF3PHA7hr$R)hdMEDr6~RBVxR+LJmM zeC^DSdyqx{{d&mpg^~4>weLgruT2Yf3!BQVW>n4aGuE{W%GHj>QPsAsoU0{CjA8v* z^rQ8D*a>9_6(O`5wjtcH)EDGp-3cuGwK5#UsDunqZ6fv!#n*3(R`&X&*tT6=DWWtK z_L0*SSV#C$Z#l*cSX<1CU%AQ_!k=IEpIrN@e{$``rM8_o?m?re@eyoL+!C5AS|i5vM^_4re4cQp)b@YQ&1%k3To4tF_svSQtv76!^s}>#+ zXcv}p9MC{2s*1v^L|AV&*JY|o zSv37rGwJmP(NynpS943R;%73hmzlMF!77KPQB<|j`mNCz@-JIG&vGjM(z9FY?}ga8 zxPE9CmGfy?BpL{hzCs;J8rm|=JxM_+QY3{+)~flehJDoy*?fb8%KGWC#+;0GpvSSK@Zw**lV)a+D8rtgboatHX9#%HE1H$~DGq3~ zV!rd;>ORKmf*qqZDUpz&x#r%+7f%)9*UW1^@#~3AvHor}9@Ca&+-&=dXx}QCFWEsv zRc_5eOo0|OHozp}hbsv=M%i5X*vG2*Lgy-Rw~qF(F{TRuM~!Scd&j+Z^T}`NP?WLY zgsG@i+Oe@Mt`$s9@`7SAPmnHQV}77O{i<{)KS}n^hj#*=_8&^AqWwEor``mGmvI?}&PG8y$b;Myw)raEezHiNf<6#PLn{Gu7Z8GSTVf)i|e47&R&*+IBL~yj!5yggC4=RYcG(~|HZT3P++{k<38SS1u zCf}S>U=4&1-nMPOZ|)F+S&`GX>~%PRdYpau?f1>lqZj=A`SXNN>UKZQF|#Om(QDvE zH%+fOG*EJn6P=7D_RL%_M)lee_SO4F-0n6FIEwim2ldDWhlo~*xaT!y_jd>yG)I@( z{0yj<7;xPyjXv9-CY_ee``m{bkIGVhMwJC5PoZ#-7vYv$*+Ut}0`1JN*il0fx{)8t zM+c79E*o`2mTovm1buqv{w35U`Y>bV_mO$kwumpQzbi>X2;?kpu@=Cyh~t)cd^1U6q!%9i|`ls(*@mSCjH_<0uP#o@1m~_It?#Bag%*?`a37n|aJtkI@B}gUJ?X9y5pYbIW z&}>6-kCfju2UM!`WB89t&VsLO%IxmKgc4KY<=ph^{YD(_T#+JZaq>)|o|c>V{M}#a z3ikQRRa1g;lig>%mYc<9zZWt9#h$XQCc!G&bz3C6e9_1m2ynpN!~|gP9r$Tf?zE69 zca2+R2m-6j4@(RFH|R+`fh0;)0)xVWdo0c(z{gG z#){UB;>rze+he1Nx`7yqX-xM_uubXZ=e5&FmqiedC^i~+j$*6 zsVe%l*LVKpLcqHU`_VE*5@(w6s9vE#xA}51CGXp6efLkRb)SB7e*H1UJa1bgf0<|7 z7DV0VFnp(#>Dg(vX0hq?BqhCrVhrmGWg{`>e%@mZ7Ol;94b2VFCXB15P>OrpYe)<{0*6m~}MdonJ-q5AW6kh1p0 z*aVXqbI%>LX3Vb5HK!}8WoL90JuzGDer|!n0JQ2MZL*CknIhM#zneR@d96gQM8Fxc~ z)!`qH0H%?NV@v_?ueZhNdZwA$(xYi0!od!iG4VJ}b$`lO+dLpcnDez+{JGdqgQzXt zMqsjQ|G13hIl4o0wjCWiU0bVnjgu-5C716Cqy0HK%87eEx_re~v}Vfue1=+ZR+c}y zoZlVO7W=aFyX8=B(N?AsBSTQ`FCp@%k8F{O=($(Mspb`4LNPU)PpPDRRk21~0ShCX z{kzBU{kUs(K2nq{gdacs^CoA;l~DGC2W!ypF>L zJip)CIeS&6lKqcI{ua{i2o|B__aFLqM zX!(=sr)nB)ls=uN{pqCs^TdCD)N_prmg@bLrtIg<{oCVyO)&^HG4w(f^%BOR!VIZ} zVP+G%5i_S{|MqN`17)tu)*myZ(%#55Ol@LyiH}Y=BicW?VBEV z{wGZPZN->rz6~T~rK{0wW=t~)7GVBX-Y@jaYg8q5+IRycIVsXC5mgBdYg!|$pLACn z{~r(cw<*osO-qve+QMhN~R0HP@AoLmXRfZ&?k=)GlBep}av`kTEYEy>RpPZ5dL{ z%ra&OO4x+Hee$UD-tPzRpRogU>b}$P1M`HT6UoM2if)1P6W#SwRrmSk6?dyn@L;9a z=cZ!kT1O`UzPuLUy&e`C3TvR2@b#jk{>AV7F9?K}nI?RqOzHiu7gSlp@9RM?1*k0nyReoxoa*x_Nam#cX zp8gwSRDThmPx%r1;Z zX(E!aKP@@i{7Z)>18B_Ng2$D_)FZ~EPeoa%4JT<6t!J}D4l@}kS(d#cfU}kC*u|$NWe_bPS zh^&4wwSt#;zaWmll#Bos&rT-U%-eWdj>Wt6qLDMXWFU@ElH=Hdvz{}ocZ(M z1vei&#LX=wZ&zJzBE8oPtHbrkl!yzDL=be058vQne?eMqa2`3UKR%PtIsP)O=qiRd zDF-Jkr_h&29GvQZ#h*{BnnEEouIgDBu1s~A1ur?r66pR`S452MiG+h*7q{8?@Cbg> zk>0tE*QwzOCYxo1k5K-YJJ^v5a2&)fGqU0WX#^h-!vp4@nP1Fj;a%M;#>8CuRLQp| zA7_pPnGP#9s#Vzi1Ur6r*)kbu>72c%G_o#2j<;Zoq1q>RgYceq{~>2%S%Ss;)}_y* zrAuWze>u(nm=-FUY--`fn`~W;6ODInMAaWUc(FMDwa5SWGnvEGQPUT?xW^+o#64_# z#oQD4-o)FX9hM5URXz(v3H`}iW{y)=nO2#nl7B{INYEQE-K^qt_G} literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/tooltip-copy.png b/media/dashboard/keyvisualizer/tooltip-copy.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3ed6c09260221f7c5bf135597d0081f723ce7c GIT binary patch literal 22239 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 literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/tooltip.png b/media/dashboard/keyvisualizer/tooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..9941ae6602279594a23cf441ae2be30d3084145f GIT binary patch literal 49951 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 IMXRU(3)M0zYybcN literal 0 HcmV?d00001 diff --git a/media/dashboard/keyvisualizer/well_dist.png b/media/dashboard/keyvisualizer/well_dist.png new file mode 100644 index 0000000000000000000000000000000000000000..40e16197f9b74d2b24a80dbe9533943603182583 GIT binary patch literal 28399 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