Skip to content

Commit f1e0270

Browse files
committed
op-guide: update format, fix typo, add notes
Via: pingcap/docs#612
1 parent b3e1216 commit f1e0270

File tree

1 file changed

+105
-98
lines changed

1 file changed

+105
-98
lines changed

op-guide/history-read.md

Lines changed: 105 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -27,105 +27,112 @@ TiDB 实现了通过标准 SQL 接口读取历史数据功能,无需特殊的
2727

2828
TiDB 使用 MVCC 管理版本,当更新/删除数据时,不会做真正的数据删除,只会添加一个新版本数据,所以可以保留历史数据。历史数据不会全部保留,超过一定时间的历史数据会被彻底删除,以减小空间占用以及避免历史版本过多引入的性能开销。
2929

30-
我们使用周期性运行的 GC (Garbage Collection, 垃圾回收)来进行清理,关于 GC 的详细介绍清参阅 [TiDB 垃圾回收 (GC)](gc.md)
30+
TiDB 使用周期性运行的 GC(Garbage Collection,垃圾回收)来进行清理,关于 GC 的详细介绍参见 [TiDB 垃圾回收 (GC)](gc.md)
3131

32-
这里我们需要重点关注的是 `tikv_gc_life_time``tikv_gc_safe_point` 这条。`tikv_gc_life_time` 用于配置历史版本保留时间,可以手动修改;`tikv_gc_safe_point` 记录了当前的 safePoint,用户可以安全地使用大于 safePoint 的时间戳创建 snapshot 读取历史版本。safePoint 在每次 GC 开始运行时自动更新。
32+
这里需要重点关注的是 `tikv_gc_life_time``tikv_gc_safe_point` 这条。`tikv_gc_life_time` 用于配置历史版本保留时间,可以手动修改;`tikv_gc_safe_point` 记录了当前的 safePoint,用户可以安全地使用大于 safePoint 的时间戳创建 snapshot 读取历史版本。safePoint 在每次 GC 开始运行时自动更新。
3333

3434
## 示例
3535

36-
初始化阶段,创建一个表,并插入几行数据:
37-
38-
```sql
39-
mysql> create table t (c int);
40-
Query OK, 0 rows affected (0.01 sec)
41-
42-
mysql> insert into t values (1), (2), (3);
43-
Query OK, 3 rows affected (0.00 sec)
44-
```
45-
46-
查看表中的数据:
47-
48-
```
49-
mysql> select * from t;
50-
+------+
51-
| c |
52-
+------+
53-
| 1 |
54-
| 2 |
55-
| 3 |
56-
+------+
57-
3 rows in set (0.00 sec)
58-
```
59-
60-
查看当前时间:
61-
62-
```sql
63-
mysql> select now();
64-
+---------------------+
65-
| now() |
66-
+---------------------+
67-
| 2016-10-08 16:45:26 |
68-
+---------------------+
69-
1 row in set (0.00 sec)
70-
```
71-
72-
更新某一行数据:
73-
74-
```sql
75-
mysql> update t set c=22 where c=2;
76-
Query OK, 1 row affected (0.00 sec)
77-
```
78-
79-
确认数据已经被更新:
80-
81-
```sql
82-
mysql> select * from t;
83-
+------+
84-
| c |
85-
+------+
86-
| 1 |
87-
| 22 |
88-
| 3 |
89-
+------+
90-
3 rows in set (0.00 sec)
91-
```
92-
93-
设置一个特殊的环境变量,这个是一个 session scope 的变量,其意义为读取这个时间之前的最新的一个版本。注意这里的时间设置的是 update 语句之前的那个时间:
94-
95-
```sql
96-
mysql> set @@tidb_snapshot="2016-10-08 16:45:26";
97-
Query OK, 0 rows affected (0.00 sec)
98-
```
99-
100-
这里读取到的内容即为 update 之前的内容,也就是历史版本:
101-
102-
```sql
103-
mysql> select * from t;
104-
+------+
105-
| c |
106-
+------+
107-
| 1 |
108-
| 2 |
109-
| 3 |
110-
+------+
111-
3 rows in set (0.00 sec)
112-
```
113-
114-
清空这个变量后,即可读取最新版本数据:
115-
116-
```sql
117-
mysql> set @@tidb_snapshot="";
118-
Query OK, 0 rows affected (0.00 sec)
119-
```
120-
121-
```sql
122-
mysql> select * from t;
123-
+------+
124-
| c |
125-
+------+
126-
| 1 |
127-
| 22 |
128-
| 3 |
129-
+------+
130-
3 rows in set (0.00 sec)
131-
```
36+
1. 初始化阶段,创建一个表,并插入几行数据:
37+
38+
```sql
39+
mysql> create table t (c int);
40+
Query OK, 0 rows affected (0.01 sec)
41+
42+
mysql> insert into t values (1), (2), (3);
43+
Query OK, 3 rows affected (0.00 sec)
44+
```
45+
46+
2. 查看表中的数据:
47+
48+
```sql
49+
mysql> select * from t;
50+
+------+
51+
| c |
52+
+------+
53+
| 1 |
54+
| 2 |
55+
| 3 |
56+
+------+
57+
3 rows in set (0.00 sec)
58+
```
59+
60+
3. 查看当前时间:
61+
62+
```sql
63+
mysql> select now();
64+
+---------------------+
65+
| now() |
66+
+---------------------+
67+
| 2016-10-08 16:45:26 |
68+
+---------------------+
69+
1 row in set (0.00 sec)
70+
```
71+
72+
4. 更新某一行数据:
73+
74+
```sql
75+
mysql> update t set c=22 where c=2;
76+
Query OK, 1 row affected (0.00 sec)
77+
```
78+
79+
5. 确认数据已经被更新:
80+
81+
```sql
82+
mysql> select * from t;
83+
+------+
84+
| c |
85+
+------+
86+
| 1 |
87+
| 22 |
88+
| 3 |
89+
+------+
90+
3 rows in set (0.00 sec)
91+
```
92+
93+
6. 设置一个特殊的环境变量,这个是一个 session scope 的变量,其意义为读取这个时间之前的最新的一个版本。
94+
95+
```sql
96+
mysql> set @@tidb_snapshot="2016-10-08 16:45:26";
97+
Query OK, 0 rows affected (0.00 sec)
98+
```
99+
100+
> **注意**
101+
>
102+
> - 这里的时间设置的是 update 语句之前的那个时间。
103+
> -`tidb_snapshot` 前须使用 `@@` 而非 `@`,因为 `@@` 表示全局变量,`@` 表示 Session 变量。
104+
105+
这里读取到的内容即为 update 之前的内容,也就是历史版本:
106+
107+
```sql
108+
mysql> select * from t;
109+
+------+
110+
| c |
111+
+------+
112+
| 1 |
113+
| 2 |
114+
| 3 |
115+
+------+
116+
3 rows in set (0.00 sec)
117+
```
118+
119+
7. 清空这个变量后,即可读取最新版本数据:
120+
121+
```sql
122+
mysql> set @@tidb_snapshot="";
123+
Query OK, 0 rows affected (0.00 sec)
124+
```
125+
126+
```sql
127+
mysql> select * from t;
128+
+------+
129+
| c |
130+
+------+
131+
| 1 |
132+
| 22 |
133+
| 3 |
134+
+------+
135+
3 rows in set (0.00 sec)
136+
```
137+
138+
> **注意**:在 `tidb_snapshot` 前须使用 `@@` 而非 `@`,因为 `@@` 表示全局变量,`@` 表示 Session 变量。

0 commit comments

Comments
 (0)