Mysql常见性能问题分析和优化
1. 术语解释
- 死锁: 两个或两个以上的进程在执行过程中, 因争夺资源而造成的一种互相等待的现象
- 共享锁(S): 又叫做读锁, 属于一种显示枷锁, 所有事物只能进行读操作而不能进行写操作, 加上共享锁之后在事物结束之前其他事务只能再加共享锁, 除此之外其他任何类型的锁都不能再加了
例: SELECT ‘id’ FROM user WHERE id in (1) LOCK IN SHARE MODE - 排他锁(X): 又叫做写锁, 若某个事务对某一行加上了排他锁, 只能对这个事务进行读写, 在此事务结束之前, 其他任何事务不能对其加任何锁, 其他进程可以进行读取, 不能进行写操作, 需等其释放
UPDATE, DELETE, INSERT都会涉及到记录行加上排他锁, 属于一种隐式加锁, SELECT语句默认不会加任何锁类型
例: SELECT ‘id’ FROM user WHERE id =1 FOR UPDATE - 意向共享锁(IS): 事务打算给数据行加行共享锁, 事务在给一个数据行加共享锁前必须先取得该表的IS锁
- 意向排他锁(IX): 事务打算给数据行加行排他锁, 事务在给一个数据行加排他锁前必须先取得该表的IX锁
- 行级锁: 他不会直接锁记录, 而是锁索引, 索引分为主键索引和非主键索引两种
如果一条SQL语句操作(UPDATE, DELETE)了主索引, Mysql就会锁定其主键索引, 如果操作了非主键索引, 就会先锁定该非主键索引, 再锁定相关的主键索引