目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

锁定的意思,提供的是 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 来解决。

1# 查看事务隔离级别
2mysql> select @@tx_isolation;
3+-----------------+
4| @@tx_isolation  |
5+-----------------+
6| REPEATABLE-READ |
7+-----------------+
81 row in set, 1 warning (0.00 sec)
9

InnoDB 核心参数

双一标准之一

1innodb_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 实例)


作者:Soulboy