Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Add two docs for getting started with HTAP and exploring HTAP #6613

Merged
merged 36 commits into from
Jul 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
4333f61
Add the draft release notes for v5.1
qiancai Jun 16, 2021
930aa3b
Merge remote-tracking branch 'upstream/master'
qiancai Jun 22, 2021
e4db526
Merge remote-tracking branch 'upstream/master'
qiancai Jun 23, 2021
a7060c4
Merge remote-tracking branch 'upstream/master'
qiancai Jun 28, 2021
732938e
Merge remote-tracking branch 'upstream/master'
qiancai Jul 4, 2021
c7f0b55
Add two docs for TiDB HTAP
qiancai Jul 5, 2021
e93d7b8
updated the toc
qiancai Jul 5, 2021
b53a8bc
Merge branch 'master' into add_two_docs_tidb_htap
qiancai Jul 5, 2021
a4cd981
added the doc links
qiancai Jul 5, 2021
5e2042b
Delete release-5.1.md
qiancai Jul 5, 2021
6bd7a54
Update TOC.md
qiancai Jul 5, 2021
bec8b75
Merge remote-tracking branch 'upstream/master' into add_two_docs_tidb…
qiancai Jul 5, 2021
d10354d
Update explore_htap.md
qiancai Jul 5, 2021
f60e65a
Update explore_htap.md
qiancai Jul 5, 2021
fd9b024
Update quick-start-with-htap.md
qiancai Jul 5, 2021
e38c886
Update explore_htap.md
qiancai Jul 5, 2021
757a4c3
Apply suggestions from code review
qiancai Jul 6, 2021
0fefd2f
Merge remote-tracking branch 'upstream/master' into add_two_docs_tidb…
qiancai Jul 6, 2021
465c0a1
add the section for htap data processing
qiancai Jul 6, 2021
72fe691
fix lint errors
qiancai Jul 7, 2021
1899545
fixed broken links
qiancai Jul 8, 2021
4aa9d38
update the filenames
qiancai Jul 8, 2021
70db2f8
Update explore-htap.md
qiancai Jul 8, 2021
3ffc9a8
Delete explore_htap.md
qiancai Jul 8, 2021
bd8c5d8
Update _index.md
qiancai Jul 8, 2021
df8fbe1
Update quick-start-with-htap.md
qiancai Jul 8, 2021
5f42dd5
Update quick-start-with-htap.md
qiancai Jul 8, 2021
3345014
Apply suggestions from code review
qiancai Jul 9, 2021
dae7e65
Merge remote-tracking branch 'upstream/master'
qiancai Jul 10, 2021
5c3b2b8
Merge branch 'master' into add_two_docs_tidb_htap
qiancai Jul 14, 2021
d426ebc
Update quick-start-with-htap.md
qiancai Jul 14, 2021
5c3c923
Apply suggestions from code review
qiancai Jul 15, 2021
3c2a462
add the summary
qiancai Jul 15, 2021
eab6bf0
Update quick-start-with-htap.md
qiancai Jul 15, 2021
b35b896
Update quick-start-with-htap.md
qiancai Jul 15, 2021
bcf274e
Merge remote-tracking branch 'upstream/master' into add_two_docs_tidb…
qiancai Jul 19, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
+ [使用限制](/tidb-limitations.md)
+ [荣誉列表](/credits.md)
+ 快速上手
+ [快速上手指南](/quick-start-with-tidb.md)
+ [快速上手 TiDB](/quick-start-with-tidb.md)
+ [快速上手 HTAP](/quick-start-with-htap.md)
+ [SQL 基本操作](/basic-sql-operations.md)
+ [深入探索 HTAP](/explore-htap.md)
+ 部署标准集群
+ [软硬件环境需求](/hardware-and-software-requirements.md)
+ [环境与系统配置检查](/check-before-deployment.md)
Expand Down
4 changes: 3 additions & 1 deletion _index.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ aliases: ['/docs-cn/dev/']
<NavColumn>
<ColumnTitle>快速上手</ColumnTitle>

