ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## InnoDB * MySQL5.5.8及以后的版本默认存储引擎 * Innodb 使用表空间进行数据存储 ``` innodb_file_per_table 参数 ON:独立表空间:tablename .ibd OFF:系统表空间: ibdataX ``` * 系统表和独立表空间要如何选择 > 比较: > > 系统表空间无法简单的收缩文件大小 > 独立表空间可以通过optimeize table命令收缩系统文件 > > 系统表空间会产生IO瓶颈 > 独立表空间可以同时向多个文件刷新数据 > 建议: > 对InnoDB使用独立表空间(5.6之后是默认配置) ## 把原来存在于系统表空间中的表转移到独立表空间的方法 1. 使用mysqldump导出所有数据库表数据. 2. 停止MySQL服务,修改参数,并删除InnoDB相关文件. 3. 重启MySQL服务,重建Innodb系统表空间. 4. 重新导入数据. ## innodb存储引擎特性 1. innodb是一种事务性存储引擎; 2. 完全支持事务的ACID特性; 3. 使用Redo log 和 Undo log这两种日志完成事务的特性; 4. Redo log完成事务的持久性; 5. Undo log是完成回滚操作和mvcc多版本并发控制; 6. redo log存储的是已提交的事务,而undo log存储的是未提交的事务; 7. innodb支持行级锁; 8. 行级锁可以做大程度的支持并发; 9. 行级锁是由存储引擎层实现的(MySQL完全不了解存储引擎内部完成方式); ## 查看redo log缓冲区 每一秒刷新到磁盘上. ``` mysql> show variables like 'innodb_log_buffer_size'; +------------------------+----------+ | Variable_name | Value | +------------------------+----------+ | innodb_log_buffer_size | 16777216 | +------------------------+----------+ 1 row in set (0.00 sec) ``` ## 什么是锁 1. 锁对主要作用是管理共享资源的并发访问; 2. 锁用于实现事务的隔离性(redo log和undo log完成了原子性,持久性,一致性); ## 锁的粒度 1. 表级锁(开销小,并发低); 2. 行级锁(开销大,并发高); ## 阻塞 1. 两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象; 2. 阻塞是为了确保事务可以并发且正常运行; 3. 过多的阻塞会使得连接堆积,占用大量的请求资源,使得系统性能大幅下降; ## 死锁 1. 两个或两个以上的事务在执行过程中,互相占用了对方等待的资源而产生的资源; 2. 因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程; ## Innodb状态检查 ``` show engine innodb status\G ``` #### 适用场景 * Innodb适合于大多数的OLTP应用 * 5.7版本之后支持全文索引和空间函数