我想知道当用户将其调用到PostgreSQL时是否有一种方法可以为PL / pgSQL存储过程设置较低的优先级。当我调用此过程时,调度程序将几乎100%的CPU设置为我编写的存储过程,使其他进程几乎无人看管。
系统信息:Linux 2.6.30.10-105.2.23.fc11.x86_64框中的PostgreSQL 8.3.11。
答案 0 :(得分:1)
不,不可能。
答案 1 :(得分:1)
可以以回旋方式完成。
说您的存储过程称为uses_too_many_cycles()
。让我们为其编写一个psql
包装脚本:
\set QUIET on
\set ECHO errors
SELECT pg_backend_pid() AS my_pg_backend_pid
\gset
\pset tuples_only on
\pset format unaligned
\! rm -f /tmp/renice_my_pg_backend
\out /tmp/renice_my_pg_backend
SELECT '#!/bin/bash' ;
SELECT 'renice +19 --pid ' || :my_pg_backend_pid ;
\out
\! chmod +x /tmp/renice_my_pg_backend
\! /tmp/renice_my_pg_backend
CALL uses_too_many_cycles();
我们编写一个包含所需命令的微型Shell脚本,然后执行该Shell脚本;我们不能直接执行所需的命令,因为psql
会将\!
右边的所有内容都当作文字字符串。
renice(1)
语法可能有所不同。root
sudoers
,PAM,...)被授予renice(1)
其他用户进程或PostgreSQL用户进程的权限setuid
特权脚本每种情况在操作上都不可取,不能很好地扩展,或者两者兼有。