Использование PG 9.1 в Ubuntu 12.04.
В настоящее время нам требуется до 24 часов для выполнения большого набора операторов UPDATE в базе данных, которые имеют вид:
UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
(Мы просто перезаписываем поля объектов, идентифицированных по ID.) Значения поступают из внешнего источника данных (еще нет в БД в таблице).
Таблицы имеют несколько индексов и не имеют ограничений по внешнему ключу. Коммит не делается до конца.
Для импорта pg_dump
всей БД требуется 2 часа . Это похоже на базовый уровень, на который мы должны разумно ориентироваться.
Если не считать создание специальной программы, которая каким-то образом восстанавливает набор данных для PostgreSQL для повторного импорта, есть ли что-то, что мы можем сделать, чтобы приблизить объемную производительность UPDATE к производительности импорта? (Это та область, в которой, по нашему мнению, деревья слияния с лог-структурой хорошо обрабатываются, но нам интересно, можно ли что-нибудь сделать в PostgreSQL.)
Некоторые идеи:
- сбросить все неидентификационные индексы и восстановить после этого?
- увеличение контрольных точек, но помогает ли это в долгосрочной перспективе?
- используя методы, упомянутые здесь ? (Загрузить новые данные в виде таблицы, затем «объединить» старые данные, где идентификатор не найден в новых данных)
По сути, есть куча вещей, которые можно попробовать, и мы не уверены, какие из них наиболее эффективны, или мы упускаем из виду другие вещи. В следующие несколько дней мы будем проводить эксперименты, но мы подумали, что спросим и здесь.
У меня есть параллельная загрузка таблицы, но она доступна только для чтения.
explain analyze
что он использует индекс для поиска?