Skip to content

2.25.1.0-b297

@spolitov spolitov tagged this 05 Feb 04:32
Summary:
The index scan consists of 2 steps.

Fetch ybctids from the index table.
Fetch remaining row data from the indexed table.
On the second step TServer receives list of ybctids from the first step.
Fixed bloom filter cannot be used in this scenario.
Recently variable bloom filter was added, so we could create iterator and defer bloom filter check to iteration phase.
So could use it in index scan.

Manually checked performance improvement:
Started rf=1 cluster on n2-standard-4 dev server.
Created table:
```
CREATE TABLE main (id BIGSERIAL PRIMARY KEY, sub BIGINT, payload TEXT);
CREATE INDEX ON main (sub ASC);
```

Inserted 19M rows (10GB of data on the disk).
With random `sub` in range [0, 9999], random payload of 512 chars size.

Query `EXPLAIN (ANALYZE, DIST, DEBUG) select * from main where sub < 50;` executed multiple times to warmup caches.
I.e. 0.5% of rows fetched.

Master (c85b22b18f8b7d6c671f0f013b1d943b1a520b56):
```
                                                         QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
 Index Scan using main_sub_idx on main  (cost=0.00..5.22 rows=10 width=48) (actual time=29.480..2189.527 rows=95208 loops=1)
   Index Cond: (sub < 50)
   Storage Table Read Requests: 93
   Storage Table Read Execution Time: 2122.320 ms
   Storage Table Rows Scanned: 95208
   Storage Index Read Requests: 93
   Storage Index Read Execution Time: 8.512 ms
   Storage Index Rows Scanned: 95208
   Metric rocksdb_block_cache_miss: 101251.000
   Metric rocksdb_block_cache_hit: 291829.000
   Metric rocksdb_block_cache_add: 101251.000
   Metric rocksdb_block_cache_index_hit: 1302.000
   Metric rocksdb_block_cache_data_miss: 101251.000
   Metric rocksdb_block_cache_data_hit: 289225.000
   Metric rocksdb_block_cache_bytes_read: 9389180864.000
   Metric rocksdb_block_cache_bytes_write: 3288284660.000
   Metric rocksdb_number_db_seek: 95280.000
   Metric rocksdb_number_db_next: 380511.000
   Metric rocksdb_number_db_seek_found: 95280.000
   Metric rocksdb_number_db_next_found: 380511.000
   Metric rocksdb_iter_bytes_read: 225277281.000
   Metric rocksdb_block_cache_single_touch_hit: 11505.000
   Metric rocksdb_block_cache_single_touch_add: 101251.000
   Metric rocksdb_block_cache_single_touch_bytes_read: 373425085.000
   Metric rocksdb_block_cache_single_touch_bytes_write: 3288284660.000
   Metric rocksdb_block_cache_multi_touch_hit: 280324.000
   Metric rocksdb_block_cache_multi_touch_bytes_read: 9015755779.000
   Metric docdb_keys_found: 190508.000
   Metric rocksdb_read_block_get_micros: sum: 1241347.000, count: 101251.000
   Metric rocksdb_sst_read_micros: sum: 1176521.000, count: 101251.000
   Metric ql_read_latency: sum: 2923519.000, count: 279.000
 Planning Time: 0.057 ms
 Execution Time: 2200.769 ms
 Storage Read Requests: 186
 Storage Read Execution Time: 2130.832 ms
 Storage Rows Scanned: 190416
 Storage Write Requests: 0
 Catalog Read Requests: 0
 Catalog Write Requests: 0
 Storage Flush Requests: 0
 Metric rocksdb_block_cache_miss: 101251
 Metric rocksdb_block_cache_hit: 291829
 Metric rocksdb_block_cache_add: 101251
 Metric rocksdb_block_cache_index_hit: 1302
 Metric rocksdb_block_cache_data_miss: 101251
 Metric rocksdb_block_cache_data_hit: 289225
 Metric rocksdb_block_cache_bytes_read: 9389180864
 Metric rocksdb_block_cache_bytes_write: 3288284660
 Metric rocksdb_number_db_seek: 95280
 Metric rocksdb_number_db_next: 380511
 Metric rocksdb_number_db_seek_found: 95280
 Metric rocksdb_number_db_next_found: 380511
 Metric rocksdb_iter_bytes_read: 225277281
 Metric rocksdb_block_cache_single_touch_hit: 11505
 Metric rocksdb_block_cache_single_touch_add: 101251
 Metric rocksdb_block_cache_single_touch_bytes_read: 373425085
 Metric rocksdb_block_cache_single_touch_bytes_write: 3288284660
 Metric rocksdb_block_cache_multi_touch_hit: 280324
 Metric rocksdb_block_cache_multi_touch_bytes_read: 9015755779
 Metric docdb_keys_found: 190508
 Metric rocksdb_read_block_get_micros: sum: 1241347, count: 101251
 Metric rocksdb_sst_read_micros: sum: 1176521, count: 101251
 Metric ql_read_latency: sum: 2923519, count: 279
 Storage Execution Time: 2130.832 ms
 Peak Memory Usage: 24 kB
```

