powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обработка событий внутри функции pl/pgsql
6 сообщений из 6, страница 1 из 1
Обработка событий внутри функции pl/pgsql
    #32121240
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Ситуация такова. Пишу функцию на pl/pgsql, при вызове которой в таблицу заносится указанное количество записей. Функция, по задумке, должна возвратить затраченное на вставку записей время.
Функция имеет вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create function ins_records(integer) returns time as '
declare
s timestamp;
f timestamp;
t time;
begin
s:=now();                -- Отмечаем время до вставки записей
for i in 1..$1             -- Организуем цикл для вставки $1 количества строк
loop
insert into test_ins(strng, intgr) values (''dt'', 1);  -- Вставляем запись в таблицу
end loop;
f:=now();                -- Отмечаем время после вставки записей
t:=f-s;                    -- Находим разность
return(t);                -- Возвращаем время вставки записей
end;
' language 'plpgsql';


В результате после вставки функция всегда возвращает 00:00. Т.е. такое ощущение, что функция обрабатывает снятие временных меток до и после цикла в одно и то же время. Почему?
...
Рейтинг: 0 / 0
Обработка событий внутри функции pl/pgsql
    #32122137
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
now() возвращает время начала транзакции
используй timeofday()
...
Рейтинг: 0 / 0
Обработка событий внутри функции pl/pgsql
    #32122392
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Sad!
Меня на phpclub забанили, так бы и там тебя спросил :)

Попробую... Раз Sad Spirit посоветовал, значит, должно получиться :)

Спасибо!
...
Рейтинг: 0 / 0
Обработка событий внутри функции pl/pgsql
    #32122763
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь моя функция выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create function ins_records(integer) returns time as '
declare
s time;
f time;
t time;
begin
s:=cast(substr(timeofday(),12,15) as time);
for i in 1..$1
loop
insert into test_ins(strng, intgr) values (''dt'', 1);
end loop;
f:=cast(substr(timeofday(),12,15) as time);
t:=f-s;
return(t);
end;
' language 'plpgsql';


Сразу хотелось бы спросить знатоков о приемлемости результатов моего мини-теста. Исходные данные:

Структура таблицы test_ins. 3 поля: id - serial, strng - varchar(20), intgr - integer

Postgres 7.2.1.

ASP Linux 2.2.19-3

PIII-1Ghz, 256MB ОЗУ

Каждый раз перед тестом выполняется TRUNCATE TABLE и VACUUM

Запуск функции производился в psql (если это имеет значение)

Результаты: Вставка 1 млн записей за 1 минуту 47 секунд. Это если создан индекс на поле id. При отсутствии индекса тот же объем записей вставляется за 1 минуту 24 секунды.
Как мне интерпретировать полученные результаты? Хорошо, приемлемо, или плохо - есть где поработать. Если так, то где крутить?

__________
Заранее благодарю.
...
Рейтинг: 0 / 0
Обработка событий внутри функции pl/pgsql
    #32124975
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Как мне интерпретировать полученные результаты? Хорошо, приемлемо, или плохо - есть где поработать. Если так, то где крутить?

Боюсь что не понимаю вопроса. :)
Это твоё приложение? Твоё. Откуда посетители знают, хороши результаты, приемлемы, или плохи? :)

А вообще, ты что, в этом приложении только записи вставлять собираешься?
...
Рейтинг: 0 / 0
Обработка событий внутри функции pl/pgsql
    #32125340
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, и правда не совсем доступно выразился :)

Попробую объяснить. Не стоит рассматривать это как рабочую структуру, какое-то более-менее практическое приложение. Я лишь задался вопросом: насколько быстро выполняет мой сервер определенное конкретное действие (в данном случае - вставка)? Я знаю, что именно данное действие требует для своего выполнения больше времени.
Может быть, у кого-то постгрес вставляет этот миллион за 10 секунд, а может и за 3 минуты - я не знаю. Просто интересно сравнить и взять хоть какой-нибудь ориентир.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обработка событий внутри функции pl/pgsql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]