From 2464af285efdac1330d9a5f8af018aab03049214 Mon Sep 17 00:00:00 2001 From: fengzhao Date: Mon, 11 Nov 2024 10:40:03 +0800 Subject: [PATCH] update --- ...63\351\227\255\350\241\250\347\232\204.md" | 24 +++++++++---------- docs/basic/9.mysql_architecture.md | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) 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 a0d8bf9d9..89f0ba1c0 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,26 +1,26 @@ +# MySQL是如何打开和关闭表? -## 时区和时间戳 -MySQL是多线程软件,存在着多个客户端访问同一个表的并发场景, -MySQL实例进程在启动时会根据配置文件my.cnf中对这四个参数的设置进行自适应的调整生效,由于MySQL在设置这四个参数时存在严格的顺序和依赖关系。 -### 硬件时钟 +https://dev.mysql.com/doc/refman/8.4/en/table-cache.html -硬件时钟,又称实时时钟(Real Time Clock,RTC)或CMOS时钟,是独立的硬件设备(电池、电容元件等,一般是主板电池),保存的时间包括年、月、日、时、分、秒。 -2016年之后的UEFI固件还能保存时区和是否使用夏令时。 -**硬件时钟** 由BIOS电池供电,当计算机关机后,会继续运行,BIOS电池一般可使用几年,如果没电了,那BIOS中的数据会恢复出厂设置。 +在打开一个表准备访问数据的时候,通常要先打开其数据字典,其中包含了字段信息,索引信息,默认值,字符集,统计数据,自增字段,自增锁等等信息。 -在实际开发过程中,可能存在如下问题: +其中某些在MySQL层,有些在Innodb层(比如统计信息),又比如字段类型在MySQL层和Innodb层的表示是不同的,实际上这包含3层信息: -- MySQL 的安装规范中应该设置什么时区? -- JAVA 应用读取到的时间和北京时间差了14个小时,为什么?怎么解决? +- **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。 + + +- **dict table**:Innodb层的信息,这个数据库只有一份,每个表都包含一个,其信息来自Innodb的数据字典,主要是SYS_TABLES/SYS_COLUMN等几个表。当没有table cache引用的时候会考虑释放,同样释放可能是缓存,缓存的个数依旧和table_definition_cache有关,其缓存位置约定为dict table cache,内部为dict_table_t + -- 已经运行一段时间的业务,修改 MySQL 的时区会影响已经存储的时间类型数据吗? -- 迁移数据时会有导致时间类型数据时区错误的可能吗? diff --git a/docs/basic/9.mysql_architecture.md b/docs/basic/9.mysql_architecture.md index 6b52735c8..0594301ab 100644 --- a/docs/basic/9.mysql_architecture.md +++ b/docs/basic/9.mysql_architecture.md @@ -358,7 +358,7 @@ show global status; | 配置 | 含义 | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| max_connections | 配置参数:MySQL server 层面限制**总的所有账号一起**最大的可连接的数量,默认 151,最大值为 100000 | +| max_connections | 配置参数:`MySQL server`层面对于连接数的限制。**总的所有账号一起**最大的可连接的数量,默认 151,最大值为 100000 | | max_user_connections | 配置参数:代表允许单个用户的连接数最大值,即并发值。默认为 0,表示不限制 | | wait_timeout | 配置参数:即 MySQL 长连接(非交互式)的最大生命时长,默认是 8 小时,根据业务特点配置 | | interactive_timeout | 配置参数:即 MySQL 长连接长连接(交互式)的最大生命时长,默认是 8 小时,根据业务特点配置 |