星辰考古:TiDB v1.0 安装实录

星辰考古:TiDB v1.0 安装实录

ShawnYan Lv.6
tidb1.png

1.0 版本只是个开始,是新的起点,愿我们一路相扶,不负远途。

前言

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库。

近日,TiDB v8.0.0 DMR 发布,详细发版说明戳这里:

https://docs.pingcap.com/zh/tidb/v8.0/release-8.0.0

之前的文章提到过,我们从 v1.0 开始接触 TiDB,那时还没有好用的工具,

也没有社区论坛,遇到问题基本靠猜,或者去 GitHub 提个 Issue,

远不及现在方便、好用、高效。

那时安装集群全靠手工,先进的用 Ansible playbook,一周能装起来就很快了,

当然,现在好多国产数据库仍旧如此,长期处于初级阶段。

本文主要讲解如何安装 TiDB v1.0,找寻一下“初恋”的记忆。

arch.png

TiDB v1.0 Release

TiDB v1.0 共发布了 9 个版本,从 v1.0.0 到 v1.0.8,先来回忆下当年的发版说明。

(由于内容较多,移除了错误修复的部分)

时间线

  • 2017 年 10 月 16 日,TiDB 1.0 正式发布!
  • 2017 年 11 月 01 日,TiDB 1.0.1 发布
  • 2017 年 11 月 13 日,TiDB 1.0.2 发布
  • 2017 年 11 月 28 日,TiDB 1.0.3 发布
  • 2017 年 12 月 11 日,TiDB 1.0.4 发布
  • 2017 年 12 月 26 日,TiDB 1.0.5 发布
  • 2018 年 01 月 08 日,TiDB 1.0.6 发布
  • 2018 年 01 月 22 日,TiDB 1.0.7 发布
  • 2018 年 02 月 11 日,TiDB 1.0.8 发布

TiDB Server

TiDB v1.0.0

  • SQL查询优化器:
    • 调整成本模型
    • 分析下推
    • 函数签名下推
  • 优化内部数据格式,减少中间数据大小
  • 增强 MySQL 兼容性
  • 支持 NO_SQL_CACHE 语法并限制存储引擎中的缓存使用
  • 重构 Hash Aggregator 运算符以减少内存使用
  • 支持 Stream Aggregator 算子

TiDB v1.0.1

  • 支持取消 DDL Job。
  • 优化 IN 表达。
  • 支持将慢查询记录到单独的日志文件中。

TiDB v1.0.2

  • 优化索引点查询的成本估算
  • 支持 Alter Table Add Column (ColumnDef ColumnPosition) 语法
  • where 优化条件矛盾的查询
  • 优化 Add Index 操作纠正进度,减少重复操作
  • 优化 Index Look Join 算子,加快小数据量的查询速度

TiDB v1.0.3

  • 优化事务冲突场景下的性能
  • TokenLimit 在配置文件中添加选项
  • 在慢查询日志中输出默认数据库
  • 从查询持续时间指标中删除 DDL 语句
  • 优化查询成本估算
  • 支持将 Float 类型的表达式下推到 TiKV

TiDB v1.0.4

  • 加快启动时统计数据的加载速度 tidb-server
  • show variables 提高语句的性能
  • Alter/Drop User 加速声明的有效性

TiDB v1.0.5

  • 在语句中添加当前 Auto_Increment ID 的最大值 Show Create Table
  • 支持将慢查询输出到单独的文件中。
  • TimeZone 创建新会话时从 TiKV 加载变量。
  • 支持模式状态检查,使 Show Create TableAnalyze 语句仅处理公共表/索引。

TiDB v1.0.6

  • 支持 Alter Table Auto_Increment 语法
  • 支持扩展语法对隐式行ID进行分片,避免单表写入热点
  • 支持 GROUP_CONCAT 函数中的 SEPARATOR 语法

TiDB v1.0.7

  • 优化 FIELD_LIST 命令
  • 避免将只读语句添加到历史记录中
  • 添加 session 变量控制日志查询
  • 为http状态服务器添加架构信息API
  • 更新 DDL 中为 false 时 RunWorker 的行为
  • 提高统计中测试结果的稳定性
  • 支持 CREATE TABLE 语句 PACK_KEYS 语法
  • row_id 为空下推模式添加列以优化性能

TiDB v1.0.8

  • 优化 InsertIntoIgnore 语句的性能
  • 为事务内的 DML 语句数量添加限制(可配置,默认值为 stmt-count-limit = 5000)
  • 并发运行GC以加速GC进程
  • CREATE INDEX 语句提供 LOCK 语法支持

PD

TiDB v1.0.0

  • 支持基于读流的平衡
  • 支持设置存储重量和基于重量的平衡

TiDB v1.0.2

  • 提高异常情况下调度的稳定性

TiDB v1.0.3

  • 支持使用 API​​ 添加更多类型的调度器

TiDB v1.0.7

  • 增加日志

TiKV

TiDB v1.0.0

  • 协处理器现在支持更多下推功能
  • 支持下推采样操作
  • 支持手动触发数据压缩,快速收集空间
  • 提高性能和稳定性
  • 添加 Debug API 进行调试

TiDB v1.0.1

  • 支持写字节的流控制。
  • 减少 Raft 分配。
  • 将协处理器堆栈大小增加到 10MB。
  • 从协处理器中删除无用的日志。

TiDB v1.0.2

  • 支持分表,确保一个 Region 不包含多个表的数据
  • 限制密钥长度不超过 4 KB
  • 更准确的读流量统计
  • 对协处理器堆栈实施深度保护

