11
回答
百万数据插入mysql耗时问题
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

最近两天业务暴增,导致数据库数据量暴增 在每天早上9点开始 会执行一段业务代码 预计插入500万条数据 原表现在已经有1一个亿的数据量了 所以执行速度非常慢 占用内存严重 差不多 都把系统卡死了  现在的问题是 如何来优化这个问题 数据肯定是每天还会插入的 但是如何来减少这个插入时间 以及如何存储 数据库是mysql

举报
共有11个答案 最后回答: 5天前

恭喜你,说明你们业务量在增长,是好事。办法有:一是分表或分库,这个不容易做,需要一点时间准备才行;二是,对于数据库来说,如果是单纯的插入操作,其实速度是很快的,关键是插入的同时,你如果还有检索等服务,则会影响插入的速度,因此,建议你将应用的查询类操作指向其他的从库(当然要保证主从之间是同步的);三是,建议你们在此大业务量基础上,好好优化下数据库,包括数据库本身的配置以及操作系统层面的配置,还包括物理资源(如CPU,内存)等配置;四是,强烈建议你将磁盘更换为SSD的,性能提高会很明显。  以上

分表吧,每天一张表。

--- 共有 2 条评论 ---
DeMoNHaDeS 回复 @未闻花名flowers : 开发独立的查询模块,提供专用的跨表查询方法。统计信息可以提前统计好放到统计表里面。某些业务逻辑也可能需要根据数据量而变更。mysql单表达到千万级数据,性能就已经下降的比较厉害了。 5天前 回复
未闻花名flowers那查询怎么办 5天前 回复

硬盘如果不是SSD,赶紧换

 

如果是SSD,赶紧分库分表吧。。所有东西,一股脑的在一个表格里面,,而且早晚不删除,肯定是不行的。

按月,按其他维度进行分库分表是最基本的。

要详细分析。比如1条插入多少时间,总共多少时间。你们能接受最长业务时间是多少。

能否降低插入频率和数量?是否因为索引或者约束造成插入速度太慢?数据库的硬件是否需要增加?

很多地方需要考虑。

分区分表,这些只能减少读取压力,对写入分担比较少。因为写入IO就在那里。分库,读写分离倒是可以部分减轻读取对写入的干扰,但是写入服务器自己的IO不够还是不成。

 

--- 共有 2 条评论 ---
魔力猫 回复 @未闻花名flowers : 感觉线程开多了,开太多,反而各种调配会产生更多的问题。建议先砍一半线程试试。 3天前 回复
未闻花名flowers我们现在是做了读写分离的 今天用jvm看了一下 40万数据 大概要执行10多分钟 而且我们是异步的 同时开启了多个插入线程 9点的时候 大概有40个插入线程 每个算40万条吧 就是这个原因 把服务器内存暂满了 确实是io压力 5天前 回复

这种暴增的数据量,对业务表设计冲击很大,再说你们原有数据量就是一个亿了呀,肯定到后面要分表分库的操作。再说你们这种数据时间节点放到早上9点操作,不正是系统使用的高峰么,可以放凌晨操作。

如果只关心插入的话很简单,用消息队列定时插入,比如每隔多长时间插入几千上万条数据,一天之内的数据肯定能得道保障
--- 共有 1 条评论 ---
未闻花名flowers不行哦 如何不关注效率 这个就很好解决了 就是想让他快点插入完成 5天前 回复
顶部