签到成功

知道了

CNDBA社区CNDBA社区

Mysql Book阅读(一)

2021-08-18 01:08 1860 0 原创 mysql
作者: Supreme_Aaron

mysqlserver体系结构

connector(连接者):不同语言与mysql的交互
connectpool(连接pool):连接池 管理缓冲用户的连接
sql interface:接受sql执行的接口。并返回执行结果
parse’:sql语句传递到解析器进行验证和解析。
optimizer:基于cbo的优化。
cache&&buffr:表和权限的缓存
plugin storage engine:引擎插件
Files && logs :数据文件
FS:和文件系统的交互
sql接口组件接受sql语句。将sql语句解析成数据结构。传递到后面步骤。查询优化器生成查询路径树选取最优的查询路径。调用引擎接口打开表 执行查询。检查是否有缓存记录。没有就继续往下执行 到磁盘中寻找数据。查到需要的数据之后 写入引擎缓存。(query cache被废弃) 返回数据。关闭表。关闭连接

https://www.cndba.cn/Supreme_Aaron/article/4660

innodb引擎体系结构

sql语句执行流程:

update为例:
update test set index=2 where id =1
1 在server层进行语法解析 解析成mysql认识的语法 查询什么表 什么字段 生成查询路径树 选择最优。
2 引擎层判断id=1 是否在buffer中。不在就读入 对记录lock
3 将index之前的值对应的pk trxid 写入undo segment
4 更改缓存页中的数据 并将更新记录和新生成的LSN写入LOG buffer中 更新完之后再缓冲池中这个页就是脏页。
5 在commit的时候 根据innodb_flush_log_at_trx_commit 设置。按照不同的设置 按照不同的方式将log buffer的记录更新到redo log中 然后写binlog 写完binlog 开始commit —>2pc binlog 同步之后就是binlog名和position写到redo log。在redo log写入 commit flag。完成commit trx .unlock
6 后台io线程选择时机将缓存中合适的脏页写入磁盘文件中.刷新的时候拷贝一份到double write buffer中。double write buffer 数据落盘之后 从缓冲中刷到文件中。

https://www.cndba.cn/Supreme_Aaron/article/4660

mysql 线程种类

16种
srv_master_thread io_ibuf_thread io_read_buffer io_write_thread io_log_thread io_log_thread srv_purge_thread
srv_lock_timeout_thread srv_error_monitor_thread page_ceaner_thread thread_timer_notifier main srv_monitor_thread srv_worker_thread buf_dumper_thread dict_stats_thread signal_handler

wait event check performance problem

打开performance_schema 的监控 通过加压 查看top 如果是%wa那就是io的问题。通过iostat %util列 100%说明io存在满负载情况。再从数据库层确定一下情况 https://www.cndba.cn/Supreme_Aaron/article/4660

https://www.cndba.cn/Supreme_Aaron/article/4660
https://www.cndba.cn/Supreme_Aaron/article/4660
https://www.cndba.cn/Supreme_Aaron/article/4660https://www.cndba.cn/Supreme_Aaron/article/4660

select * from performance_schema.event_waits_current where event_name != 'idle' order by TIMER_WAIT desc;

当前session在mysql内部线程号

select sys.ps_thread_id(connection_id());

数据页分类

File Header,表示页的一些通用信息,占固定的38字节。
Page Header,表示数据页专有的一些信息,占固定的56个字节。
// 以下两个组成统称的用户已使用数据
Infimum + Supremum,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的26个字节。
User Records:真实存储我们插入的记录的部分,大小不固定。https://www.cndba.cn/Supreme_Aaron/article/4660

https://www.cndba.cn/Supreme_Aaron/article/4660

Free Space:页中尚未使用的部分,大小不确定。
Page Directory:页中的某些记录相对位置,也就是各个槽在页面中的地址偏移量,大小不固定,插入的记录越多,这个部分占用的空间越多。 File Trailer:用于检验页是否完整的部分,占用固定的8个字节。https://www.cndba.cn/Supreme_Aaron/article/4660

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Supreme_Aaron

Supreme_Aaron

关注
  • 67
    原创
  • 0
    翻译
  • 0
    转载
  • 8
    评论
  • 访问:201041次
  • 积分:218
  • 等级:中级会员
  • 排名:第17名
精华文章
    最新问题
    查看更多+
    热门文章
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