Innode表空间碎片优化

MySql InnoDB 存储引擎表优化 如果设置的值大于innodb_page_size,那么服务器会使用innodb_page_size值。对于较大的表,此操作可以节省大量的磁盘 I/O,因为 InnoDB 可以使用它的 change buffer(change buffer 的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果)来批量写二级索引记录。InnoDB 如会每秒刷盘一次日志,如果可以承受最新事务崩溃的数据损失,可以设置innodb_flush_log_at_trx_commit = 0。 阅读详情

一:MySQL数据存储方式(Innodb)

1.      数据表的框架结构:.frm 文件(数据库服务器层)

2.      数据和索引存储(Innode引擎层)

1共享表空间:

  ibdata:系统表空间文件,存储Innodb系统信息和用户数据库表数据和索引,所有表共用。

2独立表空间:

  ibdata:数据库所有表信息,没有在这里面记录的表将会提示不存在。同时用来启动Innodb。

  .ibd:存储每个表对应的数据库和索引。

通过分析Innodb数据的存储方式,发现确实Innodb不适用mysql hot copy。即直接备份数据库文件夹来备份数据库。

 

二:测试共享表空间碎片是否会重复利用

测试共享表空间删除数据后,新插入数据会使用表空间碎片

drop table

1.  原始数据


 

2.  删除T_LOCATION




3.  导入原表数据



经过测试,将表drop 后,重新插入数据库,会使用原来的表空间。具体使用比例可能会跟表空间产生碎片大小有关。

delete 记录

1.      原始T_LOCATION时,共享表空间为3.8G,为了实现删除1千万数据后有导会数据,重新建立T_LOCATION_dummy来备份1千万需要删除的数据。


 

2.      删除T_LOCATION中1千万数据,共享表空间增长了0.4G(猜测mysql 的delete操作中有在表空间复制数据的操作)。


 

3.      在T_LOCATION中再插入刚刚删除的那1千万记录,表空间没有增长,利用了表中的碎片空间。


 

总结:利用delete 删除表中的记录时,共享表空间不会减小反而增大。猜测mysql在删除数据时会对删除数据进行备份操作,这个暂时没有找到验证资料,后期补充。delete删除数据库产生的表空间碎片是可以重复利用的。利用比例和具体碎片大小以及插入数据大小有关。

drop partition

1.      利用drop partition删除表分区后,共享表空间大小没有变化

 


 

总结:通过实验,利用drop partition删除表分区共享表空间大小没有改变。也就说删除表分区后表空间也不会释放,但是产生的碎片也同理可以被重复使用。

三:linux 文件系统和文件大小限制

1.      查询相关资料显示,ext3 格式的文件系统blocks size为4k。单个文件大小限制为2T,文件系统大小限制为8T,同时使用可以使用  ulimit –f 查看用户文件大小权限限制。

2.      查询相关资料,表空间限制4,000,000,000个数据库页,而每个数据库页大小为16K,所以理论上表空间最大可以达到64T。

 

linux 文件系统和文件大小限制:

http://www.xifenfei.com/2204.html

http://blog.163.com/mail_zcw/blog/static/4126077420113290121997/

 

mysql Innodb表空间限制:

http://blog.sina.com.cn/s/blog_91339bff0100v2xq.html

http://blog.youkuaiyun.com/duck_arrow/article/details/8255377

 

四:共享表空间碎片回收

目前没有找到好的回收共享表空间碎片的方法,网络资料多处显示也没有好的办法回收。但是通过上面的实验可以看出,当我们删除部分数据后,共享表空间大小没有改变,再次恢复数据时,表空间大小也几乎没有改变。说明虽然共享表空间的碎片没有自动回收,但是却还是可以被重复利用,填充。利用率(50%-100%)可能和表空间碎片的大小以及分配方法有关(固定大小分配,最优大小分配等等),这和磁盘空间分配一样的道理。

有人在是官方使用手册中也有提到共享表空间没有好的回收方法:

http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html

   参考资料-innodb表空间介绍:

http://www.docin.com/p-412074893.html

 

