我有4000个PIOPS的db.r3.2xlarge。我从EC2实例中插入了10亿行。现在有40GB的免费RAM。
目前,在4000个PIOPS中,READ PIOPS占用3000个,而我只获得1000个写入PIOPS。所以,这是一篇低调的文章。
我如何检查哪些正在使用READ PIOPS?以及如何加快速度?
谢谢。
编辑:
insert ignore into dna (hash, time, song_id) values (b%s, b%s, %s)
I'm using self.cursor.executemany(query, rows)
hash + time + song_id
是复合主键。
我正在使用AWS RDS InnoDB。
我有4000个PIOPS。然而,现在它总共停留在2000。我有60MB / s WRITE THROUGHPUT。
答案 0 :(得分:2)
如果哈希是您的主键或已编制索引,则您不会以主要的my和/或索引顺序插入。
此外,您正在使用INSERT IGNORE
,这表示您正在尝试避免不可避免的重复键错误,因为您插入的内容中存在重复数据。
由于这两个原因,InnoDB必须做很多准备工作才能将磁盘上的表空间中的相应页面加载到内存中,以找到主要和/或下一行需要的任何二级索引中的位置去,如果行是重复的话可能会浪费精力,并且可能需要页面拆分以便空间可用于将下一个散列随机插入到适当的位置。
如果hash是主键,那么在插入时删除所有其他索引可能对您有利,然后在最后添加它们,以便更有效地构建它们。
如果批次足够大并且哈希确实是主键,那么通过哈希对插入进行预排序应该会有所帮助。