Re: controlling process priority - Mailing list pgsql-sql
From | Robert B. Easter |
---|---|
Subject | Re: controlling process priority |
Date | |
Msg-id | 200112201324.fBKDOgM15049@comptechnews.com Whole thread Raw |
In response to | controlling process priority ("Peter T. Brown" <peter@memeticsystems.com>) |
Responses |
Re: controlling process priority
|
List | pgsql-sql |
You might be interested in a little C function I made (benice.c): //-------------------------------------------------- #include <unistd.h> #include <errno.h> #include "postgres.h" #include "fmgr.h" /*** benice - increment nice priority of backend** boolean benice( integer inc );** The nice priority is incremented by inc:*-20 is highest priority (won't dec lower),* 19 is lowest priority (won't inc higher)* Only root can specify a negativenumber* for inc.** Useful for slowing down a backend that* is performing a long process so that* other backends canbe more responsive.* Since negative inc is not allowed,* once backend is slowed, it cannot be* sped up. This should beused only* for long-running query tasks that* start a backend and then disconnect* afterward. Newly started backends* getdefault nice (0) again.** Returns:* true on success, false on error*/ PG_FUNCTION_INFO_V1(benice); Datum benice(PG_FUNCTION_ARGS) {int32 arg = PG_GETARG_INT32(0); if( nice((int)arg) ) { elog(NOTICE, "benice: %s", strerror(errno) ); PG_RETURN_BOOL(false); // error} PG_RETURN_BOOL(true); // success } //-------------------------------------------------- Load it something like this (benice.sql): ---------------------------------------------------- DROP FUNCTION benice(integer); CREATE FUNCTION benice(integer)RETURNS booleanAS '/home/reaster/prog/triggers/benice/benice.so'LANGUAGE 'c'; ---------------------------------------------------- Compile something like this (Makefile): #--------------------------------------------------- benice.so: benice.cgcc -shared -I/usr/local/pgsql/include -I/usr/src/postgresql-7.1.3/src/include $^ -o $@ clean:rm -f *.so #--------------------------------------------------- If you do "SELECT benice(10);", you should be able to verify that it works by looking at the NICE column for the backend using "top" (on Linux). Bob On Wednesday 19 December 2001 09:58 pm, Peter T. Brown wrote: > Hi-- > > I've got a complicated SQL select/insert which inserts up to 1 million > records when run and can take up to 20 minutes to complete. Is there a way > to control the priority of this select such that when Postgres is busy with > other (higher priority) tasks it gets delayed?? > > My problem is that when dealing with lots of traffic, if one of these > complex queries gets run, all the query traffic is slowed considerably thus > hurting the performance of my application. > > > > Thanks, > > Peter T. Brown > > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster