innodb相关知识

博客围绕MySQL展开,介绍了查看日志、慢速查询、binlog位置等命令,阐述了索引查找路径、段和页的结构,提及行的格式、加锁规则、事务查询方法,还说明了快照读、不同隔离级别下的数据读取情况,以及获取行锁方式和死锁回退设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

show VARIABLES like 'log_error'

show VARIABLES like 'long_query_time'
show VARIABLES like 'log_slow_queries'

show VARIABLES like 'log_output'
查看慢速查询时再哪里打出来的

SELECT * FROM mysql.slow_log
是可以看到慢查询发生时间的

SHOW MASTER STATUS
可以看到binlog打到哪里去了

mysql会使用第一个非空的唯一索引作为主键,使用_rowid可以查出每一列的主键,但是只适用于单一主键
从索引开始找的话一般就是找到Segment->extent-> page->row

段分为数据段,索引段和回滚段
一个extent一般是1M,每个extent中有16个page

/usr/local/mysql/data/test/t1.ibd

page level 0就代表是叶子节点

SHOW TABLE STATUS LIKE 'job_record%'
行的格式一般有Compact和Redundant两种,

每一列都有tx,和回滚指针这两个列

mysql的加锁实际上是从上往下加,上面的就是意向锁,各种意向锁都是兼容的,其他的只有共享锁之间互相是兼容的

SELECT * FROM information_schema.INNODB_TRX
就是把当前正在进行的事务找出来
SELECT * FROM information_schema.INNODB_LOCKS
找出当前的锁

快照读实际上不需要等待行锁的释放,
RC会去读最新一份数据
RR会去读事务开始时候的数据

当update的那一个事务没有commit的时候,都是会读出旧的那一个数据
一旦commit了,读出来的东西就是不一样的了


有两个方式可以获取行锁,lock in share mode, for update

每次获取递增都是select MAX(auto_inc_col) from t FOR UPDATE来找出来的


当没有索引的时候,是使用Next-Key Lock的
有一个rollback_on_timeout的值可以修改用来在死锁的时候回退

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值