Mysql的MyISAM、Innodb、表锁、页锁、行锁、锁升级、MyISAM锁调度、启动选项(启动参数)和系统变量、状态变量

MyISAM存储引擎、Innodb存储引擎对比:
(1)MyISAM自增ID在文件中,Innodb在内存中;
(2)MyISAM不支持事务,Innodb支持事务;
(3)MyISAM支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

表锁:开销小,加锁快;锁定粒度大,锁冲突概率高,并发度低。行锁与之相反,页锁介于表锁和行锁之间。

页锁:多条记录共同加锁。

粒度:颗粒大小。

表锁不会死锁,行锁和页锁可能死锁。

BDB存储引擎支持表锁和页锁。

表级锁分读锁和写锁。加读锁时,阻塞写请求。加写锁时,阻塞读请求和写请求。

Mysql不支持锁升级。

锁升级:锁粒度增大。行锁到页锁或表锁,页锁到表锁。

MyISAM锁调度:
即使锁等待队列中,写锁后到,也会插入到读锁前。
MyISAM表不太适合有大量写操作和读操作的应用。因为大量的写操作会造成读操作很难获得读锁,可能一直阻塞。
调优方案:
启动参数或者连接命令或者写操作的SQL语句设置low-priority-updates小值。或者max_write_lock_count设置合理值,写锁达到阈值后降低写请求优先级。

启动选项(启动参数)和系统变量:
(1)启动选项是在程序启动时开发者传递的参数,而系统变量是影响服务器程序运行行为的变量,可以启动前,启动后设置。
(2)二者在启动前都可以文件设置。
(3)大部分的系统变量都可以被当作启动选项传入。
有些系统变量是在程序运行过程中自动生成的,是不可以当作启动选项来设置,比如auto_increment_offset、character_set_client。
有些启动选项也不是系统变量,比如defaults-file。
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 变量名];
SET [GLOBAL|SESSION] 变量名 = 值;

状态变量:
MySQL服务器程序中关于程序运行状态的变量。比如:Threads_connected表示当前有多少客户端与服务器建立了连接,Handler_update表示已经更新了多少行记录。
由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,开发者不能设置的。与系统变量类似,状态变量也有GLOBAL和SESSION两个作用范围的,所以查看状态变量的语句为:
SHOW [GLOBAL|SESSION] STATUS [LIKE 变量名];

猜你喜欢

转载自blog.csdn.net/haoranhaoshi/article/details/108449123
今日推荐