У нас есть база данных среднего размера на RDS, работающая на 10,1 (32 ядра, 240 ГБ ОЗУ, общее дисковое пространство 5 ТБ, 20 тыс. PIOPS) с несколькими большими (100 ГБ +, десятки миллионов строк) таблицами, которые используют индексы GIN для полной текстовый поиск. Время от времени нам нужно индексировать очень большие (сотни страниц) документы, и в результате наши таблицы имеют комбинацию от маленьких (десятки токенов) до очень больших (сотни тысяч токенов, близких к пределу tsvector в 1 МБ). У всех наших индексов GIN отключено fastupdate - мы обнаружили, что включение fastupdate привело к значительной блокировке и что мы получили лучшую среднюю производительность с выключенным. За последние несколько лет мы приложили немало усилий, чтобы настроить нашу базу данных так, чтобы у нас была приемлемая производительность чтения и записи для этих таблиц.
Одна повторяющаяся и предсказуемая проблема, с которой мы сталкивались регулярно на протяжении нескольких лет, заключается в том, что вставка или обновление строк в любой таблице с индексами GIN приводит к чрезвычайно большим сокращениям свободного дискового пространства - т.е. вставке строк по 10 КБ общим объемом 10 ГБ может привести к временной потере нескольких сотен гигабайт свободного дискового пространства в течение 2-3 часов (а может быть и больше - мы стараемся сохранить буфер свободного дискового пространства на 10-15%, чтобы он часто представлял почти все доступное дисковое пространство) , Как только мы прекращаем операцию, свободное дисковое пространство быстро восстанавливается, что заставляет нас думать, что это происходит из-за журналов или какой-то временной таблицы. Наши настройки work_mem и maintenance_work_mem довольно большие (12 ГБ и 62 ГБ соответственно). Размер базы данных на диске практически не изменяется во время этого процесса.
К сожалению, мы находимся на RDS, поэтому мы не можем напрямую подключиться к экземпляру по ssh, чтобы увидеть, какие файлы настолько велики, и ни один из журналов, которые мы видим (ни журналы wal), не достаточно велик, чтобы объяснить это. процесс. Будем очень благодарны за любые предложения о том, где искать причину этой проблемы (или о каких-либо настройках, которые мы можем настроить, или изменениях, которые мы могли бы внести, чтобы остановить его).
Спасибо!