锁
锁
锁定的意思,提供的是ACID中,I方面的功能。需要配合UnDO+隔离级别一起来实现
InnoDB锁级别:行级锁
Next LOCK
GAP LOCK
悲观锁:
乐观锁:
需要排查锁的争用、锁等待、死锁
事务的隔离级别
影响到数据的读取,默认的级别是 RR模式.
transaction_isolation 隔离级别(参数)
负责的是,MVCC,读一致性问题
RU : 读未提交,可脏读,一般部议叙出现
RC : 读已提交,可能出现幻读,可以防止脏读.
RR : 可重复读,功能是防止"幻读"现象 ,利用的是undo的快照技术+GAP(间隙锁)+NextLock(下键锁)
SR : 可串行化,可以防止死锁,但是并发事务性能较差
RR级别:解决了 不可重复读问题+幻读的现象
不可重复读问题是由 undo的快照技术来解决。
幻读现象是由:MVCC+GAP+next-lock来解决。
# 查看事务隔离级别
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)
InnoDB核心参数
双一标准之一
innodb_flush_log_at_trx_commit=1
作用:
控制了redo buffer 刷写策略,是一个安全参数,是在5.6版本以上默认的参数
参数功能
1:每次事务提交,都会立即刷下redo到磁盘(redo buffer --每事务-->os buffer --每事务--磁盘)
0:表示当事务提交时,不立即做日志写入操作(redo buffer --每秒-->os buffer --每秒--磁盘)
2:每次事务提交引起写入文件系统缓存(redo buffer --每事务-->os buffer --每秒--磁盘)
Innodb_flush_method=(O_DIRECT, fdatasync)
作用:
控制了 redo buffer 和 data bufffer 刷写磁盘方式
最大安全模式:
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
最大性能模式:
innodb_flush_log_at_trx_commit=0
innodb_flush_method=fsync
关于redo设置
innodb_log_buffer_size= 128M 业务系统CPU压力有关
innodb_log_file_size=256 一般是log_buffer的1-2倍
innodb_log_files_in_group = 3 3-4组
innodb_buffer_pool_size
生产一般调整为物理内存的50%-80%左右(你的系统中只有一个mysql实例)