Skip to content

Commit

Permalink
Add Config.track_query_stats to turn off query stats.
Browse files Browse the repository at this point in the history
  • Loading branch information
fantix committed Nov 22, 2024
1 parent 22328ad commit da5ebdd
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 50 deletions.
2 changes: 1 addition & 1 deletion edb/buildmeta.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
# The merge conflict there is a nice reminder that you probably need
# to write a patch in edb/pgsql/patches.py, and then you should preserve
# the old value.
EDGEDB_CATALOG_VERSION = 2024_11_15_00_00
EDGEDB_CATALOG_VERSION = 2024_11_22_00_00
EDGEDB_MAJOR_VERSION = 6


Expand Down
7 changes: 7 additions & 0 deletions edb/lib/cfg.edgeql
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ CREATE SCALAR TYPE cfg::ConnectionTransport EXTENDING enum<
TCP, TCP_PG, HTTP, SIMPLE_HTTP, HTTP_METRICS, HTTP_HEALTH>;
CREATE SCALAR TYPE cfg::QueryCacheMode EXTENDING enum<
InMemory, RegInline, PgFunc, Default>;
CREATE SCALAR TYPE cfg::QueryStatsOption EXTENDING enum<None, All>;

CREATE ABSTRACT TYPE cfg::ConfigObject EXTENDING std::BaseObject;

Expand Down Expand Up @@ -387,6 +388,12 @@ ALTER TYPE cfg::AbstractConfig {
CREATE CONSTRAINT std::min_value(1);
SET default := 100;
};

CREATE PROPERTY track_query_stats -> cfg::QueryStatsOption {
CREATE ANNOTATION cfg::backend_setting := '"edb_stat_statements.track"';
CREATE ANNOTATION std::description :=
'Select what queries are tracked in sys::QueryStats';
};
};


Expand Down
39 changes: 16 additions & 23 deletions edb_stat_statements/edb_stat_statements.c
Original file line number Diff line number Diff line change
Expand Up @@ -336,31 +336,35 @@ static HTAB *pgss_hash = NULL;
typedef enum
{
PGSS_TRACK_NONE, /* track no statements */
PGSS_TRACK_TOP, /* only top level statements */
PGSS_TRACK_ALL, /* all statements, including nested ones */
PGSS_TRACK_ALL, /* all recognized top-level statements */
PGSS_TRACK_DEV, /* all top-level statements, including unrecognized ones */
PGSS_TRACK_NESTED, /* all statements, including unrecognized and nested ones */
} PGSSTrackLevel;

static const struct config_enum_entry track_options[] =
{
{"none", PGSS_TRACK_NONE, false},
{"top", PGSS_TRACK_TOP, false},
{"all", PGSS_TRACK_ALL, false},
{"None", PGSS_TRACK_NONE, false},
{"All", PGSS_TRACK_ALL, false},
{"Dev", PGSS_TRACK_DEV, false},
{"Nested", PGSS_TRACK_NESTED, false},
{NULL, 0, false}
};

static int pgss_max = 5000; /* max # statements to track */
static int pgss_track = PGSS_TRACK_TOP; /* tracking level */
static int pgss_track = PGSS_TRACK_ALL; /* tracking level */
static bool pgss_track_utility = true; /* whether to track utility commands */
static bool pgss_track_planning = false; /* whether to track planning
* duration */
static bool pgss_save = true; /* whether to save stats across shutdown */
static bool edbss_track_unrecognized = false; /* whether to track unrecognized statements as-is */


#define pgss_enabled(level) \
(!IsParallelWorker() && \
(pgss_track == PGSS_TRACK_ALL || \
(pgss_track == PGSS_TRACK_TOP && (level) == 0)))
(pgss_track == PGSS_TRACK_NESTED || \
(pgss_track != PGSS_TRACK_NONE && (level) == 0)))

#define edbss_track_unrecognized() \
(pgss_track == PGSS_TRACK_DEV || pgss_track == PGSS_TRACK_NESTED)

#define record_gc_qtexts() \
do { \
Expand Down Expand Up @@ -492,7 +496,7 @@ _PG_init(void)
"Selects which statements are tracked by edb_stat_statements.",
NULL,
&pgss_track,
PGSS_TRACK_TOP,
PGSS_TRACK_ALL,
track_options,
PGC_SUSET,
0,
Expand Down Expand Up @@ -533,17 +537,6 @@ _PG_init(void)
NULL,
NULL);

DefineCustomBoolVariable("edb_stat_statements.track_unrecognized",
"Selects whether unrecognized SQL statements are tracked as-is.",
NULL,
&edbss_track_unrecognized,
false,
PGC_SIGHUP,
0,
NULL,
NULL,
NULL);

MarkGUCPrefixReserved("edb_stat_statements");

