Add chunk ranges to constify_now test and remove costs

This commit is contained in:
Sven Klemm 2025-01-15 09:51:03 +01:00 committed by Sven Klemm
parent 9de9eecf73
commit 3e021795b5
2 changed files with 51 additions and 47 deletions

View File

@ -662,45 +662,49 @@ VALUES
(2, '2023-01-15'::timestamptz, 13, 4),
(5, '2023-01-20'::timestamptz, 13, 1);
-- four chunks, all of them should be excluded at plantime
SELECT COUNT(*) FROM show_chunks('logged_data');
count
4
(1 row)
SELECT row_number() OVER (), range_start, range_end FROM timescaledb_information.chunks WHERE hypertable_schema = 'public' AND hypertable_name = 'logged_data' ORDER BY 2,3;
row_number | range_start | range_end
------------+------------------------------+------------------------------
1 | Thu Dec 29 01:00:00 2022 UTC | Thu Jan 05 01:00:00 2023 UTC
2 | Thu Jan 05 01:00:00 2023 UTC | Thu Jan 12 01:00:00 2023 UTC
3 | Thu Jan 12 01:00:00 2023 UTC | Thu Jan 19 01:00:00 2023 UTC
4 | Thu Jan 19 01:00:00 2023 UTC | Thu Jan 26 01:00:00 2023 UTC
(4 rows)
SET timescaledb.current_timestamp_mock TO '2024-01-01 0:30:00+00';
SET timescaledb.enable_chunk_append TO true;
SET timescaledb.enable_constraint_aware_append TO true;
-- for all the queries below, exclusion should be happening at plantime
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '1 day' AND now()
AND rawtag_id = 1 ORDER BY "timestamp" ASC;
QUERY PLAN
Sort (cost=0.01..0.02 rows=0 width=20) (actual rows=0 loops=1)
Sort (actual rows=0 loops=1)
Sort Key: "timestamp"
Sort Method: quicksort
-> Result (cost=0.00..0.00 rows=0 width=0) (actual rows=0 loops=1)
-> Result (actual rows=0 loops=1)
One-Time Filter: false
(5 rows)
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp <= now() AND timestamp >= now() - interval '1 day'
AND rawtag_id = 1 ORDER BY "timestamp" ASC;
QUERY PLAN
Sort (cost=0.01..0.02 rows=0 width=20) (actual rows=0 loops=1)
Sort (actual rows=0 loops=1)
Sort Key: "timestamp"
Sort Method: quicksort
-> Result (cost=0.00..0.00 rows=0 width=0) (actual rows=0 loops=1)
-> Result (actual rows=0 loops=1)
One-Time Filter: false
(5 rows)
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp <= now() AND timestamp >= now() - interval '1 day'
ORDER BY "timestamp" ASC;
QUERY PLAN
Sort (cost=0.01..0.02 rows=0 width=20) (actual rows=0 loops=1)
Sort (actual rows=0 loops=1)
Sort Key: "timestamp"
Sort Method: quicksort
-> Result (cost=0.00..0.00 rows=0 width=0) (actual rows=0 loops=1)
-> Result (actual rows=0 loops=1)
One-Time Filter: false
(5 rows)
@ -709,12 +713,12 @@ SET timescaledb.current_timestamp_mock TO '2023-01-11';
PREPARE pbtw AS SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '5 day' AND now() AND rawtag_id = 1
ORDER BY "timestamp" ASC;
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Custom Scan (ChunkAppend) on logged_data (cost=0.16..22.08 rows=3 width=20)
Custom Scan (ChunkAppend) on logged_data
Order: logged_data."timestamp"
Chunks excluded during startup: 2
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
(6 rows)
@ -728,15 +732,15 @@ EXECUTE pbtw;
-- now move mock_now() to the future
SET timescaledb.current_timestamp_mock TO '2023-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Custom Scan (ChunkAppend) on logged_data (cost=0.16..22.08 rows=3 width=20)
Custom Scan (ChunkAppend) on logged_data
Order: logged_data."timestamp"
Chunks excluded during startup: 1
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
(9 rows)
@ -749,9 +753,9 @@ EXECUTE pbtw;
-- much further into the future, no rows should be returned
SET timescaledb.current_timestamp_mock TO '2024-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Custom Scan (ChunkAppend) on logged_data (cost=0.16..22.08 rows=3 width=20)
Custom Scan (ChunkAppend) on logged_data
Order: logged_data."timestamp"
Chunks excluded during startup: 3
(3 rows)
@ -769,17 +773,17 @@ SET timescaledb.current_timestamp_mock TO '2023-01-11';
PREPARE pbtw AS SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '5 day' AND now() AND rawtag_id = 1
ORDER BY "timestamp" ASC;
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Merge Append (cost=0.50..22.14 rows=3 width=20)
Merge Append
Sort Key: _hyper_X_X_chunk."timestamp"
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
(11 rows)
@ -793,17 +797,17 @@ EXECUTE pbtw;
-- now move mock_now() to the future
SET timescaledb.current_timestamp_mock TO '2023-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Merge Append (cost=0.50..22.14 rows=3 width=20)
Merge Append
Sort Key: _hyper_X_X_chunk."timestamp"
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
(11 rows)
@ -816,17 +820,17 @@ EXECUTE pbtw;
-- much further into the future, no rows should be returned
SET timescaledb.current_timestamp_mock TO '2024-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
QUERY PLAN
Merge Append (cost=0.50..22.14 rows=3 width=20)
Merge Append
Sort Key: _hyper_X_X_chunk."timestamp"
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk (cost=0.16..7.36 rows=1 width=20)
-> Index Scan Backward using _hyper_X_X_chunk_logged_data_timestamp_idx on _hyper_X_X_chunk
Index Cond: (("timestamp" >= (ts_now_mock() - '@ 5 days'::interval)) AND ("timestamp" <= ts_now_mock()))
Filter: (rawtag_id = 1)
(11 rows)

