爱陪小樱桃

导航

 

mysql 一次插入多少条是最佳性能

  • 我们经常会浏览,分享,点赞,都会产生数据,这些数可能会被存储到不同的地方,其中最常见的存储载体就是--数据库。

  • 根据场景和数据特性,可以有关系型数据库mysql,也有非关系数据库,例如:Redis,比如说:当你在网站点赞的时候,为了快速响应,可能是一个基于内存的数据库如Redis首先记录这个动作,后台在周期性能的同步这些动作到持久化的存储系统中。

问题:当巨大数据流入时,如何高效稳定的把数据存储到数据库中,每次多少条,

  1. 很多时候,我们只知道批量插入可以提高性能,我们要知道为什么?

问题:如何快速插入,并保证有效性,

答案:
1.写入缓存与磁盘同步。
2.事务日志与数据持久化

1.写入缓存与磁盘同步:

当数据被写入数据库时,它首先应该被写入缓存中,而不是缓慢的磁盘中,然后后台线程在适当的时间点将数据同步到磁盘上。
这样做的原因:

1.速度差异:RAM(随机取存储器)的速度远远快于磁盘,RAM读数据的读取几乎是瞬间,而磁盘,无论传统的机械硬盘,还是现代的固态硬盘,读写速度都低于RAM。
2。磁盘I/O的成本:每次进行磁盘的I/O操作都有一定的开销,如果数据库频繁的进行小批量的磁盘写入,会导致I/O开销,得不偿失。
首先将数据写入RAM,在数据库可以把数据同步到磁盘之前,累积多个写入操作,最后一次大量的数据写入磁盘,从而减少I/O的次数和开销。
结论:先写入缓存,在同步到磁盘,这种不仅仅加速了写入操作,有效的减少了I/O,提高数据库性能

问题:如果数据库还不及到磁盘,结果宕机了。

InnoDB在进行更新操作时候,采用了,writeAhead Log 策略,这就是意味着:数据被写入磁盘之前,相关的操作会首先记录到redo log日志里面,这种策略赋予了mysql在系统崩溃后的恢复能力。

2.事务日志与数据持久化:

为了确保数据的完整性,数据库首先将插入操作写入事务,只有当数据安全的写入日志,才会移动到实际的数据库表中。

单条插入和批量数据插入的差异:

单条插入1000次,就是1000次的事务开销,批量插入,可以将这些数据在一个事务中插入,大大减少了总的事务开销。

批量插入对数据库性能的影响:

批量插入可以减少磁盘I/O的次数,从而提高性能,但是如果一次批量数据量过大,它可能会暂时阻塞其他的操作,影响数据的响应时间。

为了达到最佳的性能可能需要根据实际的情况调整插入的数据量,过少的数据导致数据库性能优化不足,过多的数据导致响应时间增加。

如何决定合适的数据插入量

1.磁盘I/O:
磁盘I/O是插入数据的瓶颈之一:过多的插入操作,会导致磁盘I/O的饱和,降低系统的响应时间。
确保在高插入时候:不能超过其峰值。

2.大量插入时候可能会增加RAM的使用量,定期检查内存,确保有足够的资源来处理大量的插入操作。

3.事务的大小:
较大的事务:可能导致长时间的锁定,从而影响其他查询的性能。
太小的事务:增加事务的数量,性能优化没有太大意义。

估值的计算:

  1. 比如一条记录:字段Int,4字节varchar,最小50字节最大255字节,date,3字节,float 4字节。

这条记录的大小:4+50+3+4=61字节;
最大记录大小:4+255+3+4=266字节;
2. 内存分析:
假如:8G内存,预留20%,可使用是:80.8=6.4G
so:我们可以插入的最大记录是:
最大记录数(平均大小):6.4
10的9次方字节 / 61字节
最大记录数(最大大小):6.4*10的9次方字节 / 266字节

  1. 硬盘分析:
    假如是:512G硬盘,可以存储的最大记录数为:

最大记录数(平均大小):51210的9次方字节 / 61字节
最大记录数(最大大小):512
10的9次方字节 / 266字节

避免频繁的会话提交

在批量插入期间,频繁的会话可能会导致,性能下降,一般在插入完所有的数据后再进行一次会话提交。

posted on 2024-10-30 23:43  cherry小樱桃  阅读(24)  评论(0编辑  收藏  举报