From db5a6aa30e4bc32612975669d59d4da8376517a0 Mon Sep 17 00:00:00 2001 From: Ibrar Ahmed Date: Tue, 15 Nov 2022 16:31:37 +0000 Subject: [PATCH] PG-320: Removing the query state code from the view. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The query status monitoring code was used to track the current query state, for example,      parsing, executing and finishing. After careful review, we have figured out that   it does not make sense while a lot of time same query is running. Therefore it   is also consuming resources. This commit will remove that feature. The upgrade SQL from 1.0 - 2.0 is also updated. --- pg_stat_monitor--1.0--2.0.sql | 271 ++++++++++++++++++ pg_stat_monitor--2.0.sql | 23 +- pg_stat_monitor.c | 42 +-- regression/expected/application_name.out | 11 +- .../expected/application_name_unique.out | 17 +- regression/expected/basic.out | 7 +- regression/expected/cmd_type.out | 27 +- regression/expected/counters.out | 5 +- regression/expected/counters_1.out | 83 ++++++ regression/expected/database.out | 6 +- regression/expected/database_1.out | 53 ++++ regression/expected/error.out | 31 +- regression/expected/error_insert.out | 15 +- regression/expected/histogram_1.out | 15 +- regression/expected/relations.out | 64 ++--- regression/expected/rows.out | 17 +- regression/expected/tags.out | 3 +- regression/expected/top_query.out | 35 ++- t/expected/001_settings_default.out | 11 +- 19 files changed, 536 insertions(+), 200 deletions(-) create mode 100644 regression/expected/counters_1.out create mode 100644 regression/expected/database_1.out diff --git a/pg_stat_monitor--1.0--2.0.sql b/pg_stat_monitor--1.0--2.0.sql index 5f8cf1e..18d28b1 100644 --- a/pg_stat_monitor--1.0--2.0.sql +++ b/pg_stat_monitor--1.0--2.0.sql @@ -3,3 +3,274 @@ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "ALTER EXTENSION pg_stat_monitor" to load this file. \quit +DROP FUNCTION pg_stat_monitor_internal CASCADE; +DROP FUNCTION pgsm_create_11_view CASCADE; +DROP FUNCTION pgsm_create_13_view CASCADE; +DROP FUNCTION pgsm_create_14_view CASCADE; +DROP FUNCTION pgsm_create_view CASCADE; + +-- pg_stat_monitor internal function, must not call outside from this file. +CREATE FUNCTION pg_stat_monitor_internal( + IN showtext boolean, + OUT bucket int8, -- 0 + OUT userid oid, + OUT dbid oid, + OUT client_ip int8, + + OUT queryid text, -- 4 + OUT planid text, + OUT query text, + OUT query_plan text, + OUT top_queryid text, + OUT top_query text, + OUT application_name text, + + OUT relations text, -- 11 + OUT cmd_type int, + OUT elevel int, + OUT sqlcode TEXT, + OUT message text, + OUT bucket_start_time text, + + OUT calls int8, -- 16 + + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + + OUT rows_retrieved int8, + + OUT plans_calls int8, -- 23 + + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + + OUT shared_blks_hit int8, -- 29 + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT blk_read_time float8, + OUT blk_write_time float8, + OUT resp_calls text, -- 41 + OUT cpu_user_time float8, + OUT cpu_sys_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric, + OUT comments TEXT, + OUT toplevel BOOLEAN +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_monitor' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +-- Register a view on the function for ease of use. +CREATE FUNCTION pgsm_create_11_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + + +CREATE FUNCTION pgsm_create_13_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes, + -- PostgreSQL-13 Specific Coulumns + plans_calls +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + +CREATE FUNCTION pgsm_create_14_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes, + + -- PostgreSQL-14 Specific Columns + plans_calls, + total_plan_time, + min_plan_time, + max_plan_time, + mean_plan_time, + stddev_plan_time +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + +CREATE FUNCTION pgsm_create_view() RETURNS INT AS +$$ + DECLARE ver integer; + BEGIN + SELECT current_setting('server_version_num') INTO ver; + IF (ver >= 14000) THEN + return pgsm_create_14_view(); + END IF; + IF (ver >= 13000) THEN + return pgsm_create_13_view(); + END IF; + IF (ver >= 11000) THEN + return pgsm_create_11_view(); + END IF; + RETURN 0; + END; +$$ LANGUAGE plpgsql; + +SELECT pgsm_create_view(); + +GRANT SELECT ON pg_stat_monitor TO PUBLIC; + diff --git a/pg_stat_monitor--2.0.sql b/pg_stat_monitor--2.0.sql index df06d63..f3e299a 100644 --- a/pg_stat_monitor--2.0.sql +++ b/pg_stat_monitor--2.0.sql @@ -26,19 +26,6 @@ $$ LANGUAGE SQL; -- Some generic utility function used internally. -CREATE FUNCTION get_state(state_code int8) RETURNS TEXT AS -$$ -SELECT - CASE - WHEN state_code = 0 THEN 'PARSING' - WHEN state_code = 1 THEN 'PLANNING' - WHEN state_code = 2 THEN 'ACTIVE' - WHEN state_code = 3 THEN 'FINISHED' - WHEN state_code = 4 THEN 'FINISHED WITH ERROR' - END -$$ -LANGUAGE SQL PARALLEL SAFE; - CREATE FUNCTION get_cmd_type (cmd_type INTEGER) RETURNS TEXT AS $$ SELECT @@ -129,7 +116,6 @@ CREATE FUNCTION pg_stat_monitor_internal( OUT planid text, OUT query text, OUT query_plan text, - OUT state_code int8, OUT top_queryid text, OUT top_query text, OUT application_name text, @@ -233,9 +219,7 @@ CREATE VIEW pg_stat_monitor AS SELECT cpu_sys_time, wal_records, wal_fpi, - wal_bytes, - state_code, - get_state(state_code) as state + wal_bytes FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid ORDER BY bucket_start_time; RETURN 0; @@ -292,9 +276,6 @@ CREATE VIEW pg_stat_monitor AS SELECT wal_records, wal_fpi, wal_bytes, - state_code, - get_state(state_code) as state, - -- PostgreSQL-13 Specific Coulumns plans_calls FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid @@ -352,8 +333,6 @@ CREATE VIEW pg_stat_monitor AS SELECT wal_records, wal_fpi, wal_bytes, - state_code, - get_state(state_code) as state, -- PostgreSQL-14 Specific Columns plans_calls, diff --git a/pg_stat_monitor.c b/pg_stat_monitor.c index 118da37..9147d67 100644 --- a/pg_stat_monitor.c +++ b/pg_stat_monitor.c @@ -26,7 +26,7 @@ PG_MODULE_MAGIC; #define BUILD_VERSION "1.1.1" -#define PG_STAT_STATEMENTS_COLS 53 /* maximum of above */ +#define PG_STAT_STATEMENTS_COLS 52 /* maximum of above */ #define PGSM_TEXT_FILE PGSTAT_STAT_PERMANENT_DIRECTORY "pg_stat_monitor_query" #define roundf(x,d) ((floor(((x)*pow(10,d))+.5))/pow(10,d)) @@ -463,22 +463,6 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query) */ if (query->queryId == UINT64CONST(0)) query->queryId = UINT64CONST(1); - - if (jstate.clocations_count > 0) - pgss_store(query->queryId, /* query id */ - pstate->p_sourcetext, /* query */ - query->stmt_location, /* query location */ - query->stmt_len, /* query length */ - NULL, /* PlanInfo */ - query->commandType, /* CmdType */ - NULL, /* SysInfo */ - NULL, /* ErrorInfo */ - 0, /* totaltime */ - 0, /* rows */ - NULL, /* bufusage */ - NULL, /* walusage */ - &jstate, /* JumbleState */ - PGSS_PARSE); /* pgssStoreKind */ } #endif @@ -521,20 +505,6 @@ pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) #endif MemoryContextSwitchTo(oldcxt); } - pgss_store(queryDesc->plannedstmt->queryId, /* query id */ - queryDesc->sourceText, /* query text */ - queryDesc->plannedstmt->stmt_location, /* query location */ - queryDesc->plannedstmt->stmt_len, /* query length */ - NULL, /* PlanInfo */ - queryDesc->operation, /* CmdType */ - NULL, /* SysInfo */ - NULL, /* ErrorInfo */ - 0, /* totaltime */ - 0, /* rows */ - NULL, /* bufusage */ - NULL, /* walusage */ - NULL, /* JumbleState */ - PGSS_EXEC); /* pgssStoreKind */ } } @@ -1657,7 +1627,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) elog(ERROR, "pg_stat_monitor: return type must be a row type"); - if (tupdesc->natts != 51) + if (tupdesc->natts != 50) elog(ERROR, "pg_stat_monitor: incorrect number of output arguments, required %d", tupdesc->natts); tupstore = tuplestore_begin_heap(true, false, work_mem); @@ -1802,11 +1772,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, values[i++] = CStringGetTextDatum(""); } - - /* state at column number 8 */ - values[i++] = Int64GetDatumFast(tmp.state); - - /* parentid at column number 9 */ + /* parentid at column number 8 */ if (tmp.info.parentid != UINT64CONST(0)) { snprintf(parentid_txt, 32, "%08lX", tmp.info.parentid); @@ -1819,7 +1785,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, nulls[i++] = true; } - /* application_name at column number 9 */ + /* application_name at column number 10 */ if (strlen(tmp.info.application_name) > 0) values[i++] = CStringGetTextDatum(tmp.info.application_name); else diff --git a/regression/expected/application_name.out b/regression/expected/application_name.out index f170fec..969a6a4 100644 --- a/regression/expected/application_name.out +++ b/regression/expected/application_name.out @@ -12,12 +12,11 @@ SELECT 1 AS num; (1 row) SELECT query,application_name FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | application_name --------------------------------------------------------------------------------+----------------------------- - SELECT 1 AS num | pg_regress/application_name - SELECT pg_stat_monitor_reset() | pg_regress/application_name - SELECT query,application_name FROM pg_stat_monitor ORDER BY query COLLATE "C" | pg_regress/application_name -(3 rows) + query | application_name +--------------------------------+----------------------------- + SELECT 1 AS num | pg_regress/application_name + SELECT pg_stat_monitor_reset() | pg_regress/application_name +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/application_name_unique.out b/regression/expected/application_name_unique.out index 3494efd..c34e033 100644 --- a/regression/expected/application_name_unique.out +++ b/regression/expected/application_name_unique.out @@ -20,15 +20,14 @@ SELECT 1 AS num; (1 row) SELECT query,application_name FROM pg_stat_monitor ORDER BY query, application_name COLLATE "C"; - query | application_name --------------------------------------------------------------------------------------------------+------------------------------------ - SELECT 1 AS num | naeem - SELECT 1 AS num | psql - SELECT pg_stat_monitor_reset() | pg_regress/application_name_unique - SELECT query,application_name FROM pg_stat_monitor ORDER BY query, application_name COLLATE "C" | psql - Set application_name = 'naeem' | naeem - Set application_name = 'psql' | psql -(6 rows) + query | application_name +--------------------------------+------------------------------------ + SELECT 1 AS num | naeem + SELECT 1 AS num | psql + SELECT pg_stat_monitor_reset() | pg_regress/application_name_unique + Set application_name = 'naeem' | naeem + Set application_name = 'psql' | psql +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/basic.out b/regression/expected/basic.out index 8289ecb..208fc96 100644 --- a/regression/expected/basic.out +++ b/regression/expected/basic.out @@ -12,12 +12,11 @@ SELECT 1 AS num; (1 row) SELECT query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query --------------------------------------------------------------- + query +-------------------------------- SELECT 1 AS num SELECT pg_stat_monitor_reset() - SELECT query FROM pg_stat_monitor ORDER BY query COLLATE "C" -(3 rows) +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/cmd_type.out b/regression/expected/cmd_type.out index 2c6fc66..2981c8f 100644 --- a/regression/expected/cmd_type.out +++ b/regression/expected/cmd_type.out @@ -24,20 +24,19 @@ SELECT b FROM t2 FOR UPDATE; TRUNCATE t1; DROP TABLE t1; SELECT query, cmd_type, cmd_type_text FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | cmd_type | cmd_type_text -----------------------------------------------------------------------------------------+----------+--------------- - CREATE TABLE t1 (a INTEGER) | 0 | - CREATE TABLE t2 (b INTEGER) | 0 | - DELETE FROM t1 | 4 | DELETE - DROP TABLE t1 | 0 | - INSERT INTO t1 VALUES(1) | 3 | INSERT - SELECT a FROM t1 | 1 | SELECT - SELECT b FROM t2 FOR UPDATE | 1 | SELECT - SELECT pg_stat_monitor_reset() | 1 | SELECT - SELECT query, cmd_type, cmd_type_text FROM pg_stat_monitor ORDER BY query COLLATE "C" | 1 | SELECT - TRUNCATE t1 | 0 | - UPDATE t1 SET a = 2 | 2 | UPDATE -(11 rows) + query | cmd_type | cmd_type_text +--------------------------------+----------+--------------- + CREATE TABLE t1 (a INTEGER) | 0 | + CREATE TABLE t2 (b INTEGER) | 0 | + DELETE FROM t1 | 4 | DELETE + DROP TABLE t1 | 0 | + INSERT INTO t1 VALUES(1) | 3 | INSERT + SELECT a FROM t1 | 1 | SELECT + SELECT b FROM t2 FOR UPDATE | 1 | SELECT + SELECT pg_stat_monitor_reset() | 1 | SELECT + TRUNCATE t1 | 0 | + UPDATE t1 SET a = 2 | 2 | UPDATE +(10 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/counters.out b/regression/expected/counters.out index 4c89893..a0c8117 100644 --- a/regression/expected/counters.out +++ b/regression/expected/counters.out @@ -41,8 +41,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; ---------------------------------------------------------------------------------+------- SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a | 4 SELECT pg_stat_monitor_reset() | 1 - SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C" | 1 -(3 rows) +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -76,7 +75,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; n := n + 1; +| end loop; +| end $$ | -(4 rows) +(3 rows) DROP TABLE t1; DROP TABLE t2; diff --git a/regression/expected/counters_1.out b/regression/expected/counters_1.out new file mode 100644 index 0000000..6b1aae7 --- /dev/null +++ b/regression/expected/counters_1.out @@ -0,0 +1,83 @@ +CREATE EXTENSION pg_stat_monitor; +Set pg_stat_monitor.pgsm_track='all'; +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +CREATE TABLE t1 (a INTEGER); +CREATE TABLE t2 (b INTEGER); +CREATE TABLE t3 (c INTEGER); +CREATE TABLE t4 (d INTEGER); +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | calls +---------------------------------------------------------------------------------+------- + SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a | 4 + SELECT pg_stat_monitor_reset() | 1 +(2 rows) + +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +do $$ +declare + n integer:= 1; +begin + loop + PERFORM a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + exit when n = 1000; + n := n + 1; + end loop; +end $$; +SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | calls +---------------------------------------------------------------------------------------------------+------- + SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a | 1000 + SELECT pg_stat_monitor_reset() | 1 + do $$ +| 1 + declare +| + n integer:= 1; +| + begin +| + loop +| + PERFORM a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a;+| + exit when n = 1000; +| + n := n + 1; +| + end loop; +| + end $$ | +(3 rows) + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP EXTENSION pg_stat_monitor; diff --git a/regression/expected/database.out b/regression/expected/database.out index 12c5055..b84a2e0 100644 --- a/regression/expected/database.out +++ b/regression/expected/database.out @@ -28,13 +28,13 @@ SELECT * FROM t3,t4 WHERE t3.c = t4.d; \c contrib_regression SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - datname | query ---------------------+----------------------------------------------------------------------- + datname | query +--------------------+--------------------------------------- db1 | SELECT * FROM t1,t2 WHERE t1.a = t2.b db2 | SELECT * FROM t3,t4 WHERE t3.c = t4.d contrib_regression | SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C" contrib_regression | SELECT pg_stat_monitor_reset() -(4 rows) +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/database_1.out b/regression/expected/database_1.out new file mode 100644 index 0000000..7062272 --- /dev/null +++ b/regression/expected/database_1.out @@ -0,0 +1,53 @@ +CREATE EXTENSION pg_stat_monitor; +CREATE DATABASE db1; +CREATE DATABASE db2; +\c db1 +CREATE TABLE t1 (a int); +CREATE TABLE t2 (b int); +\c db2 +CREATE TABLE t3 (c int); +CREATE TABLE t4 (d int); +\c contrib_regression +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +\c db1 +SELECT * FROM t1,t2 WHERE t1.a = t2.b; + a | b +---+--- +(0 rows) + +\c db2 +SELECT * FROM t3,t4 WHERE t3.c = t4.d; + c | d +---+--- +(0 rows) + +\c contrib_regression +SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C"; + datname | query +--------------------+--------------------------------------- + db1 | SELECT * FROM t1,t2 WHERE t1.a = t2.b + db2 | SELECT * FROM t3,t4 WHERE t3.c = t4.d + contrib_regression | SELECT pg_stat_monitor_reset() +(3 rows) + +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +\c db1 +DROP TABLE t1; +DROP TABLE t2; +\c db2 +DROP TABLE t3; +DROP TABLE t4; +\c contrib_regression +DROP DATABASE db1; +DROP DATABASE db2; +DROP EXTENSION pg_stat_monitor; diff --git a/regression/expected/error.out b/regression/expected/error.out index 7a61786..74fb6cc 100644 --- a/regression/expected/error.out +++ b/regression/expected/error.out @@ -21,22 +21,21 @@ RAISE WARNING 'warning message'; END $$; WARNING: warning message SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel; - query | elevel | sqlcode | message ------------------------------------------------------------------------------------------------+--------+---------+----------------------------------- - ELECET * FROM unknown; | 21 | 42601 | syntax error at or near "ELECET" - SELECT * FROM unknown; | 21 | 42P01 | relation "unknown" does not exist - SELECT 1/0; | 21 | 22012 | division by zero - SELECT pg_stat_monitor_reset() | 0 | | - SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel | 0 | | - do $$ +| 0 | | - BEGIN +| | | - RAISE WARNING 'warning message'; +| | | - END $$ | | | - do $$ +| 19 | 01000 | warning message - BEGIN +| | | - RAISE WARNING 'warning message'; +| | | - END $$; | | | -(7 rows) + query | elevel | sqlcode | message +----------------------------------+--------+---------+----------------------------------- + ELECET * FROM unknown; | 20 | 42601 | syntax error at or near "ELECET" + SELECT * FROM unknown; | 20 | 42P01 | relation "unknown" does not exist + SELECT 1/0; | 20 | 22012 | division by zero + SELECT pg_stat_monitor_reset() | 0 | | + do $$ +| 0 | | + BEGIN +| | | + RAISE WARNING 'warning message';+| | | + END $$ | | | + do $$ +| 19 | 01000 | warning message + BEGIN +| | | + RAISE WARNING 'warning message';+| | | + END $$; | | | +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/error_insert.out b/regression/expected/error_insert.out index aa64f57..66df8cd 100644 --- a/regression/expected/error_insert.out +++ b/regression/expected/error_insert.out @@ -17,14 +17,13 @@ ERROR: duplicate key value violates unique constraint "company_pkey" DETAIL: Key (id)=(1) already exists. Drop Table if exists Company; SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel; - query | elevel | sqlcode | message ------------------------------------------------------------------------------------------------+--------+---------+--------------------------------------------------------------- - Drop Table if exists Company | 0 | | - INSERT INTO Company(ID, Name) VALUES (1, 'Percona') | 0 | | - INSERT INTO Company(ID, Name) VALUES (1, 'Percona'); | 21 | 23505 | duplicate key value violates unique constraint "company_pkey" - SELECT pg_stat_monitor_reset() | 0 | | - SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel | 0 | | -(5 rows) + query | elevel | sqlcode | message +-------------------------------------------------------+--------+---------+--------------------------------------------------------------- + Drop Table if exists Company | 0 | | + INSERT INTO Company(ID, Name) VALUES (1, 'Percona') | 0 | | + INSERT INTO Company(ID, Name) VALUES (1, 'Percona'); | 20 | 23505 | duplicate key value violates unique constraint "company_pkey" + SELECT pg_stat_monitor_reset() | 0 | | +(4 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/histogram_1.out b/regression/expected/histogram_1.out index 9a0eb91..1f638ef 100644 --- a/regression/expected/histogram_1.out +++ b/regression/expected/histogram_1.out @@ -45,14 +45,13 @@ INFO: Sleep 5 seconds (1 row) SELECT substr(query, 0,50) as query, calls, resp_calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | calls | resp_calls ----------------------------------------------------+-------+----------------------- - SELECT pg_sleep(i) | 5 | {0,0,0,0,0,0,3,2,0,0} - SELECT pg_stat_monitor_reset() | 1 | {1,0,0,0,0,0,0,0,0,0} - SELECT substr(query, 0,50) as query, calls, resp_ | 1 | {1,0,0,0,0,0,0,0,0,0} - Set pg_stat_monitor.pgsm_track='all' | 1 | {1,0,0,0,0,0,0,0,0,0} - select run_pg_sleep(5) | 1 | {0,0,0,0,0,0,0,0,1,0} -(5 rows) + query | calls | resp_calls +--------------------------------------+-------+----------------------- + SELECT pg_sleep(i) | 5 | {0,0,0,0,0,0,3,2,0,0} + SELECT pg_stat_monitor_reset() | 1 | {1,0,0,0,0,0,0,0,0,0} + Set pg_stat_monitor.pgsm_track='all' | 1 | {1,0,0,0,0,0,0,0,0,0} + select run_pg_sleep(5) | 1 | {0,0,0,0,0,0,0,0,1,0} +(4 rows) select * from generate_histogram(); range | freq | bar diff --git a/regression/expected/relations.out b/regression/expected/relations.out index 6c17a47..442f3ea 100644 --- a/regression/expected/relations.out +++ b/regression/expected/relations.out @@ -37,15 +37,14 @@ SELECT * FROM foo1, foo2, foo3, foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+--------------------------------------------------- - SELECT * FROM foo1 | {public.foo1} - SELECT * FROM foo1, foo2 | {public.foo1,public.foo2} - SELECT * FROM foo1, foo2, foo3 | {public.foo1,public.foo2,public.foo3} - SELECT * FROM foo1, foo2, foo3, foo4 | {public.foo1,public.foo2,public.foo3,public.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +--------------------------------------+--------------------------------------------------- + SELECT * FROM foo1 | {public.foo1} + SELECT * FROM foo1, foo2 | {public.foo1,public.foo2} + SELECT * FROM foo1, foo2, foo3 | {public.foo1,public.foo2,public.foo3} + SELECT * FROM foo1, foo2, foo3, foo4 | {public.foo1,public.foo2,public.foo3,public.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -89,15 +88,14 @@ SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+-------------------------------------------------- - SELECT * FROM sch1.foo1 | {sch1.foo1} - SELECT * FROM sch1.foo1, sch2.foo2 | {sch1.foo1,sch2.foo2} - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3 | {sch1.foo1,sch2.foo2,sch3.foo3} - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4 | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +----------------------------------------------------------+------------------------------------------- + SELECT * FROM sch1.foo1 | {sch1.foo1} + SELECT * FROM sch1.foo1, sch2.foo2 | {sch1.foo1,sch2.foo2} + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3 | {sch1.foo1,sch2.foo2,sch3.foo3} + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4 | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -122,13 +120,12 @@ SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query; - query | relations --------------------------------------------------------------+-------------------------------------------------- - SELECT * FROM sch1.foo1, foo1 | {sch1.foo1,public.foo1} - SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2 | {sch1.foo1,sch2.foo2,public.foo1,public.foo2} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query | {public.pg_stat_monitor*,pg_catalog.pg_database} -(4 rows) + query | relations +------------------------------------------------+----------------------------------------------- + SELECT * FROM sch1.foo1, foo1 | {sch1.foo1,public.foo1} + SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2 | {sch1.foo1,sch2.foo2,public.foo1,public.foo2} + SELECT pg_stat_monitor_reset() | +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -168,15 +165,14 @@ SELECT * FROM v1,v2,v3,v4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+----------------------------------------------------------------------------------------------- - SELECT * FROM v1 | {public.v1*,public.foo1} - SELECT * FROM v1,v2 | {public.v1*,public.foo1,public.v2*,public.foo2} - SELECT * FROM v1,v2,v3 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} - SELECT * FROM v1,v2,v3,v4 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +--------------------------------+----------------------------------------------------------------------------------------------- + SELECT * FROM v1 | {public.v1*,public.foo1} + SELECT * FROM v1,v2 | {public.v1*,public.foo1,public.v2*,public.foo2} + SELECT * FROM v1,v2,v3 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} + SELECT * FROM v1,v2,v3,v4 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/rows.out b/regression/expected/rows.out index b648175..9072bcf 100644 --- a/regression/expected/rows.out +++ b/regression/expected/rows.out @@ -8541,15 +8541,14 @@ SELECt * FROM t2 WHERE b % 2 = 0; (2500 rows) SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | rows_retrieved -------------------------------------------------------------------------------+---------------- - SELECT * FROM t1 | 1000 - SELECT * FROM t1 LIMIT 10 | 10 - SELECT * FROM t2 | 5000 - SELECT pg_stat_monitor_reset() | 1 - SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C" | 0 - SELECt * FROM t2 WHERE b % 2 = 0 | 2500 -(6 rows) + query | rows_retrieved +-----------------------------------+---------------- + SELECT * FROM t1 | 1000 + SELECT * FROM t1 LIMIT 10 | 10 + SELECT * FROM t2 | 5000 + SELECT pg_stat_monitor_reset() | 1 + SELECt * FROM t2 WHERE b % 2 = 0 | 2500 +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/tags.out b/regression/expected/tags.out index 76a1ff4..945540e 100644 --- a/regression/expected/tags.out +++ b/regression/expected/tags.out @@ -17,8 +17,7 @@ SELECT query, comments FROM pg_stat_monitor ORDER BY query COLLATE "C"; --------------------------------------------------------------------------+---------------------------------------------------------- SELECT 1 AS num /* { "application", psql_app, "real_ip", 192.168.1.3) */ | /* { "application", psql_app, "real_ip", 192.168.1.3) */ SELECT pg_stat_monitor_reset() | - SELECT query, comments FROM pg_stat_monitor ORDER BY query COLLATE "C" | -(3 rows) +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/top_query.out b/regression/expected/top_query.out index c943685..928c9aa 100644 --- a/regression/expected/top_query.out +++ b/regression/expected/top_query.out @@ -24,24 +24,23 @@ SELECT add2(1,2); (1 row) SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | top_query --------------------------------------------------------------------------+------------------ - (select $1 + $2) | SELECT add2(1,2) - CREATE OR REPLACE FUNCTION add(int, int) RETURNS INTEGER AS +| - $$ +| - BEGIN +| - return (select $1 + $2); +| - END; $$ language plpgsql | - CREATE OR REPLACE function add2(int, int) RETURNS int as +| - $$ +| - BEGIN +| - return add($1,$2); +| - END; +| - $$ language plpgsql | - SELECT add2(1,2) | - SELECT pg_stat_monitor_reset() | - SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C" | -(6 rows) + query | top_query +-------------------------------------------------------------+------------------ + CREATE OR REPLACE FUNCTION add(int, int) RETURNS INTEGER AS+| + $$ +| + BEGIN +| + return (select $1 + $2); +| + END; $$ language plpgsql | + CREATE OR REPLACE function add2(int, int) RETURNS int as +| + $$ +| + BEGIN +| + return add($1,$2); +| + END; +| + $$ language plpgsql | + SELECT (select $1 + $2) | SELECT add2(1,2) + SELECT add2(1,2) | + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/t/expected/001_settings_default.out b/t/expected/001_settings_default.out index 9d1d6ad..3719c03 100644 --- a/t/expected/001_settings_default.out +++ b/t/expected/001_settings_default.out @@ -26,12 +26,11 @@ SELECT * from pg_stat_monitor_settings; (15 rows) select datname, substr(query,0,100) as query, calls from pg_stat_monitor order by datname, query, calls desc Limit 20; - datname | query | calls -----------+-----------------------------------------------------------------------------------------------------+------- - postgres | SELECT * from pg_stat_monitor_settings | 1 - postgres | SELECT pg_stat_monitor_reset() | 1 - postgres | select datname, substr(query,0,100) as query, calls from pg_stat_monitor order by datname, query, c | 1 -(3 rows) + datname | query | calls +----------+----------------------------------------+------- + postgres | SELECT * from pg_stat_monitor_settings | 1 + postgres | SELECT pg_stat_monitor_reset() | 1 +(2 rows) SELECT * from pg_stat_monitor_settings; name | value | default_value | description | minimum | maximum | options | restart