【INNODB存储引擎】下
1,锁介绍
锁定的意思,提供ACID中,I方面的功能,需要配合undo+隔离级别一起来实现
2,INNODB锁级别
行级锁
查询当前默认的行级锁的级别,默认是RR模式,可重复读级别
select @@tx_isolation;(或者用show variables like '%iso%';查询)
set global transaction_isolation='read-committed'; (设置行级锁的级别)
REPEATABLE-READ(可重复读级别:RR模式)
READ-COMMITTED (不可重复读级别:RC模式)
RR模式:在一个会话窗口当一边执行完一个事务后,也就是commit后,始终看到的都是第一次查询的结果不变值,除非断开连接刷新一下才会看到最新的数据

RC模式:在一个会话窗口,当一边执行完一个事务后也就是commit后,另外一边不需要刷新断开连接就会看到最新的数据

幻读:就是更改了一个不存的行,也不能说是不存在,当你查询数据的时候这个行还存在,但当你做更改的时候别人已经将这个数据行删除了,但是还能执行成功,这就是所谓的幻读
3,INNODB核心参数
innodb_flush_log_at_trx_commit
作用:控制了redo buffer刷写策略,适应安全参数,在5.6版本以上默认的参数
1:每次事务提交,都会立即刷下redo到磁盘(redo buffer ---每事务---OS buffer---每事务---磁盘)
0:表示当事务提交时,不立即做日志写入操作(redo buffer --每秒--OS buffer--每秒----磁盘)
2:每次事务提交引起写入文件系统缓存(redo buffer --每事务---OS buffer--每秒----磁盘)
#双一标准之一
innodb_flush_log_at_trx_commit=1
#查询当前的参数
select @@innodb_flush_log_at_trx_commit;
innodb_flush_method
作用:控制了redo buffer和 databuffer 刷写磁盘的策略
#####数据页buffer pool跳过文件系统OS buffer,redo buffer 不跳过文件系统
innodb_flush_method=O_DIRECT
#####数据页buffer pool和redo buffer 读写都要经过文件系统OS buffer,然后写入到磁
innodb_flush_method=fsync
#####数据页buffer pool 读写都要经过OS buffer,redo buffer不经过OS buffer
innodb_flush_method=O_DSYNC
#查询当前的参数
select @@innodb_flush_method;
#因为这个参数是只读的,所以只能写入到my.cnf文件中,然后重启数据库
innodb_flush_method=O_DIRECT
结合两个参数得出最大安全模式和最大性能模式
#最大安全模式
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
#最大性能模式
innodb_flush_log_at_trx_commit=0
innodb_flush_method=fsync
3.1关于redo设置
#存储redo buffer事务的,redo buffer越大支持的并发事务越多,推荐128M,和业务系统CPU压力有关
innodb_log_buffer_size=128M
#事务日志文件,推荐内存的1~2倍 innodb_log_file_size=256M
#一般是3-4组 innodb_log_files_in_group=3
3.2innodb_buffer_pool
#生成产中一般调整为物理内存的50%~80%,前提mysql只有一个实例,mysql的主buffer区
select @@innodb_buffer_pool_size;
innodb_buffer_pool_size=(物理内存的70%,单位都是字节)
学海无涯,不进则退,日积跬步,以至千里。本博客所写内容仅为个人在学习和研究过程中的一些心得体会及总结笔记,仅代表个人观点。一切以官方为准,版本差异请自行甄别

浙公网安备 33010602011771号