Назад | Перейти на главную страницу

как исправить медленный запрос mysql на Amazon и 100% CPU на маленьком экземпляре rds

Я новичок в сервисах MySQL и AWS RDS. Я просто считаю, что мой запрос к MySQL на небольшом экземпляре RDS занимает примерно более 5 секунд. Кроме того, я заметил с помощью CloudWatch, что ЦП rds всегда загружен на 100%. Размер моей базы данных сейчас составляет около 1 миллиона. Может ли кто-нибудь сказать мне, что я могу сделать, чтобы это исправить?

Один запрос выглядит так:

mysql> EXPLAIN SELECT * FROM iApps;
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------+
| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows    | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------+
|  1 | SIMPLE      | iApps | ALL  | NULL          | NULL | NULL    | NULL | 1165255 |       |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------+
1 row in set (0.04 sec)

Вот еще один запрос:

mysql> EXPLAIN SELECT * FROM iApps WHERE familyName='Thompson' AND firstName='David';
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows    | Extra       |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
|  1 | SIMPLE      | iApps | ALL  | NULL          | NULL | NULL    | NULL | 1166070 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.08 sec)

Времени здесь довольно мало, но с моим кодом оно довольно медленное. Я использую пакет python mysqldb для всех операций, может быть, в этом проблема?

Я искал в Интернете эту проблему. Но я не совсем понимаю решения со страниц. Я начальный уровень для базы данных.

План EXPLAIN второго запроса выдает его. Вам нужен index.

Пункт WHERE familyName='Thompson' AND firstName='David' это ключ.

Просто запустите следующее:

ALTER TABLE iApps ADD INDEX familyName_firstName_ndx (familyName,firstName);

Уверяю вас, это ускорит этот конкретный запрос. Другие запросы, у которых другие WHERE для статей потребуются разные индексы.

Что касается скачка мощности процессора, это не должно вызывать удивления. Полное сканирование таблицы с 1 миллионом строк будет перемещать данные в буферный пул InnoDB и из него. Помните, что журналы транзакций в Amazon RDS всегда имеют одинаковый размер (innodb_log_file_size = 128M) для всех семи моделей RDS. Транзакции, которые проходят через те же строки, которые вы выбираете, также будут влиять на использование ЦП, поскольку они также управляют журналами транзакций.