场景描述
数据迁移至MySQL实例后,sql语句执行明显慢于原数据库。
原因分析
数据迁移至MySQL实例后,第一次执行的sql比在原数据库执行的性能差, 是由MySQL的buffer_pool机制决定的:sql语句第一次执行时,由于执行计划和查询数据等信息未加载至buffer_pool中,需要生成执行计划,并从磁盘加载数据,磁盘IO读写性能明显差于内存buffer_pool的读写性能,因为第一次执行速度会慢很多;sql第一次执行完后,读取的数据会被存放于内存的buffer_pool中,当第二次执行相同语句时,数据直接从buffer_pool中读取,因此数据的访问速度明显快于第一次从磁盘访问数据速度。
该场景中,在原数据库中执行sql读取的数据一般来源于buffer_pool,访问速度极快。当数据迁移到云上MySQL时,第1次执行同样的sql语句,需要从磁盘读取,就会访问较慢,当再次执行相同sql会从内存读取,执行速度就会恢复正常。
解决方案
该场景属于正常现象,在同一个数据库中,第1次执行sql时很慢,但再次执行由于数据已经被加载到buffer_pool中,执行速度会明显提升。