所以目前大多数方法都是把共享表空间转化成独立表空间。

1.共享表空间和独立表空间对比:

1共享表空间所有数据和索引存储在ibdata文件中,所有的表共享这个比表空间。而独立表空间则每一个表都有自己独立的表空间,分区表也会有自己独立的表空间,这样就方便对分区表的数据进行管理。(但是删除分区的话,不可以直接删除分区表对应的ibd文件,会导致整张表在ibdata文件中启动失败。删除分区用drop partition)

2因为独立表空间每一个表都会有自己的.ibd文件,所以通过复制表空间文件就可以使这个对应的表在同一个数据库实例中移动。

3独立表空间删掉数据对应的空间可以自动回收(drop table 操作除外,)delete, truncate等等

4独立表空间碎片可以手动回收,利用alter table tablename engine=innodb, optimiaze等等。

5当单个独立表空间过大时,如果查询表的范围过大,可能查询共享表空间的效率比独立表空间要高些。因为独立表空间需要一次访问多大打文件。

 

通过上面的比较,我们发现共享表空间增长速度要比独立表空间大。而且数据库达到亿级别的记录时,数据文件也很大不但不方便操作,也不方便数据的管理。对我们来说,是需要定期的备份删除一部分数据的(否则持续增长),所以需要定期优化表空间,而且独立表空间删除数据可以自动优化,处于上面种种对比所以我建议我们将数据库转化为独立表空间,时间越长,后期越难处理。

2.共享表空间转化独立表空间流程

1利用mysqldump 备份所有数据库

mysqldump –uuser –ppossword > dummy.sql

2修改my.cnf配置文件

   innodb_file_per_table=1

3停止mysql服务器,删除ibdata,ib_logfile相关文件,以及业务数据库文件夹

4重启mysql数据库 ,自动生成Innodb相关文件

5利用备份恢复数据库

 

参考资料:

http://chqz1987.blog.163.com/blog/static/5143831120134269463429/

http://blog.fens.me/mysql-ibdata1/

 

 

3共享表空间负载

在my.cnf中设置innodb表空间的大小以及位置

innodb_data_file_path =/disk1/ibdata1:10G;/disk2/ibdata2:10G:autoextend:max:100G

基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程 地下车库 Cartongrapher 3D建图 阅读详情

相关推荐

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 623

《高性能mysql》第一篇

tip:本篇是基于《高性能mysql第三版》总结出的笔记类博文,只作为个人学习的记录,若有机会,还是希望大家能实际去阅读该书。 Mysql服务器逻辑架构图如下所示: 排他锁(X锁),也叫写锁 共享锁(S锁),也叫读锁 锁粒度: 在给定的资源上,锁定的数据越少,则系统的并发性越高. 表级锁:开销最小的策略,锁粒度较大,服务器会为诸如ALTER TABLE之类的语句使用表级锁,而忽...

Duuuhs的博客 255

Boost电路双闭环控制MATLAB仿真

通过电流内环控制,我们可以改变目标平均电流基准值的大小来闭环改变占空比,再改变输出电压与电路电流,直到电路电流达到基准电流才达到稳态。但是我们的基准电流依旧是外部提供的,下边的电压外环控制就是电路自己计算基准电流。

Fourglsl的博客 5846

Linux inode 详解

操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如Linux操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在inode和block中。 inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读...

weixin_30809333的博客 872

Flutter加载本地HTML的优雅解决方案:轻松实现富文本展示

通过以上步骤,我们实现了Flutter加载本地HTML的完整流程,并简单介绍了如何通过WebView与HTML页面进行交互。HTML文件作为一种灵活、易维护的富文本展示方式,能有效提升Flutter应用的内容呈现能力。这种方法在展示新闻、资讯或帮助文档等内容时非常有用,能够让开发者灵活调整内容的样式和排版。希望这篇文章能对你在Flutter开发中的HTML加载有所帮助!

四楼没电梯的专栏 3644

Unity获取透明物体深度数据

