MySQL排错指南的笔记1
InnoDB使用简写的S代表读锁/共享锁,使用X代表写锁/排它锁
mysql中的4种锁:表锁 行锁 页锁 元数据锁
1 表锁(p52-54)
当设置表锁的时候,这个表都会被锁住。如果设置读锁那么并发访问时写时禁止的,如果设置的时写锁,那么读和写都是禁止的。MyISAM支持表锁
当出现缓慢的时候可以使用 show processlist
mysql> show processlist\G
*************************** 1. row ***************************
Id: 25 # 连接线程的ID
User: root # 用户
Host: localhost:57782 #
db: test # database name
Command: Sleep # 线程中当前执行的命令
Time: 14606 # 消耗的时间
State: # 线程的内部状态
Info: NULL # 当前线程正在进行的工作,NULL 表示线程正在休眠,等待下一条用户命令,如果展示的
# 查询命令表明该语句正在执行
*************************** 2. row ***************************
Id: 26
User: root
Host: localhost:57783
db: test
Command: Sleep
Time: 14585
State:
Info: NULL
*************************** 3. row ***************************
Id: 45
User: ODBC
Host: localhost:61723
db: test
Command: Sleep
Time: 57
State:
Info: NULL
*************************** 4. row ***************************
Id: 46
User: root
Host: localhost:61744
db: NULL
Command: Query
Time: 0
State: init
Info: show processlist
4 rows in set (0.00 sec)
2 行锁(p54-59)
会锁住一行,可以修改表中没有被行锁锁住的行。行锁在存储引擎的级别进行设置,InnoDB时使用行锁的主要引擎
通常行锁锁住会等待 innodb_lock_wait_timeout(默认值时50s)的时间,然后报错
当出现错误后我们可以查看 information_schema.processlist(mysql默认自带的表)该表与show processlist展示的信息相同,只是将信息存在了表中
可以使用 show engine innodb status(InnoDB监控器的一部分)