Skip to content

Commit 6f1458c

Browse files
committed
update docs
1 parent 2464af2 commit 6f1458c

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

docs/advanced/5.MySQL源代码调试环境.md

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,8 @@
4040
# 准备环境
4141
apt install -y cmake make gcc g++ libncurses5-dev bison openssl libssl-dev git autoconf automake libtool unzip build-essential perl pkg-config
4242

43-
44-
mkdir -p /data/{mysql_source_code,mysql_install_dir,data}
45-
cd /data/mysql_source_code
46-
47-
43+
# 创建目录
44+
mkdir -p /data/{mysql_source_code,mysql_install_dir,data} && cd /data/mysql_source_code
4845

4946
# 直接去 https://dev.mysql.com/downloads/mysql/ 直接下载带 Boost 第三方库依赖的源码。
5047
# Boost 是一个功能强大、构造精巧、跨平台、开源并且完全免费的 C++ 程序库,可以认为是半个C++标准库。
@@ -53,12 +50,13 @@ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.39.tar.gz -P
5350

5451
# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.39.tar.gz
5552

53+
# 解压
54+
cd /data/mysql_source/ && tar -zxvf mysql-boost-8.0.39.tar.gz
5655

57-
cd /data/mysql_source/
58-
tar -zxvf mysql-boost-8.0.39.tar.gz
59-
56+
# 创建build目录
6057
mkdir -p /data/mysql_source_code/mysql-8.0.39/build/ && cd /data/mysql_source_code/mysql-8.0.39/build/
6158

59+
# 编译
6260

6361
cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \
6462
-DWITH_DEBUG=1 \
@@ -77,10 +75,7 @@ cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \
7775
-DWITH_BINLOG_PREALLOC=ON\
7876
-DCMAKE_INSTALL_PREFIX=/data/mysql_install_dir
7977

80-
81-
82-
83-
78+
# 参数含义
8479
# DWITH_DEBUG=1 这个是最关键的配置,是为了开启debug调试模式;
8580
# DCMAKE_INSTALL_PREFIX= 表示编译状态的路径,选择源码文件夹之外的一个自建的build文件夹;
8681
# DWITH_BOOST= 指定 boost 路径,可以直接指向源码文件夹下的boost文件夹;
@@ -90,7 +85,7 @@ cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \
9085
# DWITH_FEDERATED_STORAGE_ENGINE=1 表示开启FEDERATED存储引擎
9186
# CMAKE_INSTALL_PREFIX= 这个表示路径,默认是/usr/local/mysql,是各种配置的路径前缀PREFIX
9287
# DMYSQL_DATADIR: 表示MySQL默认的数据目录,选择build文件夹下的data文件
93-
88+
# 参考 https://dev.mysql.com/doc/refman/8.4/en/source-configuration-options.html
9489

9590
make -j4
9691
make install

docs/basic/13.MySQL是如何打开和关闭表的.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
# MySQL是如何打开和关闭表?
22

3+
当执行`mysqladmin status`命令时,应该看到类似以下的内容:
34

5+
```shell
6+
Uptime: 426 Running threads: 1 Questions: 11082
7+
Reloads: 1 Open tables: 12
8+
```
9+
10+
MySQL是多线程的,因此可能有许多客户端同时对一个给定表发出查询。为了最大程度地减少同一张表上具有不同状态的多个客户端会话的问题,每个并发会话会独立打开该表。这会额外消耗更高内存,但通常会提高性能。
411

512

613
https://dev.mysql.com/doc/refman/8.4/en/table-cache.html
714

815

16+
MySQL通过TABLE对象进行表的读写等操作,对于构建TABLE对象所需的表定义相关信息,MySQL会通过Dictionary_client与DD模块进行交互。
917

1018
在打开一个表准备访问数据的时候,通常要先打开其数据字典,其中包含了字段信息,索引信息,默认值,字符集,统计数据,自增字段,自增锁等等信息。
1119

12-
其中某些在MySQL层,有些在Innodb层(比如统计信息),又比如字段类型在MySQL层和Innodb层的表示是不同的,实际上这包含3层信息:
20+
其中有些在MySQL层,有些在Innodb层(比如统计信息),又比如字段类型在MySQL层和Innodb层的表示是不同的,实际上这包含3层信息:
1321

1422

15-
- **table instance**:MySQL层相关的字典信息,每个会话独占由table share生成而来。在语句结束的时候释放,这里的释放并不是真正的释放,可能是缓存,其缓存的个数和table_open_cache和table_open_cache_instances有关,其缓存位置约定为table cache,内部为TABLE。
23+
- **table instance**:MySQL层相关的字典信息,每个会话独占由`table share`生成而来。在语句结束的时候释放,这里的释放并不是真正的释放,可能是缓存,其缓存的个数和table_open_cache和table_open_cache_instances有关,其缓存位置约定为`table cache`,内部为TABLE。
1624

1725

1826
- **table share**:MySQL层相关字典的信息,整个数据库只有一份,每个表都包含一个。5.7来自FRM文件,8.0则来自新的SDI缓存相关字典信息。当没有table cache引用的时候会考虑释放,但是同前面一样,释放可能是缓存,缓存的个数和`table_definition_cache`有关,其缓存位置约定为`table def cache`,内部为TABLE_SHARED。

docs/basic/14.MySQL数据字典.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66

77
- 元数据信息包括:数据库的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统计类信息等。
88

9+
10+
MySQL的元数据存在很多种类,包括 Schema,Table,Index,View,Tablespace 等等,描述了数据库中库,表,索引,视图,文件等属性,在 MySQL 中也被称为数据字典,每种资源都被抽象为 DD object,每个 DD object 有一个 Object_id 标识,MySQL 内部实现也是以简洁的多态和模版方式实现的。
11+
912
## 元数据物理存储
1013

14+
15+
1116
`MySQL 8.0` 之前,`Server` 层和存储引擎层会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。字典数据存储在元数据文件、非事务性表和特定于存储引擎的数据字典中。典型的数据:
1217

1318
- .frm files: Table metadata files 。 Server层的DDL语句
@@ -24,11 +29,11 @@
2429

2530
## 数据字典
2631

27-
数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。但是`MySQL` 支持通过 `INFORMATION_SCHEMA` 模式和 `SHOW` 命令来访问存储在数据字典表中的数据
32+
数据字典表是受保护的,只有在MySQL的debug版本中才能访问。但是`MySQL`支持通过`INFORMATION_SCHEMA`模式和`SHOW`命令提供访问存储在数据字典表中的数据
2833

2934
MySQL 系统表在 `MySQL 8.0` 中仍然存在,可以通过 `SHOW TABLES` 语句在 `MySQL` 系统数据库来查看。
3035

31-
`MySQL` 数据字典表和系统表的区别在于数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。
36+
`MySQL` 数据字典表和系统表的区别在于数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。
3237

3338
数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。编译 debug 版本参考: Compiling MySQL for Debugging
3439

@@ -46,9 +51,6 @@ mysql> SET SESSION debug='+d,skip_dd_table_access_check';
4651
mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System';
4752

4853

49-
50-
51-
5254
# 用于 SHOW CREATE TABLE 查看数据字典表定义
5355
mysql> SHOW CREATE TABLE mysql.catalogs
5456
```

0 commit comments

Comments
 (0)