Unity获取透明物体深度数据前言透明&景深需求模型透明度部分带透明通道图片/视频部分半透明模型获取深度的具体实现方法带透明度图片/视频获取深度的具体实现方法结束语 前言 最近在做的项目有很多奇怪的需求,甚至之前在unity里用插件写了一个类似于蓝图的行为树插件,之后有时间给大家讲一讲相关的实现方法,今天刚解决了unity里透明物体无法获得深度数据的问题。所以分享给大家。 透明&景...

可以吃的妙脆角的博客 2631

IndexedDB详解

IndexedDB是一种在浏览器端存储数据的方式。既然称之为DB,是因为它丰富了客户端的查询方式,并且因为是本地存储,可以有效的减少网络对页面数据的影响。 有了IndexedDB,浏览器可以存储更多的数据,从而丰富了浏览器端的应用类型。

程序那些事 3万+

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 286

MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)

,,,

duanghuang的博客 1538

SAP S4业务伙伴(BP)实战指南:从角色分配到数据同步的完整流程

本文详细解析了SAP S4业务伙伴(BP)功能,从基础概念到实战操作,涵盖角色分配、数据同步及常见问题排查。通过BP机制,企业可高效管理客户、供应商等多重身份,实现数据共享和动态切换,显著提升主数据管理效率。特别适合SAP实施顾问和ERP管理员参考。

y2z3a4b5c的博客 870

TMS320F28335调试跟踪的问题:DSP从上电复位,一直到执行main()的第一条语句之间,都干了些什么,以及CCS调试时程序查找的问题

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1213

关于mysql数据表myisam与innode两种类型的比较分析

接触php+mysql有一段时间了,但都没涉及过大数据量,也就企业站成百上千的,所以只要程序不出错没有什么效率不效率的。自从决定自己开发一个网站后开始注重程序运行的效率。 在写条件筛选的时候考虑到字符串的判断应该没有数字快,于是决定将原先设置为字符串的筛选字段改为整型,但毕竟是想当然于是决定在大数据量下进行实际的测试一下看到底在10万条数据的情况下速度能差多少。 做出决定后就先写程序向数据库插

liuyuedetiankong的专栏 2046

RK3588 , 基于mpp 解码 Jpeg To RGB

本文介绍了在RK3588开发板上使用Rockchip MPP(Media Process Platform)硬件加速接口将JPEG图像解码为RGB格式的完整流程。主要包括三个关键步骤:1) 读取JPEG文件数据;2) 配置MPP解码器,包括初始化上下文、设置RGB888输出格式和解码参数;3) 执行解码任务并将结果保存为图像文件。通过硬件加速,该方法能高效完成JPEG到RGB的转换,适用于嵌入式多媒体处理场景。

J。 1212

innodb_file_per_table

MySQL InnoDB引擎 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,当增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。 在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table参数,可以修改InnoDB为独立表空间模式,...

weixin_34203426的博客 246

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MyISAM和InnoDB的索引在实现上的不同

1 MyISAM只把索引载入内存,数据缓存依赖于操作系统,InnoDB把索引和数据都载入内存缓冲 ,在存放方面, 共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1  初始化为10M。 独占表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描

kf_panda 1005

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

7 表类型(存储引擎)的选择

Mysql支持许多的存储引擎,但是只要Innode和BDB支持事务类型。   查看当前默认的存储引擎:show variables like 'table_type'; 可以通过show engines \G 或show variables like 'have%' 查看支持的引擎 修改表的引擎:alter table tablename engine = type;

zhexiao 806

Innode内存优化 (INNODB_BUFFER_POOL_SIZE)

1.innodb_buffer_pool_size innodb_buffer_pool_size决定InnoDB存储引擎表数据和索引数据的最大缓存区大小。在保证操作系统及其他程序有足够的内存可用的情况下,innodb_buffer_pool_size的值越大,缓存命中率越高,访问InnoDB表需要的磁盘I/O就越少,性能也就越高。 InnoDB缓冲池实际上用于多个目的,它用来: * 数...

心有猛虎 细嗅蔷薇 1231

innodb存储引擎

