如何将数据库中的数据只保留 3 天左右

2016-12-27 17:59:53 +08:00
 llx126753
数据库现在保留了 7 天的数据,大小差不多 180g 左右,做了计划任务,每天将数据进行清理, delete from log where create_time < from_unixtime(unix_timestamp(now())-6*24*3600,'%Y-%m-%d') limit 100000; 像这样子删除数据,数据占用空间还是没有减少。。百度说是因为这样子删除会有碎片什么的,,求大神提供一个更好地方案
5308 次点击
所在节点    MySQL
19 条回复
llx126753
2016-12-27 18:00:28 +08:00
每天的数据量比较大,这个没法集中处理数据
xiaohanqing
2016-12-27 18:39:00 +08:00
表引擎
j717273419
2016-12-27 18:44:17 +08:00
那能不能在清理之后,调用碎片整理?
i4oolish
2016-12-27 18:58:16 +08:00
什么数据库, 什么存储引擎
R18
2016-12-27 19:00:59 +08:00
分表?我们系统跑了两个月 200 多 G 数据 我给按天放的,就是为了以后删除方便
fds
2016-12-27 19:32:31 +08:00
别存数据库了,每天建个目录,以文件形式存储。既然可以随便删,想必也不需要数据库那么高的安全性。
mm163
2016-12-27 19:46:55 +08:00
新记录不要每次都 INSERT :创建新记录前先取一条 3 天前 create_time 值最小的记录,把该记录 UPDATE 成新记录(如果没有取到 3 天前的记录,则 INSERT )。
ty89
2016-12-27 19:49:30 +08:00
看到百度说三个字我就懒得正儿八经回复了
est
2016-12-27 19:55:37 +08:00
没 commit ?
isolation level 是啥?
chenqh
2016-12-27 20:17:04 +08:00
关注。等大神回复
em70
2016-12-27 20:19:26 +08:00
每天建个表嘛
akira
2016-12-27 20:43:01 +08:00
msg7086
2016-12-28 02:25:19 +08:00
然而你重新写入的时候空间占用也不会变大啊。
删除不释放不是很正常么,要是一直释放,那硬盘不被你跑死啊。
Livid
2016-12-28 04:50:24 +08:00
1. 确保开启了 InnoDB 的 file per table ,这样每个表是一个单独的文件,不会出现一个几百 G 甚至上 T 的巨大文件:

https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html

2. 这种类型的数据可以按天建表,这样如果需要删除的话,直接 DROP TABLE 即可。
ragnaroks
2016-12-28 09:35:36 +08:00
按天分表+1,做个自动备份+删除脚本
chenqh
2016-12-28 16:07:27 +08:00
@ragnaroks 能问下代码怎们办?总不可能每天改一次 python ORM 吧
ragnaroks
2016-12-28 18:46:05 +08:00
@chenqh 我是直接用 shell 写的,按文件最后写入时间(修改时间)来,然后计划任务
realpg
2016-12-29 00:16:32 +08:00
你的数据库是什么类型的系统数据?
是否是直接网站的数据?
如果是直接网站的数据(比如一个 PHP 网站),可以这样

所有网页请求包含一个 gc.php
内容是连上数据库执行一个查询
delete from `XXXX` where expiredtime< 现在时间 limit 5;
来一次有效访问帮你删除 5 条过期数据
PV 大的话很快就帮你分散的删干净了,对整体影响不大
具体 limit 的数值根据访问量和数据量动态调优

也可根据逻辑不同,只在静态渲染类的操作上 include 这个 gc.php
访问量太大的话,可以先判断一个随机数是否小于 20 执行这个之类
lytofb
2017-02-22 09:47:32 +08:00
一天建一个表,过 7 天删除

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/330545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX