Дано:
БД в PostgreSQL;
на одной таблице взведен триггер before insert for each row;
триггер в зависимости от полученны данных обновляет/создает записи в других таблицах;
проделал тест (инсертил 256к записей) with/without trigger разница примерно в 10ть раз :( т.е. триггер аццки тормозит а данные идут почти в реалтайм :( и по времени обработки ну никак не укладываюсь :(((;
Требуется:
Выявить узкие места в сохраненке и оптимизировать;
кто какие методы может посоветовать???
>а вообще... если в риалтаеме то может лучше пересмотреть концепцию?
>например сначала писать на винт в "сыром" виде, а потом по крону в БД
>пихать?
>ну или copy заюзать...
так и реализованно :-) каждые 5ть минут выгребаются сохраненные в "архив" данные и инсертяца в БД... реалтайм следует читать как "реалтайм" :)
тюнинг самого PostgreSQL проведен, загвоздка именно в хранимке... можеш подскажеш как например заставить explain analyze insert blablabla анализировать исполнение хранимки т.е. детальный разбор ее исполнения а не просто выдавать время ее отработки???
Сразу скажу: я не специалист в PostgreSQL и в других СУБД.
1)но ИМХО postgresql для realtime insert'ов слабо подходит. (движок версионый)
2)Где-то на сайте постгресса читал, что если данных много,
то лучше юзать copy. (но тебе это не подходит)
как насчет sqlite?
а насчет explain'a: а если взять и руками прогнать куски твоего запроса с ним (explain analyze)?
может задачу стоит пересмотреть?
если расскажешь, может, что вместе и придумаем...
На чем процедура написана (я, мягко говоря, не спец в Pg, но там же куча языков поддерживается)? Может быть, есть какая-нибудь возможность прицепиться к ней родным для этого языка профайлером?