Skip to content

Commit 09102ae

Browse files
lss602726449oppenheimer01
authored andcommitted
Fix: fix pgstats
1 parent 768c1a3 commit 09102ae

18 files changed

Lines changed: 696 additions & 6996 deletions

File tree

src/backend/catalog/system_views.sql

Lines changed: 93 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ GRANT EXECUTE ON FUNCTION pg_get_backend_memory_contexts() TO pg_read_all_stats;
673673

674674
-- Statistics views
675675

676-
CREATE VIEW pg_stat_all_tables_internal AS
676+
CREATE VIEW pg_stat_all_tables AS
677677
SELECT
678678
C.oid AS relid,
679679
N.nspname AS schemaname,
@@ -810,7 +810,7 @@ CREATE VIEW pg_statio_user_tables AS
810810
WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND
811811
schemaname !~ '^pg_toast';
812812

813-
CREATE VIEW pg_stat_all_indexes_internal AS
813+
CREATE VIEW pg_stat_all_indexes AS
814814
SELECT
815815
C.oid AS relid,
816816
I.oid AS indexrelid,
@@ -1206,19 +1206,6 @@ CREATE VIEW pg_stat_database AS
12061206
SELECT oid, datname FROM pg_database
12071207
) D;
12081208

1209-
CREATE VIEW pg_stat_resqueues AS
1210-
SELECT
1211-
pg_catalog.gp_execution_segment() AS gp_segment_id,
1212-
Q.oid AS queueid,
1213-
Q.rsqname AS queuename,
1214-
pg_stat_get_queue_num_exec(Q.oid) AS n_queries_exec,
1215-
pg_stat_get_queue_num_wait(Q.oid) AS n_queries_wait,
1216-
pg_stat_get_queue_elapsed_exec(Q.oid) AS elapsed_exec,
1217-
pg_stat_get_queue_elapsed_wait(Q.oid) AS elapsed_wait
1218-
FROM pg_resqueue AS Q;
1219-
1220-
-- Resource queue views
1221-
12221209
CREATE VIEW pg_resqueue_status AS
12231210
SELECT
12241211
q.rsqname,
@@ -1834,3 +1821,94 @@ CREATE VIEW relation_tag_descriptions AS
18341821
pg_namespace AS ns
18351822
WHERE td.tagid = t.oid AND td.tdobjid = c.oid
18361823
AND td.tddatabaseid = d.oid AND ns.oid = c.relnamespace;
1824+
1825+
CREATE FUNCTION gp_stat_get_snapshot_timestamp() RETURNS timestamptz AS
1826+
$$
1827+
SELECT MAX(pg_stat_get_snapshot_timestamp) as gp_stat_get_snapshot_timestamp
1828+
FROM
1829+
(
1830+
SELECT pg_stat_get_snapshot_timestamp()
1831+
UNION ALL
1832+
SELECT pg_stat_get_snapshot_timestamp() FROM gp_dist_random('gp_id')
1833+
)
1834+
WHERE pg_stat_get_snapshot_timestamp IS NOT NULL;
1835+
$$
1836+
LANGUAGE SQL;
1837+
1838+
CREATE FUNCTION gp_stat_force_next_flush() RETURNS VOID AS
1839+
$$
1840+
SELECT pg_stat_force_next_flush()
1841+
UNION ALL
1842+
SELECT pg_stat_force_next_flush() FROM gp_dist_random('gp_id');
1843+
$$
1844+
LANGUAGE SQL;
1845+
1846+
CREATE FUNCTION gp_stat_reset(tableoid oid) RETURNS VOID AS
1847+
$$
1848+
SELECT pg_stat_reset()
1849+
UNION ALL
1850+
SELECT pg_stat_reset() FROM gp_dist_random('gp_id');
1851+
$$ LANGUAGE SQL;
1852+
1853+
CREATE FUNCTION gp_stat_reset_shared(target text) RETURNS VOID AS
1854+
$$
1855+
SELECT pg_stat_reset_shared(target)
1856+
UNION ALL
1857+
SELECT pg_stat_reset_shared(target) FROM gp_dist_random('gp_id');
1858+
$$ LANGUAGE SQL;
1859+
1860+
CREATE FUNCTION gp_stat_reset_single_table_counters(tableoid oid) RETURNS VOID AS
1861+
$$
1862+
WITH table_info AS (
1863+
SELECT tableoid::regclass::text AS v_relname
1864+
)
1865+
SELECT pg_stat_reset_single_table_counters(v_relname::regclass)
1866+
FROM table_info
1867+
UNION ALL
1868+
SELECT pg_stat_reset_single_table_counters(v_relname::regclass)
1869+
FROM table_info, gp_dist_random('gp_id');
1870+
$$ LANGUAGE SQL;
1871+
1872+
CREATE FUNCTION gp_stat_reset_single_function_counters(funcoid oid) RETURNS VOID AS
1873+
$$
1874+
WITH func_info AS (
1875+
SELECT proname FROM pg_proc WHERE oid = funcoid
1876+
)
1877+
SELECT pg_stat_reset_single_function_counters(funcoid)
1878+
UNION ALL
1879+
SELECT (
1880+
SELECT pg_stat_reset_single_function_counters(pg_proc.oid)
1881+
FROM pg_proc, func_info
1882+
WHERE pg_proc.proname = func_info.proname
1883+
)
1884+
from gp_dist_random('gp_id');
1885+
$$ LANGUAGE SQL;
1886+
1887+
CREATE FUNCTION gp_stat_reset_slru(target text) RETURNS VOID AS
1888+
$$
1889+
SELECT pg_stat_reset_slru(target)
1890+
UNION ALL
1891+
SELECT pg_stat_reset_slru(target) FROM gp_dist_random('gp_id');
1892+
$$ LANGUAGE SQL;
1893+
1894+
CREATE FUNCTION gp_stat_reset_replication_slot(target text) RETURNS VOID AS
1895+
$$
1896+
SELECT pg_stat_reset_replication_slot(target)
1897+
UNION ALL
1898+
SELECT pg_stat_reset_replication_slot(target) FROM gp_dist_random('gp_id');
1899+
$$ LANGUAGE SQL;
1900+
1901+
CREATE FUNCTION gp_stat_reset_subscription_stats(subid oid) RETURNS VOID AS
1902+
$$
1903+
WITH sub_info AS (
1904+
SELECT subname FROM pg_subscription WHERE oid = subid
1905+
)
1906+
SELECT pg_stat_reset_single_function_counters(subid)
1907+
UNION ALL
1908+
SELECT (
1909+
SELECT pg_stat_reset_single_function_counters(pg_subscription.oid)
1910+
FROM pg_subscription, sub_info
1911+
WHERE pg_subscription.subname = sub_info.subname
1912+
)
1913+
from gp_dist_random('gp_id');
1914+
$$ LANGUAGE SQL;

