我的内存消耗很高,为了寻找解决方案,我执行了脚本 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。