Building Postgres with SystemTap static user markers enabled
configure postgres with the --enable-dtrace option:
configure --enable-dtrace
Postgres sources which use tracing need to be built with debugging information. Run configure with CFLAGS=-g or:
sed -i -e 's/^CFLAGS = /CFLAGS = -g /' <postgres-build-dir>/src/Makefile.global
If postgres has not previously been run then it is necessary to initialize it:
/usr/local/pgsql/bin/initdb <initdb-location>
Run postgres under the control of stap
stap -c /usr/local/pgsql/bin/postgres -D <initdb-location> postgres.stp
This starts the postgres server. Now postgres application like psql can be run.
An example of postgres.stp is:
probe process("/usr/local/pgsql/bin/postgres").mark("transaction__start")
{
printf("%s %#x\n", "transaction__start", $arg1);
}
probe process("/usr/local/pgsql/bin/postgres").mark("transaction__commit")
{
printf("%s %#x\n", "transaction__commit", $arg1);
}
probe process("/usr/local/pgsql/bin/postgres").mark("transaction__abort")
{
printf("%s %#x\n", "transaction__abort", $arg1);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lock__startwait")
{
printf("%s %#x %#x\n", "lock__startwait", $arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lock__endwait")
{
printf("%s %#x %#x\n", "lock__endwait", $arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lwlock__endwait")
{
printf("%s %#x %#x\n", "lwlock__endwait", $arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lwlock__acquire")
{
printf("%s %#x %#x\n", "lwlock__acquire", $arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lwlock__condacquire__fail")
{
printf("%s %#x %#x\n", "lwlock__condacquire__fail",
$arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lwlock__condacquire")
{
printf("%s %#x %#x\n", "lwlock__condacquire", $arg1, $arg2);
}
probe process("/usr/local/pgsql/bin/postgres").mark("lwlock__release")
{
printf("%s %#x\n", "lwlock__release", $arg1);
}