文章目录1.innodb存储引擎概述2.innodb体系架构2.1后台线程2.2内存1.缓冲池2.LRU list 和 Flush list 和Free list3.重做日志缓冲4.额外的内存池2.4Checkpoint技术2.5Master Thread工作方式2.5.1innodb 的master thread2.6innodb关键特性2.6.1插入缓冲 insert buffer1.inse...

菜鸟腾飞 6960

Innode引擎监控的开启的方法

查看当前InnoDB引擎信息 mysql> show innodb status\G 开启InnoDB监控,有四种: 1. innodb_monitor mysql> create table innodb_monitor(x int) engine=innodb; 2. innodb_lock_monitor mysql> create table innodb_lock_m

zfqzpp的专栏 2165

MySQL存储引擎--MyISAM与InnoDB区别

MyISAM 和InnoDB 讲解   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。   以下是一些细节和具

上善若水,水善利万物而不争。 25万+

MyISAM和Inondb

MyISAM和Innodb的区别: Innodb支持事务,MyISAM不支持事务。如果在一些列增删改的时候只要哪个出错还可以回滚还原,而MyISAM就不可以。 Innodb适合频繁修改以及涉及安全性较高的应用,MyISAM适合查询和插入为主的应用。 Innodb支持外键,MyISAM不支持外键 Innodb需要指定,MyISAM是默认的引擎 Innodb不支持FULLTEXT类型的索引 ...

白开水不加糖 976

mysql innodb 碎片_innodb表碎片处理

+-------+-------------------------------------------------------------------------------------------------------------------------+| Table | Create Table ...

weixin_39688750的博客 135

小谈 MySQL 第十一话·InnoDB 碎片整理

官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可: 目录 一、MySQL 表碎片化(Table Fragmentation) 的原因 二、MySQL 中如何找出碎片化严重的表 1、使用 show table status from db_name like 'tb_name' \G 2、查询 information_schema.TABLES 获取表的碎片化信息 三、MySQL 中如何减低表的碎片 1、OPTIMIZE TABLE XXXX 2、

SHOWufei 2916

mysql InnoDB 数据碎片浅析与处理

项目场景: 项目中,有一张表,由于历史数据的原因,导致数据积累了1亿条,占据磁盘 170多G,后来磁盘告警,磁盘扩容之后,数据删除之后,留下了 100多G的数据碎片。 问题描述: 由于优化表(optimize)操作会锁表,这张表又是经常插入的表,此时必须得搞清楚两个问题: 数据碎片是否会被重新使用 优化操作具体是怎么执行的,会锁表多久 原因分析: 数据碎片可用的可能性,取决于删除数据的位置? mysql 数据存储分两个部分,一个是逻辑存储,一个是物理存储 逻辑上是由表空间tablespace —

qq_22783587的博客 807

innode索引节点

Inode 将系统上每个文件的元数据存储在通常位于分区开头附近的表状结构中。它们存储除文件名和数据之外的所有信息。本质为结构体。也叫作文件属性管理结构,大多数的 inode 都存储在磁盘上。少量常用、近期使用的 inode 会被缓存到内存中。Linux 通过 inode 节点表将文件的逻辑结构和物理结构进行转换。给定目录中的每个文件都是一个带有文件名和 inode 编号的条目。通过引用索引节点号从索引节点表中检索有关该文件的所有其他信息。Inode 编号在分区级别是唯一的。

liangshuangeryue的博客 3169

解决处理innode满了的办法

今天碰到一个很奇葩的问题, innode 满了,  文件系统       Inode  已用(I)  可用(I) 已用(I)%% 挂载点 /dev/mapper/vg_livecd-lv_root                      3276800  135402 3141398    5% / tmpfs                6192625       1 61926

郑梦佳的专栏 5213

*Innode使用率监控报警*

#!/bin/bash #mail:zhuying.jz.137@163.com usage() { cat Usage:         Show the inode use percentage:'df -i' EOF } if [ $# -gt 0 ];then usage fi ###################################

小菜鸟的天地 2324
上一篇: git基本命令
下一篇: 数据库定期备份shell
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值