|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
На PostgreSQL работает биллинг. Возникла ситуация, когда необходимо установить разные приоритеты процессов postgres для различных типов клиентских подключений. - Процессы postgres, обслуживающие железо должны работать с макс приоритетом - Процессы postgres, обслуживающие SELECTы для статистики - меньший приоритет - Наконец, backup - минимальный проритет Вопросы: 1) есть ли какие-то стандартные средства на стороне клиента, которые позволили бы изменить PRI соответствующего процесса postgres или это невозможно в принципе? 2) нельзя ли где-нибудь в конфиге указать: для клиента А - проиритет процесса postgres - 0, для клиента Б - приоритет +10 и т.д.? P.S. 1) Большинство клиентов работают на той же машине, что и сервер Postgre 2) Некрасиво как-то вычислять PID postgres'a по сокету клиента и делать ему renice Заранее благодарен за любую информацию ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2004, 14:03 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
> На PostgreSQL работает биллинг. единомышленник... ! :) Честно говоря, кажется такой возможности в PG нет. В Oracle есть на этот предмет красивая вещь - resource plan... Наверное, да, единственный вариант - после connect() узнавать PID соотв-го процесса и делать renice(). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2004, 07:26 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
В MS-SQL я, кстати, тоже не нашел решения этой проблемы Oracle ... - это оч серьезно по-моему (еще пол-года разбираться что к чему :-) Коль не получается в лоб - будем делать как получится, т.е. по лбу (под Win 2000 не получилось никак :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2004, 20:15 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
сам и отвечаю на свой вопрос, может кому пригодится: - есть встроенная функция 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, что в моей ситуации приемлемо ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 17:31 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
каковы результаты? afaik приоритизация ввода-вывода в ядре 2.4 отсутствует (насчет 2.6 не уверен) - то есть renice не будет влиять на дисковый ввод-вывод (а он вполне может оказаться решающим) да и ещё вопрос - backend за всю свою жизнь общается только с одним клиентом? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2004, 13:53 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
Здорово. Мне понравилась простота, надо это включить в FAQ на PostgreSQL.org :)) Но думаю эту функцию можно сделать еще проще : Код: plaintext 1. 2. 3. 4. 5. 6.
$$ - встроенная perl-переменная, которая возвращает pid текущего процесса. Надо проверить, должно прокатить. Соотв-но вызов функции будет следующий: Код: plaintext
:) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2004, 11:52 |
|
Управление приоритетом postgres-процессами
|
|||
---|---|---|---|
#18+
Вариант с $$ не работает. Видимо, возвращается pid не того, чего надо :-( Есть одно "но" в таком способе - можно только уменьшать приоритет - Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
но, конечно, эта особенность не имеет отношения к PostgreSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2004, 12:18 |
|
|
start [/forum/topic.php?fid=53&fpage=357&tid=2007840]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
50ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 325ms |
total: | 483ms |
0 / 0 |