当前位置:   article > 正文

全面了解Mysql(一)

了解mysql
  1. mysql基础定义
    数据库和实例是完全不同的,数据库是数据文件之类的,实例是用来操作数据的,一般一个数据库对应一个实例,分布式系统中可能会存在一个数据库对应多个数据实例,启动实例的方式有很多,例如./mysqld_safe&,启动实例首先会去读配置文件,如果不存在使用默认配置,读取配置文件的顺序,可以使用mysql --help |grep my.cnf查看(windows略微有点差别使用mysql --help),如果存在重复的以最后读取的为主。
    在这里插入图片描述
    mysql区别其它数据库的主要地方在于mysql是模块化的,其中存在插件式存储引擎,用户可以自定义或者使用其它引擎,存储引擎是基于表的,我们可以通过show engines来查看当前mysql支持的存储引擎,使用建表语句的最后可以使用ENGINE = INNODB 来指定该表使用的存储引擎。
    mysql组成1)连接池组件,2)管理服务和工具组件,3)sql接口组件,4)查询分析器组件,5)优化器组件,6)缓冲组件,7)插件式存储引擎,8)物理文件
    在这里插入图片描述
    连接mysql常用tcp/ip连接,命令是 mysql -u用户 -p密码,但是我们也可以使用命名管道,在配置文件中添加配置–enable-named-pipe还可以使用共享内存配置文件中添加–shared-memory,配置文件客户端添加–protocol=memory,我们还可以使用套接字来访问,使用mysql -u用户 -S 套接字文件,该文件可以在配置文件中指定位置,–socket,同样也可以在命令行中查询show variables like ‘socket’。
    在这里插入图片描述
    2.InnoDB引擎
    InnoDB引擎内部管理了多个内存块,同时有多个后台进程负责处理不同任务。
    2.1线程
    Master Thread负责将缓冲池中的数据异步刷新到磁盘。
    IO Thread主要负责IO请求的回调处理,主要有write、read、insert buffer、log IO thread,可以使用参数innodb_线程_io_threads来设置各种IO线程的数量。
    Purge Thread主要是用来回收已经使用并分配的undo页使用innodb_purge_threads来设置开启独立线程数量
    Page Cleaner Thread用来将脏页进行刷新。
    在这里插入图片描述
    2.2内存
    缓存,缓存中分为索引页、数据页、undo页、插入缓存、自适应哈希索引、锁信息、数据字典信息等,对数据库的读取和修改操作都是直接对缓存池的,读的时候只有缓存没命中才会去磁盘上读,写的时候是以一定的频率刷新到磁盘上通过Checkpoint机制,使用innodb_buffer_pool_size可以修改缓存池的大小,缓冲池的实例个数可以由innodb_buffer_pool_instances来设置,数据库的缓存池是通过最近最少使用算法LRU List来管理,即频繁使用的在LRU前端,但是刚刚获取的新页也不是放到前端,而是通过innodb_old_blocks_pct来控制所放的位置,避免将之前的常用页给清除了,同时还引入了innodb_old_blocks_time用来设置多长时间才能够将新页作为频繁使用数据放到前端,当数据库刚刚启动的没有LRU页,整个缓存都是Free页,当需要分页时,在Free 中查询是否有空闲页,有则分出该空闲页,否则根据LRU算法执行当页从尾部移动到头部称之为page made young,因为innodb_old_blocks_time设置导致没有移动称之为page not made young,当页被修改后会在LRU和Flush同时存在,Flush时为了将脏页刷新回磁盘,这些缓存信息我们都可以通过SHOW ENGINE INNODB STATUS来查看。
    重做日志缓冲,存储引擎首先将重做日志放入重做日志缓存中,再刷新到日志文件,三种情况刷新(Master Thread每秒刷新一次,事务提交,重做日志缓存池剩余空间小于1/2)。
    额外的内存池,用来存储缓存池记录对象。
    2.3checkpoint技术
    该技术主要为了将重做日志刷新到磁盘,如果总不将重做日志刷新到磁盘,当数据库宕机了,重新应用恢复速度太慢,因此主要解决缓存池不够用时将脏页刷新到磁盘,重做日志不可用时(满了)刷新脏页,重做日志中有LSN来标记版本,在InnoDB内部有两种Checkpoint,数据库关闭时使用 Sharp Checkpoint将所有脏页都刷新回磁盘,数据库正在运行时使用Fuzzy Checkpoint进行一部分脏页刷新到磁盘。
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/680264
推荐阅读
相关标签
  

闽ICP备14008679号