当前位置: 首页 > news >正文

广州网站制作开发公司哪家好便宜的网站设计企业

广州网站制作开发公司哪家好,便宜的网站设计企业,长沙网站外包公司,法治建设网站模块名称文章目录 1.InnoDB存储引擎的架构2.InnoDB存储引擎的内存结构2.1.Buffer Pool缓冲池2.2.Change Buffer更改缓冲区2.3.自适应Hash索引2.4.Log Buffer日志缓冲区 3.InnoDB存储引擎的磁盘结构3.1.System Tablespace系统表空间3.2.File-Per-Table Tablespaces每个表都有单独的表空间… 文章目录 1.InnoDB存储引擎的架构2.InnoDB存储引擎的内存结构2.1.Buffer Pool缓冲池2.2.Change Buffer更改缓冲区2.3.自适应Hash索引2.4.Log Buffer日志缓冲区 3.InnoDB存储引擎的磁盘结构3.1.System Tablespace系统表空间3.2.File-Per-Table Tablespaces每个表都有单独的表空间3.3.General Tablespaces通用表空间3.4.Undo Tablespaces撤销表空间3.5.Temporary Tablespaces临时表空间3.6.Doublewrite Buffer Files双写缓冲区3.7.Redo Log重做日志 4.InnoDB存储引擎的后台线程4.1.Master Thread核心后台线程4.2.IO Thread IO线程4.3.Purge Thread回收undo log的线程4.4.Page Cleaner Thread协助后台线程刷新脏页到磁盘的线程 5.InnoDB的存储引擎的架构连贯 1.InnoDB存储引擎的架构 在MySQL5.5版本之后默认使用InnoDB作为数据库存储引擎它擅长事务的处理具有崩溃恢复的特性在日常的开发中使用最为广泛。 在InnoDB存储引擎的架构中由两部分主要组成分别是内存结构IN-Memory Structures和磁盘结构ON-Disk Structures。 2.InnoDB存储引擎的内存结构 在InnoDB存储引擎的内存结构中主要分为四大部分Buffer Pool缓冲池、Change Buffer更改缓冲区、Adaptive Hash Index自适应HASH索引、Log Buffer日志缓冲区。 2.1.Buffer Pool缓冲池 内存结构中最主要的就是Buffer Pool缓冲池了InnoDB存储引擎是基于磁盘文件存储数据的访问磁盘的效率和访问内存的效率两者之间的速度相差是非常大的为了尽可能的弥补磁盘和内存之间I/O效率差值通常情况下就是将磁盘中的数据加载到内存中的缓冲池里面避免频繁访问磁盘影响磁盘I/O的性能。 Buffer Pool缓冲池是内存中的一个区域可以缓存磁盘中经常需要被操作的数据当执行增删改查这类操作时会先操作缓冲池中的数据如果缓冲池中没有数据将会从磁盘中加载数据并缓存到缓冲池数据在缓存池中被处理之后再通过一定的频率刷新到磁盘中从而减少磁盘IO加快处理速度。 如上图所示在缓冲池中看到有很多歌小方块这个表示Page页缓冲池的单位也是Page页。底层会采用链表数据结构管理所有的Page页。 在缓冲池中的Page分为三种类型图中将每种类型的Page以不同颜色区分 free page空闲page未被使用的页。clean page被使用的page但是里面的数据没有被修改过。dirty page脏页被使用的page并且里面的数据修改过但是还没有刷新到磁盘与磁盘中的数据产生了不一致。 在InnoDB的缓冲池中不仅缓存了索引页和数据页还包含了undo页、插入缓存、自适应哈希、InnoDB的锁信息等。 2.2.Change Buffer更改缓冲区 Change Buffer是更改缓冲区主要是针对二级索引打造的当执行DML增删改的语句时如果操作的数据Page页没有在Buffer Pool缓冲池中那么不会直接从操作磁盘中的数据而是将数据变更后的内容存放在更改缓冲区中。当未来被操作的数据被Buffer Pool缓冲池读取到了此时再讲Change Buffer更改缓冲区中更改的内容与Buffer Pool中的数据进行合并回复最后通过一定的频率将合并后的数据刷新到磁盘中。 Change Buffer简单来说就是当DML语句操作的数据不在缓冲池时将语句对数据更改后的内容记录在Change Buffer更改缓冲区中然后当要操作的数据被读取到缓冲池后再将更改缓冲区中的数据与缓冲池中的数据合并最后刷新到磁盘。 我们来思考一下Change Buffer更改缓冲区有什么作用呢当Buffer缓冲池没有数据时直接读取磁盘的数据进行更不行吗当然是不行的因为二级索引通常都是非唯一的并也是以相对随机的顺序写入到二级索引中同样当删除和更新时就会影响索引结构中不相邻的二级索引页如果每次更改数据都直接操作磁盘那么也会造成大量的磁盘I/O消耗从而影响性能。 2.3.自适应Hash索引 自适应Hash索引主要是用来优化Buffer Pool缓冲池中的数据查询的MySQL的InnoDB不支持Hash索引数据结构Hash索引结构中等值匹配的检索效率远远超过BTree因为Hash索引只需要一次IO就可以检索到数据而BTree则需要多次匹配所以Hash索引的效率要远超BTree。 虽然InnoDB不支持Hash索引的数据结构但是却提供了自适应H时候索引的功能在进行等值匹配时依然可以具备Hash索引的效率。 InnoDB存储引擎会监控对表上各索引页的查询如果观察到在特定的条件下hash索引可以提升速度则建立hash索引称之为自适应hash索引。 Hash不适合做范围查询和模糊匹配。 自适应哈希索引无需人工干预统统由系统根据情况自动判断。 通过以下命令可以看到自适应哈希有没有开启。 mysql show variables like %adaptive_hash_index%; ----------------------------------------- | Variable_name | Value | ----------------------------------------- | innodb_adaptive_hash_index | ON | | innodb_adaptive_hash_index_parts | 8 | ----------------------------------------- 2 rows in set (0.01 sec)2.4.Log Buffer日志缓冲区 Log Buffer是日志缓冲区这个日志缓冲区并不是我们理解的日志在InnoDB存储引擎中会将要写入磁盘中的数据redo 保存在日志缓冲区中默认的大小为16MB日志缓冲区的日志会定期刷新到磁盘中如果需要更新、插入或者删除等等很多事务时可以适当增大日志缓冲区的大小。 通过日志缓冲区可以节省磁盘I/O。 日志缓冲区可设置的参数 innodb_log_buffer_size设置缓冲区的大小innodb_flush_log_at_trx_commit日志刷新到磁盘的策略共包含三个值 1每次事务提交时将数据写入到日志缓冲区并刷新到磁盘默认值。0每秒将数据写入到日志缓冲区并刷新到磁盘一次。2每次事务提交时将数据写入到日志缓冲区并且每秒刷新到磁盘一次。 mysql show variables like innodb_log_buffer_size; ---------------------------------- | Variable_name | Value | ---------------------------------- | innodb_log_buffer_size | 16777216 | ---------------------------------- 1 row in set (0.00 sec)mysql show variables like innodb_flush_log_at_trx_commit; --------------------------------------- | Variable_name | Value | --------------------------------------- | innodb_flush_log_at_trx_commit | 1 | --------------------------------------- 1 row in set (0.00 sec)3.InnoDB存储引擎的磁盘结构 磁盘结构主要分为七个部分分别是System Tablespace系统表空间、File-Per-Table Tablespaces每个表都有单独的表空间、General Tablespaces通用表空间、 Undo Tablespaces撤销表空间、 Temporary Tablespaces临时表空间、Doublewrite Buffer Files双写缓冲区、Redo Log重做日志。 3.1.System Tablespace系统表空间 系统表空间是Change Buffer更改缓冲区的存储区域更改缓冲区中的数据都在系统表空间中如果MySQL系统中的表没有自己独立的表空间文件或者也没有使用通用表空间此时系统表空间就是该表的表空间。 系统表空间中可能会包含表和索引数据在MySQL5.x版本中还包含InnoDB数据字典、undolog等。 查看系统表空间路径 mysql show variables like innodb_data_file_path; ----------------------------------------------- | Variable_name | Value | ----------------------------------------------- | innodb_data_file_path | ibdata1:12M:autoextend | ----------------------------------------------- 1 row in set (0.01 sec)#默认的系统表空间文件是ibdata1 [rootmysql ~]# ll /var/lib/mysql/ibdata1 -rw-r----- 1 mysql mysql 12582912 6月 21 23:49 /var/lib/mysql/ibdata13.2.File-Per-Table Tablespaces每个表都有单独的表空间 如果开启了Innodb_file_per_table参数后每个表都会有独立的表空间文件在表空间文件中包含了这张表的数据和索引。该参数默认开启。 mysql show variables like innodb_file_per_table; ------------------------------ | Variable_name | Value | ------------------------------ | innodb_file_per_table | ON | ------------------------------每个表都有单独的ibd表空间文件。 3.3.General Tablespaces通用表空间 通用表空间可以示多张表使用一个表空间来存放数据和索引我们可以创建一个表空间然后再创建表的时候指定表使用哪一个通用表空间。 创建表空间的语法格式 CREATE TABLESPACE 表空间名称 ADD DATAFILE 表空间文件路径 BEGIN 存储引擎名称创建表时指定使用哪一个表空间 CREATE TABLE xxxx TABLESPACE 表空间名称3.4.Undo Tablespaces撤销表空间 撤销表空间MySQL实例在初始化的时候会自动创建两个默认的undo表空间初始大小为16M用于存储undo log日志。 [rootmysql ~]# ll /var/lib/mysql/undo_00* -rw-r----- 1 mysql mysql 33554432 6月 21 23:51 /var/lib/mysql/undo_001 -rw-r----- 1 mysql mysql 33554432 6月 21 23:54 /var/lib/mysql/undo_0023.5.Temporary Tablespaces临时表空间 InnoDB使用会话临时表空间和全局临时表空间存储用户创建的临时表的数据。 3.6.Doublewrite Buffer Files双写缓冲区 双写缓冲区InnoDB引擎将数据页从Buffer Pool缓冲池刷新到磁盘之前还会将数据页写入到双写缓冲区中便于系统异常时可以恢复数据。 [rootmysql ~]# ll /var/lib/mysql/#ib_16384_* -rw-r----- 1 mysql mysql 196608 6月 21 23:54 /var/lib/mysql/#ib_16384_0.dblwr -rw-r----- 1 mysql mysql 8585216 6月 21 23:41 /var/lib/mysql/#ib_16384_1.dblwr3.7.Redo Log重做日志 重做日志用来实现事务的持久性该日志文件由两部分组成重做日志缓冲redo log buffer以及重做日志文件redo log前者是在内存中后者是在磁盘中当事务提交之后会把所有修改的信息存放在该日志中当刷新脏页数据到磁盘时发送了错误可以通过日志文件进行数据的恢复。 [rootmysql ~]# ll /var/lib/mysql/ib_logfile* -rw-r----- 1 mysql mysql 50331648 6月 21 23:54 /var/lib/mysql/ib_logfile0 -rw-r----- 1 mysql mysql 50331648 6月 21 23:54 /var/lib/mysql/ib_logfile14.InnoDB存储引擎的后台线程 在InnoDB的后台线程中主要分为四类Master Thread核心后台线程 、IO ThreadIO线程、Purge Thread回收undo log的线程、Page Cleaner Thread协助后台线程刷新脏页到磁盘的线程 4.1.Master Thread核心后台线程 核心后台线程主要负责调度其他的线程还负责将缓冲池中的数据异步刷新到磁盘中保持数据的一致性还包括脏页的刷新、合并插入缓存、undo页的回收等。 4.2.IO Thread IO线程 在InnoDB的存储引擎中使用了大量的AIO来处理IO请求这样可以极大的提高数据库的性能而IO线程主要负责这些IO请求的回调。 IO线程又分为四类 Read Thread负责读操作。默认4个Write Thread负责写操作。默认4个Log Thread负责将日志缓冲区刷新到磁盘。默认1个Insert Buffer Thread负责将写缓冲区的内容刷新到磁盘。默认1个 可以通过以下命令查看InnoDB的状态信息。 show engine innodb status \G;4.3.Purge Thread回收undo log的线程 主要用于回收undo log的线程当事务已经提交了undo log可能就不再使用了如果不回收会占用大量的磁盘空间。 4.4.Page Cleaner Thread协助后台线程刷新脏页到磁盘的线程 协助核心后台线程刷新脏页数据到磁盘的线程可以减轻Master Thread的工作压力减少阻塞。 5.InnoDB的存储引擎的架构连贯 在前面已经讲解了InnoDB的内存结构和磁盘结构以及后台线程那么一起来看一下InnoDB架构到底是如何工作的。 如下图所示用户操作数据库表中的数据时首先在内存结构的缓冲区里找到对应的数据如果缓冲区中没有要处理的数据那么会从磁盘的表空间文件里加载数据到缓冲区当我们增删改查时都是在缓冲区里操作的当数据处理完毕后经过一定的频率通过一组后台线程将数据刷新到磁盘中的表空间里进行数据的持久化。 Undo log和Redo log中的数据会定期回收不会一直存放在磁盘空间。
http://wiki.neutronadmin.com/news/358132/

