У меня было большое потребление оперативной памяти, и в поисках решения я выполнил сценарий 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";
?>
И когда он закончил выполнение, я увидел, что было освобождено 600 МБ ОЗУ. Однако загрузка ЦП снизилась с 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 |
+-------+----------+---------------------+-------+---------+------+-------+------------------+
Процесс 1020 пользователя rdsadmin присутствует постоянно, я полагаю, он должен быть там. Но очевидно, что нет потоков, которые могли бы использовать столько ЦП ...
У вас есть представление о том, что может происходить, и о возможных решениях?
Спасибо!
Для меня решением было перезапустить экземпляр через консоль AWS, и теперь все работает, как ожидалось. Экземпляр использует 0–10% ЦП большую часть времени, а оперативная память использует примерно на 1 ГБ меньше, чем раньше.