src/backend/catalog/system_views_gp.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ pg_statio_user_sequences
4646
pg_statio_user_tables
4747
pg_stats
4848
pg_stats_ext
49+
pg_stat_io

src/backend/catalog/system_views_gp_summary.sql

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,10 @@ SELECT
101101
s.schemaname,
102102
s.relname,
103103
m.seq_scan,
104+
m.last_seq_scan,
104105
m.seq_tup_read,
105106
m.idx_scan,
107+
m.last_idx_scan,
106108
m.idx_tup_fetch,
107109
m.n_tup_ins,
108110
m.n_tup_upd,
@@ -125,13 +127,16 @@ FROM
125127
allt.schemaname,
126128
allt.relname,
127129
case when d.policytype = 'r' then (sum(seq_scan)/d.numsegments)::bigint else sum(seq_scan) end seq_scan,
130+
max(last_seq_scan) as last_seq_scan,
128131
case when d.policytype = 'r' then (sum(seq_tup_read)/d.numsegments)::bigint else sum(seq_tup_read) end seq_tup_read,
129132
case when d.policytype = 'r' then (sum(idx_scan)/d.numsegments)::bigint else sum(idx_scan) end idx_scan,
133+
max(last_idx_scan) as last_idx_scan,
130134
case when d.policytype = 'r' then (sum(idx_tup_fetch)/d.numsegments)::bigint else sum(idx_tup_fetch) end idx_tup_fetch,
131135
case when d.policytype = 'r' then (sum(n_tup_ins)/d.numsegments)::bigint else sum(n_tup_ins) end n_tup_ins,
132136
case when d.policytype = 'r' then (sum(n_tup_upd)/d.numsegments)::bigint else sum(n_tup_upd) end n_tup_upd,
133137
case when d.policytype = 'r' then (sum(n_tup_del)/d.numsegments)::bigint else sum(n_tup_del) end n_tup_del,
134138
case when d.policytype = 'r' then (sum(n_tup_hot_upd)/d.numsegments)::bigint else sum(n_tup_hot_upd) end n_tup_hot_upd,
139+
case when d.policytype = 'r' then (sum(n_tup_newpage_upd)/d.numsegments)::bigint else sum(n_tup_newpage_upd) end n_tup_newpage_upd,
135140
case when d.policytype = 'r' then (sum(n_live_tup)/d.numsegments)::bigint else sum(n_live_tup) end n_live_tup,
136141
case when d.policytype = 'r' then (sum(n_dead_tup)/d.numsegments)::bigint else sum(n_dead_tup) end n_dead_tup,
137142
case when d.policytype = 'r' then (sum(n_mod_since_analyze)/d.numsegments)::bigint else sum(n_mod_since_analyze) end n_mod_since_analyze,
@@ -190,7 +195,8 @@ SELECT
190195
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_ins)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_ins) END AS n_tup_ins,
191196
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_upd) END AS n_tup_upd,
192197
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_del)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_del) END AS n_tup_del,
193-
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_hot_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_hot_upd) END AS n_tup_hot_upd
198+
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_hot_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_hot_upd) END AS n_tup_hot_upd,
199+
CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_newpage_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_newpage_upd) END AS n_tup_newpage_upd
194200
FROM
195201
gp_stat_xact_all_tables sxa
196202
LEFT OUTER JOIN gp_distribution_policy dst
@@ -221,6 +227,7 @@ SELECT
221227
s.relname,
222228
s.indexrelname,
223229
m.idx_scan,
230+
m.last_idx_scan,
224231
m.idx_tup_read,
225232
m.idx_tup_fetch
226233
FROM
@@ -231,6 +238,7 @@ FROM
231238
alli.relname,
232239
alli.indexrelname,
233240
case when d.policytype = 'r' then (sum(alli.idx_scan)/d.numsegments)::bigint else sum(alli.idx_scan) end idx_scan,
241+
max(last_idx_scan) as last_idx_scan,
234242
case when d.policytype = 'r' then (sum(alli.idx_tup_read)/d.numsegments)::bigint else sum(alli.idx_tup_read) end idx_tup_read,
235243
case when d.policytype = 'r' then (sum(alli.idx_tup_fetch)/d.numsegments)::bigint else sum(alli.idx_tup_fetch) end idx_tup_fetch
236244
FROM
@@ -489,3 +497,26 @@ FROM gp_stat_progress_create_index a
489497
LEFT JOIN gp_stat_progress_create_index a1 ON a.pid = a1.pid AND a1.gp_segment_id = -1
490498
WHERE a.gp_segment_id > -1
491499
GROUP BY a.datid, a.datname, a.relid, a.index_relid, a.command, a.phase, d.policytype, d.numsegments;
500+
501+
CREATE OR REPLACE VIEW gp_stat_io_summary AS
502+
SELECT
503+
backend_type,
504+
object,
505+
context,
506+
sum(reads) as reads,
507+
sum(read_time) as read_time,
508+
sum(writes) as writes,
509+
sum(write_time) as write_time,
510+
sum(writebacks) as writebacks,
511+
sum(writeback_time) as writeback_time,
512+
sum(extends) as extends,
513+
sum(extend_time) as extend_time,
514+
sum(op_bytes) as op_bytes,
515+
sum(hits) as hits,
516+
sum(evictions) as evictions,
517+
sum(reuses) as reuses,
518+
sum(fsyncs) as fsyncs,
519+
sum(fsync_time) as fsync_time,
520+
max(stats_reset) as stats_reset
521+
FROM gp_stat_io
522+
GROUP BY backend_type, object, context;