View File

@ -228,7 +228,7 @@ VALUES
(5, '2023-01-20'::timestamptz, 13, 1);
-- four chunks, all of them should be excluded at plantime
SELECT COUNT(*) FROM show_chunks('logged_data');
SELECT row_number() OVER (), range_start, range_end FROM timescaledb_information.chunks WHERE hypertable_schema = 'public' AND hypertable_name = 'logged_data' ORDER BY 2,3;
SET timescaledb.current_timestamp_mock TO '2024-01-01 0:30:00+00';
@ -236,15 +236,15 @@ SET timescaledb.enable_chunk_append TO true;
SET timescaledb.enable_constraint_aware_append TO true;
-- for all the queries below, exclusion should be happening at plantime
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '1 day' AND now()
AND rawtag_id = 1 ORDER BY "timestamp" ASC;
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp <= now() AND timestamp >= now() - interval '1 day'
AND rawtag_id = 1 ORDER BY "timestamp" ASC;
EXPLAIN (ANALYZE, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM logged_data WHERE
timestamp <= now() AND timestamp >= now() - interval '1 day'
ORDER BY "timestamp" ASC;
@ -254,15 +254,15 @@ PREPARE pbtw AS SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '5 day' AND now() AND rawtag_id = 1
ORDER BY "timestamp" ASC;
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
-- now move mock_now() to the future
SET timescaledb.current_timestamp_mock TO '2023-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
-- much further into the future, no rows should be returned
SET timescaledb.current_timestamp_mock TO '2024-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
DEALLOCATE pbtw;
@ -274,15 +274,15 @@ PREPARE pbtw AS SELECT * FROM logged_data WHERE
timestamp BETWEEN now() - interval '5 day' AND now() AND rawtag_id = 1
ORDER BY "timestamp" ASC;
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
-- now move mock_now() to the future
SET timescaledb.current_timestamp_mock TO '2023-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
-- much further into the future, no rows should be returned
SET timescaledb.current_timestamp_mock TO '2024-01-21 0:30:00+00';
EXPLAIN (SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXPLAIN (COSTS OFF, SUMMARY OFF, TIMING OFF) EXECUTE pbtw;
EXECUTE pbtw;
DEALLOCATE pbtw;