Pokazywanie postów oznaczonych etykietą postgresql. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą postgresql. Pokaż wszystkie posty

2020-04-20

Sensible Hibernate batch properties


  <property name="hibernate.jdbc.batch_size" value="30"/>
  <property name="hibernate.order_inserts" value="true"/>
  <property name="hibernate.order_updates" value="true"/>
  <property name="hibernate.jdbc.batch_versioned_data" value="true"/>
Also for postgresql and hibernate < 5.2 add "?reWriteBatchedInserts=true" to connection url.

2020-03-30

Checking private (non shared) memory usage for Postgresql connection (PID)

Create function:

 CREATE OR REPLACE FUNCTION pid_mem_usage( pid integer)
 RETURNS integer AS $$
 DECLARE l_command TEXT; res integer;
 BEGIN
  SET client_min_messages = 'error';
  l_command  := ' cat /proc/' || pid || '/smaps | grep "^Private" | awk ''{a+=$2}END{print a * 1024}'' ';
  raise notice '%',l_command;
  execute 'create temp table if not exists z (a int) ';
  execute 'copy z from program ' || quote_literal(l_command);
  execute 'select sum(a) from z' into res;
  execute 'truncate z';
 RETURN res;
 END;
 $$ LANGUAGE plpgsql;
Sample usage:
select pid_mem_usage(pid),pid,usename,backend_start,xact_start,
query from pg_stat_activity  order by 1 desc limit 25;

Based on from https://www.depesz.com/2012/06/09/how-much-ram-is-postgresql-using/

2019-07-18

Checking for index bloat in Psotgresql

SELECT
    t.tablename,
    indexname,
    c.reltuples AS num_rows,
    100.0*pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text)/(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text)+1)as ratio,
    pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text) AS table_size_raw,
    pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text) AS index_size_raw,
    pg_size_pretty(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text)) AS table_size,
    pg_size_pretty(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text)) AS index_size,
    CASE WHEN indisunique THEN 'Y'
       ELSE 'N'
    END AS UNIQUE,
    idx_scan AS number_of_scans,
    idx_tup_read AS tuples_read,
    idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
           JOIN pg_class c ON c.oid = x.indrelid
           JOIN pg_class ipg ON ipg.oid = x.indexrelid
           JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid AND (psai.schemaname='public' or psai.schemaname='partitions') )
    AS foo
    ON t.tablename = foo.ctablename
WHERE (t.schemaname='public' or t.schemaname='partitions') 

ORDER BY 5 desc, 6 desc
Compare ratio among partitions of same table to find bloated indexes - the one for current month is always bloated :).