我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL数据清理的需求分析和改进

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL数据清理的需求分析和改进

MySQL数据清理的需求分析和改进

昨天帮一个朋友看了MySQL数据清理的问题,感觉比较有意思,具体的实施这位朋友还在做,已经差不多了,我就发出来大家一起参考借鉴下。

为了保证信息的敏感,里面的问题描述可能和真实情况不符,但是问题的处理方式是真实的。

首先这位朋友在昨天下午反馈说他有一个表大小是近600G,现在需要清理数据,只保留近几个月的数据。按照这个量级,我发现这个问题应该不是很好解决,得非常谨慎才对。如果是通用的思路和方法,我建议是使用冷热数据分离的方式。大体有下面的几类玩法:

  1. exchange partition,这是亮点的特性,可以把分区数据和表数据交换,效率还不错。

  2. rename table,这是MySQL归档数据的一大利器,在其他商业数据库里很难实现。

但是为了保险起见,我说还是得看看表结构再说。结果看到表结构,我发现这个问题和我预想的完全不一样。

这个表的ibd文件大概是600G,不是分区表,InnoDB存储引擎。字段看起来也不多。需要根据时间字段update_time抽取时间字段来删除数据。

MySQL数据清理的需求分析和改进

我看了下这个表结构,字段不多,除了索引的设计上有些冗余外,直接看不到其他的问题,但是根据数据的存储情况来看,我发现这个问题有些奇怪。不知道大家发现问题没有。

这个表的主键是基于字段id,而且是主键自增,这样来看,如果要存储600G的数据,表里的数据量至少得是亿级别。但是大家再仔细看看自增列的值,会发现只有150万左右。这个差别也实在太大了。

为了进一步验证,我让朋友查询一下这个表的数据量,早上的时候他发给了我最新的数据,一看更加验证了我的猜想。

mysql> select max(Id) from test_data;

+---------+

| max(Id) |

+---------+

| 1603474 |

+---------+

1 row in set (0.00 sec)

现在的问题很明确,表里的数据不到200万,但是占用的空间近600G,这个存储比例也实在太高了,或者说碎片也实在太多了吧。

按照这个思路来想,自己还有些成就感,发现这么大的一个问题症结,如果数据没有特别的存储,200万的数据其实也不算大,清理起来还是很容易的。

朋友听了下觉得也有道理,从安全的角度来说,只是需要注意一些技巧而已,但是没过多久,他给我反馈,说表里的数据除过碎片,大概也有100多G,可能还有更多。这个问题和我之前的分析还是有一些冲突的。至少差别没有这么大。200万的数据量,基本就在1G以内。但是这里却是100多个G,远远超出我的预期。

mysql> select round(sum(data_length+index_length)/1024/1024) as total_mb,

-> round(sum(data_length)/1024/1024) as data_mb,

-> round(sum(index_length)/1024/1024) as index_mb

-> from information_schema.tables where table_name='hl_base_data';

+----------+---------+----------+

| total_mb | data_mb | index_mb |

+----------+---------+----------+

| 139202 | 139156 | 47 |

+----------+---------+----------+

1 row in set (0.00 sec)

这个问题接下来该怎么解释呢。我给这位朋友说,作为DBA,不光要对物理的操作要熟练,还要对数据需要保持敏感。

怎么理解呢,update_time没有索引,id是主键,我们完全可以估算数据的变化情况。

怎么估算呢,如果大家观察仔细,会发现两次提供的信息相差近半天,自增利的值相差是大概4000左右。一天的数据变化基本是1万。

现在距离10月1日已经有24天了,就可以直接估算出数据大概是在1363474附近。

mysql> select current_date-'20171001';

+-------------------------+

| current_date-'20171001' |

+-------------------------+

| 24 |

+-------------------------+

1 row in set (0.00 sec)

按照这个思路,我提供了语句给朋友,他一检查,和我初步的估算值差不了太多。

mysql> select id , create_time ,update_time from test_data where id=1363474;

+---------+---------------------+---------------------+

| id | create_time | update_time |

+---------+---------------------+---------------------+

| 1363474 | 2017-09-29 10:37:29 | 2017-09-29 10:37:29 |

+---------+---------------------+---------------------+

1 row in set (0.07 sec)

简单调整一下,就可以完全按照id来过滤数据来删除数据了,这个过程还是建议做到批量的删除,小步快进 。

前提还是做好备份,然后慢慢自动化完成。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL数据清理的需求分析和改进

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

阿里云数据库的购买需求分析

随着大数据时代的到来,企业对数据存储和处理的需求日益增长。为了满足这些需求,许多企业开始使用阿里云等云服务提供商的数据库。那么,对于使用阿里云数据库的企业来说,是否需要购买呢?本文将从数据量、数据安全性、成本等多个角度进行分析。一、数据量的考虑对于大规模数据存储的需求,阿里云提供了丰富的数据库产品,包括关系型数据
阿里云数据库的购买需求分析
2024-01-26

如何进行MySQL和Oracle的元数据抽取分析

如何进行MySQL和Oracle的元数据抽取分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言最近接到个任务是抽取mysql和Oracle的元数据,大致就是
2023-06-22

怎样进行mysql数据库的分析

怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条
2023-06-22

用Python实现网易云音乐的数据进行数据清洗和可视化分析

目录Python实现对网易云音乐的数据进行一个数据清洗和可视化分析对音乐数据进行数据清洗与可视化分析对音乐数据进行数据清洗与可视化分析歌词文本分析总结Python实现对网易云音乐的数据进行一个数据清洗和可视化分析 对音乐数据进行数据清洗与可
2022-06-02

如何使用MySQL进行数据分析和报表生成?

如何使用MySQL进行数据分析和报表生成MySQL是一种广泛使用的关系型数据库管理系统,用于存储和管理结构化数据。除了作为数据存储和管理工具之外,MySQL还可以用于进行数据分析和报表生成。本文将介绍如何使用MySQL进行数据分析和报表生成
2023-10-22

MySQL中如何处理大数据量的查询和分析

大数据量查询和分析的优化策略优化大数据查询和分析涉及以下策略:硬件优化:选择高性能服务器、SSD和云计算。数据库设计:创建索引、使用分区表和优化数据类型。查询优化:分析查询、重写查询和使用缓存。分布式处理:分片、分布式数据库和大数据框架。其他技术:查询缓存、缓冲池调优和批处理。针对特定用例,还需考虑实时分析(in-memory数据库、流处理)和机器学习(优化工具、GPU加速)的附加优化。
MySQL中如何处理大数据量的查询和分析
2024-04-09

MySQL中如何处理大数据量的查询和分析

在MySQL中处理大数据量的查询和分析需要考虑以下几点:使用索引:确保表中涉及到的列都有合适的索引,这样可以加快查询速度。避免全表扫描:尽量避免使用SELECT *,只选择需要的列,减少检索的数据量。使用合适的数据类型:选择合适的数据类型可
MySQL中如何处理大数据量的查询和分析
2024-03-06

如何进行大数据平台的搭建和数据分析

如何进行大数据平台的搭建和数据分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  行内人士皆知,大数据分析平台的搭建有利于帮助企业构建统一的数据存储和数据处理
2023-06-02

编程热搜

目录