/*
Expand Down Expand Up @@ -1188,7 +1181,7 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate)
0,
0);
edbss_free_stmt_info(info);
} else if (!edbss_track_unrecognized) {
} else if (!edbss_track_unrecognized()) {
query->queryId = UINT64CONST(0);
} else if (jstate && jstate->clocations_count > 0)
/*
Expand Down Expand Up @@ -1715,7 +1708,7 @@ pgss_store(const char *query, uint64 queryId,
id = &info->id.uuid;
stmt_type = info->stmt_type;
extras = info->extras;
} else if (!edbss_track_unrecognized) {
} else if (!edbss_track_unrecognized()) {
/* skip unrecognized statements unless we're told not to */
goto done;
} else {
Expand Down
18 changes: 9 additions & 9 deletions edb_stat_statements/expected/level_tracking.out.17
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SELECT edb_stat_statements_reset() IS NOT NULL AS t;

-- DO block - top-level tracking.
CREATE TABLE stats_track_tab (x int);
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand All @@ -36,7 +36,7 @@ SELECT edb_stat_statements_reset() IS NOT NULL AS t;
(1 row)

-- DO block - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand Down Expand Up @@ -64,7 +64,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
| | END; $$
f | 1 | SELECT $1::TEXT
t | 1 | SELECT edb_stat_statements_reset() IS NOT NULL AS t
t | 1 | SET edb_stat_statements.track = 'all'
t | 1 | SET edb_stat_statements.track = 'nested'
(7 rows)

-- Procedure with multiple utility statements.
Expand All @@ -77,7 +77,7 @@ AS $$
$$;
SET edb_stat_statements.track_utility = TRUE;
-- all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand All @@ -96,7 +96,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(4 rows)

-- top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand All @@ -113,7 +113,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(2 rows)

-- DO block - top-level tracking without utility.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
Expand All @@ -140,7 +140,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(2 rows)

-- DO block - all-level tracking without utility.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand Down Expand Up @@ -168,7 +168,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(4 rows)

-- PL/pgSQL function - top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
Expand Down Expand Up @@ -244,7 +244,7 @@ SELECT toplevel, calls, rows, query FROM edb_stat_statements ORDER BY query COLL
(5 rows)

-- PL/pgSQL function - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand Down
16 changes: 8 additions & 8 deletions edb_stat_statements/expected/level_tracking.out.18
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SELECT edb_stat_statements_reset() IS NOT NULL AS t;

-- DO block - top-level tracking.
CREATE TABLE stats_track_tab (x int);
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand All @@ -36,7 +36,7 @@ SELECT edb_stat_statements_reset() IS NOT NULL AS t;
(1 row)

-- DO block - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand Down Expand Up @@ -77,7 +77,7 @@ AS $$
$$;
SET edb_stat_statements.track_utility = TRUE;
-- all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand All @@ -96,7 +96,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(4 rows)

-- top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand All @@ -113,7 +113,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(2 rows)

-- DO block - top-level tracking without utility.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
Expand All @@ -140,7 +140,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(2 rows)

-- DO block - all-level tracking without utility.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand Down Expand Up @@ -168,7 +168,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
(4 rows)

-- PL/pgSQL function - top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
Expand Down Expand Up @@ -244,7 +244,7 @@ SELECT toplevel, calls, rows, query FROM edb_stat_statements ORDER BY query COLL
(5 rows)

-- PL/pgSQL function - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
t
---
Expand Down
16 changes: 8 additions & 8 deletions edb_stat_statements/sql/level_tracking.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ SELECT edb_stat_statements_reset() IS NOT NULL AS t;

-- DO block - top-level tracking.
CREATE TABLE stats_track_tab (x int);
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand All @@ -19,7 +19,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
SELECT edb_stat_statements_reset() IS NOT NULL AS t;

-- DO block - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
DELETE FROM stats_track_tab;
DO $$
BEGIN
Expand All @@ -43,20 +43,20 @@ AS $$
$$;
SET edb_stat_statements.track_utility = TRUE;
-- all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
CALL proc_with_utility_stmt();
SELECT toplevel, calls, query FROM edb_stat_statements
ORDER BY query COLLATE "C", toplevel;
-- top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
CALL proc_with_utility_stmt();
SELECT toplevel, calls, query FROM edb_stat_statements
ORDER BY query COLLATE "C", toplevel;

-- DO block - top-level tracking without utility.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
DELETE FROM stats_track_tab;
Expand All @@ -73,7 +73,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
ORDER BY query COLLATE "C", toplevel;

-- DO block - all-level tracking without utility.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
DELETE FROM stats_track_tab;
DO $$
Expand All @@ -89,7 +89,7 @@ SELECT toplevel, calls, query FROM edb_stat_statements
ORDER BY query COLLATE "C", toplevel;

-- PL/pgSQL function - top-level tracking.
SET edb_stat_statements.track = 'top';
SET edb_stat_statements.track = 'dev';
SET edb_stat_statements.track_utility = FALSE;
SELECT edb_stat_statements_reset() IS NOT NULL AS t;
CREATE FUNCTION PLUS_TWO(i INTEGER) RETURNS INTEGER AS $$
Expand Down Expand Up @@ -122,7 +122,7 @@ SELECT PLUS_THREE(10);
SELECT toplevel, calls, rows, query FROM edb_stat_statements ORDER BY query COLLATE "C";

-- PL/pgSQL function - all-level tracking.
SET edb_stat_statements.track = 'all';
SET edb_stat_statements.track = 'nested';
SELECT edb_stat_statements_reset() IS NOT NULL AS t;

-- we drop and recreate the functions to avoid any caching funnies
Expand Down
Loading

0 comments on commit da5ebdd

Please sign in to comment.