• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
造成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负载高的原因便是由以上所述的几点原因造成的。

  如果问题还未能解决,请联系售后技术支持。