powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Управление приоритетом postgres-процессами
7 сообщений из 7, страница 1 из 1
Управление приоритетом postgres-процессами
    #32518159
YuSha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На PostgreSQL работает биллинг.
Возникла ситуация, когда необходимо установить разные приоритеты процессов postgres для различных типов клиентских подключений.
- Процессы postgres, обслуживающие железо должны работать с макс приоритетом
- Процессы postgres, обслуживающие SELECTы для статистики - меньший приоритет
- Наконец, backup - минимальный проритет

Вопросы:
1) есть ли какие-то стандартные средства на стороне клиента, которые позволили бы изменить PRI соответствующего процесса postgres или это невозможно в принципе?
2) нельзя ли где-нибудь в конфиге указать: для клиента А - проиритет процесса postgres - 0, для клиента Б - приоритет +10 и т.д.?

P.S.
1) Большинство клиентов работают на той же машине, что и сервер Postgre
2) Некрасиво как-то вычислять PID postgres'a по сокету клиента и делать ему renice

Заранее благодарен за любую информацию
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32519588
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> На PostgreSQL работает биллинг.
единомышленник... ! :)

Честно говоря, кажется такой возможности в PG нет.
В Oracle есть на этот предмет красивая вещь - resource plan...

Наверное, да, единственный вариант - после connect()
узнавать PID соотв-го процесса и делать renice().
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32521153
YuSha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MS-SQL я, кстати, тоже не нашел решения этой проблемы
Oracle ... - это оч серьезно по-моему (еще пол-года разбираться что к чему :-)
Коль не получается в лоб - будем делать как получится, т.е. по лбу (под Win 2000 не получилось никак :-)))
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32537325
YuSha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сам и отвечаю на свой вопрос, может кому пригодится:

- есть встроенная функция pg_backend_pid(), которая возвращает pid backend-процесса postgres
- есть такой процедурный язык plperl :-)

что нужно сделать...
1) добавляем поддержку языка plperlu (plperl не умеет взаимодействовать с ОС из соображений безопасности)
2) создаем функцию изменения приоритета backend-процесса
CREATE OR REPLACE FUNCTION renice(int4, int4) RETURNS int4 AS '
$pid = shift;
$nice = shift;
system("renice $nice -p $pid");
return $?>>8;
END;
' LANGUAGE 'plperlu';
3) в клиентском приложении после коннекта вызываем ее: select renice(pg_backend_pid(), 19);

Вот и все...
Проверено на Postgre SQL Server 7.3.4 на ASP Linux 9.2
P.S. Поскольку backend-процесс работает от имени юниксового юзера postgres, то таким способом можно только поднять NICE, что в моей ситуации приемлемо
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32540964
eddie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каковы результаты?

afaik приоритизация ввода-вывода в ядре 2.4 отсутствует (насчет 2.6 не уверен) - то есть renice не будет влиять на дисковый ввод-вывод (а он вполне может оказаться решающим)

да и ещё вопрос - backend за всю свою жизнь общается только с одним клиентом?
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32542422
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здорово. Мне понравилась простота, надо это включить в FAQ
на PostgreSQL.org :))

Но думаю эту функцию можно сделать еще проще :
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION renice(int4) RETURNS int4 AS '
$nice = shift;
system("renice $$ -p $pid");
return $?>>8;
END;
' LANGUAGE 'plperlu';

$$ - встроенная perl-переменная, которая возвращает pid текущего процесса.
Надо проверить, должно прокатить.

Соотв-но вызов функции будет следующий:
Код: plaintext
select renice( 19 );

:)
...
Рейтинг: 0 / 0
Управление приоритетом postgres-процессами
    #32542501
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с $$ не работает. Видимо, возвращается pid не того, чего надо :-(

Есть одно "но" в таком способе - можно только уменьшать приоритет -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
isbs=# select renice(pg_backend_pid(),  2 );
 renice
 --------
 
       0 
isbs=# select renice(pg_backend_pid(),  4 );
 renice
 --------
 
       0 
isbs=# select renice(pg_backend_pid(),  2 );
 renice
 --------
 
       1 
isbs=# select renice(pg_backend_pid(),  12 );
 renice
 --------
 
       0 

но, конечно, эта особенность не имеет отношения к PostgreSQL.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Управление приоритетом postgres-процессами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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