相关文章:

  • vi设计网站运动康复wordpress theme options
  • 人才招聘网站开发 源代码湖北省建设教育协会网站
  • 商城网站解决方案社群营销方案
  • 中国菲律宾南海seo的名词解释
  • 站长网站潍坊网站建设外贸
  • 磁力网站怎么做拼多多电商网站建设
  • 精美旅游网站案例网站建设公司业务在哪里来
  • asp.net 做网站好吗重庆观音桥附近酒店
  • 网页设计网站作业酷炫的网站
  • 顺的网站建设报价管城郑州网站建设
  • 深圳企业网站建设公司昆明旅行社网站开发
  • 网站技术解决方案不包括手机网站建设的企业
  • 新兴县做网站的什么是wordpress主题
  • 多用户建站系统源码网站备案好不好
  • 微信小程序 连接网站微信公众号怎么做网页
  • 建设工程造价员网站例点估算网站开发项目工作量
  • 有关性的网站网页设计制作网站用什么软件
  • 网站模板代理电话wordpress更换icon
  • 沈阳建设厅官方网站中山网站建设思
  • 做网站 英语php网站开发工程
  • 个人资料库网站怎么做优创智汇高端网站建设
  • 设计师网站导航胶州网站设计
  • 网站宝搭建网站环境黑龙江省建设安全监督网站
  • seo移动网站页面怎么做中国网站建设新闻
  • 免费推广网站都有哪些开发app软件需要多少费用
  • 做网站公司广州房房网
  • 低代码前端开发平台sem优化案例
  • 网站内容管理规范智联招聘官方网
  • 网站建设宣传预算世界经济新闻
  • 广州高端网站定制开发价格微信商店小程序制作教程