MySQL死锁案例五(两条更新导致死锁)
测试环境:MySQL 5.7.26创建测试表: create table t5(id int); Query OK, 0 rows affected (0.01 sec)插入测试数据:mysql> insert into t5 values(1);
MySQL死锁案例四(删除和插入导致死锁)
测试环境:MySQL 5.7.26创建测试表: mysql> create table t4(id int,name varchar(10),primary key(id),unique key(name)); Query OK, 0 rows affected 
MySQL死锁案例三(事务提交导致死锁)
测试环境:MySQL 5.7.26创建测试表: mysql> create table t3(id int not null default '0',primary key(id)); Query OK, 0 rows affected
MySQL死锁案例二(自增列导致死锁)
测试环境:MySQL 5.7.26创建测试表:create table t2(id int auto_increment,status int default null,primary key(id),unique key(status)); Query OK, 0 rows&
MySQL死锁案例一(回滚导致死锁)
测试环境:MySQL 5.7.26创建测试表:create table t1 (id int not null,name int,primary key(id),unique key(name));死锁模拟过程如下:会话1rollback之后会话2和3出现死锁,innodb选择kill掉会话3并抛出:ERRO
MySQL索引之cardinality
查看一个表的索引:mysql> show index from rank_item; +-----------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+----
Innodb关键特性之启动、关闭和恢复
参数innodb_fast_shutdown影响着表的存储引擎为Innodb的行为,该参数可以取值为0、1、2,默认值为1,支持全动态局设置。设置为1:关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘。设置为0:会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度也是最慢的。
Innodb关键特性之刷新邻接页
1、工作原理 当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。 1、在写入次数基本不增加的情况下,增加了写入的量; 2、加速了脏页的回收; 3、充分利用double write每次1
Innodb关键特性之异步IO(AIO)
1、关于AIO与SIO 为了提高磁盘操作性能,当前的数据库系统都采用异步IO的方式来处理磁盘操作。 1、异步IO:用户可以在发出一个IO请求后立即再发出另外一个IO请求,当全部IO请求发送完毕后,等待所有IO操作完成,这就是AIO。 2、与AIO对应的是Sync IO,即每进行一次IO操作,需要等待此次操作结束才能继续接下来的操作。2、开启异步IO 首先OS要有异步io,且开启,然后mys
Innodb关键特性之Adaptive Hash Index
众所周知,InnoDB使用的索引结构是B+树,但其实它还支持另一种索引:自适应哈希索引。哈希表是数组+链表的形式。通过哈希函数计算每个节点数据中键所对应的哈希桶位置,如果出现哈希冲突,就使用拉链法来解决。更多内容可以参考 百度百科-哈希表 从以上可以知道,哈希表查找最优情况下是查找一次.而InnoDB使用的
Innodb关键特性之doublewrite
一、经典Partial page write问题 介绍double write之前我们有必要了解partial page write(部分页失效)问题。 InnoDB的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进行操作的。我们知道,
Innodb关键特性之Insert Buffer
一、Insert Buffer Innodb存储引擎中,主键是唯一的标识符,如果主键是递增的,那么主键插入null会自动增长,同时插入的数据按照顺序存放。如果主键不是自增的,例如UUID这样的,那么插入和辅助索引一样,是随机的。对于非聚集索引,每次插入都要离散读,大大降低了插入的效率。&nbs
浅谈checkpoint技术
MySQL中,一条DML语句,如delete或者update,改变了页中的记录,那么此时页是脏的,即缓冲池的页的版本比磁盘的新,数据库需要将缓冲池的数据刷新到磁盘。 如果每次缓冲池的页发生变化,都要将新版本的页刷新到磁盘,那么性能消耗一定很大,如果将脏页刷新到磁盘的过程中发生宕机,那么数据就不能恢复了。为了避免发生数
关于Mysql 的 ICP、MRR、BKA等特性
一、ICP( Index_Condition_Pushdown)对 where 中过滤条件的处理,根据索引使用情况分成了三种:(何登成)index key, index filter, table filter如果WHERE条件可以使用索引,MySQL 会把这部分过滤操作放到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出。ICP能减少Server层访问存储引擎的次数和引擎层访问基表的次数
为什么优化器选择了聚集索引?
通过这个以下这个案例,来说明优化器在选择索引时候的取舍。查看表结构:MySQL > show create table test2 \G *************************** 1. row ***************************
MySQL count(*)之索引选择
覆盖索引对于一些统计问题,如下:MySQL > show create table test1 \G *************************** 1. row ***************************
MySQL单列索引和联合索引
本文通过一个案例,介绍优化器对单列索引和联合索引的选择。order表的ord_seq字段上有2个索引,单列索引(order_seq)和联合索引(order_seq,order_type)MySQL > explain select * from `order` where order_seq =&nbs
MySQL中OPTIMIZE TABLE的作用及使用
来看看手册中关于 OPTIMIZE 的描述:OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或T
观察MySQL进程状态
1、测试脚本[root@mysql5 ~]# cat proce.sh while truedomysql -uroot -pmysql -e 'show processlist \G'|grep State >> /root/mysql.logsleep 1done2、tail -f [root@mysql5 ~]# tail -f mysql.log State: State: starting State: State: starting&nbs...
MySQL之profiling
MySQL5.0版本之后开放了profiling功能,通过此功能可以查询某个SQL的详细执行计划。1、开启profilingmysql> show variables like '%profil%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| have_profiling &nbs...