【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%,单位都是字节)
posted @ 2020-09-10 23:35  鄧萌  阅读(130)  评论(0)    收藏  举报