Мой экземпляр Oracle, установленный на RDS Amazon, заполнил хранилище объемом 20 ГБ примерно за 20 минут. Я проверил все приложения, использующие эту БД, и ничего необычного - я не могу понять, почему это могло произойти.
Смотрите график от CloudWatch:
Как видите, я увеличил объем хранилища до 25 ГБ в надежде, что смогу «что-нибудь встряхнуть», но, очевидно, все, что он сделал, это увеличил свободное пространство на 5 ГБ.
Этот экземпляр запускает веб-приложение с очень низким трафиком, и вы можете видеть, что свободное пространство очень стабильно при использовании. 20 ГБ должно быть более чем достаточно для этой системы. В чем дело?
Какие-нибудь советы, как я могу выяснить, что занимает все пространство?
Редактировать: Некоторая статистика, которую мне удалось получить из БД:
SELECT
( SELECT SUM(BYTES)/1024/1024/1024 DATA_SIZE FROM DBA_DATA_FILES ) +
( SELECT NVL(SUM(BYTES),0)/1024/1024/1024 TEMP_SIZE FROM DBA_TEMP_FILES ) +
( SELECT SUM(BYTES)/1024/1024/1024 REDO_SIZE FROM SYS.V_$LOG ) +
( SELECT SUM(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024 CONTROLFILE_SIZE FROM V$CONTROLFILE) "Size in GB"
FROM
DUAL;
Производит:
Size in GB
------------------
19.360321044921875
И, используя процесс исключения, я понял, что это DBA_TEMP_FILES
это занимает 18 из 19 ГБ.
Что в DBA_TEMP_FILES? Как мне их очистить?
Хорошо, я изменил размер своего табличного пространства TEMP и, похоже, решил мою проблему.
Вот команда, которую я выполнил:
ALTER TABLESPACE TEMP SHRINK SPACE KEEP 512M;
Кажется, проблема устранилась (размер БД увеличился с 19 ГБ до 2 ГБ), но я все еще не понимаю, почему это могло произойти в такой маленькой среде.
Добавлены некоторые будильники CloudWatch, чтобы в следующий раз я мог воспользоваться этим заранее (если будет в следующий раз).