问题缘起
同事在客户现场利用DTS工具,从A实例将数据迁移到B实例过程中,发现几乎稍大点的表在迁移完成后,目标端表空间大小差不多都是源端的3倍,也就是说表空间膨胀了2倍。
排查思路
对这篇文章《叶问》第16期有印象的话,应该还能记得,数据迁移(导入导出)过程中,也包括主从复制场景,导致表空间膨胀的原因有几种:
问题发现
顺着上面的思路,逐一排查,看能否定位问题原因。
排查到这里,就显得有点诡异了,似乎遇到了玄学问题。不过没关系,我们还需要先了解DTS工具的工作方式,大致如下:

初看上述工作过程,似乎也没什么特别之处会导致数据写入后产生大量碎片,从而表空间文件急剧膨胀。
首先,读取数据阶段只涉及到源端,可以先排除了。所以,疑点集中在第3、4两步。
了解InnoDB引擎特点的话应该知道,当InnoDB表有自增ID作为主键时,如果写入的数据总是顺序递增的话,那么产生碎片的概率就会很低。但是,如果写入的数据是离散化的(比如插入的顺序是随机离散的,或者比如插入顺序为1、10000、2、3000、3、5000…这种完全离散无序的),则有极大可能会造成碎片率很高。
按照上述疑点,我们需要确认DTS工具构造的SQL是什么样的,这就需要修改选项binlog_format = statement,这是为了获取其原生的SQL,row模式下可能就相对不好排查了。然后再次运行DTS工具,查看生成的SQL。
经过排查,终于发现问题所在,原来是DTS工具在拼接SQL时,虽然是分段读取数据,但没有将读取出来的结果集先行排序,造成了拼接后的SQL大概像下面这样的:
t ... ... ...... ...
这种方式写入的话,而且还是并发写入,就会极大概率造成InnoDB>
LinkedList和ArrayList的区别
ArrayListArrayList是一个动态数组,也是我们最常用的集合。 它允许任何符合规则的元素插入甚至包括null。 每一e68a84e8a2ad39个ArrayList都有一个初始容量(10),该容量代表了数组的大小。 随着容器中的元素不断增加,容器的大小也会随着增加。 在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。 所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。 size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。 add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间(由于要考虑到扩容,所以这不只是添加元素会带来分摊固定时间开销那样简单)。 ArrayList擅长于随机访问。 同时ArrayList是非同步的。 LinkedList同样实现List接口的LinkedList与ArrayList不同,ArrayList是一个动态数组,而LinkedList是一个双向链表。 所以它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。 由于实现的方式不同,LinkedList不能随机访问,它所有的操作都是要按照双重链表的需要执行。 在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。 这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。 与ArrayList一样,LinkedList也是非同步的。 如果多个线程同时访问一个List,则必须自己实现访问同步。 一种解决方法是在创建List时构造一个同步的List:List list= (new LinkedList(...));综述: 是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。 若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。 但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
QQ群贡献值
所有人的
2009年11月11日,QQ群等级正式推出,采用金色皇冠和数字作为标识,群友可以通过在QQ群内的相关操作,获得相应的积分并升级。 后续群等级将推出各种特权,等级越高将有机会享受越多的特权,如:群搜索排名靠前,相册、共享的空间容量更大,群成员人数更多等,且不影响任何原有的权益。 群积分由人气值、贡献值和参与值组成。
案例:如何升级到1级皇冠QQ群?
当获得的人气值、贡献值和参与值都达到40分时,就可以升级为1级皇冠QQ群。 群等级积分从2009年9月1日开始计算。 如何获取升级所需的积分
群积分由人气值、贡献值和参与值组成。 案例:如何升级到1级皇冠QQ群?当获得的人气值、贡献值和参与值都达到40分时,就可以升级为1级皇冠QQ群。 群等级积分从2009年9月1日开始计算。 积分规则表:
积分维度 人气值 贡献值 参与值 积分规则 访问群空间1次 +1 在群论坛发表1篇帖子 +2 群论坛评论1条 +1 参加群活动1次 +1 发起1个活动并审核通过 +4 新相册照片评论1条 +1 下载文件1次(含批量下载) +1 上传照片1次(含批量上传) +2 群活动评论1条 +1 上传文件1个 +2 转载1篇帖子到本群 +2 减分规则 / 删除帖子、活动等扣除相应的贡献值 删除评论扣除相应的参与值 补充说明 每日积分上限 20分 每日积分上限 20分 每日积分上限 20分等级说明表:
级别 分值 40 240 720 1440 2880 5760 最快升级天数 2 12 36 72 144 288 576QQ群怎么点亮皇冠?
当获得的人气值、贡献值和参与值都达到40分时,就可以升级为1级皇冠QQ群。群等级积分从2009年9月1日开始计算。详细积分维度及规则表:积分维度 人气值 贡献值 参与值 积分规则 访问群空间1次 +1 在群论坛发表1篇帖子 +2 群论坛评论1条 +1 参加群活动1次 +1 发起1个活动并审核通过 +4 新相册照片评论1条 +1 下载文件1次(含批量下载) +1 上传照片1次(含批量上传) +2 群活动评论1条 +1 上传文件1个 +2 转载1篇帖子到本群 +2 减分规则 / 删除帖子、活动等扣除相应的贡献值 删除评论扣除相应的参与值 补充说明 每日积分上限 20分 每日积分上限 20分 每日积分上限 20分等级说明表:
级别 分值 40 240 720 1440 2880 5760 最快升级天数 2 12 36 72 144 288 576
发表评论