ebonfortress
Дата: 18.02.2015 16:38:56
Есть рид-онли база, в которую время от времени заливаются апдейты (типа таблица 50 миллионов строк, вставить 1 миллион, поменять 10 миллионов, UPDATE items i SET name = ii.name FROM items_import ii WHERE i.id = ii.id, такой запрос). Апдейт дико тормозит. Как можно ускорить процесс, с учетом того, что надежность не нужна вообще?
Leonid Kudryavtsev
Дата: 25.02.2015 18:40:18
1. Вместо INSERT использовать COPY.
2. UPDATE мало того, что _будут_ тормозить, так еще в старых версиях (начало 2000) приводили к необходимости VACUM. В новых версиях не знаю.
Если "таблица 50 лямов, залить 1 лям и поменять 10" и время критично. Лично я бы подумал над тем, что бы взять C,Java etc, написать приложение. Все посчитать в приложении (оперативной памяти, каком нибудь хорошем и хитром контейнере, в общем, детали) и 50 лямов быстро, командой COPY залить в PostgreSQL.
IMHO
думаецца
Дата: 25.02.2015 18:51:50
Leonid Kudryavtsev |
---|
Лично я бы подумал над тем, что бы взять C,Java etc, написать приложение. Все посчитать в приложении (оперативной памяти, каком нибудь хорошем и хитром контейнере, в общем, детали) и 50 лямов быстро, командой COPY залить в PostgreSQL. IMHO |
можно на пустой базе даже в том же инстансе провести "расчет" выгрузкой SELECT в COPY -- это точно дешевле клиентского овна, но копи всем куском на табличке с триггерами тоже не подарок.
т.ч. проще всего -- написать в соседней базёнке того же интсанса нарезалку на батчи, и запустит dblink батчики на обработку. Примерно - по 1000 -- 10000 операций. (длинная транзакция висит в стороне - не лочит вакуумы в БД назначения и прочее)