孝感网站制作公司,福建建设厅网站官网,wordpress 关闭,怎么添加网站背景音乐目录
1.系统表空间 ibdata
2.通用表空间 .ibd
3.独立表空间
4.Undo 表空间
5.临时表空间
6.Redo Log File 1.系统表空间 ibdata
系统表空间由参数innodb_data_file_path定义路径、初始化大小、自动扩展策略
如#xff1a; innodb_data_file_path/dayta/mysql/ibdata1:…目录
1.系统表空间 ibdata
2.通用表空间 .ibd
3.独立表空间
4.Undo 表空间
5.临时表空间
6.Redo Log File 1.系统表空间 ibdata
系统表空间由参数innodb_data_file_path定义路径、初始化大小、自动扩展策略
如 innodb_data_file_path/dayta/mysql/ibdata1:100M:autoextend
存放
Change Buffer(insert buffer)
Lock System
Data Dictionary
Foreign key constaint system tables
User data (innodb_file_per_table0不使用独立表空间的时候用户数据会存储共享表空 间中有可能会存放在系统表空间。)
2.通用表空间 .ibd
类似于Oracle的表空间概念多个Table放在同一个表空间中。
mysql create tablespace tbs add datafile tbs.ibd;
Query OK, 0 rows affected (0.01 sec)mysql select * from information_schema.innodb_tablespaces;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SPACE | NAME | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 4294967294 | mysql | 18432 | Any | 16384 | 0 | General | 4096 | 27262976 | 27262976 | 0 | 8.0.39 | 1 | N | normal |
| 4294967293 | innodb_temporary | 4096 | Compact or Redundant | 16384 | 0 | System | 4096 | 12582912 | 12582912 | 0 | 8.0.39 | 1 | N | normal |
| 4294967279 | innodb_undo_001 | 0 | Undo | 16384 | 0 | Undo | 4096 | 16777216 | 16777216 | 0 | 8.0.39 | 1 | N | active |
| 4294967278 | innodb_undo_002 | 0 | Undo | 16384 | 0 | Undo | 4096 | 16777216 | 16777216 | 0 | 8.0.39 | 1 | N | active |
| 1 | sys/sys_config | 16417 | Dynamic | 16384 | 0 | Single | 4096 | 114688 | 114688 | 0 | 8.0.39 | 1 | N | normal |
| 2 | tbs | 18432 | Any | 16384 | 0 | General | 4096 | 114688 | 114688 | 0 | 8.0.39 | 1 | N | normal |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6 rows in set (0.00 sec)mysql create table t2 (id int) tablespace tbs;
Query OK, 0 rows affected (0.01 sec)
mysql show create table t2;
----------------------------------------------------------------------------------------------------------------------------------------------------
| Table | Create Table |
----------------------------------------------------------------------------------------------------------------------------------------------------
| t2 | CREATE TABLE t2 (id int DEFAULT NULL
) /*!50100 TABLESPACE tbs */ ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci |
----------------------------------------------------------------------------------------------------------------------------------------------------
1 row in set (0.01 sec)3.独立表空间
每个table都有各自的.ibd文件
删除大表的一个技巧(释放文件名)
为数据文件建立硬链接然后删除原数据文件名待到空闲时间再清理链接的文件数据
innodb_file_per_table
为1时默认启用独立表空间
为0时启用共享表空间用户数据存储在系统表空间ibdata*文件中或者自定义的通用表空间general tablespace中。
为1时启用独立表空间每个表有各自的.ibd文件
4.Undo 表空间
实例初始化时默认创建两个Undo表空间最大支持127个Undo表空间。
innodb_rollback_segments于定义每个undo表空间中的回滚段rollback segment的 数量默认是128个
一个回滚段rollback segment默认最大只有128 个实例初始化后默认2个undo表空间128*2个undo tbs 256个并发事务。所以高并发需求 时需要注意增加undo表空间。
全局Undo表空间
mysql show global variables like %undo%;
--------------------------------------
| Variable_name | Value |
--------------------------------------
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_directory | ./ |
| innodb_undo_log_encrypt | OFF |
| innodb_undo_log_truncate | ON |
| innodb_undo_tablespaces | 2 |
--------------------------------------
5 rows in set (0.00 sec)查看当前的Undo表空间
mysql select * from information_schema.innodb_tablespaces where space_typeundo;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SPACE | NAME | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 4294967279 | innodb_undo_001 | 0 | Undo | 16384 | 0 | Undo | 4096 | 16777216 | 16777216 | 0 | 8.0.39 | 1 | N | active |
| 4294967278 | innodb_undo_002 | 0 | Undo | 16384 | 0 | Undo | 4096 | 16777216 | 16777216 | 0 | 8.0.39 | 1 | N | active |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 rows in set (0.01 sec)查看Undo表空间数据文件
mysql select file_id,file_type,tablespace_name,file_name,status from files;
------------------------------------------------------------------------
| FILE_ID | FILE_TYPE | TABLESPACE_NAME | FILE_NAME | STATUS |
------------------------------------------------------------------------
| 4294967294 | TABLESPACE | mysql | ./mysql.ibd | NORMAL |
| 0 | TABLESPACE | innodb_system | ./ibdata1 | NORMAL |
| 4294967293 | TEMPORARY | innodb_temporary | ./ibtmp1 | NORMAL |
| 4294967279 | UNDO LOG | innodb_undo_001 | ./undo_001 | NORMAL |
| 4294967278 | UNDO LOG | innodb_undo_002 | ./undo_002 | NORMAL |
| 1 | TABLESPACE | sys/sys_config | ./sys/sys_config.ibd | NORMAL |
| 2 | TABLESPACE | tbs | ./tbs.ibd | NORMAL |
| 3 | TABLESPACE | test/t | ./test/t.ibd | NORMAL |
------------------------------------------------------------------------
8 rows in set (0.00 sec)8.0.14后可以在线手动创建新的Undo表空间
create undo tablespace undo_name add datafile undo_name.ibu;
删除Undo表空间
--首先设置Undo为inactive
alter undo tablespace undo_name set inactive;--然后再删除
drop undo tablespace undo_name;
自动清理Undo表空间
innodb_undo_log_truncate 1 时会自动清理undo表空间
超过innodb_max_undo_log_size 时会触发
或者purge线程执行了innodb_purge_rseg_truncate_frequency() 128次
5.临时表空间
innodb_temp_data_file_path定义路径、大小等初始值12MB
实例关闭后临时表文件会被删除实例启动后临时表文件ibtmp1重新创建
用户自己的临时表放在#innodb_temp/*.ibtsession会话退出后临时段自动回收。 8.0以前 有个严重问题就是ibtmp1用户执行过程中产生大量临时存在ibtmp1
文件被撑爆后也无法回缩的。
改进后只有innodb内部线程自己生成的临时表才会放在ibtmp1文件里。
用户运行过程中产生的临时表都会放在innodb_temp目录中
innodb_temp_tablespaces_dir设置会话级用户临时表空间存储路径
会话级临时表空间初始共有10个会随着用户连接数及创建临时表的情况按需增加实例重 启后会删除这些文件。每个session最多分配两个临时表空间一个用于存储用户主动创建的临时表(create temporary table)另一个用于存储用户执行SQL过程中生成的内部(磁盘)临时表session断开后会话级用户临时表空间会直接释放不用再担心撑爆磁盘。
查看会话级临时表空间的使用情况
select * from information_schema.innodb_session_temp_tablespaces;查看全局临时表空间的情况 select * from files where tablespace_name like %temp%\G
创建session级别临时表通过实验来观察临时表的分配、查看及回收
mysql create temporary table k1 like bigints;
Query OK, 0 rows affected (0.04 sec)
mysql desc k1;
---------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
---------------------------------------------------------
| id | int | NO | PRI | NULL | auto_increment |
| dtl | varchar(200) | YES | | NULL | NULL |
---------------------------------------------------------
2 rows in set (0.02 sec)
mysql insert into k1 select * from bigints;
Query OK, 2621440 rows affected (25.30 sec)
Records: 2621440 Duplicates: 0 Warnings: 0
--换一个session查询
mysql select * from information_schema.innodb_temp_table_info;
--------------------------------------------
| TABLE_ID | NAME | N_COLS | SPACE |
--------------------------------------------
| 1089 | #sql4c_19_13 | 5 | 4294501264 |
--------------------------------------------
1 row in set (0.00 sec)
mysql select * from information_schema.innodb_session_temp_tablespaces;
----------------------------------------------------------------------
| ID | SPACE | PATH | SIZE | STATE | PURPOSE |
----------------------------------------------------------------------
| 13 | 4294501265 | ./#innodb_temp/temp_9.ibt | 98304 | ACTIVE | INTRINSI
| 29 | 4294501263 | ./#innodb_temp/temp_7.ibt | 134217728 | ACTIVE | USER
| 0 | 4294501257 | ./#innodb_temp/temp_1.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501258 | ./#innodb_temp/temp_2.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501259 | ./#innodb_temp/temp_3.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501260 | ./#innodb_temp/temp_4.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501261 | ./#innodb_temp/temp_5.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501262 | ./#innodb_temp/temp_6.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501264 | ./#innodb_temp/temp_8.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501266 | ./#innodb_temp/temp_10.ibt | 81920 | INACTIVE | NONE
----------------------------------------------------------------------
10 rows in set (0.00 sec)
[17:34:49] rootms85:#innodb_temp # ll -h
total 129M
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_10.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_1.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_2.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_3.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_4.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_5.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_6.ibt
-rw-r----- 1 mysql mysql 128M Jul 7 17:35 temp_7.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:31 temp_8.ibt
-rw-r----- 1 mysql mysql 96K Jul 7 17:23 temp_9.ibt
--断开前一个session
mysql exit;
Bye
--再次查询发现临时表已经被释放
mysql select * from information_schema.innodb_temp_table_info;
Empty set (0.00 sec)
mysql select * from information_schema.innodb_session_temp_tablespaces;
----------------------------------------------------------------------
| ID | SPACE | PATH | SIZE | STATE | PURPOSE |
----------------------------------------------------------------------
| 12 | 4294501266 | ./#innodb_temp/temp_10.ibt | 81920 | ACTIVE | INTRINSIC
| 13 | 4294501265 | ./#innodb_temp/temp_9.ibt | 98304 | ACTIVE | INTRINSIC
| 0 | 4294501257 | ./#innodb_temp/temp_1.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501258 | ./#innodb_temp/temp_2.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501259 | ./#innodb_temp/temp_3.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501260 | ./#innodb_temp/temp_4.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501261 | ./#innodb_temp/temp_5.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501262 | ./#innodb_temp/temp_6.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501264 | ./#innodb_temp/temp_8.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501263 | ./#innodb_temp/temp_7.ibt | 81920 | INACTIVE | NONE |
----------------------------------------------------------------------
10 rows in set (0.00 sec
[17:36:08] rootms85:#innodb_temp # ll
total 336K
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_10.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_1.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_2.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_3.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_4.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_5.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_6.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:36 temp_7.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:31 temp_8.ibt
-rw-r----- 1 mysql mysql 96K Jul 7 17:23 temp_9.ibt
6.Redo Log File
从 MySQL 8.0.30 开始 innodb_redo_log_capacity系统变量控制 redo log 总的大小。
当 设置 参数 innodb_redo_log_capacity时 系统会忽略 innodb_log_files_in_group 和 innodb_log_file_size。否则这些设置用于计算 innodb_redo_log_capacity
设置 ( innodb_log_files_in_group* innodb_log_file_size innodb_redo_log_capacity)
redo 日志位置
redo log 文件存放的位置由参数 innodb_log_group_home_dir控制如果没有指定具体目录系统默认会将redo log存储到 data 目录的#innodb_redo目录。innodb_log_group_home_dir指定的文件夹下必须创建 #innodb_redo目录。
在 MySQL 8.0.30 版本中MySQL会生成32个 redo log 文件,每个文件的大小等于 1/32 * innodb_redo_log_capacityredo log 有两种:正在使用的和未被使用的分别使用 #ib_redoNN 和 #ib_redoNN_tmp其中NN是重做日志文件编号。
redo信息查看
mysql select * from performance_schema.innodb_redo_log_files;
------------------------------------------------------------------------------------------------
| FILE_ID | FILE_NAME | START_LSN | END_LSN | SIZE_IN_BYTES | IS_FULL | CONSUMER_LEVEL |
------------------------------------------------------------------------------------------------
| 7 | ./#innodb_redo/#ib_redo7 | 22931456 | 26206208 | 3276800 | 0 | 0 |
------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)日志块log block
在 InnoDB 存储引擎中redo log是以块为单位进行存储的每个块占 512 字节这称为redo log block。所以不管是log buffer中还是os buffer中以及redo log file on disk中都是这样以 512 字节的块存储的。
每个redo log block由 3 部分组成日志块头、日志块尾和日志主体。 日志块头包含 4 部分 log_block_hdr_no占 4 字节表示该日志块在redo log buffer中的位置 ID。 log_block_hdr_data_len占 2 字节表示该log block中已记录的log大小写满该log block时为0x200表示 512 字节。 log_block_first_rec_group占 2 字节表示该log block中第一个log的开始偏移位置。 log_block_checkpoint_no占 4 字节表示该log block写入检查点信息的位置。
关于log block块头的第三部分log_block_first_rec_group因为有时候一个数据页产生的日志量超出了一个日志块这是需要用多个日志块来记录该页的相关日志。例如某一数据页产生了 552 字节的日志量那么需要占用两个日志块第一个日志块占用 492 字节第二个日志块需要占用 60 个字节那么对于第二个日志块来说它的第一个log的开始位置就是73字节6012。如果该部分的值和log_block_hdr_data_len相等则说明该log block中没有新开始的日志块即表示该日志块用来延续前一个日志块。
日志尾只有一个部分log_block_trl_no该值和块头的log_block_hdr_no相等。