src/backend/commands/vacuum.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel, bool auto_s
217217

218218
/* By default parallel vacuum is enabled */
219219
params.nworkers = 0;
220+
params.buffer_usage_limit = 0;
220221

221222
/*
222223
* Set this to an invalid value so it is clear whether or not a
@@ -262,6 +263,7 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel, bool auto_s
262263
}
263264

264265
ring_size = result;
266+
params.buffer_usage_limit = result;
265267
}
266268
else if (!vacstmt->is_vacuumcmd)
267269
ereport(ERROR,
@@ -370,7 +372,9 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel, bool auto_s
370372
(process_toast ? VACOPT_PROCESS_TOAST : 0) |
371373
(skip_database_stats ? VACOPT_SKIP_DATABASE_STATS : 0) |
372374
(only_database_stats ? VACOPT_ONLY_DATABASE_STATS : 0) |
373-
(update_datfrozenxid ? VACOPT_UPDATE_DATFROZENXID : 0);
375+
(update_datfrozenxid ? VACOPT_UPDATE_DATFROZENXID : 0) |
376+
(params.nworkers != 0 ? VACOPT_PARALLEL : 0) |
377+
(params.buffer_usage_limit != 0 ? VACOPT_BUFFER_USAGE_LIMIT : 0) ;
374378

375379
if (rootonly)
376380
params.options |= VACOPT_ROOTONLY;
@@ -3439,6 +3443,18 @@ vacuum_params_to_options_list(VacuumParams *params)
34393443
options = lappend(options, makeDefElem("only_database_stats", (Node *) makeInteger(1), -1));
34403444
optmask &= ~VACOPT_ONLY_DATABASE_STATS;
34413445
}
3446+
if ((optmask & VACOPT_PARALLEL))
3447+
{
3448+
Assert(params->nworkers!=0);
3449+
options = lappend(options, makeDefElem("parallel", (Node *) makeInteger(params->nworkers==-1 ? 0 : params->nworkers), -1));
3450+
optmask &= ~VACOPT_PARALLEL;
3451+
}
3452+
if ((optmask & VACOPT_BUFFER_USAGE_LIMIT))
3453+
{
3454+
Assert(params->buffer_usage_limit!=0);
3455+
options = lappend(options, makeDefElem("buffer_usage_limit", (Node *) makeInteger(params->buffer_usage_limit), -1));
3456+
optmask &= ~VACOPT_BUFFER_USAGE_LIMIT;
3457+
}
34423458

34433459

34443460
if (optmask & VACUUM_AO_PHASE_MASK)

src/backend/commands/vacuum_ao.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,7 @@ vacuum_appendonly_index(Relation indexRelation,
634634
pg_rusage_init(&ru0);
635635

636636
ivinfo.index = indexRelation;
637+
ivinfo.heaprel = aoRelation;
637638
ivinfo.analyze_only = false;
638639
ivinfo.message_level = elevel;
639640
/*
@@ -808,6 +809,7 @@ scan_index(Relation indrel, Relation aorel, int elevel, BufferAccessStrategy vac
808809
pg_rusage_init(&ru0);
809810

810811
ivinfo.index = indrel;
812+
ivinfo.heaprel = aorel;
811813
ivinfo.analyze_only = false;
812814
ivinfo.message_level = elevel;
813815
/*

0 commit comments

Comments
 (0)