MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc

上传人:b****1 文档编号:13161739 上传时间:2022-10-07 格式:DOC 页数:17 大小:362.50KB
下载 相关 举报
MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc_第1页
第1页 / 共17页
MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc_第2页
第2页 / 共17页
MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc_第3页
第3页 / 共17页
MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc_第4页
第4页 / 共17页
MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc

《MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc(17页珍藏版)》请在冰豆网上搜索。

MySQL技术内幕InnoDB存储引擎读书笔记Word文档下载推荐.doc

没有找到配置文件MySQL会按照编译时的参数设置启动实例

MySQL体系结构及主要存储引擎

主要构成:

连接池组件管理服务工具SQL接口查询分析器优化器缓冲插入式存储引擎物理存储文件

各存储引擎特点

InnoDB后续会有详细介绍此处略过

MyISAM只缓存其索引文件数据库文件缓存由OS本身完成包括MYD和MYI文件通过myisampack解压缩数据文件(霍夫曼编码静态算法压缩)压缩后只读

NDB集群存储引擎sharenothing数据全部放入内存主键查找速度很快JOIN操作在MySQL数据库层完成而非存储引擎复杂的连接操作需要巨大的网络开销

Memory表数据放入内存易失采用哈希索引只支持表锁并发性能较差不支持TEXT和BLOB类型以定长空间存varchar

注:

MysQL使用Memory存储引擎作为临时表来存放SELECT中间结果集

若结果集超过Memory存储引擎表容量设置或含有TEXT或BLOB类型将其转换为MyISAM存储引擎表存放到磁盘

又因MyISAM不缓存数据文件因此这时产生的临时表的性能对于查询会有损失

Archive只支持INSERT和SELECT可使用zlib算法进行压缩存储

连接方式

TCP/IP基于网络的连接连接进行权限检查

命名管道和共享内存

Windows系统同一服务器上的两进程可通过命名管道连接需在配置文件中启用--enable-named-pipe选项

使用共享内存方式需在f中添加--shared-memory同时客户端使用--protocol=memory选项

Unix套接字客户端与服务端位于同一服务器时才可使用在f中指定-socket=/tmp/mysql.sock连接时指定./mysql-S/tmp/mysql.sock

主要内容

InnoDB存储引擎体系结构和工作原理包括了InnoDB表的存储结构数据页结构分区表种类索引及算法锁事务等内容

后台线程内存池

showengineinnodbstatus\G查看运行情况

后台线程默认7个4个IOthread1个masterthread1个锁监控线程1个错误监控线程

innodb_file_io_threadsinnodb_read_io_threadsinnodb_write_io_threads

InnoDB工作方式将数据文件按页(每页16K)读入InnoDBbufferpool然后按最近最少使用算法(LRU)保留缓存数据通过一定频率将脏页刷新到文件

缓存的数据页类型包括索引页数据页undo页insertbuffer自适应哈希索引InnoDB锁信息以及数据字典信息等

masterthread优先级最高由主循环(loop)backgroundloopflushloop和suspendloop组成

insertbuffer

doublewrite

自适应哈希索引

InnoDB会监控表上索引的查找根据访问频率和模式为某些页建立哈希索引提高查询性能由InnoDB自动实现通过缓冲池B树构建数据库自优化

哈希一般情况下查找时间复杂度为O

(1)常用于JOIN操作但只能用于等值查询

启动关闭和恢复

innodb_fast_shutdown影响InnoDB表关闭

0MySQL关闭时完成所有的fullpurge和mergeinsertbuffer操作

1默认值只将缓冲池内的一些脏页刷新至磁盘

2将日志都写入日志文件不会有任何事务丢失但下次启动时会进行recovery

innodb_force_recovery影响InnoDB的恢复状况默认为0表示需恢复时执行所有的恢复操作

若不能有效恢复则MySQL有可能宕机错误信息会被写入错误日志文件还有1~6等值

MySQL中的文件包括

参数文件

日志文件(错误日志二进制日志慢查日志及查询日志等)

socket文件(UNIX本地连接mysql)

pid文件(mysql的进程ID参数pid_file)

表结构文件(frm文件)

存储引擎文件

日志文件

慢查日志记录的为大于long_query_time的慢查记录log_queries_not_using_indexes

查询日志涉及参数LOGGENERAL_LOGGENERAL_LOG_FILE

二进制日志相关参数——max_binlog_size/binlog_cache_size/sync_binlog/binlog-do-db/binlog-ingore-db/log-slave-update和binlog_format

