造成RDS for mysql 有时出现CPU\IOPS负载高的可能原因
发布日期:2015-11-8 15:11:26
RDS的规格配置主要包含磁盘肯内存空间,其中内存则共同决定了实例的IPOS和CPU的规格。在使用的过程中经常可能遇到CPU、IOPS的负载跑高造成sql执行效率下降甚至严重时可能会出现HA切换。导致server端的应用程序响应较慢或者需要完成对RDS的重连来保证服务。这些负载升高的原因,我们下面从数据库的原理上进行分析。 首先,对于数据库来讲有四个基本的概念分别是物理读、逻辑读、物理写和逻辑写。 他们的概念为: 1. 物理读:从物理数据文件的读取操作; 2. 逻辑读:对于buffer cache中的读取操作; 3. 物理写:对于数据文件的写入操作。 4. 逻辑写:对buffer cache的写入操作; 这四种操作带来了对数据库不同的负载情况。 当读取一个记录的时候首先回去buffer cache里面去寻找有没有对应的记录,如果有对应的记录的会就直接读出,这样就产生了一次逻辑读的操作。因为buffer cache中的数据都是由“latch”来保护的,所以逻辑读的过程中需要不停地申请“latch”,但是这样就造成了在申请和释放“latch”和读取数据都是需要耗费CPU的,因此逻辑读对于CPU的负载较高。 若没有在buffer cache里面查看到该记录,就需要到数据文件中查看,由此便产生了物理读的情况。而物理读会产生逻辑写和逻辑读,当用户的物理读的数量增加后就会导致IOPS的增长;另外,如果内存使用量过多的话,buffer cache会将其中的脏块刷回数据文件,同样也会导致IOPS的升高。 同样,写数据时并非直接写到数据文件里面,而是先写在buffer cache里,之后再根据buffer cache的lazy write机制和checkpoint机制写回到数据文件中,这种情况也将导致IOPS的升高。 总之,RDS for mysql 出现CPU\IOPS负载高的原因便是由以上所述的几点原因造成的。 如果问题还未能解决,请联系售后技术支持。 上一条: 关于RDS for mysql实际内存分配情况说明 下一条: 关于数据库是否可以转成UTF-8的问题
|