Добрый день! Подскажите по vinyl, пожалуйста. Есть тачка: 56 CPU, 256 GB RAM, 3.8 TB SSD. На ней крутятся 4 шарда тарантула версии 1.10.7. В схеме данных 1 спейс на виниле без вторичных индексов и триггеров. Нагрузка на шард: 2k-8k ops REPLACE, < 1 ops SELECT.
Начали заканчиваться диски по свободному месту, нужно удалить старые записи. Для этого пытался использовать отдельный файбер, что-то вроде expirationd, только своя реализация: ходит через :pairs
по индексу, набивает пачку записей и удаляет.
Возникает проблема с процом: тарантулы отъедают по 1 ядру на шард и перестают вывозить на запись (думаю, что tx тред заканчивается). Файбер yield'ит исправно, но встаёт в чтения: select([1589640707], LT) => [1589639904, 158007759, 1879260540, 14091669010076601, 1592494072] took too long:8710.969 sec
. Такая штука вчера вызвала read_view транзакцию и сильно убила перформанс на REPLACE.
База сейчас для чтений не оптимизирована: vinyl_read_threads = 4, vinyl_bloom_fpr = 1, vinyl_cache = default = 128MB, vinyl_page_size = 2000*tuple. Что нужно безопасно покрутить, чтобы винил нормально вывозил итерирование по индексу и как правильно рассчитать значения?
Включил bloom_fpr в 0.05 и vinyl_cache поставил 16Gb. Поставил удаления на 1k RPS. До компакшена всё работало хорошо, после сильно выросли тайминги на чтение.