This diff:
```
                                                         QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------
 Index Scan using main_sub_idx on main  (cost=0.00..5.22 rows=10 width=48) (actual time=11.148..877.847 rows=95208 loops=1)
   Index Cond: (sub < 50)
   Storage Table Read Requests: 93
   Storage Table Read Execution Time: 811.012 ms
   Storage Table Rows Scanned: 95208
   Storage Index Read Requests: 93
   Storage Index Read Execution Time: 7.985 ms
   Storage Index Rows Scanned: 95208
   Metric rocksdb_block_cache_hit: 639323.000
   Metric rocksdb_block_cache_index_hit: 1302.000
   Metric rocksdb_block_cache_filter_hit: 475613.000
   Metric rocksdb_block_cache_data_hit: 161106.000
   Metric rocksdb_block_cache_bytes_read: 36377052828.000
   Metric rocksdb_bloom_filter_useful: 754928.000
   Metric rocksdb_bloom_filter_checked: 475613.000
   Metric rocksdb_number_db_seek: 95200.000
   Metric rocksdb_number_db_next: 380397.000
   Metric rocksdb_number_db_seek_found: 95200.000
   Metric rocksdb_number_db_next_found: 380397.000
   Metric rocksdb_iter_bytes_read: 225165426.000
   Metric rocksdb_block_cache_multi_touch_hit: 639323.000
   Metric rocksdb_block_cache_multi_touch_bytes_read: 36377052828.000
   Metric docdb_keys_found: 190508.000
   Metric ql_read_latency: sum: 1109870.000, count: 279.000
 Planning Time: 0.054 ms
 Execution Time: 889.371 ms
 Storage Read Requests: 186
 Storage Read Execution Time: 818.997 ms
 Storage Rows Scanned: 190416
 Storage Write Requests: 0
 Catalog Read Requests: 0
 Catalog Write Requests: 0
 Storage Flush Requests: 0
 Metric rocksdb_block_cache_hit: 639323
 Metric rocksdb_block_cache_index_hit: 1302
 Metric rocksdb_block_cache_filter_hit: 475613
 Metric rocksdb_block_cache_data_hit: 161106
 Metric rocksdb_block_cache_bytes_read: 36377052828
 Metric rocksdb_bloom_filter_useful: 754928
 Metric rocksdb_bloom_filter_checked: 475613
 Metric rocksdb_number_db_seek: 95200
 Metric rocksdb_number_db_next: 380397
 Metric rocksdb_number_db_seek_found: 95200
 Metric rocksdb_number_db_next_found: 380397
 Metric rocksdb_iter_bytes_read: 225165426
 Metric rocksdb_block_cache_multi_touch_hit: 639323
 Metric rocksdb_block_cache_multi_touch_bytes_read: 36377052828
 Metric docdb_keys_found: 190508
 Metric ql_read_latency: sum: 1109870, count: 279
 Storage Execution Time: 818.997 ms
 Peak Memory Usage: 24 kB
```

The same test on larger machine (n1-standard-64), where all data fits into block cache.
Master: 1456.097 ms
This diff: 924.507 ms

The test with insert and query 500k rows using index scan (all data fits into memtable):
Master: 1456.097 ms
This diff: 1464.748 ms
Jira: DB-15090

Test Plan: Jenkins

Reviewers: timur

Reviewed By: timur

Subscribers: neil, mihnea, kannan, svc_phabricator, yql, ybase

Tags: #jenkins-ready

Differential Revision: https://phorge.dev.yugabyte.com/D41475
Assets 2
Loading