gpt4 book ai didi

MySQL 分区 : SELECT by ID, 但按日期删除

转载 作者:行者123 更新时间:2023-11-29 03:37:33 25 4
gpt4 key购买 nike

考虑下表:

CREATE TABLE `event` (
`uid` bigint(13) NOT NULL,
`time` bigint(14) NOT NULL,
`type` smallint(5) NOT NULL,
`msg` varchar(2048) DEFAULT NULL,
KEY `uid` (`uid`),
KEY `time` (`time`),
KEY `time_type_uid` (`time`,`type`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我主要做的事情:

  • INSERT每天约 100 万行,当前大小约为 1 亿个条目
  • DELETE所有超过 100 天的行:
    • 声明#1:DELETE FROM event WHERE <code>time</code> < unix_timestamp()-100*86400;
    • 声明#2:DELETE FROM event WHERE <code>time</code> < unix_timestamp()-100*86400 LIMIT 1000;
  • 用户将 SELECT通过 UID 的所有事件,总共每天大约 500 个查询,所以不是很多:
    • 声明#1:SELECT * FROM event WHERE <code>uid</code>=4711 AND <code>type</code> IN (23,1002,12,1);
    • 声明#2:SELECT * FROM event WHERE <code>uid</code>=4711 AND <code>type</code> IN (23,1002,12,1) AND <code>time</code> BETWEEN 1381051061 AND 1381051861;

处理这个表变得很慢,特别是自从 DELETE工作 block INSERT s/SELECT在 table 上。我们尝试了每日批量 DELETE如上所述(语句#1),如果不阻塞表就不再起作用。目前我们每 30 秒删除一次(语句 #2),但这会阻塞 10 秒。

我们计划增加 INSERT加载,但第一次测试导致线程卡在“系统阻塞”状态,我猜这是由于 I/O。服务器设置按照 mysqltuner.pl 的建议进行了优化。硬件系统肯定有 I/O 问题并且是“原样”,不幸的是由于多种原因无法更改。我们甚至没有根访问权限。

分区甚至是一种解决方案吗?MyISAM 是最好用的引擎吗?在改进硬件之前,我们需要尽可能优化任何东西。

最佳答案

只需使用 InnoDB with snapshot isolation以获得可读的快照。这样读者就不会被你的大删除作业挡住。我认为您不应该针对这种相当标准的情况进行分区。分区是一个大锤子和侵入性的。也许一些简单的措施就足够了。

关于MySQL 分区 : SELECT by ID, 但按日期删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19199992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com