前段时间做了一次数据库主键uuid改为自增int降低插入数据iops的小小实践,当然影响插入iops的不仅仅是主键,如果其他索引也比较多,iops也可能不会有明显的降低,这跟索引的存储有关,文章的后面仔细探讨
一 背景
1、说明
数据库说明:
4核8G,iops最大5000,网络带宽富余,cpu和内存都是健康状态。存储引擎innodb
现有数据量和表结构说明:
亿级别,分多个表,每个表的数据量在百万级别。主键为varchar类型uuid,其他字段的索引2个。具体的数据结构因为涉及公司信息就不列出来了。
业务需求:
业务需要将百万级的数据尽可能快的插入到数据库中,并且数据是分在不同的分表中,单条单条插入。
性能瓶颈:
数据库插入速度受限,这里我们在应用服务器做了限流,这次优化主要是想提高数据插入速度
2、现状
插入速度恒定(假设每秒插入500)的情况下,iops越来越高。这里之所以限制每秒插入速度就是为了保证数据的稳定性。
二 存储原理探究
针对上述问题,我们在以下几个方面进行探讨
2.1 Innodb索引结构
关于索引网上的文章很多,这里不再赘述。
Innodb中主键索