事务型存储引擎会将所有未提交的二进制日志记录到一个缓存(大小由binlog_cache_size默认32KB基于SESSION)

事务提交后将其中log写入二进制日志文件(可通过SHOWGLOBALSTATUS查看binlog_cache(使用缓冲写二进制的次数)和binlog_cache_disk_use(使用临时文件写二进制的次数)状况判读binlog_cache_size合理与否)

InnoDB默认事务隔离级别REPEATABLEREAD

binlog_format三种方式STATEMENTROW和MIXED

mysqlbinlog--start-datetime='

'

--base64-output=decode-rows-vmysql-bin.000001>

binlog.log

InnoDB存储引擎文件

1.表空间文件默认表空间文件为ibdata1文件innodb_data_file_path存储数据

innodb_file_per_table可以按表分别产生一个表空间.db文件仅存该表的数据索引和插入缓冲等信息

其他信息如undo信息系统事务信息doublewritebuffer等还是存放在默认表空间(ibdata1或表空间组)里

2.重做日志文件ib_logfile1和ib_logfile2记录了InnoDB存储引擎的事务日志至少一个redologgroup大小一致并以循环方式使用类似与Oracle

四个参数innodb_log_file_size/innodb_log_files_in_group/innodb_mirrored_log_groups和innodb_log_group_home_dir

(修改innodb_log_file_size必须删除原有重做日志文件ib_logfile然后重启MySQL重新生产否则会报错)

重做日志记录的关于每页(Page)的更改的物理情况(结构如下)

SpaceidPageNoOpCodeData

且在事务的过程中依然不断记录重做日志但是二进制日志是在事务提交时记录日志的

Innodb_flush_log_at_trx_commit影响重做日志刷新至磁盘的时机

推荐一篇文章

未明确指定主键先判断是否有非空唯一索引(UNIQUENOTNULL)若有则将其默认为主键否则创建一个6字节的ROWID

逻辑存储结构tablespace->

segment->

extent->

page

行记录格式

Compact行格式Redundant行格式Compressed与Dynamic行记录格式

CompactRedundant对于varchar中NULL在列记录中只占NULL标志位不占实际存储空间

但对于char中的NULL两者的处理是不同的Compact格式char中NULL同样不占存储空间而Redundant下占存储空间

行记录中还包括两个隐藏列事务ID列(6字节)和回滚指针列(7字节)若没有定义的PrimaryKey会增加一个6字节的RowID列

InnoDB在页内部是通过一种链表方式串联各个行记录的。

InnoDB可以将一条记录中的某些数据存储在真正的数据页面之外即作为行溢出数据并将行溢出内容放入UncompressBLOBPage

此做法保证了每页上至少有两行记录否则失去了B+树的意义变成链表了

数据页(B-treenode)结构

InnoDB数据页由七部分组成

FileHeader:

文件头(38bytes)

PageHeader:

页头(56bytes)

Infimum+SupremumRecords:

页中上/下界记录

UsersRecords:

用户记录,即行记录

FreeSpace:

空闲空间

PageDirectory:

叶目录

FileTrailer:

文件结尾信息

PageDirectory存放记录相对位置

稀疏目录sparsedirectory即一个槽slot可能属于多个记录最少属于4条记录最多属于8条记录

Slot中记录按键顺序存放利用二叉查找迅速找到记录指针二叉查找结果只是一个粗略结果

InnoDB必须通过recorderheader中的next_record来继续查找相关记录

同时slot也解释了recorderheader中n_owned值的含义

即还有多少记录需要查找因为这些记录并不包括在slots中

B+数索引本身并不能找到具体的一条记录只能找到该记录所在的页数据库把页载入内存然后通过PageDirectory再进行二叉查找

FileTrailer只有一个FIL_PAGE_END_LSN8个字节前4个字节代表该页的checksum值

最后4个字节和FileHeader中的FIL_PAGE_LSN相同保证页完整性

DBMS数据完整性

实体完整性(保证有一个主键)

域完整性(保证数据的值满足特定的条件)

参照完整性(保证两表之间的关系)

INFORMATION_SCHEMATABLE_CONSTRAINTSREFERENTIAL_CONSTRAINTS表查看数据库约束信息

对于数据的约束可通过选择合适的类型外键触发器DEFAULT等进行

默认情况下MySQL允许非法或不正确数据的插入或更新或内部将其转为一个合法的值

若要限

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1