From 3cfd3868c64920d8b203ae9709fb3c36d4f19a4d Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 4 Jun 2020 00:10:58 +0800 Subject: [PATCH 1/9] Add TiDB Dashboard documents --- dashboard/dashboard-cluster-info.md | 70 +++++++++++++++++ dashboard/dashboard-overview.md | 95 ++++++++++++++++++++++++ dashboard/dashboard-slow-query.md | 64 ++++++++++++++++ dashboard/dashboard-statement-details.md | 61 +++++++++++++++ dashboard/dashboard-statement-list.md | 64 ++++++++++++++++ 5 files changed, 354 insertions(+) create mode 100644 dashboard/dashboard-cluster-info.md create mode 100644 dashboard/dashboard-overview.md create mode 100644 dashboard/dashboard-slow-query.md create mode 100644 dashboard/dashboard-statement-details.md create mode 100644 dashboard/dashboard-statement-list.md diff --git a/dashboard/dashboard-cluster-info.md b/dashboard/dashboard-cluster-info.md new file mode 100644 index 0000000000000..c2cc43357763c --- /dev/null +++ b/dashboard/dashboard-cluster-info.md @@ -0,0 +1,70 @@ +--- +title: TiDB Dashboard Cluster Information Page +summary: View the running status of TiDB, TiKV, PD, TiFlash components in the entire cluster and the running status of the host on which these components are located. +category: how-to +--- + +# TiDB Dashboard Cluster Information Page + +On the cluster information page, you can view the running status of TiDB, TiKV, PD, TiFlash components in the entire cluster and the running status of the host on which these components are located. + +## Access the page + +You can use one of the following two methods to access the cluster information page: + +- After logging into TiDB Dashboard, click **Cluster Info** on the left navigation bar: + + ![Access cluster information page ](/media/dashboard/dashboard-cluster-info-access.png) + +- Visit in your browser. Replace `127.0.0.1:2379` with the actual PD instance address and port. + +## Instance list + +Click **Instances** to view the list of instances: + +![Instance list](/media/dashboard/dashboard-cluster-info-instances.png) + +This instance list shows the overview information of all instances of TiDB, TiKV, PD, and TiFlash components in the cluster. + +The list includes the following information: + +- Address: The instance address. +- Status: The running status of the instance. +- Start time: The start time of the instance. +- Version: The instance version number. +- Deployment path: The directory in which the instance binary file is located. +- Git Hash value: The Git Hash value corresponding to the instance binary file. + +An instance has the following running status: + +- Up: The instance is running properly. +- Down or Unreachable: The instance is not started or a network problem exits on the corresponding host. +- Tombstone: The data on the instance has been completely migrated out and the scaling-in is complete. This status exists only on TiKV or TiFlash instances. +- Offline: The data on the instance is being migrated out and the scaling-in is being performed. This status exists only on TiKV or TiFlash instances. +- Unknown: The running state of the unknown instance. + +> **Note:** +> +> Some columns in the table can be displayed only when the instance is up. + +## Host list + +Click **Hosts** to view the list of hosts: + +![Host list](/media/dashboard/dashboard-cluster-info-hosts.png) + +This host list shows the running status of hosts that correspond to all instances of TiDB, TiKV, PD, and TiFlash components in the cluster. + +The list includes the following information: + +- Address: The Host IP address. +- CPU: The number of logical cores of the host CPU. +- CPU usage: The user-mode and kernel-mode CPU usage in the current 1 second. +- Physical memory: The total physical memory size of the host. +- Memory usage: The current memory usage of the host. +- Deployment disk: The file system of the disk on the host on which the instance is running and the mounting path of this disk. +- Disk usage: The space usage of the disk on the host on which the instance is running. + +> **Note:** +> +> The host list information is provided by each instance process, so when all instances on the host are down, the host information is not displayed. diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md new file mode 100644 index 0000000000000..2233dead96a00 --- /dev/null +++ b/dashboard/dashboard-overview.md @@ -0,0 +1,95 @@ +--- +title: Overview Page +summary: Learn the overview page of TiDB Dashboard. +category: how-to +--- + +# Overview Page + +This page shows the overview of the entire TiDB cluster, including the following information: + +- Queries per second (QPS) of the entire cluster. +- The query latency of the entire cluster. +- The SQL statements that have cumulated the longest execution time over the recent period. +- The slow queries whose execution time over the recent period exceeds the threshold. +- The node count and status of each instance. +- Monitor and alert messages. + +## Enter the page + +After logging into TiDB Dashboard, the overview page is entered by default, or you can click **Overview** on the left navigation bar to enter this page: + +![Enter overview page](/media/dashboard/dashboard-overview-access.png) + +## QPS + +This area shows the number of successful and failed queries per second for the entire cluster over the recent hour: + +![QPS](/media/dashboard/dashboard-overview-qps.png) + +> **Note:** +> +> This feature is available only in the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, there will be a display failure. + +## Latency + +This area shows the latency of 99.9%, 99%, and 90% of queries in the entire cluster over the recent one hour: + +![Latency](/media/dashboard/dashboard-overview-latency.png) + +> **Note:** +> +> This feature is available only on the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, there will be a display failure. + +## Top SQL statements + +This area shows the ten types of SQL statements that have accumulated the longest execution time in the entire cluster over the recent period. SQL statements with different query parameters but of the same structure are classified into the same SQl type of and displayed in the same row: + +![Top SQL](/media/dashboard/dashboard-overview-top-statements.png) + +The information shown in this area is consistent with the more detailed [SQL statement analysis page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns in this table, see [SQL statement analysis page](/dashboard/dashboard-statement-list.md). + +> **Note:** +> +> This feature is available only on the cluster where SQL statement analysis is enabled. + +## Recent slow queries + +By default, this area shows the latest 10 slow queries in the entire cluster over the recent 30 minutes: + +![Recent slow queries](/media/dashboard/dashboard-overview-slow-query.png) + +By default, the SQL query that is executed longer than 300 millisecond is counted as a slow query and displayed in the table. You can change this threshold using the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the[slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. + +The content displayed in this area is consistent with the more detailed [slow query page](/dashboard/dashboard-slow-query.md). You can click the **Recent Slow Queries** title to view the complete list. For details of the columns in this table, see this [slow query page](/dashboard/dashboard-slow-query.md). + +> **Note:** +> +> This feature is available only in the cluster with slow query logs enabled. By default, slow query logs are enabled in the cluster deployed using TiUP or TiDB Ansible. + +## Instances + +This area summarizes the total number of instances and abnormal instances of TiDB, TiKV, PD, and TiFlash in the entire cluster: + +![Instances](/media/dashboard/dashboard-overview-instances.png) + +The statuses in the image above are described as follows: + +- Up: The instance is running properly (including the offline storage instance). +- Down: The instance is running abnormally, such as network disconnection, process panic, and son on. + +Click the **Instance** title to enter the [cluster information page](/dashboard/dashboard-cluster-info.md) that shows the detailed running status of each instance. + +## Monitor and alert + +This area provides links for you to view detailed monitor and alert: + +![monitor and alert](/media/dashboard/dashboard-overview-monitor.png) + +- **View Metrics**: Click this link to jump to the Grafana dashboard where you can view detailed monitoring information of the cluster. For details of each monitoring metric in the Grafana dashboard, see [monitoring metrics](/grafana-overview-dashboard.md). +- **View Alerts**: Click this link to jump to the AlertManager page where you can view detailed alert information of the cluster. If alerts exist for the cluster, the number of alerts will be directly shown in the link text. +- **Run Diagnostics**: Click this link to jump to the more detailed [cluster diagnostics page](/dashboard/dashboard-diagnostics-access.md). + +> **Note:** +> +> The **View Metrics** link is available only in the cluster where the Grafana node is deployed. The **View Alerts** link is available only in the cluster where the AlertManager node is deployed. diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md new file mode 100644 index 0000000000000..5ba5c77f96e93 --- /dev/null +++ b/dashboard/dashboard-slow-query.md @@ -0,0 +1,64 @@ +--- +title: Slow Query Page of TiDB Dashboard +summary: Learn the slow query page of TiDB Dashboard. +category: how-to +--- + +# Slow Query Page of TiDB Dashboard + +On the slow query page of TiDB Dashboard, you can search and view all slow queries in the cluster. + +## Slow query overview + +By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can query the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. + +> **Note:** +> +> If the slow query log is disabled, this feature will be unavailable. The slow query log is enabled by default, and you can enable or disable the slow query log through the [`enable-slow-log`](/tidb-configuration-file.md#enable-slow-log) TiDB configuration item. + +## Access the page + +You can use one of the following two methods to access the slow query page: + +* After logging into TiDB Dashboard, click **Slow Queries** on the left navigation bar: + +![Access slow query page](/media/dashboard/dashboard-slow-queries-access.png) + +* Visit in your browser. Replace `127.0.0.1:2379` with the actual PD address and port. + + +All data displayed on the slow query page comes from TiDB slow query system tables and slow query logs. See [slow query logs](/identify-slow-queries.md) for details. + +### Modify filters of the list + +You can filter slow queries based on the time range, the related database, SQL keywords, SQL types, the number of slow queries to be displayed. In the image below, 100 slow queries over the recent 30 minutes are displayed by default. + +![Modify list filters](/media/dashboard/dashboard-slow-queries-list1.png) + +### Show more columns + +Click **Columns** on the page and you can choose to see more columns. You can move your mouse to the **(i)** icon at the right side of a column name to view the description of this column: + +![Show more columns](/media/dashboard/dashboard-slow-queries-list2.png) + +### Modify the sorting basis of the list + +By default, the list is sorted by **Finish Time** in reverse order. Click different column headings to modify the sorting basis or switch the sorting order: + +![Modify sorting basis](/media/dashboard/dashboard-slow-queries-list3.png) + +## View execution details + +Click any item in the list to display detailed execution information of the slow query, including: + +- SQL:The text of the SQL statement (see area 1 in the image below); +- Execution plan:The execution plan of the slow query. See [Understand the Query Execution Plan](/query-execution-plan.md) to learn how to read the execution plan (area 2 in the image below); +- Other sorted SQL execution information (area 3 in the image below). + +![View execution details](/media/dashboard/dashboard-slow-queries-detail1.png) + +Click the **Expand** link to show the detailed information of an item. Click the **Copy** link to copy the detailed information to the clipboard. + +Click the corresponding tab titles to switch information of different sorted SQL executions. + +![Show different sorted execution information](/media/dashboard/dashboard-slow-queries-detail2.png) diff --git a/dashboard/dashboard-statement-details.md b/dashboard/dashboard-statement-details.md new file mode 100644 index 0000000000000..7d4ecfdcde789 --- /dev/null +++ b/dashboard/dashboard-statement-details.md @@ -0,0 +1,61 @@ +--- +title: Execution Details of TiDB Dashboard +summary: View the execution details of a single SQL statement in TiDB Dashboard. +category: how-to +--- + +# Execution Details of TiDB Dashboard + +Click any item in the list to enter the detail page of the SQL statement to view more detailed information. This information includes three parts: + +- The Overview of SQL statements, which includes the SQL template, the SQL template ID, the current time range of displayed SQL executions, the number of execution plans and the database in which the SQL statement is executed (see area 1 in the image below). +- The execution plan list: If the SQL statement has multiple execution plans, this list is displayed. You can select different execution plans, and the details of the selected plans are displayed below the list. If there is only one execution plan, the list is not displayed (see area 2 below). +- Execution detail of plans, which displays the detailed information of the selected execution plans. See [Execution plan in details](#execution-plan-in-details) (area 3 in the image below). + +![Details](/media/dashboard/dashboard-statement-detail.png) + +## Execution details of plans + +The execution details of plans include the following information: + +- SQL sample: The text of a certain SQL statement that is actually executed corresponding to the plan. Any SQL statement that has be executed within the time range might be used as a SQL sample. +- Execution plan: For details of the execution plan, see [Understand the Query Execution Plan](/query-execution-plan.md). If multiple execution plans are selected, only (any) one of them is displayed. +- For basic information, execution time, Coprocessor read, transaction, slow query of the SQL statement, you can click the corresponding tab titles to switch among different information. + +![Execution details of plans](/media/dashboard/dashboard-statement-plans-detail.png) + +### Basic information + +The basic information of a SQL execution includes the table name, index name, execution times, and total duration. The **Description** column provides detailed description of each field. + +![Basic information](/media/dashboard/dashboard-statement-plans-basic.png) + +### Execution time + +Click the **Time** tab, and you can see how long each stage of the execution plan is lasted. + +> **Note:** +> +> Because some operations might be performed in parallel within a single SQL statement, the cumulative duration of each stage might exceed the actual execution time of the SQL statement. + +![Execution time](/media/dashboard/dashboard-statement-plans-time.png) + +### Coprocessor read + +Click the **Coprocessor Read** tab, and you can see information related to Coprocessor read. + +![Coprocessor read](/media/dashboard/dashboard-statement-plans-cop-read.png) + +### Transaction + +Click the **Transaction** tab, and you can see information related to execution plan and transaction, such as the average number of written keys or the maximum number of written keys. + +![Transaction](/media/dashboard/dashboard-statement-plans-transaction.png) + +### Slow query + +If an execution plan is executed too slowly, you can see its associated slow query records under the **Slow Query** tab. + +![Slow Query](/media/dashboard/dashboard-statement-plans-slow-queries.png) + +The information displayed in this area has the same structure with the slow query page. See [TiDB Dashboard Slow Query Page](/dashboard/dashboard-slow-query.md) for details. diff --git a/dashboard/dashboard-statement-list.md b/dashboard/dashboard-statement-list.md new file mode 100644 index 0000000000000..e9516dcc8ceb3 --- /dev/null +++ b/dashboard/dashboard-statement-list.md @@ -0,0 +1,64 @@ +--- +title: SQL Statement Summary Page of TiDB Dashboard +summary: View the execution status of all SQL statements in the TiDB cluster. +category: how-to +--- + +# SQL Statement Summary Page of TiDB Dashboard + +The SQL statement summary page shows the execution status of all SQL statements in the cluster. This page is often used to analyze the SQL statement whose total or single execution time is long. + +On this page, SQL queries with a consistent structure (even if the query parameters are inconsistent) are classified as the same SQL statement. For example, both `SELECT * FROM employee WHERE id IN (1, 2, 3)` and `select * from EMPLOYEE where ID in (4, 5)` are classified as the same `select * from employee where id in (...)` SQL statement. + +## Access the page + +You can use one of the following two methods to access the SQL statement summary page: + +- After logging into TiDB Dashboard, click **SQL Statements** on the left navigation bar: + + ![Access SQL statement summary page](/media/dashboard/dashboard-statement-access.png) + +- Visit in your browser. Replace `127.0.0.1:2379` with the actual PD instance address and port. + +All the data shown on the SQL statement summary page are from the TiDB statement summary tables. For more details about the tables, see [TiDB Statement Summary Tables](/statement-summary-tables.md). + +### Modify filters of the list + +On the top of the SQL statement summary page, you can modify the time range of SQL executions to be displayed. You can also filter the list by database in which SQL statements are executed, or by SQL types. The following image shows all SQL executions over the recent data collection cycle (recent 30 minutes by default). + +![Modify filters](/media/dashboard/dashboard-statement-filter-options.png) + +### Show other fields + +Click **Columns** on the page and you can choose to see more columns. You can move your mouse to the **(i)** icon at the right side of a column name to view the description of this column: + +![Choose columns](/media/dashboard/dashboard-statement-columns-selector.png) + +### Modify the sorting basis of the list + +By default, the list is sorted by **Total Latency** from high to low. Click on different column headings to modify the sorting basis or switch the sorting order: + +![Modify list sorting](/media/dashboard/dashboard-statement-change-order.png) + +### Modify the data collection settings + +On the list page, click the **Settings** button on the top right to change the settings of the SQL analysis: + +![Settings entry](/media/dashboard/dashboard-statement-setting-entry.png) + +After clicking the **Settings** button, you can see the following setting page: + +![Settings](/media/dashboard/dashboard-statement-settings.png) + +On the setting page, you can disable or enable the SQL statement analysis. When the SQL statement analysis is enabled, you can modify the following settings: + +- Data collection interval: The length of period for each SQL statement analysis, which is 30 minutes by default. The SQL statement analysis feature summarizes and counts all SQL statements within a period of time. If the period is too long, the granularity of the summary is coarse, which is not good for locating problems; if the period is too short, the granularity of the statistics is fine, which is good for locating problems, but this will result in more records and more memory usage within the same data retention duration. Therefore, you need to adjust this value based on the actual situation, and properly lower this value when locating problems. +- Data retention duration: The retention duration of summary information, which is 1 day by default. Data retained longer than this duration will be deleted from system tables. + +See [Configurations of Statement Summary Tables](/statement-summary-tables.md#configurations) for details. + +> **Note:** +> +> + Because the statement system table is only stored in memory, after this summary feature is disabled, the data in the system table will be cleared. +> +> + The values of data collection period and retention duration affect the memory usage, so it is recommended to adjust this value according to the actual situation. The value of retention time should not be set too large. From 47d706515f890ec45b8f10fad743819dd19c9f19 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 4 Jun 2020 00:20:08 +0800 Subject: [PATCH 2/9] Update dashboard/dashboard-slow-query.md --- dashboard/dashboard-slow-query.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index 5ba5c77f96e93..07146075c2e10 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -26,7 +26,6 @@ You can use one of the following two methods to access the slow query page: * Visit in your browser. Replace `127.0.0.1:2379` with the actual PD address and port. - All data displayed on the slow query page comes from TiDB slow query system tables and slow query logs. See [slow query logs](/identify-slow-queries.md) for details. ### Modify filters of the list From 3dbc1baeb03d2f4e3fb2428050c122a623e713d5 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 4 Jun 2020 11:22:37 +0800 Subject: [PATCH 3/9] fix typos --- dashboard/dashboard-cluster-info.md | 2 +- dashboard/dashboard-overview.md | 12 ++++++------ dashboard/dashboard-slow-query.md | 4 ++-- dashboard/dashboard-statement-details.md | 10 +++++----- dashboard/dashboard-statement-list.md | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dashboard/dashboard-cluster-info.md b/dashboard/dashboard-cluster-info.md index c2cc43357763c..ac5ccbc6e9997 100644 --- a/dashboard/dashboard-cluster-info.md +++ b/dashboard/dashboard-cluster-info.md @@ -12,7 +12,7 @@ On the cluster information page, you can view the running status of TiDB, TiKV, You can use one of the following two methods to access the cluster information page: -- After logging into TiDB Dashboard, click **Cluster Info** on the left navigation bar: +- After logging into TiDB Dashboard, click **Cluster Info** on the left navigation menu: ![Access cluster information page ](/media/dashboard/dashboard-cluster-info-access.png) diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md index 2233dead96a00..f375da930ddf5 100644 --- a/dashboard/dashboard-overview.md +++ b/dashboard/dashboard-overview.md @@ -43,11 +43,11 @@ This area shows the latency of 99.9%, 99%, and 90% of queries in the entire clus ## Top SQL statements -This area shows the ten types of SQL statements that have accumulated the longest execution time in the entire cluster over the recent period. SQL statements with different query parameters but of the same structure are classified into the same SQl type of and displayed in the same row: +This area shows the ten types of SQL statements that have accumulated the longest execution time in the entire cluster over the recent period. SQL statements with different query parameters but of the same structure are classified into the same SQl type and displayed in the same row: ![Top SQL](/media/dashboard/dashboard-overview-top-statements.png) -The information shown in this area is consistent with the more detailed [SQL statement analysis page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns in this table, see [SQL statement analysis page](/dashboard/dashboard-statement-list.md). +The information shown in this area is consistent with the more detailed [SQL statement analysis page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns on this table, see [SQL statement analysis page](/dashboard/dashboard-statement-list.md). > **Note:** > @@ -59,7 +59,7 @@ By default, this area shows the latest 10 slow queries in the entire cluster ove ![Recent slow queries](/media/dashboard/dashboard-overview-slow-query.png) -By default, the SQL query that is executed longer than 300 millisecond is counted as a slow query and displayed in the table. You can change this threshold using the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the[slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. +By default, the SQL query that is executed longer than 300 milliseconds is counted as a slow query and displayed on the table. You can change this threshold using the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the [slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. The content displayed in this area is consistent with the more detailed [slow query page](/dashboard/dashboard-slow-query.md). You can click the **Recent Slow Queries** title to view the complete list. For details of the columns in this table, see this [slow query page](/dashboard/dashboard-slow-query.md). @@ -76,7 +76,7 @@ This area summarizes the total number of instances and abnormal instances of TiD The statuses in the image above are described as follows: - Up: The instance is running properly (including the offline storage instance). -- Down: The instance is running abnormally, such as network disconnection, process panic, and son on. +- Down: The instance is running abnormally, such as network disconnection, process panic, and so on. Click the **Instance** title to enter the [cluster information page](/dashboard/dashboard-cluster-info.md) that shows the detailed running status of each instance. @@ -84,10 +84,10 @@ Click the **Instance** title to enter the [cluster information page](/dashboard/ This area provides links for you to view detailed monitor and alert: -![monitor and alert](/media/dashboard/dashboard-overview-monitor.png) +![Monitor and alert](/media/dashboard/dashboard-overview-monitor.png) - **View Metrics**: Click this link to jump to the Grafana dashboard where you can view detailed monitoring information of the cluster. For details of each monitoring metric in the Grafana dashboard, see [monitoring metrics](/grafana-overview-dashboard.md). -- **View Alerts**: Click this link to jump to the AlertManager page where you can view detailed alert information of the cluster. If alerts exist for the cluster, the number of alerts will be directly shown in the link text. +- **View Alerts**: Click this link to jump to the AlertManager page where you can view detailed alert information of the cluster. If alerts exist in the cluster, the number of alerts is directly shown in the link text. - **Run Diagnostics**: Click this link to jump to the more detailed [cluster diagnostics page](/dashboard/dashboard-diagnostics-access.md). > **Note:** diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index 07146075c2e10..ff1f838df7eec 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -10,7 +10,7 @@ On the slow query page of TiDB Dashboard, you can search and view all slow queri ## Slow query overview -By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can query the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. +By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can search the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. > **Note:** > @@ -20,7 +20,7 @@ By default, SQL queries with an execution time of more than 300 milliseconds are You can use one of the following two methods to access the slow query page: -* After logging into TiDB Dashboard, click **Slow Queries** on the left navigation bar: +* After logging into TiDB Dashboard, click **Slow Queries** on the left navigation menu: ![Access slow query page](/media/dashboard/dashboard-slow-queries-access.png) diff --git a/dashboard/dashboard-statement-details.md b/dashboard/dashboard-statement-details.md index 7d4ecfdcde789..af5f0c33e0fec 100644 --- a/dashboard/dashboard-statement-details.md +++ b/dashboard/dashboard-statement-details.md @@ -6,9 +6,9 @@ category: how-to # Execution Details of TiDB Dashboard -Click any item in the list to enter the detail page of the SQL statement to view more detailed information. This information includes three parts: +Click any item in the list to enter the detail page of the SQL statement to view more detailed information. This information includes the following parts: -- The Overview of SQL statements, which includes the SQL template, the SQL template ID, the current time range of displayed SQL executions, the number of execution plans and the database in which the SQL statement is executed (see area 1 in the image below). +- The overview of SQL statements, which includes the SQL template, the SQL template ID, the current time range of displayed SQL executions, the number of execution plans and the database in which the SQL statement is executed (see area 1 in the image below). - The execution plan list: If the SQL statement has multiple execution plans, this list is displayed. You can select different execution plans, and the details of the selected plans are displayed below the list. If there is only one execution plan, the list is not displayed (see area 2 below). - Execution detail of plans, which displays the detailed information of the selected execution plans. See [Execution plan in details](#execution-plan-in-details) (area 3 in the image below). @@ -16,11 +16,11 @@ Click any item in the list to enter the detail page of the SQL statement to view ## Execution details of plans -The execution details of plans include the following information: +The execution detail of plans includes the following information: -- SQL sample: The text of a certain SQL statement that is actually executed corresponding to the plan. Any SQL statement that has be executed within the time range might be used as a SQL sample. +- SQL sample: The text of a certain SQL statement that is actually executed corresponding to the plan. Any SQL statement that has been executed within the time range might be used as a SQL sample. - Execution plan: For details of the execution plan, see [Understand the Query Execution Plan](/query-execution-plan.md). If multiple execution plans are selected, only (any) one of them is displayed. -- For basic information, execution time, Coprocessor read, transaction, slow query of the SQL statement, you can click the corresponding tab titles to switch among different information. +- For basic information, execution time, Coprocessor read, transaction, and slow query of the SQL statement, you can click the corresponding tab titles to switch among different information. ![Execution details of plans](/media/dashboard/dashboard-statement-plans-detail.png) diff --git a/dashboard/dashboard-statement-list.md b/dashboard/dashboard-statement-list.md index e9516dcc8ceb3..933049b5c6f94 100644 --- a/dashboard/dashboard-statement-list.md +++ b/dashboard/dashboard-statement-list.md @@ -14,7 +14,7 @@ On this page, SQL queries with a consistent structure (even if the query paramet You can use one of the following two methods to access the SQL statement summary page: -- After logging into TiDB Dashboard, click **SQL Statements** on the left navigation bar: +- After logging into TiDB Dashboard, click **SQL Statements** on the left navigation menu: ![Access SQL statement summary page](/media/dashboard/dashboard-statement-access.png) From 730eb04fec2a1fa5bb6d0545a94fb73e0a01250f Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 4 Jun 2020 12:52:11 +0800 Subject: [PATCH 4/9] Update dashboard-overview.md --- dashboard/dashboard-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md index f375da930ddf5..be5957b997e3d 100644 --- a/dashboard/dashboard-overview.md +++ b/dashboard/dashboard-overview.md @@ -43,7 +43,7 @@ This area shows the latency of 99.9%, 99%, and 90% of queries in the entire clus ## Top SQL statements -This area shows the ten types of SQL statements that have accumulated the longest execution time in the entire cluster over the recent period. SQL statements with different query parameters but of the same structure are classified into the same SQl type and displayed in the same row: +This area shows the ten types of SQL statements that have accumulated the longest execution time in the entire cluster over the recent period. SQL statements with different query parameters but of the same structure are classified into the same SQL type and displayed in the same row: ![Top SQL](/media/dashboard/dashboard-overview-top-statements.png) From 55854731e212f4e5cf05396e6e8ef9219c2a730a Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Fri, 5 Jun 2020 21:09:57 +0800 Subject: [PATCH 5/9] Apply suggestions from code review Co-authored-by: Wenxuan --- dashboard/dashboard-cluster-info.md | 20 +++++++++--------- dashboard/dashboard-overview.md | 12 +++++------ dashboard/dashboard-slow-query.md | 21 +++++++++---------- dashboard/dashboard-statement-details.md | 14 ++++++------- dashboard/dashboard-statement-list.md | 26 ++++++++++++------------ 5 files changed, 46 insertions(+), 47 deletions(-) diff --git a/dashboard/dashboard-cluster-info.md b/dashboard/dashboard-cluster-info.md index ac5ccbc6e9997..1a633cb504fe6 100644 --- a/dashboard/dashboard-cluster-info.md +++ b/dashboard/dashboard-cluster-info.md @@ -14,7 +14,7 @@ You can use one of the following two methods to access the cluster information p - After logging into TiDB Dashboard, click **Cluster Info** on the left navigation menu: - ![Access cluster information page ](/media/dashboard/dashboard-cluster-info-access.png) + ![Access cluster information page](/media/dashboard/dashboard-cluster-info-access.png) - Visit in your browser. Replace `127.0.0.1:2379` with the actual PD instance address and port. @@ -30,17 +30,17 @@ The list includes the following information: - Address: The instance address. - Status: The running status of the instance. -- Start time: The start time of the instance. +- Up Time: The start time of the instance. - Version: The instance version number. -- Deployment path: The directory in which the instance binary file is located. -- Git Hash value: The Git Hash value corresponding to the instance binary file. +- Deployment directory: The directory in which the instance binary file is located. +- Git Hash: The Git Hash value corresponding to the instance binary file. An instance has the following running status: - Up: The instance is running properly. - Down or Unreachable: The instance is not started or a network problem exits on the corresponding host. - Tombstone: The data on the instance has been completely migrated out and the scaling-in is complete. This status exists only on TiKV or TiFlash instances. -- Offline: The data on the instance is being migrated out and the scaling-in is being performed. This status exists only on TiKV or TiFlash instances. +- Leaving: The data on the instance is being migrated out and the scaling-in is being performed. This status exists only on TiKV or TiFlash instances. - Unknown: The running state of the unknown instance. > **Note:** @@ -59,11 +59,11 @@ The list includes the following information: - Address: The Host IP address. - CPU: The number of logical cores of the host CPU. -- CPU usage: The user-mode and kernel-mode CPU usage in the current 1 second. -- Physical memory: The total physical memory size of the host. -- Memory usage: The current memory usage of the host. -- Deployment disk: The file system of the disk on the host on which the instance is running and the mounting path of this disk. -- Disk usage: The space usage of the disk on the host on which the instance is running. +- CPU Usage: The user-mode and kernel-mode CPU usage in the current 1 second. +- Memory: The total physical memory size of the host. +- Memory Usage: The current memory usage of the host. +- Disk: The file system of the disk on the host on which the instance is running and the mounting path of this disk. +- Disk Usage: The space usage of the disk on the host on which the instance is running. > **Note:** > diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md index be5957b997e3d..34840b55588b8 100644 --- a/dashboard/dashboard-overview.md +++ b/dashboard/dashboard-overview.md @@ -29,7 +29,7 @@ This area shows the number of successful and failed queries per second for the e > **Note:** > -> This feature is available only in the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, there will be a display failure. +> This feature is available only in the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, an error will be displayed. ## Latency @@ -39,7 +39,7 @@ This area shows the latency of 99.9%, 99%, and 90% of queries in the entire clus > **Note:** > -> This feature is available only on the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, there will be a display failure. +> This feature is available only on the cluster where the Prometheus monitoring component is deployed. If Prometheus is not deployed, an error will be displayed. ## Top SQL statements @@ -47,11 +47,11 @@ This area shows the ten types of SQL statements that have accumulated the longes ![Top SQL](/media/dashboard/dashboard-overview-top-statements.png) -The information shown in this area is consistent with the more detailed [SQL statement analysis page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns on this table, see [SQL statement analysis page](/dashboard/dashboard-statement-list.md). +The information shown in this area is consistent with the more detailed [SQL Statements Page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns on this table, see [SQL Statements Page](/dashboard/dashboard-statement-list.md). > **Note:** > -> This feature is available only on the cluster where SQL statement analysis is enabled. +> This feature is available only on the cluster where SQL Statements feature is enabled. ## Recent slow queries @@ -61,7 +61,7 @@ By default, this area shows the latest 10 slow queries in the entire cluster ove By default, the SQL query that is executed longer than 300 milliseconds is counted as a slow query and displayed on the table. You can change this threshold using the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the [slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. -The content displayed in this area is consistent with the more detailed [slow query page](/dashboard/dashboard-slow-query.md). You can click the **Recent Slow Queries** title to view the complete list. For details of the columns in this table, see this [slow query page](/dashboard/dashboard-slow-query.md). +The content displayed in this area is consistent with the more detailed [Slow Queries Page](/dashboard/dashboard-slow-query.md). You can click the **Recent Slow Queries** title to view the complete list. For details of the columns in this table, see this [Slow Queries Page](/dashboard/dashboard-slow-query.md). > **Note:** > @@ -78,7 +78,7 @@ The statuses in the image above are described as follows: - Up: The instance is running properly (including the offline storage instance). - Down: The instance is running abnormally, such as network disconnection, process panic, and so on. -Click the **Instance** title to enter the [cluster information page](/dashboard/dashboard-cluster-info.md) that shows the detailed running status of each instance. +Click the **Instance** title to enter the [Cluster Info Page](/dashboard/dashboard-cluster-info.md) that shows the detailed running status of each instance. ## Monitor and alert diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index ff1f838df7eec..389e450b12355 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -1,14 +1,13 @@ --- -title: Slow Query Page of TiDB Dashboard -summary: Learn the slow query page of TiDB Dashboard. +title: Slow Queries Page of TiDB Dashboard +summary: Learn the Slow Queries page of TiDB Dashboard. category: how-to --- -# Slow Query Page of TiDB Dashboard +# Slow Queries Page of TiDB Dashboard -On the slow query page of TiDB Dashboard, you can search and view all slow queries in the cluster. +On the Slow Queries page of TiDB Dashboard, you can search and view all slow queries in the cluster. -## Slow query overview By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can search the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. @@ -28,21 +27,21 @@ You can use one of the following two methods to access the slow query page: All data displayed on the slow query page comes from TiDB slow query system tables and slow query logs. See [slow query logs](/identify-slow-queries.md) for details. -### Modify filters of the list +### Change Filters You can filter slow queries based on the time range, the related database, SQL keywords, SQL types, the number of slow queries to be displayed. In the image below, 100 slow queries over the recent 30 minutes are displayed by default. ![Modify list filters](/media/dashboard/dashboard-slow-queries-list1.png) -### Show more columns +### Display More Columns Click **Columns** on the page and you can choose to see more columns. You can move your mouse to the **(i)** icon at the right side of a column name to view the description of this column: ![Show more columns](/media/dashboard/dashboard-slow-queries-list2.png) -### Modify the sorting basis of the list +### Sort by Column -By default, the list is sorted by **Finish Time** in reverse order. Click different column headings to modify the sorting basis or switch the sorting order: +By default, the list is sorted by **Finish Time** in reverse order. Click column headings to sort by the column or switch the sorting order: ![Modify sorting basis](/media/dashboard/dashboard-slow-queries-list3.png) @@ -50,8 +49,8 @@ By default, the list is sorted by **Finish Time** in reverse order. Click differ Click any item in the list to display detailed execution information of the slow query, including: -- SQL:The text of the SQL statement (see area 1 in the image below); -- Execution plan:The execution plan of the slow query. See [Understand the Query Execution Plan](/query-execution-plan.md) to learn how to read the execution plan (area 2 in the image below); +- Query: The text of the SQL statement (see area 1 in the image below); +- Plan: The execution plan of the slow query. See [Understand the Query Execution Plan](/query-execution-plan.md) to learn how to read the execution plan (area 2 in the image below); - Other sorted SQL execution information (area 3 in the image below). ![View execution details](/media/dashboard/dashboard-slow-queries-detail1.png) diff --git a/dashboard/dashboard-statement-details.md b/dashboard/dashboard-statement-details.md index af5f0c33e0fec..a7103678f2803 100644 --- a/dashboard/dashboard-statement-details.md +++ b/dashboard/dashboard-statement-details.md @@ -1,10 +1,10 @@ --- -title: Execution Details of TiDB Dashboard +title: Statement Execution Details of TiDB Dashboard summary: View the execution details of a single SQL statement in TiDB Dashboard. category: how-to --- -# Execution Details of TiDB Dashboard +# Statement Execution Details of TiDB Dashboard Click any item in the list to enter the detail page of the SQL statement to view more detailed information. This information includes the following parts: @@ -24,13 +24,13 @@ The execution detail of plans includes the following information: ![Execution details of plans](/media/dashboard/dashboard-statement-plans-detail.png) -### Basic information +### Basic Tab The basic information of a SQL execution includes the table name, index name, execution times, and total duration. The **Description** column provides detailed description of each field. ![Basic information](/media/dashboard/dashboard-statement-plans-basic.png) -### Execution time +### Time Tab Click the **Time** tab, and you can see how long each stage of the execution plan is lasted. @@ -40,19 +40,19 @@ Click the **Time** tab, and you can see how long each stage of the execution pla ![Execution time](/media/dashboard/dashboard-statement-plans-time.png) -### Coprocessor read +### Coprocessor Read Tab Click the **Coprocessor Read** tab, and you can see information related to Coprocessor read. ![Coprocessor read](/media/dashboard/dashboard-statement-plans-cop-read.png) -### Transaction +### Transaction Tab Click the **Transaction** tab, and you can see information related to execution plan and transaction, such as the average number of written keys or the maximum number of written keys. ![Transaction](/media/dashboard/dashboard-statement-plans-transaction.png) -### Slow query +### Slow Query Tab If an execution plan is executed too slowly, you can see its associated slow query records under the **Slow Query** tab. diff --git a/dashboard/dashboard-statement-list.md b/dashboard/dashboard-statement-list.md index 933049b5c6f94..c963481d3f478 100644 --- a/dashboard/dashboard-statement-list.md +++ b/dashboard/dashboard-statement-list.md @@ -1,12 +1,12 @@ --- -title: SQL Statement Summary Page of TiDB Dashboard +title: SQL Statements Page of TiDB Dashboard summary: View the execution status of all SQL statements in the TiDB cluster. category: how-to --- -# SQL Statement Summary Page of TiDB Dashboard +# SQL Statements Page of TiDB Dashboard -The SQL statement summary page shows the execution status of all SQL statements in the cluster. This page is often used to analyze the SQL statement whose total or single execution time is long. +The SQL statements page shows the execution status of all SQL statements in the cluster. This page is often used to analyze the SQL statement whose total or single execution time is long. On this page, SQL queries with a consistent structure (even if the query parameters are inconsistent) are classified as the same SQL statement. For example, both `SELECT * FROM employee WHERE id IN (1, 2, 3)` and `select * from EMPLOYEE where ID in (4, 5)` are classified as the same `select * from employee where id in (...)` SQL statement. @@ -22,27 +22,27 @@ You can use one of the following two methods to access the SQL statement summary All the data shown on the SQL statement summary page are from the TiDB statement summary tables. For more details about the tables, see [TiDB Statement Summary Tables](/statement-summary-tables.md). -### Modify filters of the list +### Change Filters On the top of the SQL statement summary page, you can modify the time range of SQL executions to be displayed. You can also filter the list by database in which SQL statements are executed, or by SQL types. The following image shows all SQL executions over the recent data collection cycle (recent 30 minutes by default). ![Modify filters](/media/dashboard/dashboard-statement-filter-options.png) -### Show other fields +### Display More Columns Click **Columns** on the page and you can choose to see more columns. You can move your mouse to the **(i)** icon at the right side of a column name to view the description of this column: ![Choose columns](/media/dashboard/dashboard-statement-columns-selector.png) -### Modify the sorting basis of the list +### Sort by Column By default, the list is sorted by **Total Latency** from high to low. Click on different column headings to modify the sorting basis or switch the sorting order: ![Modify list sorting](/media/dashboard/dashboard-statement-change-order.png) -### Modify the data collection settings +### Change Settings -On the list page, click the **Settings** button on the top right to change the settings of the SQL analysis: +On the list page, click the **Settings** button on the top right to change the settings of the SQL statements feature: ![Settings entry](/media/dashboard/dashboard-statement-setting-entry.png) @@ -50,15 +50,15 @@ After clicking the **Settings** button, you can see the following setting page: ![Settings](/media/dashboard/dashboard-statement-settings.png) -On the setting page, you can disable or enable the SQL statement analysis. When the SQL statement analysis is enabled, you can modify the following settings: +On the setting page, you can disable or enable the SQL statements feature. When the SQL statements feature is enabled, you can modify the following settings: -- Data collection interval: The length of period for each SQL statement analysis, which is 30 minutes by default. The SQL statement analysis feature summarizes and counts all SQL statements within a period of time. If the period is too long, the granularity of the summary is coarse, which is not good for locating problems; if the period is too short, the granularity of the statistics is fine, which is good for locating problems, but this will result in more records and more memory usage within the same data retention duration. Therefore, you need to adjust this value based on the actual situation, and properly lower this value when locating problems. -- Data retention duration: The retention duration of summary information, which is 1 day by default. Data retained longer than this duration will be deleted from system tables. +- Collect interval: The length of period for each SQL statement analysis, which is 30 minutes by default. The SQL statements feature summarizes and counts all SQL statements within a period of time. If the period is too long, the granularity of the summary is coarse, which is not good for locating problems; if the period is too short, the granularity of the statistics is fine, which is good for locating problems, but this will result in more records and more memory usage within the same data retention duration. Therefore, you need to adjust this value based on the actual situation, and properly lower this value when locating problems. +- Data retain duration: The retention duration of summary information, which is 1 day by default. Data retained longer than this duration will be deleted from system tables. See [Configurations of Statement Summary Tables](/statement-summary-tables.md#configurations) for details. > **Note:** > -> + Because the statement system table is only stored in memory, after this summary feature is disabled, the data in the system table will be cleared. +> + Because the statement system table is only stored in memory, after SQL Statements feature is disabled, the data in the system table will be cleared. > -> + The values of data collection period and retention duration affect the memory usage, so it is recommended to adjust this value according to the actual situation. The value of retention time should not be set too large. +> + The values of `Collect interval` and `retain` duration affect the memory usage, so it is recommended to adjust this value according to the actual situation. The value of `retain duration` should not be set too large. From 8aacd18279b3c3d1d89da5568bf5f2019ff4d186 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Mon, 8 Jun 2020 14:18:21 +0800 Subject: [PATCH 6/9] Update dashboard/dashboard-overview.md Co-authored-by: Wenxuan --- dashboard/dashboard-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md index 34840b55588b8..4251afe82c33b 100644 --- a/dashboard/dashboard-overview.md +++ b/dashboard/dashboard-overview.md @@ -15,7 +15,7 @@ This page shows the overview of the entire TiDB cluster, including the following - The node count and status of each instance. - Monitor and alert messages. -## Enter the page +## Access the page After logging into TiDB Dashboard, the overview page is entered by default, or you can click **Overview** on the left navigation bar to enter this page: From 077c04827fdbcf1796a934729a433aa98d870acb Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Mon, 8 Jun 2020 17:52:01 +0800 Subject: [PATCH 7/9] Update dashboard/dashboard-slow-query.md --- dashboard/dashboard-slow-query.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index 389e450b12355..93729692b4775 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -8,7 +8,6 @@ category: how-to On the Slow Queries page of TiDB Dashboard, you can search and view all slow queries in the cluster. - By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can search the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. > **Note:** From 2b5310dc4306f5122d7fcaf0eb7eef9da29de783 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 9 Jun 2020 14:11:36 +0800 Subject: [PATCH 8/9] Apply suggestions from code review Co-authored-by: Ran --- dashboard/dashboard-cluster-info.md | 6 +++--- dashboard/dashboard-overview.md | 10 +++++----- dashboard/dashboard-slow-query.md | 8 ++++---- dashboard/dashboard-statement-details.md | 6 +++--- dashboard/dashboard-statement-list.md | 6 +++--- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dashboard/dashboard-cluster-info.md b/dashboard/dashboard-cluster-info.md index 1a633cb504fe6..8b8b06d9cae22 100644 --- a/dashboard/dashboard-cluster-info.md +++ b/dashboard/dashboard-cluster-info.md @@ -38,10 +38,10 @@ The list includes the following information: An instance has the following running status: - Up: The instance is running properly. -- Down or Unreachable: The instance is not started or a network problem exits on the corresponding host. +- Down or Unreachable: The instance is not started or a network problem exists on the corresponding host. - Tombstone: The data on the instance has been completely migrated out and the scaling-in is complete. This status exists only on TiKV or TiFlash instances. -- Leaving: The data on the instance is being migrated out and the scaling-in is being performed. This status exists only on TiKV or TiFlash instances. -- Unknown: The running state of the unknown instance. +- Leaving: The data on the instance is being migrated out and the scaling-in is in process. This status exists only on TiKV or TiFlash instances. +- Unknown: The running state of the instance is unknown. > **Note:** > diff --git a/dashboard/dashboard-overview.md b/dashboard/dashboard-overview.md index 4251afe82c33b..34562755da836 100644 --- a/dashboard/dashboard-overview.md +++ b/dashboard/dashboard-overview.md @@ -10,14 +10,14 @@ This page shows the overview of the entire TiDB cluster, including the following - Queries per second (QPS) of the entire cluster. - The query latency of the entire cluster. -- The SQL statements that have cumulated the longest execution time over the recent period. +- The SQL statements that have accumulated the longest execution time over the recent period. - The slow queries whose execution time over the recent period exceeds the threshold. - The node count and status of each instance. - Monitor and alert messages. ## Access the page -After logging into TiDB Dashboard, the overview page is entered by default, or you can click **Overview** on the left navigation bar to enter this page: +After logging into TiDB Dashboard, the overview page is entered by default, or you can click **Overview** on the left navigation menu to enter this page: ![Enter overview page](/media/dashboard/dashboard-overview-access.png) @@ -47,7 +47,7 @@ This area shows the ten types of SQL statements that have accumulated the longes ![Top SQL](/media/dashboard/dashboard-overview-top-statements.png) -The information shown in this area is consistent with the more detailed [SQL Statements Page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns on this table, see [SQL Statements Page](/dashboard/dashboard-statement-list.md). +The information shown in this area is consistent with the more detailed [SQL Statements Page](/dashboard/dashboard-statement-list.md). You can click the **Top SQL Statements** heading to view the complete list. For details of the columns in this table, see [SQL Statements Page](/dashboard/dashboard-statement-list.md). > **Note:** > @@ -59,7 +59,7 @@ By default, this area shows the latest 10 slow queries in the entire cluster ove ![Recent slow queries](/media/dashboard/dashboard-overview-slow-query.png) -By default, the SQL query that is executed longer than 300 milliseconds is counted as a slow query and displayed on the table. You can change this threshold using the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the [slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. +By default, the SQL query that is executed longer than 300 milliseconds is counted as a slow query and displayed on the table. You can change this threshold by modifying the [tidb_slow_log_threshold](/tidb-specific-system-variables.md#tidb_slow_log_threshold) variable or the [slow-threshold](/tidb-configuration-file.md#slow-threshold) TiDB parameter. The content displayed in this area is consistent with the more detailed [Slow Queries Page](/dashboard/dashboard-slow-query.md). You can click the **Recent Slow Queries** title to view the complete list. For details of the columns in this table, see this [Slow Queries Page](/dashboard/dashboard-slow-query.md). @@ -76,7 +76,7 @@ This area summarizes the total number of instances and abnormal instances of TiD The statuses in the image above are described as follows: - Up: The instance is running properly (including the offline storage instance). -- Down: The instance is running abnormally, such as network disconnection, process panic, and so on. +- Down: The instance is running abnormally, such as network disconnection, process crash, and so on. Click the **Instance** title to enter the [Cluster Info Page](/dashboard/dashboard-cluster-info.md) that shows the detailed running status of each instance. diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index 93729692b4775..88d379bb9c528 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -8,7 +8,7 @@ category: how-to On the Slow Queries page of TiDB Dashboard, you can search and view all slow queries in the cluster. -By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md). You can search the recorded slow queries using TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. +By default, SQL queries with an execution time of more than 300 milliseconds are considered as slow queries. These queries are recorded in the [slow query logs](/identify-slow-queries.md) and can be searched via TiDB Dashboard. You can adjust the threshold of slow queries through the [`tidb_slow_log_threshold`](/tidb-specific-system-variables.md#tidb_slow_log_threshold) session variable or the [`slow-threshold`](/tidb-configuration-file.md#slow-threshold) TiDB parameter. > **Note:** > @@ -40,7 +40,7 @@ Click **Columns** on the page and you can choose to see more columns. You can mo ### Sort by Column -By default, the list is sorted by **Finish Time** in reverse order. Click column headings to sort by the column or switch the sorting order: +By default, the list is sorted by **Finish Time** in the descending order. Click column headings to sort by the column or switch the sorting order: ![Modify sorting basis](/media/dashboard/dashboard-slow-queries-list3.png) @@ -49,8 +49,8 @@ By default, the list is sorted by **Finish Time** in reverse order. Click column Click any item in the list to display detailed execution information of the slow query, including: - Query: The text of the SQL statement (see area 1 in the image below); -- Plan: The execution plan of the slow query. See [Understand the Query Execution Plan](/query-execution-plan.md) to learn how to read the execution plan (area 2 in the image below); -- Other sorted SQL execution information (area 3 in the image below). +- Plan: The execution plan of the slow query. See [Understand the Query Execution Plan](/query-execution-plan.md) to learn how to read the execution plan (see area 2 in the image below); +- Other sorted SQL execution information (see area 3 in the image below). ![View execution details](/media/dashboard/dashboard-slow-queries-detail1.png) diff --git a/dashboard/dashboard-statement-details.md b/dashboard/dashboard-statement-details.md index a7103678f2803..0c4ac3a6435ae 100644 --- a/dashboard/dashboard-statement-details.md +++ b/dashboard/dashboard-statement-details.md @@ -26,13 +26,13 @@ The execution detail of plans includes the following information: ### Basic Tab -The basic information of a SQL execution includes the table name, index name, execution times, and total duration. The **Description** column provides detailed description of each field. +The basic information of a SQL execution includes the table names, index name, execution count, and total latency. The **Description** column provides detailed description of each field. ![Basic information](/media/dashboard/dashboard-statement-plans-basic.png) ### Time Tab -Click the **Time** tab, and you can see how long each stage of the execution plan is lasted. +Click the **Time** tab, and you can see how long each stage of the execution plan lasts. > **Note:** > @@ -48,7 +48,7 @@ Click the **Coprocessor Read** tab, and you can see information related to Copro ### Transaction Tab -Click the **Transaction** tab, and you can see information related to execution plan and transaction, such as the average number of written keys or the maximum number of written keys. +Click the **Transaction** tab, and you can see information related to execution plans and transactions, such as the average number of written keys or the maximum number of written keys. ![Transaction](/media/dashboard/dashboard-statement-plans-transaction.png) diff --git a/dashboard/dashboard-statement-list.md b/dashboard/dashboard-statement-list.md index c963481d3f478..a6ba0f541bc80 100644 --- a/dashboard/dashboard-statement-list.md +++ b/dashboard/dashboard-statement-list.md @@ -46,7 +46,7 @@ On the list page, click the **Settings** button on the top right to change the s ![Settings entry](/media/dashboard/dashboard-statement-setting-entry.png) -After clicking the **Settings** button, you can see the following setting page: +After clicking the **Settings** button, you can see the following setting dialog box: ![Settings](/media/dashboard/dashboard-statement-settings.png) @@ -59,6 +59,6 @@ See [Configurations of Statement Summary Tables](/statement-summary-tables.md#co > **Note:** > -> + Because the statement system table is only stored in memory, after SQL Statements feature is disabled, the data in the system table will be cleared. +> + Because the statement system table is only stored in memory, after the SQL Statements feature is disabled, the data in the system table will be cleared. > -> + The values of `Collect interval` and `retain` duration affect the memory usage, so it is recommended to adjust this value according to the actual situation. The value of `retain duration` should not be set too large. +> + The values of `Collect interval` and `retain duration` affect the memory usage, so it is recommended to adjust these values according to the actual situation. The value of `retain duration` should not be set too large. From a18ebd062aa6bf8f440e267c0590f2cb6667c12d Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 9 Jun 2020 14:15:10 +0800 Subject: [PATCH 9/9] replace image --- .../dashboard/dashboard-overview-latency.png | Bin 62959 -> 22012 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/media/dashboard/dashboard-overview-latency.png b/media/dashboard/dashboard-overview-latency.png index c84ae30fb9f88b1c73f5215230fb1c6a49935b77..d025b2fa142120c7b5f3020875e2d67f012fa62a 100644 GIT binary patch literal 22012 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 literal 62959 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 z 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 C!kCW$