<% \set QUIET 1 %> <% \H \pset footer off SET max_parallel_workers_per_gather = 0; SELECT setting::int >= 170000 AS pg17, setting::int >= 180000 AS pg18 FROM pg_get_confs WHERE name = 'server_version_num' \gset SELECT min(min) AS reset_ts FROM (SELECT min(stats_reset) FROM pg_get_io UNION SELECT stats_reset FROM pg_stat_archiver UNION SELECT stats_reset FROM pg_get_wal UNION SELECT stats_reset FROM pg_get_bgwriter) a \gset %>

gGather Report Loading...

<% \pset tableattr 'id="tblgather" class="lineblk"' SELECT (SELECT count(*) > 1 FROM pg_srvr WHERE connstr ilike 'You%') AS conlines \gset \if :conlines \echo "There is serious problem with the data. Please make sure that all tables are dropped and recreated as part of importing data (gather_schema.sql) and there was no error" "SOMETHING WENT WRONG WHILE IMPORTING THE DATA. PLEASE MAKE SURE THAT ALL TABLES ARE DROPPED AND RECREATED AS PART OF IMPORTING"; \q \endif \set tzone `echo "$PG_GATHER_TIMEZONE"` SELECT * FROM (WITH conf AS (SELECT CASE WHEN :'tzone' = '' THEN (SELECT setting FROM pg_get_confs WHERE name='log_timezone') ELSE :'tzone' END AS setting), tz AS ( SELECT set_config('timezone',COALESCE(name,'UTC'),false) AS val FROM conf LEFT JOIN pg_timezone_names ON pg_timezone_names.name = conf.setting), connstrs AS ( SELECT ROW_NUMBER() OVER () AS row_num, COUNT(*) OVER () AS total_rows, connstr FROM pg_srvr) SELECT UNNEST(ARRAY ['Collected At','Collected By','Server build', 'Last Startup','In recovery?','Client','Server','Last Reload','Latest xid','Oldest xid ref','Current LSN','Time Line','WAL file','System','PG Bin Dir.']) AS pg_gather, UNNEST(ARRAY [CONCAT(collect_ts::text,' (',TZ.val,')'),usr,ver, pg_start_ts::text ||' ('|| collect_ts-pg_start_ts || ')',recovery::text,client::text,server::text,reload_ts::text || ' ('|| collect_ts-reload_ts || ')', pg_snapshot_xmax(snapshot)::text,pg_snapshot_xmin(snapshot)::text,current_wal::text,timeline::text || ' (Hex:' || upper(to_hex(timeline)) || ')', lpad(upper(to_hex(timeline)),8,'0')||substring(pg_walfile_name(current_wal) from 9 for 16), 'ID: ' || systemid || ' Since: ' || to_timestamp ( systemid >> 32 ) || ' ('|| collect_ts-to_timestamp ( systemid >> 32 ) || ')',bindir]) AS "Report" FROM pg_gather LEFT JOIN tz ON TRUE UNION ALL (SELECT 'Client conn.' as col1 , STRING_AGG(connstr, ', ') AS col2 FROM ( SELECT connstr, NTILE((total_rows/6)::int) OVER (ORDER BY row_num) AS group_number FROM connstrs WHERE row_num < total_rows AND total_rows > 3 ) AS grouped_data GROUP BY group_number ORDER BY group_number) UNION ALL SELECT 'Client conn.' as col1 , connstr AS col2 FROM connstrs WHERE row_num < total_rows AND total_rows <= 3 UNION ALL SELECT 'Client build' as col1, connstr AS col2 FROM connstrs WHERE row_num = total_rows AND total_rows > 2 ) a WHERE "Report" IS NOT NULL ORDER BY 1; \pset tableattr 'id="dbs" class="thidden"' \C '' WITH cts AS (SELECT COALESCE(collect_ts,(SELECT max(state_change) FROM pg_get_activity)) AS c_ts FROM pg_gather) SELECT datname "DB Name",concat(tup_inserted/days,',',tup_updated/days,',',tup_deleted/days,',',to_char(COALESCE(pg_get_db.stats_reset,:'reset_ts'),'YYYY-MM-DD HH24-MI-SS'),',',datid,',',mxidage,',',encod,',',colat) ,xact_commit/days "Avg.Commits",xact_rollback/days "Avg.Rollbacks",(tup_inserted+tup_updated+tup_deleted)/days "Avg.DMLs", CASE WHEN blks_fetch > 0 THEN blks_hit*100/blks_fetch ELSE NULL END "Cache hit ratio" ,temp_files/days "Avg.Temp Files",temp_bytes/days "Avg.Temp Bytes",db_size "DB size",age "Age" FROM pg_get_db LEFT JOIN LATERAL (SELECT GREATEST((EXTRACT(epoch FROM(c_ts-COALESCE(pg_get_db.stats_reset, :'reset_ts')))/86400)::bigint,1) as days FROM cts) AS lat1 ON TRUE; \pset tableattr off %>
Parameter Recommendations
Inputs

☛ Please provide the CPU and memory available on the host machine. Choose the most suitable options from the list to receive specific recommendations. If you are unsure, seek expert guidance.

Recommendations:

* Collecting pg_gather data during right utilization levels is important to tune the system for the specific workload

Sections

  1. Tables
  2. Partitioned Tables
  3. Indexes
  4. Parameters / Settings
  5. Extensions
  6. Security-HBA rules
  7. Connection & Users
  8. Database Time
  9. Session Details
  10. Top Statements
  11. Replications
  12. BGWriter & Checkpointer
  13. Findings
☰ Section Index (Alt+I)