MySQL技术内幕InnoDB存储引擎-读书笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL技术内幕InnoDB存储引擎-读书笔记
Powered by dyyx007
/ajf8/home
根据网友读书笔记整理原文参考
/space.php?uid=24060319&do=blog&id=145389
数据库与实例
数据库静态的概念文件的集合数据日志错误配置等文件信息
实例动态的概念进程线程和内存区域组成
单进程多线程
配置文件读取顺序
/etc/f
/etc/mysql/f
/usr/local/mysql/etc/f
/f
没有找到配置文件MySQL会按照编译时的参数设置启动实例
MySQL体系结构及主要存储引擎
主要构成:连接池组件管理服务工具SQL接口查询分析器优化器缓冲插入式存储引擎物理存储文件
各存储引擎特点
InnoDB 后续会有详细介绍此处略过
MyISAM 只缓存其索引文件数据库文件缓存由OS本身完成包括MYD和MYI文件通过myisampack解压缩数据文件(霍夫曼编码静态算法压缩) 压缩后只读
NDB 集群存储引擎share nothing 数据全部放入内存主键查找速度很快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表的存储结构数据页结构分区表种类索引及算法锁事务等内容
后台线程内存池
show engine innodb status\G 查看运行情况
后台线程默认7个4个IO thread 1个master thread 1个锁监控线程1个错误监控线程innodb_file_io_threads innodb_read_io_threads innodb_write_io_threads
InnoDB工作方式将数据文件按页(每页16K)读入InnoDB buffer pool 然后按最近最少使用算法(LRU)保留缓存数据通过一定频率将脏页刷新到文件
缓存的数据页类型包括索引页数据页undo页insert buffer 自适应哈希索引InnoDB锁信息以及数据字典信息等
master thread 优先级最高由主循环(loop) background loop flush loop和suspend loop组成
double write
自适应哈希索引
InnoDB会监控表上索引的查找根据访问频率和模式为某些页建立哈希索引提高查询性能由InnoDB自动实现通过缓冲池B树构建数据库自优化
哈希一般情况下查找时间复杂度为O(1) 常用于JOIN操作但只能用于等值查询
启动关闭和恢复
innodb_fast_shutdown影响InnoDB表关闭
0 MySQL关闭时完成所有的full purge和merge insert buffer操作
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 查询日志涉及参数LOG GENERAL_LOG GENERAL_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写入二进制日志文件(可通过SHOW GLOBAL STA TUS查看binlog_cache(使用缓冲写二进制的次数)和binlog_cache_disk_use(使用临时文件写二进制的次数)状况判读binlog_cache_size合理与否)
InnoDB默认事务隔离级别REPEATABLE READ
binlog_format三种方式STA TEMENT ROW和MIXED
mysqlbinlog --start-datetime='' --base64-output=decode-rows -v mysql-bin.000001 > binlog.log
InnoDB存储引擎文件
1.表空间文件默认表空间文件为ibdata1文件innodb_data_file_path 存储数据
innodb_file_per_table可以按表分别产生一个表空间.db文件仅存该表的数据索引和插入缓冲等信息
其他信息如undo信息系统事务信息double write buffer等还是存放在默认表空间(ibdata1或表空间组)里
2.重做日志文件ib_logfile1和ib_logfile2 记录了InnoDB存储引擎的事务日志至少一个redo log group 大小一致并以循环方式使用类似与Oracle
四个参数innodb_log_file_size /innodb_log_files_in_group /innodb_mirrored_log_groups和