Skip to content

Instantly share code, notes, and snippets.

@kmoppel
Created February 1, 2017 14:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kmoppel/71a89b3b32cb32a4c38c7233551e4973 to your computer and use it in GitHub Desktop.
Save kmoppel/71a89b3b32cb32a4c38c7233551e4973 to your computer and use it in GitHub Desktop.
pgwatch2 - limit stat_statements.tag_query to 64K chars
-- execute in pgwatch2 database
delete from pgwatch2.metric where m_name = 'stat_statements';
insert into pgwatch2.metric(m_name, m_pg_version_from,m_sql)
values (
'stat_statements',
9.2,
$sql$
with q_data as (
select
(extract(epoch from now()) * 1e9)::int8 as epoch_ns,
queryid::text as tag_queryid,
max(ltrim(regexp_replace(query, E'[ \\t\\n\\r]+' , ' ', 'g')))::varchar(65535) as tag_query,
sum(s.calls)::int8 as calls,
sum(s.total_time)::double precision as total_time,
sum(shared_blks_hit)::int8 as shared_blks_hit,
sum(shared_blks_read)::int8 as shared_blks_read,
sum(shared_blks_written)::int8 as shared_blks_written,
sum(temp_blks_read)::int8 as temp_blks_read,
sum(temp_blks_written)::int8 as temp_blks_written,
sum(blk_read_time)::double precision as blk_read_time,
sum(blk_write_time)::double precision as blk_write_time
from
public.get_stat_statements() s
where
calls > 5
and total_time > 0
and dbid = (select oid from pg_database where datname = current_database())
and not upper(s.query) like any (array['DEALLOCATE%', 'SET %', 'RESET %', 'BEGIN%', 'BEGIN;',
'COMMIT%', 'END%', 'ROLLBACK%', 'SHOW%'])
group by
queryid
)
select * from (
select
*
from
q_data
where
total_time > 0
order by
total_time desc
limit 100
) a
union
select * from (
select
*
from
q_data
order by
calls desc
limit 100
) a
union
select * from (
select
*
from
q_data
where
shared_blks_read > 0
order by
shared_blks_read desc
limit 100
) a
union
select * from (
select
*
from
q_data
where
shared_blks_written > 0
order by
shared_blks_written desc
limit 100
) a
union
select * from (
select
*
from
q_data
where
temp_blks_read > 0
order by
temp_blks_read desc
limit 100
) a
union
select * from (
select
*
from
q_data
where
temp_blks_written > 0
order by
temp_blks_written desc
limit 100
) a;
$sql$
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment