数据库事物
- 数据库事物的四大特性?
1 原子性 2 隔离性 3 持久性 4 一致性 - 数据库隔离级别?
1 read-uncommitted 2 read-committed 3 repeatable-read 4 serializable
MySQL的innodb引擎默认的 repeatable-read - 各种隔离级别对应出现的问题?
1 read-uncommitted
会出现:脏读,不可重复读,幻读
2 read-committed
会出现:不可重复读,幻读
3 repeatable-read
mvcc 和 read-view 解决了幻读
4 serializable
强一致性 - 什么叫mvcc? mvcc有什么缺点?
一行记录可能不止一个快照,这种技术称为多版本控制。mvcc也叫做非一致性读,也就是分:读快照和读当前。
缺点:因为mvcc读取的数据是快照的数据,并不是真是的数据,因此在对于特别敏感的数据可能会有问题。
数据库锁
- MySQL的innodb引擎和myisam引擎有什么区别?
1 innodb引擎是采用行锁,myisam采用的是表锁,所有innodb可能会发生死锁,myisam不会发生死锁。
2 innodb是支持事物的,myisam是不支持事物的 - MySQL有哪些锁,都有哪些区别?
1 类别来分: 共享锁,互斥锁
select * from table lock in share mode 就是一个共享锁的例子
delete from table
insert into table
update table set
select * from table for update 这些都是采用的互斥锁
2 从粒度来分:
表锁,行锁,间隙锁
表锁:一次锁上一张表,并发能力比较弱,不会产生死锁。
页锁:锁一页,并发在行锁和表锁之间,会产生死锁
行锁:一次锁一行,并发能力高,会产生死锁。
间隙锁:锁在行与行之间,只要是为了解决幻读。
还有一个需要注意的是:MySQL的加锁都是针对索引的,如果没有索引就会锁整张表。 - MySQL死锁怎么产生?如何解决死锁?
数据库索引
- MySQL innodb索引?
索引分为:聚簇索引和非聚簇索引
聚簇索引的特点是:叶子节点保存的就是数据
非聚簇索引的特点是:叶子节点保存的主键(聚簇索引的位置),然后通过聚簇索引找值 - MySQL索引的类型?
1 主键索引
2 唯一性索引
3 普通索引
4 联合索引
- MySQL联合索引使用是有什么规则?如果对A,B,C做索引,那么SQL语句写成where C=X and B=X and A=X,是否还能用到该索引?如果SQL语句写成where A=X and B>X and C=X是否还能用到该索引?
联合索引采用的是最左匹配原则。
mysql 可以帮你优化所以可以使用到索引
可以使用到索引
索引的规则是:A可以 B不可以 C不可以 AB AC ABC可以 BC不可以
数据库其他相关
- MySQL log的几种日志录入格式以及区别?
1 undo log 主要是为了做回滚使用的,记录的是操作的相反。
2 redo log 主要是记录的数据的操作,用来做事物的。
3 bin log 主要是用来做主从同步的。 - MySQL如何做主从同步?
可以使用MySQL的binlog做主从同步,参考文章:主从同步 - MySQL主从复制延迟如何产生?如何解决?
MySQL的主从复制特点:异步,单线程
常见的主从延迟原因:
Master 上,SQL 执行速度慢:优化索引,提升索引区分度
Master 上,批量 DML 操作:建议延迟至业务低峰期操作
Master 上,大事务,耗时长:优化业务,拆分为小事务
Master 上,多线程写入频繁, Slave 单线程速度跟不上:提升 Slave 硬件性能、借助中间件,改善主从复制的单线程模式
整体上 2 个策略,齐头并进:
内部解决:减弱主从复制的延迟
外部解决:缓存层,在前端访问和数据库之间,添加缓存,优先从缓存读取,减弱数据库的并发压力,Slave 只作为数据备份,不分担访问流量;
减弱主从延迟,采取措施:
提升 SQL 执行速度:优化索引
优化业务逻辑:通过读取操作,业务逻辑上,减少不必要的 DML
细化事务:将大事务拆为小事务,不必要的地方移除事务
减少批量操作:批量 DML 的耗时较多,减少不必要的批量 DML
网友评论