优化一些 Mysql 表后,Amazon RDS CPU 约为 55-65%

优化一些 Mysql 表后,Amazon RDS CPU 约为 55-65%

我的内存消耗很高,为了寻找解决方案,我执行了脚本 mysqltunner 来监控 Mysql 数据库中可能的优化。它的第一个建议是我必须运行

OPTIMIZE TABLE tablename;

因此,我有大约 40 个表需要优化,我使用以下 php 脚本运行它:

<?php

    // connect your database here first 

    $mysqli = mysqli_connect("localhost", "user", "password", "database"); 

    if($mysqli){
        echo "Connexion established";
    }else{
        echo "Imposible to establish a connexion to the database";
    }

    $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database'";

    $rs = mysqli_query($mysqli, $sql);

    while($row = mysqli_fetch_array($rs))
        {
            $tbl = $row[0];
            $sql = "OPTIMIZE TABLE `$tbl`";
            mysqli_query($mysqli, $sql);
        }

    mysqli_close($mysqli);

    echo "Optimization finished";

?> 

当它执行完毕时,我发现 600Mb 的 RAM 被释放了。然而,CPU 的使用率从 5% 上升到了 55%。

我连接到数据库并运行

SHOW PROCESSLIST;

接收此输出

+-------+----------+---------------------+-------+---------+------+-------+------------------+
| Id    | User     | Host                | db    | Command | Time | State | Info             |
+-------+----------+---------------------+-------+---------+------+-------+------------------+
|  1020 | rdsadmin | localhost:39883     | mysql | Sleep   |    3 |       | NULL             |
| 60204 | user     | 172.31.11.223:40268 | NULL  | Query   |    0 | init  | show processlist |
+-------+----------+---------------------+-------+---------+------+-------+------------------+

用户 rdsadmin 的进程 1020 一直在那里,我想它一定在那里。但显然没有线程占用这么多 CPU...

您是否知道可能发生的情况以及可以采取的解决办法?

谢谢你!

答案1

对我来说,解决方案是通过 AWS 控制台重新启动实例,现在一切都按预期运行。实例大多数时间消耗 0-10% 的 CPU,RAM 内存使用量比以前减少了约 1Gb。

相关内容