- [快速上手指南](/quick-start-with-tidb.md)
- [快速上手 TiDB](/quick-start-with-tidb.md)
- [快速上手 HTAP](/quick-start-with-htap.md)
- [SQL 基本操作](/basic-sql-operations.md)
- [深入探索 HTAP](/explore-htap.md)

</NavColumn>

Expand Down
104 changes: 104 additions & 0 deletions explore-htap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
title: HTAP 深入探索指南
qiancai marked this conversation as resolved.
Show resolved Hide resolved
summary: 本文介绍如何深入探索并使用 TiDB 的 HTAP 功能。
---

# HTAP 深入探索指南

本指南介绍如何深入探索并使用 TiDB 在线事务与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 功能。

> **注意:**
>
> 如果你对 TiDB HTAP 功能还不太了解,希望快速试用体验,请参阅[快速上手 HTAP](/quick-start-with-htap.md)。

## HTAP 适用场景

TiDB HATP 可以满足企业海量数据的增产需求、降低运维的风险成本、与现有的大数据栈无缝缝合,从而实现数据资产价值的实时变现。

以下是三种 HTAP 典型适用场景:

- 混合负载场景

当将 TiDB 应用于在线实时分析处理的混合负载场景时,开发人员只需要提供一个入口,TiDB 将自动根据业务类型选择不同的处理引擎。

- 实时流处理场景

当将 TiDB 应用于实时流处理场景时,TiDB 能保证源源不断流入系统的数据实时可查,同时可兼顾高并发数据服务与 BI 查询。

- 数据中枢场景

当将 TiDB 应用于数据中枢场景时,TiDB 作为数据中枢可以无缝连接数据业务层和数据仓库层,满足不同业务的需求。