TiDB v1.0.5

  • 支持 dynamic-level-bytes 参数改善空间收集情况。

TiDB v1.0.7

  • 支持 Table Scan
  • tikv-ctl 支持远程模式

TiDB v1.0.8

  • DeleteFilesInRanges 清除陈旧数据,提高 TiKV 启动速度
  • 强制同步接收到的 Snapshot 的元数据,保证其安全

TiDB v1.0 极简版

极简形态启动 TiDB 数据库,准备一个 PD,一个 TiKV 和一个 TiDB Server。

1
2
3
./pd-server
./tikv-server --pd-endpoints 127.0.0.1:2379
./tidb-server -store tikv --path 127.0.0.1:2379

连接 4000 端口到 TiDB Server,并查看一些基础信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
[root@shawnyan ~]# mysql -uroot -P4000 -h127.1 --default-character-set=utf8 --prompt='tidb> '
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.1-TiDB-v1.0.8-1-gaacba4a MySQL Community Server (Apache License 2.0)

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

tidb> \s
--------------
mysql Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id: 5
Current database:
Current user: root@127.0.0.1
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.1-TiDB-v1.0.8-1-gaacba4a MySQL Community Server (Apache License 2.0)
Protocol version: 10
Connection: 127.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 4000
Binary data as: Hexadecimal
--------------

tidb> select version();
+------------------------------+
| version() |
+------------------------------+
| 5.7.1-TiDB-v1.0.8-1-gaacba4a |
+------------------------------+
1 row in set (0.00 sec)

tidb> select tidb_version()\G
*************************** 1. row ***************************
tidb_version(): Release Version: v1.0.8-1-gaacba4a
Git Commit Hash: aacba4a427f6c1dd64cd581e1f888e00aa64e948
Git Branch: release-1.0
UTC Build Time: 2018-02-11 12:21:59
1 row in set (0.01 sec)

tidb> select * from mysql.tidb;
+-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+
| VARIABLE_NAME | VARIABLE_VALUE | COMMENT |
+-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+
| bootstrapped | True | Bootstrap flag. Do not delete. |
| tidb_server_version | 15 | Bootstrap version. Do not delete. |
| tikv_gc_leader_uuid | 63d1e883d100006 | Current GC worker leader UUID. (DO NOT EDIT) |
| tikv_gc_leader_desc | host:shawnyan, pid:22873, start at 2024-05-05 15:22:34.205171361 +0800 CST m=+1.715160561 | Host name and pid of current GC leader. (DO NOT EDIT) |
| tikv_gc_leader_lease | 20240505-15:36:34 +0800 CST | Current GC worker leader lease. (DO NOT EDIT) |
| tikv_gc_run_interval | 10m0s | GC run interval, at least 10m, in Go format. |
| tikv_gc_life_time | 10m0s | All versions within life time will not be collected by GC, at least 10m, in Go format. |
| tikv_gc_last_run_time | 20240505-15:32:34 +0800 CST | The time when last GC starts. (DO NOT EDIT) |
| tikv_gc_safe_point | 20240505-15:22:34 +0800 CST | All versions after safe point can be accessed. (DO NOT EDIT) |
| tikv_gc_concurrency | 1 | How many go routines used to do GC parallel, [1, 128], default 1 |
+-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+
10 rows in set (0.01 sec)

tidb> select count(*) from mysql.GLOBAL_VARIABLES;
+----------+
| count(*) |
+----------+
| 498 |
+----------+
1 row in set (0.00 sec)

tidb> select * from mysql.GLOBAL_VARIABLES where VARIABLE_NAME like 'tidb%';
+------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+------------------------------------+----------------+
| tidb_max_row_count_for_inlj | 128 |
| tidb_index_lookup_size | 20000 |
| tidb_distsql_scan_concurrency | 10 |
| tidb_index_join_batch_size | 25000 |
| tidb_index_serial_scan_concurrency | 1 |
| tidb_skip_utf8_check | 0 |
| tidb_index_lookup_concurrency | 4 |
+------------------------------------+----------------+
7 rows in set (0.01 sec)

查看 PD 中的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@shawnyan bin]# echo "config show" | ./pd-ctl 
{
"max-snapshot-count": 3,
"max-store-down-time": "1h0m0s",
"leader-schedule-limit": 64,
"region-schedule-limit": 12,
"replica-schedule-limit": 16,
"schedulers-v2": [
{
"type": "balance-region",
"args": null
},
{
"type": "balance-leader",
"args": null
},
{
"type": "hot-region",
"args": null
}
]
}

本期考古活动告一段落,咱们下期再见!

– END –

foot.png

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

  • Title: 星辰考古:TiDB v1.0 安装实录
  • Author: ShawnYan
  • Created at: 2024-05-05 23:00:00
  • Updated at: 2024-05-05 23:00:00
  • Link: https://shawnyan.cn/2024/tidb/tidb-1-0-release/
  • License: This work is licensed under CC BY-NC-SA 4.0.
if (hexo-config('comment.enable') == true && hexo-config('comment.system') != "") { if (hexo-config('comment.system') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.system') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.system') == "twikoo") { @require "./twikoo.styl" } } .comments-container display inline-block margin-top $spacing-unit width 100% #comment-anchor width 100% height 10px .comment-area-title width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family 'Consolas', '宋体', sans-serif font-weight bold i color var(--default-text-color) +redefine-tablet() margin 5px 0 font-size 1.2rem