Skip to content

Commit

Permalink
Distinguish queries coming from BGW
Browse files Browse the repository at this point in the history
Effective for PostgreSQL v10 and more.
  • Loading branch information
julmon committed Oct 29, 2017
1 parent 919e1cb commit 6a180d8
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 9 deletions.
40 changes: 34 additions & 6 deletions pgactivity/Data.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,32 @@ def pg_get_activities(self,):
"""
Get activity from pg_stat_activity view.
"""
if self.pg_num_version >= 90600:
if self.pg_num_version >= 100000:
# PostgreSQL 10 and more
query = """
SELECT
pg_stat_activity.pid AS pid,
CASE WHEN LENGTH(pg_stat_activity.datname) > 16
THEN SUBSTRING(pg_stat_activity.datname FROM 0 FOR 6)||'...'||SUBSTRING(pg_stat_activity.datname FROM '........$')
ELSE pg_stat_activity.datname
END
AS database,
pg_stat_activity.client_addr AS client,
EXTRACT(epoch FROM (NOW() - pg_stat_activity.query_start)) AS duration,
pg_stat_activity.wait_event IS NOT NULL AS wait,
pg_stat_activity.usename AS user,
pg_stat_activity.state AS state,
pg_stat_activity.query AS query,
pg_stat_activity.backend_type AS backend_type
FROM
pg_stat_activity
WHERE
state <> 'idle'
AND pid <> pg_backend_pid()
ORDER BY
EXTRACT(epoch FROM (NOW() - pg_stat_activity.query_start)) DESC
"""
elif self.pg_num_version >= 90600:
# PostgreSQL 9.6.0 and more
query = """
SELECT
Expand All @@ -304,7 +329,8 @@ def pg_get_activities(self,):
pg_stat_activity.wait_event IS NOT NULL AS wait,
pg_stat_activity.usename AS user,
pg_stat_activity.state AS state,
pg_stat_activity.query AS query
pg_stat_activity.query AS query,
null AS backend_type
FROM
pg_stat_activity
WHERE
Expand All @@ -313,7 +339,6 @@ def pg_get_activities(self,):
ORDER BY
EXTRACT(epoch FROM (NOW() - pg_stat_activity.query_start)) DESC
"""

elif self.pg_num_version < 90600 and self.pg_num_version >= 90200:
# PostgreSQL prior to 9.6.0 and >= 9.2.0
query = """
Expand All @@ -329,7 +354,8 @@ def pg_get_activities(self,):
pg_stat_activity.waiting AS wait,
pg_stat_activity.usename AS user,
pg_stat_activity.state AS state,
pg_stat_activity.query AS query
pg_stat_activity.query AS query,
null AS backend_type
FROM
pg_stat_activity
WHERE
Expand All @@ -353,7 +379,8 @@ def pg_get_activities(self,):
EXTRACT(epoch FROM (NOW() - pg_stat_activity.query_start)) AS duration,
pg_stat_activity.waiting AS wait,
pg_stat_activity.usename AS user,
pg_stat_activity.current_query AS query
pg_stat_activity.current_query AS query,
null AS backend_type
FROM
pg_stat_activity
WHERE
Expand Down Expand Up @@ -669,14 +696,15 @@ def sys_get_proc(self, queries, is_local):
process.set_extra('io_wait',
self.__sys_get_iow_status(psproc.status_iow()))
process.set_extra('psutil_proc', psproc)
process.set_extra('backend_type', query['backend_type'])
processes[process.pid] = process

except psutil.NoSuchProcess:
pass
except psutil.AccessDenied:
pass
return processes

def set_global_io_counters(self,
read_bytes_delta,
write_bytes_delta,
Expand Down
13 changes: 10 additions & 3 deletions pgactivity/UI.py
Original file line number Diff line number Diff line change
Expand Up @@ -1320,7 +1320,8 @@ def __poll_activities(self, interval, flag, indent, process = None, \
'query': proc.query,
'duration': self.data.get_duration(proc.duration),
'wait': proc.wait,
'io_wait': proc.get_extra('io_wait')
'io_wait': proc.get_extra('io_wait'),
'backend_type': proc.get_extra('backend_type')
})

except psutil.NoSuchProcess:
Expand Down Expand Up @@ -2072,16 +2073,22 @@ def __refresh_line(self, process, flag, indent, \
self.line_colors[color_state][typecolor])

dif = self.maxx - len(indent) - 1

query = ''
if 'backend_type' in process and \
process['backend_type'] == 'background worker':

query += '\_ '
if self.verbose_mode == PGTOP_TRUNCATE:
query = process['query'][:dif]
query += process['query'][:dif]
colno += self.__print_string(
l_lineno,
colno,
" %s" % (self.__add_blank(query, len(indent)+1),),
self.line_colors['query'][typecolor])
elif self.verbose_mode == PGTOP_WRAP or \
self.verbose_mode == PGTOP_WRAP_NOINDENT:
query = process['query']
query += process['query']
query_wrote = ''
offset = 0
if len(query) > dif and dif > 1:
Expand Down

0 comments on commit 6a180d8

Please sign in to comment.