Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Функции возвращающие setof работают (IMHO) неприлично медленно. В частности фукция которая собирает струку запроса, потом тупо возвращает через Код: plaintext Результат запроса. Работает 350ms, а если просто произвести запрос, то время выполнения в пределах 20ms. т.е. 95% времени работы ХП Уходит на накладные расходы plpgsql Задался целью выяснить на сколько на ХП С будет быстрее. В результате аналагичная функция на С стала работать примерно на 1% быстрее. т.е. почти также. Использовался SPI_execute, SPI_returntuple. Оптимизировать код вроде уже некуда.. Получается что на С подобные функции писать не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2007, 18:44 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Алексей КлючниковФункции возвращающие setof работают (IMHO) неприлично медленно. В частности фукция которая собирает струку запроса, потом тупо возвращает через Код: plaintext Результат запроса. Скорее всего это тормоза "переключения контекста" (по типу Оракловых). ЗЫ А за инфу и ковыряния - спасибо, будем-с знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 11:33 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Может это из-за того, что простой запрос работает с "сылками на данные", а функции приходиться "формировать таблицу" и заполнять ее выбранными данными. Ну, то есть я хочу сказать что при возврате setof все эти данные копируються во что-то типа темповой таблицы (как конкретно это реализованно внутри я не знаю) и из за этого получаеться такая разница? А то, что на С быстрее не стало - это не удивительно. Чему тут быстрее работать, когда практически всю работу все равно постгрес сам делает. Если б у вас в функции куча переменных туда-сюда гонялась и в цикле сложная логика крутилась - тогда думаю разница была бы заметнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 16:21 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
JelisМожет это из-за того, что простой запрос работает с "сылками на данные", а функции приходиться "формировать таблицу" и заполнять ее выбранными данными. Одни вопросы и никаких ответов. Надо попробовать сделать функцию которая будет производить запрос, но дальше ничего с ним не делать. Это наверно позволит точно сказать, запрос тормозит или формирование некой структуры для возврата таблицы в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 16:37 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Алексей КлючниковФункции возвращающие setof работают (IMHO) неприлично медленно. В частности фукция которая собирает струку запроса, потом тупо возвращает через Код: plaintext Результат запроса. Работает 350ms, а если просто произвести запрос, то время выполнения в пределах 20ms. т.е. 95% времени работы ХП Уходит на накладные расходы plpgsql Задался целью выяснить на сколько на ХП С будет быстрее. В результате аналагичная функция на С стала работать примерно на 1% быстрее. т.е. почти также. Использовался SPI_execute, SPI_returntuple. Оптимизировать код вроде уже некуда.. Получается что на С подобные функции писать не стоит. Т.к. Вы не дали время загрузки, то осмелюсь спросить.. А Вы собственно коннект не закрывали, когда повторно её звали (хранимку на сях)... При первом вызове - есть время потгрузки (в процесс клиента), во второй - сам вызов хранимки... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 14:09 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
kolobok0 Т.к. Вы не дали время загрузки, то осмелюсь спросить.. А Вы собственно коннект не закрывали, когда повторно её звали (хранимку на сях)... При первом вызове - есть время потгрузки (в процесс клиента), во второй - сам вызов хранимки... с уважением (круглый) Какой такой коннект? explain analyze select * from func_c(1,2,3); И все, никакой загрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 14:34 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
JelisМожет это из-за того, что простой запрос работает с "сылками на данные", а функции приходиться "формировать таблицу" и заполнять ее выбранными данными. Ну, то есть я хочу сказать что при возврате setof все эти данные копируються во что-то типа темповой таблицы (как конкретно это реализованно внутри я не знаю) и из за этого получаеться такая разница? А то, что на С быстрее не стало - это не удивительно. Чему тут быстрее работать, когда практически всю работу все равно постгрес сам делает. Если б у вас в функции куча переменных туда-сюда гонялась и в цикле сложная логика крутилась - тогда думаю разница была бы заметнее. Да, ответов не очень много, а те что есть, и то - не ответы а больше предположения. Квалификации не хватает :-) Но, в обоснование своего предположения, вот чего я нашел в доке по RETURN NEXT http://www.postgresql.org/docs/8.2/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING RETURN NEXT does not actually return from the function — it simply saves away the value of the expression. ... Note: The current implementation of RETURN NEXT for PL/pgSQL stores the entire result set before returning from the function, as discussed above. That means that if a PL/pgSQL function produces a very large result set, performance may be poor: data will be written to disk to avoid memory exhaustion, but the function itself will not return until the entire result set has been generated. A future version of PL/pgSQL may allow users to define set-returning functions that do not have this limitation. Currently, the point at which data begins being written to disk is controlled by the work_mem configuration variable. Administrators who have sufficient memory to store larger result sets in memory should consider increasing this parameter. Правда еще вопрос, в 15 раз медленнее толька из-за того что промежуточные результаты храняться, или еще чего тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 15:35 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Алексей Ключников kolobok0 Т.к. Вы не дали время загрузки, то осмелюсь спросить.. А Вы собственно коннект не закрывали, когда повторно её звали (хранимку на сях)... При первом вызове - есть время потгрузки (в процесс клиента), во второй - сам вызов хранимки... с уважением (круглый) Какой такой коннект? explain analyze select * from func_c(1,2,3); И все, никакой загрузки. внешняя сишная функция подгружается в ПРОЦЕСС КЛИЕНТА (на стороне сервака) на момент ПЕРВОГО обращения к ней. Дальнейшее обращение происходит к уже загруженному экземпляру. Если Вы компилируетесь и подкладываете новую - то не выйдет (она загружена в процесс), пока Вы не закроете коннект на котором работал клиент (например окошечко квэри в пэджэ-админе). я надеюс не стоит объяснять, что загрузка модуля (дэлеле под форточками) происходит не медленно, а очень медленно (по сравнению с самим запросом) ? с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 15:46 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
kolobok0 внешняя сишная функция подгружается в ПРОЦЕСС КЛИЕНТА (на стороне сервака) на момент ПЕРВОГО обращения к ней. Каким методом можно замерить время загрузки? Я привел время выполнения без загрузки, т.к. засекал време на первого исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 12:39 |
|
||
|
ХП на C vs plpgsql
|
|||
|---|---|---|---|
|
#18+
Алексей КлючниковЯ привел время выполнения без загрузки, т.к. засекал время на первого исполнения. приблизительная разница между первым и последующими обращениями, не закрывая коннекшен. посему иногда актуально грузить (активировать) Ваши хранимки на момент коннекта, а не в процессе работы... например, в админе видно время выполнения хранимки. при загрузке время значительно отличается (в большую сторону), от времени повторных выполнений. возможно это не Ваш случай - посему начал с вопроса. Да, сказанное справедливо для сервака под форточками. Как на никсах дела обстоят - х.з... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 14:17 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34241424&tid=2005809]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 373ms |

| 0 / 0 |
