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

网站建站网站wordpress浮动二维码

网站建站网站,wordpress浮动二维码,php网页制作教程,crm系统架构图参数innodb_file_per_table 这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。 这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了&…

参数innodb_file_per_table

这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。

这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了,磁盘空间也不会回收,而是将表数据标记为可复用。

系统表空间

所有表的数据和索引都存储在共享的.ibdata文件

数据删除其实是标记为可复用

每个b+数的叶子节点是一个数据页,一个数据页包含很多条记录,一条记录被删除时,仅仅是这个记录的位置被标记为可复用,不管是主键索引还是二级索引,数据都是按照索引的顺序排好的,当一条记录被标记为可复用时,当有一条记录可以插在这个被复用的位置上时,就直接复用了这个位置,但是如果这条记录不能插在这个位置上就不能复用,比如一个主键索引树上,一个数据页有R1(100,数据),R2(200,数据),R3(300,数据),当R2被删除标记为可复用时,有个记录为100~300之间的都能复用这个位置,但是超过这个范围的就不行了。

当一个数据页都被标记为可复用时,就没有范围了,当需要新开辟一个数据页时,直接复用这个数据页。

所以,即使我们使用delete删除一个表的所有记录,磁盘文件也是不会减小的,而是都标记成可复用。

而这些可以复用但是没被复用的空间就是空洞。

删除数据会产生空洞,插入数据也会

在数据页内的数据很紧凑的情况下(不是100,200,300而是1,2,3,4,5这种)

假如一个数据页A已经满了,这时再插入一个比较靠后的位置,就会把这个新数据和数据页A后面的记录放在另一个新申请的数据页中。这就导致了A后面的记录变成空洞。

更新索引上 的值是先删除一个旧的值,再插入一个新的值

这也会产生空洞

通过重建表来收缩表空间,填补空洞

使用alter table A engine=InnoDB命令来重建表

(MYSQL5.5之前,默认的隐含意思是alter table t engine=innodb,ALGORITHM=copy)

MYSQL5.5之前,这条语句的执行逻辑是这样的:

首先创建一个临时表B,再将A中的数据一条一条按照顺序读写到表B中

这时B中数据是按照顺序插入的,没有空洞。

最后将A和B互换(重命名),删除表B。完成表A的重建

Online DDL

在上面这个流程中,最耗时的就是拷贝数据这个部分了,这个过程中如果写数据到A中,就会造成数据丢失。

Online DDL: 在对表结构进行更改时(执行DDL语句),同时支持对表数据进行增删改查。

此时重建表的逻辑就变成了

(MYSQL5.5之后,默认的隐含意思是alter table t engine=innodb,ALGORITHM=inplace)

首先创建临时文件B,在拷贝数据到临时文件B期间,将对表A的数据增删改查记录到一个日志文件row log中。

在拷贝完成后,将日志文件对表A数据的更改应用到临时文件B中,这样临时文件B中的数据旧和是一样的了

最后用临时文件B替换表A的数据文件

注意到这里和MYsql5.5之前有个不同的点是,之前的B是创建的表,是在server创建的,而这里是创建的临时文件,是在innodb内部创建的。对于server来说没有将表A的数据迁移到其他表,因为inno代办对其数据文件进行了更换。是在原表上直接进行DDL操作,所以这种方式叫做inplace

DML写锁退化成读锁

这个流程中,在Alter 语句启动时会获取DML元数据写锁,防止其他线程来对这个进行结构的更改,同时DML写锁会阻塞数据的增删改查操作,但是读锁不会。所以在进行拷贝数据时,DML写锁会退化成DML读锁,DML读锁只会阻塞DML写锁,但是不会阻塞增删改查。

Online和inplace

DDL过程如果是Online的,就一定是inplace的

原因

因为Online DDl依赖于inplace算法,在重建表时,如果是使用的COPY模式,那就会创建新的表来作为临时中间表,这会阻塞增删改查,而inplace可以不创建新的表,仅仅是创建临时文件。

并且inplace在对DML写锁的持有上进行了优化,在进行拷贝数据到临时文件时就退化成读锁了。

但是一个DDL是inplace的,就不一定是Online的

原因

Online DDL指的是在进行DDL时不阻塞DML(数据的增删改查)。

即使是inplace地添加全文索引和添加空间索引时(在原表上创建索引而不创建临时表),仍然不能进行DML操作。

http://www.15wanjia.com/news/187661.html

相关文章:

  • 手机wap网站多少钱wordpress 媒体库位置
  • dw手机销售网站制作网站系统建设思想如何写
  • 唐山的做网站的企业清新太和做网站
  • 网站建设人才wordpress注册导航
  • 深圳建设招标网站首页泰兴做网站的公司
  • 做烘焙网站网站建设的上市公司
  • 网站已备案下一步怎么做网站后台做链接
  • 过年做那些网站致富公司想推广做网站有用
  • 中国建设银行积分查询网站深圳企业网站建设专业
  • 青海学会网站建设公司渠道推广费用咨询
  • 网站 转成 微信小程序网店推广方法
  • 视频网站建设费用明细宁波网络推广推荐机构
  • 做网站图片的大小东莞公司官网推广
  • 永年哪做网站图片分享功能网站开发
  • 怎么做网站收款二维码8090设计网站
  • 可以做电影网站的主机金蝶erp系统介绍
  • 加强局网站建设报告安防行业网站建设方案
  • 胶州网站建设 网络推广网页界面设计想法
  • php企业网站管理系统wordpress怎么改成中文版
  • 公司做网站 手机 电脑对公司网站建设的建议
  • 网站标签图片修改哪个商城网站建设好
  • 辽宁省建设厅网站升级辅助wordpress 页面编辑器
  • 成都培训网站建设做流量网站
  • 合肥知名建站公司不同类型网站优势
  • 网站 虚拟空间制作网站的最新软件是什么
  • 网站标题第一个词网站提速怎么做
  • 洛阳电商网站建设公司排名海淀seo搜索引擎优化公司
  • 我要表白网站蓬莱做网站公司
  • 宁波建网站需要什么最新互联网项目平台网站
  • 企业网站制作建站公司wordpress同步豆瓣