如果想了解更多关于 TiDB HTAP 场景信息,请参阅 [PingCAP 官网中关于 HTAP 的博客](https://pingcap.com/blog-cn/#HTAP)。

## HTAP 架构

在 TiDB 中,面向在线事务处理的行存储引擎 [TiKV](/tikv-overview.md) 与面向实时分析场景的列存储引擎 [TiFlash](/tiflash/tiflash-overview.md) 同时存在,自动同步,保持强一致性。

更多架构信息,请参考 [TiDB HTAP 形态架构](/tiflash/tiflash-overview.md#整体架构)。

## HTAP 环境准备

在深入探索 TiDB HTAP 功能前,请依据你的数据场景部署 TiDB 以及对应的数据分析引擎。大数据场景 (100 T) 下,推荐使用 TiFlash MPP 作为 HTAP 的主要方案,TiSpark 作为补充方案。

- TiFlash

- 如果已经部署 TiDB 集群但尚未部署 TiFlash 节点,请参阅[扩容 TiFlash 节点](/scale-tidb-using-tiup.md#扩容-tiflash-节点)中的步骤在现有 TiDB 集群中添加 TiFlash 节点。
- 如果尚未部署 TiDB 集群,请使用 [TiUP 部署 TiDB 集群](/production-deployment-using-tiup.md),并在包含最小拓扑的基础上,同时[增加 TiFlash 拓扑架构](/tiflash-deployment-topology.md)。
- 在决定如何选择 TiFlash 节点数量时,请考虑以下几种业务场景:

- 如果业务场景以 OLTP 为主,做轻量级的 Ad hoc OLAP 计算,通常部署 1 个或几个 TiFlash 节点就会产生明显的加速效果。
- 当 OLTP 数据吞吐量对节点 I/O 无明显压力时,每个 TiFlash 节点将会使用较多资源用于计算,这样 TiFlash 集群可实现近似线性的扩展能力。TiFlash 节点数量应根据期待的性能和响应时间调整。
- 当 OLTP 数据吞吐量较高时(例如写入或更新超过千万行/小时),由于网络和物理磁盘的写入能力有限,内部 TiKV 与 TiFlash 之间的 I/O 会成为主要瓶颈,也容易产生读写热点。此时TiFlash 节点数与 OLAP 计算量有较复杂非线性关系,需要根据具体系统状态调整节点数量。

- TiSpark

- 如果你的业务需要基于 Spark 进行分析,请部署 TiSpark(暂不支持 Spark 3.x)。具体步骤,请参阅 [TiSpark 用户指南](/tispark-overview.md)。

<!-- - 实时流处理
- 如果你想将 TiDB 与 Flink 结合构建高效易用的实时数仓,请参与 Apache Flink x TiDB Meetup 系列讲座。-->

## HTAP 数据准备

TiFlash 部署完成后并不会自动同步数据,你需要指定需要同步到 TiFlash 的数据表。指定后,TiDB 将创建对应的 TiFlash 副本。

- 如果 TiDB 集群中还没有数据,请先迁移数据到 TiDB。详情请参阅[数据迁移](/migration-overview.md)。
- 如果 TiDB 集群中已经有从上游同步过来的数据,TiFlash 部署完成后并不会自动同步数据,而需要手动指定需要同步的表,详情请参阅[使用 TiFlash](/tiflash/use-tiflash.md)。

## HTAP 数据处理

使用 TiDB 时,你只需输入 SQL 语句进行查询或者写入需求。对于创建了 TiFlash 副本的表,TiDB 会依靠前端优化器自由选择最优的执行方式。

> **注意:**
>
> TiFlash 的 MPP 模式默认开启。当执行 SQL 语句时,TiDB 会通过优化器自动判断并选择是否以 MPP 模式执行。
>
> - 如需关闭 MPP 模式,请将系统变量 [tidb_allow_mpp](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入) 的值设置为 OFF。
> - 如需强制使用 TiFlash 的 MPP 模式执行查询,请将系统变量 [tidb_allow_mpp](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入) 和 [tidb_enforce_mpp](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 的值设置为 ON。
> - 如需查看 TiDB 是否选择以 MPP 模式执行,你可以[通过 EXPLAIN 语句查看具体的查询执行计划](/explain-mpp.md#用-explain-查看-mpp-模式查询的执行计划)。如果 EXPLAIN 语句的结果中出现 ExchangeSender 和 ExchangeReceiver 算子,表明 MPP 已生效。

## HTAP 性能监控

在 TiDB 的使用过程中,可以选择以下方式监控 TiDB 集群运行情况并查看性能数据。

- [TiDB Dashboard](/dashboard/dashboard-intro.md):查看集群整体运行概况,分析集群读写流量分布及趋势变化,详细了解耗时较长的 SQL 语句的执行信息。
- [监控系统 (Prometheus & Grafana)](/grafana-overview-dashboard.md):查看 TiDB 集群各组件(包括 PD、TiDB、TiKV、TiFlash、TiCDC、Node_exporter)的相关监控参数。

如需查看 TiDB 和 TiFlash 集群报警规则和处理方法,请查阅 [TiDB 集群报警规则](/alert-rules.md) 和 [TiFlash 报警规则](/tiflash/tiflash-alert-rules.md)。

## HTAP 故障诊断

在使用 TiDB 的过程中如果遇到问题,请参阅以下文档:

- [分析慢查询](/analyze-slow-queries.md)
- [定位消耗系统资源多的查询](/identify-expensive-queries.md)
- [TiDB 热点问题处理](/troubleshoot-hot-spot-issues.md)
- [TiDB 集群故障诊断](/troubleshoot-tidb-cluster.md)
- [TiFlash 常见问题](/tiflash/troubleshoot-tiflash.md)

除此之外,你可以在 [Github Issues](https://github.com/pingcap/tiflash/issues) 新建一个 Issue 反馈问题,或者在 [AskTUG](https://asktug.com/) 提交你的问题。

## 探索更多

- 如果要查看 TiFlash 版本,以及 TiFlash 重要日志及系统表,请参阅 [TiFlash 集群运维](/tiflash/maintain-tiflash.md)。
- 如果需要移除某个 TiFlash 节点,请参阅[缩容 TiFlash 节点](/scale-tidb-using-tiup.md#缩容-tiflash-节点)。
216 changes: 216 additions & 0 deletions quick-start-with-htap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
---
title: HTAP 快速上手指南
qiancai marked this conversation as resolved.
Show resolved Hide resolved
summary: 本文介绍如何快速上手体验 TiDB 的 HTAP 功能。
---

# HTAP 快速上手指南

本指南介绍如何快速上手体验 TiDB 的一站式混合型在线事务与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 功能。

> **注意:**
>
> 本指南中的步骤仅适用于快速上手体验,不适用于生产环境。如需探索 HTAP 更多功能,请参考[深入探索 HTAP](/explore-htap.md)。

## 基础概念

在试用前,你需要对 TiDB 面向在线事务处理的行存储引擎 [TiKV](/tikv-overview.md) 与面向实时分析场景的列存储引擎 [TiFlash](/tiflash/tiflash-overview.md) 有一些基本了解:

- HTAP 存储引擎:行存 (Row-store) 与列存 (columnar-store) 同时存在,自动同步,保持强一致性。行存为在线事务处理 OLTP 提供优化,列存则为在线分析处理 OLAP 提供性能优化。
- HTAP 数据一致性:作为一个分布式事务型的键值数据库,TiKV 提供了满足 ACID 约束的分布式事务接口,并通过 [Raft](https://raft.github.io/raft.pdf) 协议保证了多副本数据一致性以及高可用。TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保与 TiKV 之间的数据强一致。
- HTAP 数据隔离性:TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
- MPP 计算引擎:从 v5.0 版本起,TiFlash 引入了分布式计算框架 [MPP](/tiflash/use-tiflash.md#使用-mpp-模式),允许节点之间的数据交换并提供高性能、高吞吐的 SQL 算法,可以大幅度缩短分析查询的执行时间。

## 体验步骤

本文的步骤以业界比较流行的 [TPC-H](http://www.tpc.org/tpch/) 数据集为例,通过其中一个查询场景来体验 TiDB HTAP 的便捷性和高性能。

### 第 1 步:部署试用环境

在试用 TiDB HTAP 功能前,请按照 [TiDB 数据库快速上手指南](/quick-start-with-tidb.md)中的步骤部署 TiDB 本地测试环境。

在 [TiDB 数据库快速上手指南](/quick-start-with-tidb.md)中:

- 推荐直接执行 `tiup playground` 命令启动最新版本的 TiDB 集群,此命令将自动部署 TiDB、TiKV、PD 和 TiFlash 实例各 1 个:

{{< copyable "shell-regular" >}}

```shell
tiup playground
```

- 如果想要指定 TiDB 版本以及各组件实例个数,请在部署命令中同时指定 TiFlash 实例的个数,示例如下:

{{< copyable "shell-regular" >}}

```shell
tiup playground v5.1.0 --db 2 --pd 3 --kv 3 --tiflash 1 --monitor
```

> **注意:**
>
> `tiup playground` 命令仅适用于快速上手体验,不适用于生产环境。

### 第 2 步:准备试用数据

通过以下步骤,将生成一个 [TPC-H](http://www.tpc.org/tpch/) 数据集用于体验 TiDB HTAP 功能。如果你对 TPC-H 感兴趣,可查看其[规格说明](http://tpc.org/tpc_documents_current_versions/pdf/tpc-h_v3.0.0.pdf)。

> **注意:**
>
> 如果你想使用自己现有的数据进行分析查询,可以将[数据迁移到 TiDB](/migration-overview.md) 中;如果你想自己设计并生成数据,可以通过 SQL 语句或相关工具生成。

1. 使用以下命令安装数据生成工具:

{{< copyable "shell-regular" >}}

```shell
tiup install bench
```

2. 使用以下命令生成数据:

{{< copyable "shell-regular" >}}

```shell
tiup bench tpch --sf=1 prepare
```

当命令行输出 `Finished` 时,表示数据生成完毕。

3. 运行以下 SQL 语句查看生成的数据:

{{< copyable "sql" >}}

```sql
SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size', CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS'Total'FROM information_schema.TABLES WHERE table_schema LIKE 'test';
```

从输出中可以看到,一共生成了八张表,最大的一张表数据量有 600 万行(由于数据是工具随机生成,所以实际的数据生成量以 SQL 实际查询到的值为准)。

```sql
+---------------+----------------+-----------+------------+---------+
| Table Name | Number of Rows | Data Size | Index Size | Total |
+---------------+----------------+-----------+------------+---------+
| test.nation | 25 | 0.0000G | 0.0000G | 0.0000G |
| test.region | 5 | 0.0000G | 0.0000G | 0.0000G |
| test.part | 200000 | 0.0245G | 0.0000G | 0.0245G |
| test.supplier | 10000 | 0.0014G | 0.0000G | 0.0014G |
| test.partsupp | 800000 | 0.1174G | 0.0119G | 0.1293G |
| test.customer | 150000 | 0.0242G | 0.0000G | 0.0242G |
| test.orders | 1514336 | 0.1673G | 0.0000G | 0.1673G |
| test.lineitem | 6001215 | 0.7756G | 0.0894G | 0.8651G |
+---------------+----------------+-----------+------------+---------+
8 rows in set (0.06 sec)
```

这是一个商业订购系统的数据库。其中,`test.nation` 表是国家信息、`test.region` 表是地区信息,`test.part` 表是零件信息,`test.supplier` 表是供货商信息,`test.partsupp` 表是供货商的零件信息,`test.customer` 表是消费者信息,`test.orders` 表是订单信息,`test.lineitem` 表是在线商品的信息。

### 第 3 步:使用行存查询数据

执行以下 SQL 语句,你可以体验当只使用行存(大多数数据库)时 TiDB 的表现:

{{< copyable "sql" >}}

```sql
SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
```

这是一个运送优先权查询,用于给出在指定日期之前尚未运送的订单中收入最高订单的优先权和潜在的收入。潜在的收入被定义为 `l_extendedprice * (1-l_discount)` 的和。订单按照收入的降序列出。在本示例中,此查询将列出潜在查询收入在前 10 的尚未运送的订单。

### 第 4 步:同步列存数据

TiFlash 部署完成后并不会自动同步 TiKV 数据,你可以在 MySQL 客户端向 TiDB 发送以下 DDL 命令指定需要同步到 TiFlash 的表。指定后,TiDB 将创建对应的 TiFlash 副本。

{{< copyable "sql" >}}

```sql
ALTER TABLE test.customer SET TIFLASH REPLICA 1;
ALTER TABLE test.orders SET TIFLASH REPLICA 1;
ALTER TABLE test.lineitem SET TIFLASH REPLICA 1;
```

如需查询 TiFlash 表的同步状态,请使用以下 SQL 语句:

{{< copyable "sql" >}}

```sql
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'customer';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'orders';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'lineitem';
```

以上查询结果中:

- `AVAILABLE` 字段表示该表的 TiFlash 副本是否可用。1 代表可用,0 代表不可用。副本状态变为可用之后就不再改变,如果通过 DDL 命令修改副本数则会重新计算同步进度。
- `PROGRESS` 字段代表同步进度,在 0.0~1.0 之间,1 代表至少 1 个副本已经完成同步。

### 第 5 步:使用 HTAP 更快地分析数据

再次执行[第 3 步](#第-3-步使用行存查询数据)中的 SQL 语句,你可以感受 TiDB HTAP 的表现。

对于创建了 TiFlash 副本的表,TiDB 优化器会自动根据代价估算选择是否使用 TiFlash 副本。如需查看实际是否选择了 TiFlash 副本,可以使用 `desc` 或 `explain analyze` 语句,例如:

{{< copyable "sql" >}}

```sql
explain analyze SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
```

如果结果中出现 ExchangeSender 和 ExchangeReceiver 算子,表明 MPP 已生效。

此外,你也可以指定整个查询的各个计算部分都只使用 TiFlash 引擎,详情请参阅[使用 TiDB 读取 TiFlash](/tiflash/use-tiflash.md#使用-tidb-读取-tiflash)。

你可以对比两次的查询结果和查询性能。

## 探索更多

- [TiDB HTAP 形态架构](/tiflash/tiflash-overview.md#整体架构)
- [深入探索 HTAP](/explore-htap.md)
- [使用 TiFlash](/tiflash/use-tiflash.md)