mirror of
https://github.com/percona/pg_stat_monitor.git
synced 2026-02-04 05:56:21 +00:00
PG-186: Add support to monitor query execution plan.
This commit is contained in:
@@ -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"; |
|
||||
(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
|
||||
|
||||
@@ -5,12 +5,6 @@ SELECT pg_stat_monitor_reset();
|
||||
|
||||
(1 row)
|
||||
|
||||
select pg_sleep(.5);
|
||||
pg_sleep
|
||||
----------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT 1 AS num;
|
||||
num
|
||||
-----
|
||||
@@ -18,13 +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";
|
||||
select pg_sleep($1)
|
||||
(4 rows)
|
||||
(2 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -6,6 +6,7 @@ SELECT pg_stat_monitor_reset();
|
||||
(1 row)
|
||||
|
||||
CREATE TABLE t1 (a INTEGER);
|
||||
CREATE TABLE t2 (b INTEGER);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
SELECT a FROM t1;
|
||||
a
|
||||
@@ -15,26 +16,27 @@ SELECT a FROM t1;
|
||||
|
||||
UPDATE t1 SET a = 2;
|
||||
DELETE FROM t1;
|
||||
SELECT a FROM t1 FOR UPDATE;
|
||||
a
|
||||
SELECT b FROM t2 FOR UPDATE;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
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 |
|
||||
DELETE FROM t1; | 4 | DELETE
|
||||
DROP TABLE t1; | 0 |
|
||||
INSERT INTO t1 VALUES($1) | 3 | INSERT
|
||||
SELECT a FROM t1; | 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"; | 0 |
|
||||
TRUNCATE t1; | 0 |
|
||||
UPDATE t1 SET a = $1 | 2 | UPDATE
|
||||
(9 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 = $1 | 2 | UPDATE
|
||||
(10 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
CREATE EXTENSION pg_stat_monitor;
|
||||
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);
|
||||
@@ -34,8 +40,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
|
||||
@@ -62,12 +67,8 @@ end $$;
|
||||
SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
query | calls
|
||||
---------------------------------------------------------------------------------------------------+-------
|
||||
SELECT $1 AS num | 1
|
||||
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 n + $3 | 1
|
||||
SELECT n = $3 | 1
|
||||
SELECT pg_stat_monitor_reset(); | 1
|
||||
SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 1
|
||||
do $$ +| 1
|
||||
declare +|
|
||||
n integer:= 1; +|
|
||||
@@ -78,7 +79,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
n := n + 1; +|
|
||||
end loop; +|
|
||||
end $$; |
|
||||
(7 rows)
|
||||
(3 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -28,13 +28,12 @@ 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
|
||||
|
||||
@@ -21,19 +21,17 @@ RAISE WARNING 'warning message';
|
||||
END $$;
|
||||
WARNING: warning message
|
||||
SELECT query, elevel,sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
query | elevel | sqlcode | message
|
||||
----------------------------------------------------------------------------------------+--------+---------+-----------------------------------
|
||||
ELECET * FROM unknown; | 20 | 42601 | syntax error at or near "ELECET"
|
||||
SELECT $1/$2 | 0 | |
|
||||
SELECT * FROM unknown; | 20 | 42P01 | relation "unknown" does not exist
|
||||
SELECT 1/0; | 20 | 22012 | division by zero
|
||||
SELECT pg_stat_monitor_reset(); | 0 | |
|
||||
SELECT query, elevel,sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 0 | |
|
||||
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 $$ +| 19 | 01000 | warning message
|
||||
BEGIN +| | |
|
||||
RAISE WARNING 'warning message';+| | |
|
||||
END $$; | | |
|
||||
(5 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -37,15 +37,14 @@ SELECT * FROM foo1, foo2, foo3, foo4;
|
||||
(0 rows)
|
||||
|
||||
SELECT query, relations from pg_stat_monitor ORDER BY query;
|
||||
query | relations
|
||||
--------------------------------------------------------------+---------------------------------------------------
|
||||
SELECT * FROM foo1, foo2, foo3, foo4; | {public.foo1,public.foo2,public.foo3,public.foo4}
|
||||
SELECT * FROM foo1, foo2, foo3; | {public.foo1,public.foo2,public.foo3}
|
||||
SELECT * FROM foo1, foo2; | {public.foo1,public.foo2}
|
||||
SELECT * FROM foo1; | {public.foo1}
|
||||
SELECT pg_stat_monitor_reset(); |
|
||||
SELECT query, relations from pg_stat_monitor ORDER BY query; |
|
||||
(6 rows)
|
||||
query | relations
|
||||
---------------------------------------+---------------------------------------------------
|
||||
SELECT * FROM foo1, foo2, foo3, foo4; | {public.foo1,public.foo2,public.foo3,public.foo4}
|
||||
SELECT * FROM foo1, foo2, foo3; | {public.foo1,public.foo2,public.foo3}
|
||||
SELECT * FROM foo1, foo2; | {public.foo1,public.foo2}
|
||||
SELECT * FROM foo1; | {public.foo1}
|
||||
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;
|
||||
query | relations
|
||||
--------------------------------------------------------------+-------------------------------------------
|
||||
SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4}
|
||||
SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3; | {sch1.foo1,sch2.foo2,sch3.foo3}
|
||||
SELECT * FROM sch1.foo1, sch2.foo2; | {sch1.foo1,sch2.foo2}
|
||||
SELECT * FROM sch1.foo1; | {sch1.foo1}
|
||||
SELECT pg_stat_monitor_reset(); |
|
||||
SELECT query, relations from pg_stat_monitor ORDER BY query; |
|
||||
(6 rows)
|
||||
query | relations
|
||||
-----------------------------------------------------------+-------------------------------------------
|
||||
SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4}
|
||||
SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3; | {sch1.foo1,sch2.foo2,sch3.foo3}
|
||||
SELECT * FROM sch1.foo1, sch2.foo2; | {sch1.foo1,sch2.foo2}
|
||||
SELECT * FROM sch1.foo1; | {sch1.foo1}
|
||||
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; |
|
||||
(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;
|
||||
query | relations
|
||||
--------------------------------------------------------------+-----------------------------------------------------------------------------------------------
|
||||
SELECT * FROM v1,v2,v3,v4; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4}
|
||||
SELECT * FROM v1,v2,v3; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3}
|
||||
SELECT * FROM v1,v2; | {public.v1*,public.foo1,public.v2*,public.foo2}
|
||||
SELECT * FROM v1; | {public.v1*,public.foo1}
|
||||
SELECT pg_stat_monitor_reset(); |
|
||||
SELECT query, relations from pg_stat_monitor ORDER BY query; |
|
||||
(6 rows)
|
||||
query | relations
|
||||
---------------------------------+-----------------------------------------------------------------------------------------------
|
||||
SELECT * FROM v1,v2,v3,v4; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4}
|
||||
SELECT * FROM v1,v2,v3; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3}
|
||||
SELECT * FROM v1,v2; | {public.v1*,public.foo1,public.v2*,public.foo2}
|
||||
SELECT * FROM v1; | {public.v1*,public.foo1}
|
||||
SELECT pg_stat_monitor_reset(); |
|
||||
(5 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
CREATE EXTENSION pg_stat_monitor;
|
||||
CREATE TABLE t1(a int);
|
||||
CREATE TABLE t2(b int);
|
||||
ERROR: relation "t2" already exists
|
||||
INSERT INTO t1 VALUES(generate_series(1,1000));
|
||||
INSERT INTO t2 VALUES(generate_series(1,5000));
|
||||
SELECT pg_stat_monitor_reset();
|
||||
@@ -8540,15 +8541,14 @@ SELECt * FROM t2 WHERE b % 2 = 0;
|
||||
(2500 rows)
|
||||
|
||||
SELECT query, rows FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
query | rows
|
||||
---------------------------------------------------------------------+------
|
||||
SELECT * FROM t1 LIMIT $1 | 10
|
||||
SELECT * FROM t1; | 1000
|
||||
SELECT * FROM t2; | 5000
|
||||
SELECT pg_stat_monitor_reset(); | 1
|
||||
SELECT query, rows FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 0
|
||||
SELECt * FROM t2 WHERE b % $1 = $2 | 2500
|
||||
(6 rows)
|
||||
query | rows
|
||||
-------------------------------------+------
|
||||
SELECT * FROM t1 LIMIT $1 | 10
|
||||
SELECT * FROM t1; | 1000
|
||||
SELECT b FROM t2 FOR UPDATE; | 5000
|
||||
SELECT pg_stat_monitor_reset(); | 1
|
||||
SELECt * FROM t2 WHERE b % $1 = $2 | 2500
|
||||
(5 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
@@ -23,25 +23,23 @@ SELECT add2(1,2);
|
||||
(1 row)
|
||||
|
||||
SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
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 add($1,$2) |
|
||||
SELECT add2($1,$2) |
|
||||
SELECT pg_stat_monitor_reset(); |
|
||||
SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C"; |
|
||||
(7 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
|
||||
|
||||
@@ -27,18 +27,17 @@ SELECT * FROM t2;
|
||||
|
||||
SET ROLE su;
|
||||
SELECT userid, query FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
userid | query
|
||||
--------+-----------------------------------------------------------------------
|
||||
userid | query
|
||||
--------+---------------------------------
|
||||
u1 | CREATE TABLE t1 (a int);
|
||||
u2 | CREATE TABLE t2 (a int);
|
||||
u1 | SELECT * FROM t1;
|
||||
u2 | SELECT * FROM t2;
|
||||
su | SELECT pg_stat_monitor_reset();
|
||||
su | SELECT userid, query FROM pg_stat_monitor ORDER BY query COLLATE "C";
|
||||
su | SET ROLE su;
|
||||
u1 | SET ROLE u1;
|
||||
u2 | SET ROLE u2;
|
||||
(9 rows)
|
||||
(8 rows)
|
||||
|
||||
SELECT pg_stat_monitor_reset();
|
||||
pg_stat_monitor_reset
|
||||
|
||||
Reference in New Issue
Block a user