一、锁
工作中需要排查锁的争用和等待以及死锁
隔离级别
影响数据的读取,默认级别RR
select @@tx_isolation 查看隔离级别
mysql 要求在同一窗口中 若没有修改,则数据不变
保证数据库的可重复度防止幻读
- RU 读未提交,可脏读,一般不允许出现
- RC 读已提交,可能出现幻读,可以防止脏读
- RR 可重复读,功能是防止幻读现象,利用的是undo的快照技术+GAP(间隙锁)+nextlock(下键锁)
- SR 可串行化,可以防止死锁,但并发事务性能较差
二、innoDB核心参数
双一标准:
这是一个安全参数,5.6以上版本默认开启,作用是控制着redo buffer 刷写策略
- 1 每次提交事务,会立即刷写redo到磁盘
(redo buffer --每次事务--os buffer---磁盘) - 0 事务提交时,不做日志写入操作,每秒写入,宕机时,丢失1秒数据
- 2 每次事务提交引起写入文件系统缓存
(redo buffer---每次事务--os buffer---每秒--磁盘)
innodb_flush_method=(o_DIRECT,fdatasyns)
作用是控制着redo buffer
安全模式
最大安全模式:
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 4G内存比例
存放事务的空间,可提高并发数
innodb_log_files_in_group=3-4组
innodb_buffer_pool 默认128M
一般调成物理内存的50-80% 系统中只有mysql的实例情况下
MySQL分支
Oracle: MySQL官方版
红帽:mariaDB
Percona:perconaDB