Skip site navigation (1) Skip section navigation (2)

Re: [PATCHES] patches for 6.2.1p6

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: dz(at)cs(dot)unitn(dot)it (Massimo Dal Zotto)
Cc: hackers(at)postgreSQL(dot)org (PostgreSQL-development)
Subject: Re: [PATCHES] patches for 6.2.1p6
Date: 1998-03-16 03:07:20
Message-ID: 199803160307.WAA20282@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackers
> 
> Hi hackers,
> 
> I have old patches for version 6.2.1p6 which fix some problems and add
> new features. Here is a short description of each patch file:
> 
> 
> assert.patch
> 
> 	adds a switch to turn on/off the assert checking if enabled at compile
> 	time. You can now compile postgres with assert checking and disable it
> 	at runtime in a production environment.
> 
> async-unlisten.patch
> 
> 	declares Async_Unlisten() external so that it can be called by user
> 	modules.
> 
> exec-limit.patch
> 
> 	removes the #ifdef NOT_USED around ExecutorLimit(). It is used.
> 
> exitpg.patch
> 
> 	limits recursive calls to exitpg() preventing an infinite loop
> 	if an error is found inside exitpg.
> 
> libpgtcl-listen.patch
> 
> 	Just a change from upper to lowercase of an sql command in libpgtcl,
> 	totally harmless.
> 
> new-locks.patch
> 
> 	After long studying and many debugging sessions I have finally
> 	understood how the low level locks work.
> 	I have completely rewritten lock.c cleaning up the code and adding
> 	better assert checking. I have also added some fields to the lock
> 	and xid tags for better support of user locks. This patch includes
> 	also a patch submitted by Bruce Momjian which changes the handling
> 	of lock priorities. It can however be disabled if an option is set
> 	in pg_options, see tprintf.patch (Bruce patch works by building
> 	the queue in reverse priority order, my old patch kept the queue in
> 	decreasing order and traversed it from the other side).
> 
> pg-flush.patch
> 
> 	removes an unnecessary flush in libpq reducing network traffic and
> 	increasing performance.
> 
> relname.patch
> 
> 	an utility which returns the relname corresponding to a given oid.
> 	Useful for debug messages (see vacum.patch).
> 
> sequence.patch
> 
> 	added a setval() function which enables othe owner of a sequence
> 	to set its value without need to delete and recreate it.
> 
> sinval.patch
> 
> 	fixes a problem in SI cache which causes table overflow if some
> 	backend is idle for a long time while other backends keep adding
> 	entries.
> 	It uses the new signal handling implemented in tprintf.patch.
> 	I have also increacasesed the max number of backends from 32 to 64 and
> 	the table size from 1000 to 5000.
> 
> spin-lock.patch
> 
> 	I'm not sure if this is really useful, but it seems stupid to have
> 	a backend wasting cpu cycles in a busy loop while the process which
> 	should release the lock is waiting for the cpu. So I added a call
> 	to process_yield() if the spin lock can't obtained.
> 	This has been implemented and tested only on Linux. I don't know if
> 	other OS have process_yield(). If someone can check please do it.
> 
> tprintf.patch
> 
> 	adds functions and macros which implement a conditional trace package
> 	with the ability to change flags and numeric options of running
> 	backends at runtime.
> 	Options/flags can be specified in the command line and/or read from
> 	the file pg_options in the data directory.
> 	Running backends can be forced to update their options from this file
> 	by sending them a SIGHUP signal (this is the convention used by most
> 	unix daemons so I changed the meaning of SIGHUP).
> 	Options can be debugging flags used by the trace package or any other
> 	numeric	value used by the backend, for example the deadlock_timeout.
> 	Having flags and options specified at runtime and changed while the
> 	backends are running can greatly simplify the debugging and tuning
> 	of the database. New options can be defined in utils/misc/trace.c and
> 	include/utils/trace.h.  As an example of the usage of this package
> 	see lock.c and proc.c which make use of new runtime options.
> 
> 	Old files using int flags or variables can be easily changed to
> 	use the new package by substituting the old variable with a #define
> 	like in the following example:
> 	
> 	  /* int my_flag = 0; */
> 	  #include "trace.h"
>  	  #define my_flag pg_options[OPT_MYFLAG]
> 
> 	I have done it in postgres.c and some other files and now I can turn
> 	on/off any single debug flag on the fly with a simple shell script.
> 	I have removed the IpcConfigTip() from ipc.c, it should better be
> 	described in the postgres manual instead of being printed on stderr.
> 
> 	This patch provides also a new format of debugging messages which
> 	are always in a single line with a timestamp and the backend pid:
> 
> 	  #timestamp          #pid    #message
> 	  980127.17:52:14.173 [29271] StartTransactionCommand
> 	  980127.17:52:14.174 [29271] ProcessUtility:  drop table t;
> 	  980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
> 	  980127.17:52:14.186 [29286] Async_NotifyHandler
> 	  980127.17:52:14.186 [29286] Waking up sleeping backend process
> 	  980127.19:52:14.292 [29286] Async_NotifyFrontEnd
> 	  980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
> 	  980127.19:52:14.466 [29286] Async_NotifyHandler done
> 
> 	This improves the readability of the log and allows one to understand
> 	exactly which backend is doing what and at which time. It also makes
> 	easier to write simple awk or perl scripts which monitor the log to
> 	detect database errors or problem, or to compute transaction times.
> 
> 	The patch changes also the meaning of signals used by postgres, as
> 	described by the following table:
> 
> 		    postmaster				backend
> 
> 	SIGHUP      kill(*,sighup)			read_pg_options
> 	SIGINT	    kill(*,sigint), die			die
> 	SIGCHLD	    reaper				-
> 	SIGTTIN	    ignored				-
> 	SIGTTOU	    ignored				-
> 	SIGQUIT	    die					handle_warn
> 	SIGTERM	    kill(*,sigterm), kill(*,9), die	die
> 	SIGCONT	    dumpstatus				-
> 	SIGPIPE	    ignored				die
> 	SIGFPE	    -					FloatExceptionHandler
> 	SIGTSTP	    -					ignored (alive test)
> 	SIGUSR1	    kill(*,sigusr1), die		quickdie
> 	SIGUSR2	    kill(*,sigusr2)			Async_NotifyHandler
> 							(also SI buffer flush)
> 
> 	The main changes to the old implementation are SIGQUIT instead of
> 	SIGHUP to handle warns, SIGHUP to reread pg_options and redirection
> 	to all backends of SIGHUP, SIGINT, SIGTERM, SIGUSR1 and SIGUSR2.
> 	In this way some of the signals sent to the postmaster can be sent
> 	automatically to all the backends. To shut down postgres one needs
> 	only to send a SIGTERM to postmaster and it will stop automatically
> 	all the backends. This new signal handling mechanism is also used
> 	to prevent SI cache table overflows: when a backend detects the SI
> 	table full at 70% it simply sends a signal to the postmaster which
> 	will wake up all idle backends and make them flush the cache.
> 
> vacuum.patch
> 
> 	adds a debug message to vacuum that prints the name of a table or
> 	index *before* vacuuming it, if the verbose keyword is set.
> 	This is useful to know which table is causing troubles if a
> 	vacuum all crashes. Currently table information is printed only
> 	at the end of each vacuum operation and is never printed if the
> 	vacuum crashes.
> 
> -- 
> Massimo Dal Zotto

Massimo, now that 6.3 is released, any chance of getting these patches
against the 6.3 source code?

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist(at)candle(dot)pha(dot)pa(dot)us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Responses

pgsql-hackers by date

Next:From: Bruce MomjianDate: 1998-03-16 03:31:29
Subject: Re: [QUESTIONS] MySQL benchmark page
Previous:From: Bruce MomjianDate: 1998-03-16 02:31:32
Subject: Re: [HACKERS] Small changes for the "no excuses" release

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group