Доброго дня форумчане !
Наблюдаю явление, которое не могу объяснить.
Вариант № 1
Загружаю 600 строк в таблицу, одно из полей хранит двоичные данные. Всего двоичных данных 3.5 Гб
Далее, читаю по очереди в 10 потоков, дисковая система ложится (100% акт. времени) и операция длится часами.
Вариант № 2
Загружаю 600 строк в таблицу, одно из полей хранит ТОЛЬКО путь к файлу. Объем файлов те же 3.5 Гб
Далее, читаю по очереди в 10 потоков, а двоичные данные читаю напрямую с диска, дисковая система живая (10-50% акт. времени) и операция длится несколько минут.
Т.е. между двумя вариантами разница лишь в источнике двоичных данных, в первом из базы, во втором с диска, в остальном алгоритмы одинаковы. Я отлично понимаю в каком месте правильно хранить двоичные данные, понимаю что хранение в СУБД это доп нагрузка, и это не правильно, но, скажите пожалуйста, откуда разница во времени в 100 раз ? Что делает postgres такое, что нагружает дисковую систему намертво ?
Ответ: причина в параметре
Ответ: причина в параметре checkpoint_segments, слушком маленький, так же следует обратить внимание на параметры связанные с ним.