From 6f1458c83aeab13932c67cdddedd2e095da093fb Mon Sep 17 00:00:00 2001 From: fengzhao Date: Mon, 11 Nov 2024 10:40:15 +0800 Subject: [PATCH] update docs --- ...03\350\257\225\347\216\257\345\242\203.md" | 21 +++++++------------ ...63\351\227\255\350\241\250\347\232\204.md" | 12 +++++++++-- ...60\346\215\256\345\255\227\345\205\270.md" | 12 ++++++----- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git "a/docs/advanced/5.MySQL\346\272\220\344\273\243\347\240\201\350\260\203\350\257\225\347\216\257\345\242\203.md" "b/docs/advanced/5.MySQL\346\272\220\344\273\243\347\240\201\350\260\203\350\257\225\347\216\257\345\242\203.md" index 192305446..b75deef01 100644 --- "a/docs/advanced/5.MySQL\346\272\220\344\273\243\347\240\201\350\260\203\350\257\225\347\216\257\345\242\203.md" +++ "b/docs/advanced/5.MySQL\346\272\220\344\273\243\347\240\201\350\260\203\350\257\225\347\216\257\345\242\203.md" @@ -40,11 +40,8 @@ # 准备环境 apt install -y cmake make gcc g++ libncurses5-dev bison openssl libssl-dev git autoconf automake libtool unzip build-essential perl pkg-config - -mkdir -p /data/{mysql_source_code,mysql_install_dir,data} -cd /data/mysql_source_code - - +# 创建目录 +mkdir -p /data/{mysql_source_code,mysql_install_dir,data} && cd /data/mysql_source_code # 直接去 https://dev.mysql.com/downloads/mysql/ 直接下载带 Boost 第三方库依赖的源码。 # 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 # wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.39.tar.gz +# 解压 +cd /data/mysql_source/ && tar -zxvf mysql-boost-8.0.39.tar.gz -cd /data/mysql_source/ -tar -zxvf mysql-boost-8.0.39.tar.gz - +# 创建build目录 mkdir -p /data/mysql_source_code/mysql-8.0.39/build/ && cd /data/mysql_source_code/mysql-8.0.39/build/ +# 编译 cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \ -DWITH_DEBUG=1 \ @@ -77,10 +75,7 @@ cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \ -DWITH_BINLOG_PREALLOC=ON\ -DCMAKE_INSTALL_PREFIX=/data/mysql_install_dir - - - - +# 参数含义 # DWITH_DEBUG=1 这个是最关键的配置,是为了开启debug调试模式; # DCMAKE_INSTALL_PREFIX= 表示编译状态的路径,选择源码文件夹之外的一个自建的build文件夹; # DWITH_BOOST= 指定 boost 路径,可以直接指向源码文件夹下的boost文件夹; @@ -90,7 +85,7 @@ cmake .. -DWITH_BOOST=/data/mysql_source_code/mysql-8.0.39/boost \ # DWITH_FEDERATED_STORAGE_ENGINE=1 表示开启FEDERATED存储引擎 # CMAKE_INSTALL_PREFIX= 这个表示路径,默认是/usr/local/mysql,是各种配置的路径前缀PREFIX # DMYSQL_DATADIR: 表示MySQL默认的数据目录,选择build文件夹下的data文件 - +# 参考 https://dev.mysql.com/doc/refman/8.4/en/source-configuration-options.html make -j4 make install diff --git "a/docs/basic/13.MySQL\346\230\257\345\246\202\344\275\225\346\211\223\345\274\200\345\222\214\345\205\263\351\227\255\350\241\250\347\232\204.md" "b/docs/basic/13.MySQL\346\230\257\345\246\202\344\275\225\346\211\223\345\274\200\345\222\214\345\205\263\351\227\255\350\241\250\347\232\204.md" index 89f0ba1c0..3097c1b79 100644 --- "a/docs/basic/13.MySQL\346\230\257\345\246\202\344\275\225\346\211\223\345\274\200\345\222\214\345\205\263\351\227\255\350\241\250\347\232\204.md" +++ "b/docs/basic/13.MySQL\346\230\257\345\246\202\344\275\225\346\211\223\345\274\200\345\222\214\345\205\263\351\227\255\350\241\250\347\232\204.md" @@ -1,18 +1,26 @@ # MySQL是如何打开和关闭表? +当执行`mysqladmin status`命令时,应该看到类似以下的内容: +```shell +Uptime: 426 Running threads: 1 Questions: 11082 +Reloads: 1 Open tables: 12 +``` + +MySQL是多线程的,因此可能有许多客户端同时对一个给定表发出查询。为了最大程度地减少同一张表上具有不同状态的多个客户端会话的问题,每个并发会话会独立打开该表。这会额外消耗更高内存,但通常会提高性能。 https://dev.mysql.com/doc/refman/8.4/en/table-cache.html +MySQL通过TABLE对象进行表的读写等操作,对于构建TABLE对象所需的表定义相关信息,MySQL会通过Dictionary_client与DD模块进行交互。 在打开一个表准备访问数据的时候,通常要先打开其数据字典,其中包含了字段信息,索引信息,默认值,字符集,统计数据,自增字段,自增锁等等信息。 -其中某些在MySQL层,有些在Innodb层(比如统计信息),又比如字段类型在MySQL层和Innodb层的表示是不同的,实际上这包含3层信息: +其中有些在MySQL层,有些在Innodb层(比如统计信息),又比如字段类型在MySQL层和Innodb层的表示是不同的,实际上这包含3层信息: -- **table instance**:MySQL层相关的字典信息,每个会话独占由table share生成而来。在语句结束的时候释放,这里的释放并不是真正的释放,可能是缓存,其缓存的个数和table_open_cache和table_open_cache_instances有关,其缓存位置约定为table cache,内部为TABLE。 +- **table instance**:MySQL层相关的字典信息,每个会话独占由`table share`生成而来。在语句结束的时候释放,这里的释放并不是真正的释放,可能是缓存,其缓存的个数和table_open_cache和table_open_cache_instances有关,其缓存位置约定为`table cache`,内部为TABLE。 - **table share**:MySQL层相关字典的信息,整个数据库只有一份,每个表都包含一个。5.7来自FRM文件,8.0则来自新的SDI缓存相关字典信息。当没有table cache引用的时候会考虑释放,但是同前面一样,释放可能是缓存,缓存的个数和`table_definition_cache`有关,其缓存位置约定为`table def cache`,内部为TABLE_SHARED。 diff --git "a/docs/basic/14.MySQL\346\225\260\346\215\256\345\255\227\345\205\270.md" "b/docs/basic/14.MySQL\346\225\260\346\215\256\345\255\227\345\205\270.md" index 14532cc6e..6d2896e21 100644 --- "a/docs/basic/14.MySQL\346\225\260\346\215\256\345\255\227\345\205\270.md" +++ "b/docs/basic/14.MySQL\346\225\260\346\215\256\345\255\227\345\205\270.md" @@ -6,8 +6,13 @@ - 元数据信息包括:数据库的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统计类信息等。 + +MySQL的元数据存在很多种类,包括 Schema,Table,Index,View,Tablespace 等等,描述了数据库中库,表,索引,视图,文件等属性,在 MySQL 中也被称为数据字典,每种资源都被抽象为 DD object,每个 DD object 有一个 Object_id 标识,MySQL 内部实现也是以简洁的多态和模版方式实现的。 + ## 元数据物理存储 + + 在 `MySQL 8.0` 之前,`Server` 层和存储引擎层会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。字典数据存储在元数据文件、非事务性表和特定于存储引擎的数据字典中。典型的数据: - .frm files: Table metadata files 。 Server层的DDL语句 @@ -24,11 +29,11 @@ ## 数据字典 -数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。但是,`MySQL` 支持通过 `INFORMATION_SCHEMA` 模式和 `SHOW` 命令来访问存储在数据字典表中的数据。 +数据字典表是受保护的,只有在MySQL的debug版本中才能访问。但是`MySQL`支持通过`INFORMATION_SCHEMA`模式和`SHOW`命令提供访问存储在数据字典表中的数据。 MySQL 系统表在 `MySQL 8.0` 中仍然存在,可以通过 `SHOW TABLES` 语句在 `MySQL` 系统数据库来查看。 -`MySQL` 数据字典表和系统表的区别在于,数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。 +`MySQL` 数据字典表和系统表的区别在于。数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。 数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。编译 debug 版本参考: Compiling MySQL for Debugging @@ -46,9 +51,6 @@ mysql> SET SESSION debug='+d,skip_dd_table_access_check'; mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System'; - - - # 用于 SHOW CREATE TABLE 查看数据字典表定义 mysql> SHOW CREATE TABLE mysql.catalogs ```