vrijdag 15 december 2023

Postgresql: Number of sql statements per second

Check if the pg_stat_statements extension is active in Postgresql:

select * from pg_extension;

If not, then:
  execute in SQL:   create extension pg_stat_statements;
  in Postgresql.conf modify:  shared_preload_libraries = 'pg_stat_statements'

Restart server, and now you can see the sql statements per second:

-- queries per second
with
 t1 as (select sum(calls) n from pg_stat_statements),
 t2 as (select sum(calls) n from pg_stat_statements , pg_sleep(1))
select
 t2.n-t1.n the_num_of_queries_per_second
from
 t1,t2;
 
-- Top time consuming queries
select userid::regrole, dbid, query ,calls, 
(total_plan_time + total_exec_time) / 1000 as total_time_seconds, 
(min_plan_time + min_exec_time) / 1000 as min_time_seconds, 
(max_plan_time + max_exec_time) / 1000 as max_time_seconds, 
(mean_plan_time + mean_exec_time) / 1000 as mean_time_seconds
from pg_stat_statements
order by (mean_plan_time + mean_exec_time) desc
limit 10;
   
-- queries having high i/o activity
select userid::regrole, dbid, query,queryid,
   (mean_plan_time + mean_exec_time)/1000 as mean_time_seconds 
from pg_stat_statements
order by (blk_read_time+blk_write_time) desc
limit 10;

-- queries with high memory usage
select userid::regrole, dbid, queryid,query  from pg_stat_statements 
order by (shared_blks_hit+shared_blks_dirtied) desc
limit 10;

-- reset the stats
select pg_stat_statements_reset();

-- number of queries running at this moment
select * from pg_stat_activity;

-- number of queries running for more than 30 seconds
select * from pg_stat_activity
where (now() - query_start) > interval '30 seconds';

-- What is the replication server?
select * from pg_stat_replication;

-- The Usertables having a tablescan:
select relname, seq_scan from pg_stat_user_tables order by seq_scan desc;

-- Put the tablescan values in a separate tmp table for comparison at a later time
create table stats_snapshot_0938 as select relname, seq_scan from pg_stat_user_tables;
-- select * from stats_snapshot_0938;
-- drop table stats_snapshot_0938;

-- Compare the values with the old values...
select stats_now.relname, (stats_now.seq_scan - stats_old.seq_scan) difference
from pg_stat_user_tables stats_now
join stats_snapshot_0938 stats_old on stats_now.relname = stats_old.relname
order by difference desc;

Geen opmerkingen:

Een reactie posten