sessionwatch: A small tool to monitor session activities of PostgreSQL
Generally DBA, has to login in system to monitor the activities by querying the pg_stat_activity veiw. However if someone wants to do continous monitor for every 2 seconds. He has to run SQL against pg_stat_activity every 2 seconds.
So, For such activity, I have made following shell script which can be use with watch command on linux to monitor the activities.
vibhore@ubuntu:~$ ./sessionwatch
So, For such activity, I have made following shell script which can be use with watch command on linux to monitor the activities.
#!/bin/bash ## Prepared by Vibhor Kumar (EDB). Q="select procpid,now() - query_start as long, waiting, current_query from pg_stat_activity where procpid <> pg_backend_pid() limit 10;" while getopts "b:U:d:p:" opt; do case $opt in b) BIN=$OPTARG;; U) PGUSER=$OPTARG;; d) DB=$OPTARG;; p) port1=$OPTARG;; *) echo "Usage: $0 -bUsage is given below:-d -U -mp -sp ";; esac done if [ -z $BIN ];then echo "Usage: $0 -b bin directory -d database name -U user -p port" exit fi if [ -z $PGUSER ];then echo "Usage: $0 -b bin directory -d database name -U user -p port" exit fi if [ -z $DB ];then echo "Usage: $0 -b bin directory -d database name -U user -p port" exit fi if [ -z $port1 ];then echo "Usage: $0 -b bin directory -d database name -U user -p port" exit fi function verifybin_connect() { if [ -f $BIN/psql ];then : else echo "ERROR: psql Not Found!" usage exit 1 fi Q1="SELECT 'ping';" $BIN/psql -U $PGUSER -h localhost -p $port1 -c "$Q1" -d $DB -t >/dev/null 2>/dev/null if [ $? -ne 0 ];then echo "ERROR: $DB is not pinging on $host" exit 1 fi } verifybin_connect $BIN/psql -c "$Q" -U $PGUSER -d $DB -p $port1
vibhore@ubuntu:~$ ./sessionwatch
Usage: ./sessionwatch -b bin directory -d database name -U user -p portExample of monitoring the activity is given below:
watch ./sessionwatch -d edb -U enterprisedb -p 5444 -b /opt/PostgresPlus/8.4AS/bin Every 2.0s: ./sessionwatch -d edb -U enterprisedb -p 5444 -b /opt/PostgresPlus/8.4AS/bin Sun Apr 24 09:25:50 2011 procpid | long | waiting | current_query ---------+------------------------+---------+--------------- 1292 | 00:00:25.582061 | f |1314 | 03:13:59.158917 | f | 1172 | 00:00:04.899938 | f | 1324 | 08:18:58.855179 | f | 1330 | 00:00:18.448067 | f | 1819 | 2 days 06:11:09.667475 | f | 1836 | 00:00:00.637558 | f | (7 rows)
Great work my friend. I will take this one for sure :)
ReplyDeleteso what does it mean when it says the db is not pinging on?
ReplyDelete"DB is not pinging" is a message to inform user to verify the port and Database name. :)
ReplyDeleteSure :)
ReplyDelete