美文网首页
Mysql之内存结构

Mysql之内存结构

作者: 逆光花轮 | 来源:发表于2019-02-13 21:08 被阅读0次

内存结构

Mysql内存组成可以分为SGA(系统全局)和PGA(程序缓存区)

SGA内存主要构成

参数用途

innodb_buffer_pool用来缓存innodb表的数据,索引,插入缓存,数据字典等信息

innodb_log_buffer即redo log buffer 事务在内存中的缓冲

query cache只能缓存静态数据信息,建议生产环境关闭,5.6之后默认是关闭的,query_cache_type设置为off,query_cache_size设置为0,才会生效

PGA内存主要构成

参数用途

sort_buffer_size用户sql语句在内存中的临时排序

join_buffer_size表连接使用,适用于BKA ,该缓存中会保存join字段的数据方便与另外一张表进行连接

read_buffer_size表顺序扫描的缓存,只适用于MyISAM存储引擎

read_rnd_buffer_sizemysql随机读取缓存区大小,用户做MRR,MRR优化的目的就是为了减少磁盘的随机访问,对于MySQL的二级索引(非聚集索引)而言,过于随机的回表会造成随机读取过于严重,范围扫描(range access)中MySQL将扫描到的数据存入read_rnd_buffer_size,然后对其按照Primary Key(RowID)排序,然后使用排序好的数据进行顺序回表,因为我们知道InnoDB中叶子节点数据是按照PRIMARY KEY(ROWID)进行排列的,那么这样就转换随机读取为顺序读取了

tmp_table_sizesql语句在排序/分组时没有使用到索引,会使用临时表空间

Buffer状态及其链表结构

page在InnoDB磁盘I/O最小单位,数据都存放在page中,对应到内存中就是一个个buffer.

buffer状态

1.freeBuffer:该buufer未被使用

2.cleanBuffer:内存中的buffer与磁盘中的page的数据一致

3.dirtyBuffer:内存中的数据还未被刷到磁盘,和磁盘中的数据不一致

buffer由chain来管理,也就是链,三种不同的buffer生出三条链表

chain链表

1.free list :把free buffer串联起来,使用时不够用,从lru list和flush list中释放出free buffer

2.lru list :把最近少访问到的clean buffer串联起来释放出free buffer

3.flush list : 把dirty buffer串联起来方便线程将数据刷新到磁盘,释放更过的free buffer

各大刷线线程及其作用

后台线程中主线程-master thread,其内部有4大循环

1.主循环 loop

操作描述

每1s操作1.日志刷新到磁盘,即使事务还没提交,2.刷新脏页到磁盘,3.执行合并插入缓冲操作,4.产生checkpoint,5.清楚无用的table cache,6.当前没有操作切换到background loop

每10s操作1.日志刷新到磁盘,即使事务还没提交,2.刷新脏页到磁盘,3.执行合并插入缓冲操作,4.产生checkpoint,5.删除无用的undo

2.后台循环 background loop

3.刷新循环 flush loop

4.暂停循环 supsend loop

4大I/O线程

1.read thread:读请求线程(默认值都是4个,可以适当调大)

2.write thread:写请求线程(默认值都是4个,可以适当调大)

3.redo log thread:负责把日志缓冲区的内容刷新到redo log(默认值都是4个,可以适当调大)

4.changge buffer threD:把插入缓冲区内容刷新到磁盘(默认值都是4个,可以适当调大)

其他线程

1.page clean tread:将脏页刷到缓存中,可以调为多个

2.purge thread:删除无用的undo页,通过innodb_purge_thread参数调整线程数默认是1个,最大调整为32个

3.error monitor thread:负责数据库报错的线程

4.lock monitor thread:负责监控锁的线程

相关文章

  • 超详细的MySQL工作原理 体系结构

    了解MySQL(超详细的MySQL工作原理 体系结构) 1.MySQL体系结构 2.MySQL内存结构 3.MyS...

  • 12-mysql

    难点:表空间 redo/undo 半同步复制 高可用 MySQL架构原理和存储机制MySQL体系结构(内存结构...

  • Mysql之内存结构

    内存结构 Mysql内存组成可以分为SGA(系统全局)和PGA(程序缓存区) SGA内存主要构成 参数用途 inn...

  • MySQL常用存储引擎之Memory

    系统存储引擎特点 也称HEAP存储引擎,数据保存在内存中,重启mysql数据会消失,表结构存在。(表结构存在....

  • 一篇文章让你搞懂Mysql InnoDB内存结构

    前言 我们都熟悉mysql数据库服务架构,也清楚 sql 的执行顺序,mysql的数据在磁盘和内存中的存储结构是采...

  • 2017O(∩_∩)O

    高性能MySQL JVM内存模型相关 数据结构与算法 nowcoder redis实现原理 java_web fr...

  • 数据库的优化

    MySQL的缓存(什么是缓存) 1.MySQL的缓存是一种KV结构,保存在服务器的内存当中。(K是SQL语句,V查...

  • MySQL-脏页的刷新机制

    MySQL内存结构-缓冲区 MySQL的缓冲区中有数据页,索引页,插入缓冲等等,这个角度是从页的功能来分类的。本小...

  • 类结构探索之 内存结构

    类和对象的关系 要说起类和对象的关系,我可能只知道对象是类创建(alloc init,new)出来的,而且一个类可...

  • 内存设置

    MySQL,Redis,将数据存入内存或者MySQL中,需要多少内存。 库存信息存内存。 大流量的处理方法:...

网友评论

      本文标题:Mysql之内存结构

      本文链接:https://www.haomeiwen.com/subject/wcdjeqtx.html