How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

James(王旭)
Hello,

I am doing a query to fetch about 10000000 records in one time. But the query seems very slow, like "mission impossible".
I am very confident that these records should be fit into my shared_buffers settings(20G), and my query is totally on my index, which is this big:(19M x 100 partitions), this index size can also be put into shared_buffers easily.(actually I even made a new partial index which is smaller and delete the bigger old index)

This kind of situation makes me very disappointed.How can I make my queries much faster if my data grows more than 10000000 in one partition? I am using pg11.6.

Many thanks,
James
Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

Laurenz Albe
On Wed, 2019-11-20 at 15:56 +0800, James(王旭) wrote:
> I am doing a query to fetch about 10000000 records in one time. But the query seems
> very slow, like "mission impossible".
> I am very confident that these records should be fit into my shared_buffers settings(20G),
> and my query is totally on my index, which is this big:(19M x 100 partitions), this index
> size can also be put into shared_buffers easily.(actually I even made a new partial index
> which is smaller and delete the bigger old index)
>
> This kind of situation makes me very disappointed.How can I make my queries much faster
> if my data grows more than 10000000 in one partition? I am using pg11.6.

There are no parameters that make queries faster wholesale.

If you need help with a query, please include the table definitions
and the EXPLAIN (ANALYZE, BUFFERS) output for the query.
Including a list of parameters you changed from the default is helpful too.

Yours,
Laurenz Albe
--
Cybertec | https://www.cybertec-postgresql.com



Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

James(王旭)
Hello Laurenz,
Thanks Laurenz for the quick reply, I will supply these information later.


James
Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

James(王旭)

This is the schema:

CREATE TABLE public.quotes (
    uuid character varying(45) NOT NULL,
    symbol_id smallint NOT NULL,
    symbol character varying(32) NOT NULL,
    p_open real NOT NULL,
    p_high real NOT NULL,
    p_low real NOT NULL,
    p_close real NOT NULL,
    amount numeric(20,2) NOT NULL,
    volume numeric(20,2) NOT NULL,
    pubdate timestamp with time zone NOT NULL,
    chunk_id smallint NOT NULL
)
PARTITION BY HASH (symbol_id);
ALTER TABLE ONLY public.quotes
    ADD CONSTRAINT quotes_pkey PRIMARY KEY (symbol_id, uuid);
CREATE INDEX idx_201911 ON ONLY public.quotes USING btree (symbol, chunk_id) WHERE (chunk_id >= 2595);

====================

This is explain:

EXPLAIN (ANALYZE, BUFFERS)  select p_open,p_close,p_high,p_low from quotes where symbol='MSFT' and chunk_id >= 2595;
                                                                                 QUERY PLAN

-------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------
 Append  (cost=0.42..22961.77 rows=12203 width=16) (actual time=1091.462..19600.454 rows=13286 loops=1)
   Buffers: shared hit=9 read=10065
   ->  Index Scan using quotes_0_symbol_chunk_id_idx1 on quotes_0  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.295..0.295 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_1_symbol_chunk_id_idx1 on quotes_1  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.137..0.137 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_2_symbol_chunk_id_idx1 on quotes_2  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.117..0.117 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_3_symbol_chunk_id_idx1 on quotes_3  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.072..0.072 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=3
   ->  Index Scan using quotes_4_symbol_chunk_id_idx1 on quotes_4  (cost=0.42..8.43 rows=1 width=16) (act
ual time=48.475..48.475 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_5_symbol_chunk_id_idx1 on quotes_5  (cost=0.42..8.44 rows=1 width=16) (act
ual time=45.995..45.995 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_6_symbol_chunk_id_idx1 on quotes_6  (cost=0.42..8.44 rows=1 width=16) (act
ual time=23.474..23.474 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_7_symbol_chunk_id_idx1 on quotes_7  (cost=0.42..8.44 rows=1 width=16) (act
ual time=67.030..67.030 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_8_symbol_chunk_id_idx1 on quotes_8  (cost=0.42..8.44 rows=1 width=16) (act
ual time=16.230..16.230 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_9_symbol_chunk_id_idx1 on quotes_9  (cost=0.42..8.44 rows=1 width=16) (act
ual time=24.758..24.758 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_10_symbol_chunk_id_idx1 on quotes_10  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=89.762..89.762 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_11_symbol_chunk_id_idx1 on quotes_11  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=54.779..54.779 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_12_symbol_chunk_id_idx1 on quotes_12  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.391..19.391 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=4
   ->  Index Scan using quotes_13_symbol_chunk_id_idx1 on quotes_13  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=98.137..98.137 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_14_symbol_chunk_id_idx1 on quotes_14  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=33.148..33.148 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_15_symbol_chunk_id_idx1 on quotes_15  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=12.973..12.973 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_16_symbol_chunk_id_idx1 on quotes_16  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=20.718..20.718 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_17_symbol_chunk_id_idx1 on quotes_17  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=59.091..59.091 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_18_symbol_chunk_id_idx1 on quotes_18  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.220..23.220 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_19_symbol_chunk_id_idx1 on quotes_19  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=8.963..8.963 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_20_symbol_chunk_id_idx1 on quotes_20  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=7.969..7.969 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_21_symbol_chunk_id_idx1 on quotes_21  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=60.775..60.775 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_22_symbol_chunk_id_idx1 on quotes_22  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=42.488..42.488 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_23_symbol_chunk_id_idx1 on quotes_23  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=46.778..46.778 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_24_symbol_chunk_id_idx1 on quotes_24  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.818..19.818 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_25_symbol_chunk_id_idx1 on quotes_25  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.332..18.332 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_26_symbol_chunk_id_idx1 on quotes_26  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.530..25.530 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_27_symbol_chunk_id_idx1 on quotes_27  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=17.795..17.795 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_28_symbol_chunk_id_idx1 on quotes_28  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=34.632..34.632 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_29_symbol_chunk_id_idx1 on quotes_29  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=27.877..27.877 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_30_symbol_chunk_id_idx1 on quotes_30  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=61.241..61.241 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_31_symbol_chunk_id_idx1 on quotes_31  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.481..19.481 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_32_symbol_chunk_id_idx1 on quotes_32  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=11.156..11.156 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_33_symbol_chunk_id_idx1 on quotes_33  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=12.092..12.092 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Bitmap Heap Scan on quotes_34  (cost=227.44..21221.83 rows=12004 width=16) (actual time=38.646..6055.598 rows
=13286 loops=1)
         Recheck Cond: (((symbol)::text = 'MSFT'::text) AND (chunk_id >= 2595))
         Heap Blocks: exact=9422
         Buffers: shared read=9476
         ->  Bitmap Index Scan on quotes_34_symbol_chunk_id_idx1  (cost=0.00..224.44 rows=12004 width=0) (actual tim
e=32.810..32.810 rows=13286 loops=1)
               Index Cond: ((symbol)::text = 'MSFT'::text)
               Buffers: shared read=54
   ->  Index Scan using quotes_35_symbol_chunk_id_idx1 on quotes_35  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=13.357..13.357 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_36_symbol_chunk_id_idx1 on quotes_36  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=11.554..11.554 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_37_symbol_chunk_id_idx1 on quotes_37  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.527..14.527 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_38_symbol_chunk_id_idx1 on quotes_38  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=21.491..21.491 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_39_symbol_chunk_id_idx1 on quotes_39  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=38.924..38.924 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_40_symbol_chunk_id_idx1 on quotes_40  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=123.119..123.119 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_41_symbol_chunk_id_idx1 on quotes_41  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=54.460..54.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_42_symbol_chunk_id_idx1 on quotes_42  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=142.491..142.491 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_43_symbol_chunk_id_idx1 on quotes_43  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=20.998..20.999 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_44_symbol_chunk_id_idx1 on quotes_44  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=315.145..315.145 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_45_symbol_chunk_id_idx1 on quotes_45  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=231.026..231.026 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_46_symbol_chunk_id_idx1 on quotes_46  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=34.457..34.457 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_47_symbol_chunk_id_idx1 on quotes_47  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=31.663..31.663 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_48_symbol_chunk_id_idx1 on quotes_48  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.256..19.256 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_49_symbol_chunk_id_idx1 on quotes_49  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=126.794..126.794 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_50_symbol_chunk_id_idx1 on quotes_50  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.642..25.642 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_51_symbol_chunk_id_idx1 on quotes_51  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.095..24.095 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_52_symbol_chunk_id_idx1 on quotes_52  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.960..24.960 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_53_symbol_chunk_id_idx1 on quotes_53  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=140.896..140.896 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_54_symbol_chunk_id_idx1 on quotes_54  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.073..23.073 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_55_symbol_chunk_id_idx1 on quotes_55  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=29.658..29.658 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_56_symbol_chunk_id_idx1 on quotes_56  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.207..19.207 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_57_symbol_chunk_id_idx1 on quotes_57  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=13.298..13.298 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_58_symbol_chunk_id_idx1 on quotes_58  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.658..18.658 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_59_symbol_chunk_id_idx1 on quotes_59  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=17.757..17.757 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_60_symbol_chunk_id_idx1 on quotes_60  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=175.472..175.472 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_61_symbol_chunk_id_idx1 on quotes_61  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=66.575..66.575 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_62_symbol_chunk_id_idx1 on quotes_62  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=32.085..32.085 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_63_symbol_chunk_id_idx1 on quotes_63  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=59.620..59.620 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_64_symbol_chunk_id_idx1 on quotes_64  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=13.146..13.146 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_65_symbol_chunk_id_idx1 on quotes_65  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=493.484..493.484 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_66_symbol_chunk_id_idx1 on quotes_66  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=183.810..183.810 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_67_symbol_chunk_id_idx1 on quotes_67  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=17.859..17.859 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_68_symbol_chunk_id_idx1 on quotes_68  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.211..14.211 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_69_symbol_chunk_id_idx1 on quotes_69  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.271..25.271 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_70_symbol_chunk_id_idx1 on quotes_70  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=165.171..165.171 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_71_symbol_chunk_id_idx1 on quotes_71  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=28.787..28.787 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_72_symbol_chunk_id_idx1 on quotes_72  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=26.529..26.529 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_73_symbol_chunk_id_idx1 on quotes_73  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=28.887..28.887 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_74_symbol_chunk_id_idx1 on quotes_74  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=52.311..52.311 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_75_symbol_chunk_id_idx1 on quotes_75  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=26.548..26.548 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_76_symbol_chunk_id_idx1 on quotes_76  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=7.955..7.955 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_77_symbol_chunk_id_idx1 on quotes_77  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.569..23.569 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_78_symbol_chunk_id_idx1 on quotes_78  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.204..25.204 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_79_symbol_chunk_id_idx1 on quotes_79  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.848..18.848 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_80_symbol_chunk_id_idx1 on quotes_80  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=39.701..39.701 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_81_symbol_chunk_id_idx1 on quotes_81  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=32.622..32.622 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_82_symbol_chunk_id_idx1 on quotes_82  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=29.548..29.548 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_83_symbol_chunk_id_idx1 on quotes_83  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=27.357..27.357 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_84_symbol_chunk_id_idx1 on quotes_84  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=62.969..62.969 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_85_symbol_chunk_id_idx1 on quotes_85  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=22.842..22.842 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_86_symbol_chunk_id_idx1 on quotes_86  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=58.698..58.698 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_87_symbol_chunk_id_idx1 on quotes_87  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.201..25.201 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_88_symbol_chunk_id_idx1 on quotes_88  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.345..14.345 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_89_symbol_chunk_id_idx1 on quotes_89  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.012..14.012 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_90_symbol_chunk_id_idx1 on quotes_90  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.217..19.217 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_91_symbol_chunk_id_idx1 on quotes_91  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=35.578..35.578 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_92_symbol_chunk_id_idx1 on quotes_92  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=42.653..42.653 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_93_symbol_chunk_id_idx1 on quotes_93  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=30.164..30.165 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_94_symbol_chunk_id_idx1 on quotes_94  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=64.670..64.670 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_95_symbol_chunk_id_idx1 on quotes_95  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=82.933..82.933 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_96_symbol_chunk_id_idx1 on quotes_96  (cost=0.43..8.44 rows=1 width=16) (a
ctual time=13.373..13.373 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_97_symbol_chunk_id_idx1 on quotes_97  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=73.041..73.041 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_98_symbol_chunk_id_idx1 on quotes_98  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.787..24.787 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_99_symbol_chunk_id_idx1 on quotes_99  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=22.330..22.330 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_100_symbol_chunk_id_idx1 on quotes_100  (cost=0.42..8.44 rows=1 width=16)
(actual time=15.073..15.073 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_101_symbol_chunk_id_idx1 on quotes_101  (cost=0.42..8.42 rows=1 width=16)
(actual time=43.450..43.450 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_102_symbol_chunk_id_idx1 on quotes_102  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.937..14.937 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_103_symbol_chunk_id_idx1 on quotes_103  (cost=0.42..8.44 rows=1 width=16)
(actual time=46.738..46.738 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_104_symbol_chunk_id_idx1 on quotes_104  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.980..20.980 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_105_symbol_chunk_id_idx1 on quotes_105  (cost=0.42..8.44 rows=1 width=16)
(actual time=39.503..39.503 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_106_symbol_chunk_id_idx1 on quotes_106  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.778..19.779 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_107_symbol_chunk_id_idx1 on quotes_107  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.042..14.042 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_108_symbol_chunk_id_idx1 on quotes_108  (cost=0.43..8.44 rows=1 width=16)
(actual time=14.986..14.986 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_109_symbol_chunk_id_idx1 on quotes_109  (cost=0.42..8.43 rows=1 width=16)
(actual time=27.951..27.951 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_110_symbol_chunk_id_idx1 on quotes_110  (cost=0.42..8.44 rows=1 width=16)
(actual time=30.855..30.855 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_111_symbol_chunk_id_idx1 on quotes_111  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.702..25.702 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_112_symbol_chunk_id_idx1 on quotes_112  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.363..25.363 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_113_symbol_chunk_id_idx1 on quotes_113  (cost=0.42..8.44 rows=1 width=16)
(actual time=301.515..301.515 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_114_symbol_chunk_id_idx1 on quotes_114  (cost=0.42..8.44 rows=1 width=16)
(actual time=275.201..275.201 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_115_symbol_chunk_id_idx1 on quotes_115  (cost=0.42..8.44 rows=1 width=16)
(actual time=39.636..39.636 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_116_symbol_chunk_id_idx1 on quotes_116  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.036..13.036 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_117_symbol_chunk_id_idx1 on quotes_117  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.091..17.091 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_118_symbol_chunk_id_idx1 on quotes_118  (cost=0.42..8.44 rows=1 width=16)
(actual time=100.450..100.450 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_119_symbol_chunk_id_idx1 on quotes_119  (cost=0.42..8.44 rows=1 width=16)
(actual time=90.931..90.931 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_120_symbol_chunk_id_idx1 on quotes_120  (cost=0.42..8.43 rows=1 width=16)
(actual time=30.150..30.150 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_121_symbol_chunk_id_idx1 on quotes_121  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.342..28.342 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_122_symbol_chunk_id_idx1 on quotes_122  (cost=0.42..8.44 rows=1 width=16)
(actual time=11.281..11.281 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_123_symbol_chunk_id_idx1 on quotes_123  (cost=0.42..8.44 rows=1 width=16)
(actual time=27.195..27.195 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_124_symbol_chunk_id_idx1 on quotes_124  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.598..17.598 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_125_symbol_chunk_id_idx1 on quotes_125  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.197..13.197 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_126_symbol_chunk_id_idx1 on quotes_126  (cost=0.42..8.44 rows=1 width=16)
(actual time=29.288..29.288 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_127_symbol_chunk_id_idx1 on quotes_127  (cost=0.42..8.44 rows=1 width=16)
(actual time=12.994..12.994 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_128_symbol_chunk_id_idx1 on quotes_128  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.397..16.397 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_129_symbol_chunk_id_idx1 on quotes_129  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.008..20.008 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_130_symbol_chunk_id_idx1 on quotes_130  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.144..17.144 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_131_symbol_chunk_id_idx1 on quotes_131  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.388..19.388 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_132_symbol_chunk_id_idx1 on quotes_132  (cost=0.42..8.43 rows=1 width=16)
(actual time=11.343..11.343 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_133_symbol_chunk_id_idx1 on quotes_133  (cost=0.42..8.44 rows=1 width=16)
(actual time=15.873..15.873 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_134_symbol_chunk_id_idx1 on quotes_134  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.600..13.600 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_135_symbol_chunk_id_idx1 on quotes_135  (cost=0.42..8.43 rows=1 width=16)
(actual time=132.991..132.991 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_136_symbol_chunk_id_idx1 on quotes_136  (cost=0.42..8.44 rows=1 width=16)
(actual time=5.269..5.270 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_137_symbol_chunk_id_idx1 on quotes_137  (cost=0.42..8.44 rows=1 width=16)
(actual time=24.996..24.996 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_138_symbol_chunk_id_idx1 on quotes_138  (cost=0.42..8.44 rows=1 width=16)
(actual time=143.878..143.878 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_139_symbol_chunk_id_idx1 on quotes_139  (cost=0.42..8.44 rows=1 width=16)
(actual time=286.335..286.336 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_140_symbol_chunk_id_idx1 on quotes_140  (cost=0.42..8.43 rows=1 width=16)
(actual time=48.946..48.946 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_141_symbol_chunk_id_idx1 on quotes_141  (cost=0.42..8.44 rows=1 width=16)
(actual time=26.577..26.577 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_142_symbol_chunk_id_idx1 on quotes_142  (cost=0.42..8.44 rows=1 width=16)
(actual time=82.622..82.623 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_143_symbol_chunk_id_idx1 on quotes_143  (cost=0.42..8.44 rows=1 width=16)
(actual time=9.932..9.932 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_144_symbol_chunk_id_idx1 on quotes_144  (cost=0.42..8.44 rows=1 width=16)
(actual time=22.535..22.535 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_145_symbol_chunk_id_idx1 on quotes_145  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.366..13.366 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_146_symbol_chunk_id_idx1 on quotes_146  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.648..14.648 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_147_symbol_chunk_id_idx1 on quotes_147  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.620..19.620 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_148_symbol_chunk_id_idx1 on quotes_148  (cost=0.42..8.44 rows=1 width=16)
(actual time=12.460..12.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_149_symbol_chunk_id_idx1 on quotes_149  (cost=0.42..8.44 rows=1 width=16)
(actual time=81.010..81.010 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_150_symbol_chunk_id_idx1 on quotes_150  (cost=0.42..8.44 rows=1 width=16)
(actual time=52.261..52.261 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_151_symbol_chunk_id_idx1 on quotes_151  (cost=0.42..8.44 rows=1 width=16)
(actual time=140.876..140.876 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_152_symbol_chunk_id_idx1 on quotes_152  (cost=0.42..8.44 rows=1 width=16)
(actual time=9.724..9.724 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_153_symbol_chunk_id_idx1 on quotes_153  (cost=0.42..8.44 rows=1 width=16)
(actual time=111.923..111.923 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_154_symbol_chunk_id_idx1 on quotes_154  (cost=0.42..8.44 rows=1 width=16)
(actual time=206.109..206.109 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_155_symbol_chunk_id_idx1 on quotes_155  (cost=0.42..8.44 rows=1 width=16)
(actual time=393.460..393.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_156_symbol_chunk_id_idx1 on quotes_156  (cost=0.42..8.44 rows=1 width=16)
(actual time=231.433..231.433 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_157_symbol_chunk_id_idx1 on quotes_157  (cost=0.42..8.44 rows=1 width=16)
(actual time=246.102..246.102 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_158_symbol_chunk_id_idx1 on quotes_158  (cost=0.42..8.44 rows=1 width=16)
(actual time=316.520..316.520 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_159_symbol_chunk_id_idx1 on quotes_159  (cost=0.42..8.44 rows=1 width=16)
(actual time=194.797..194.797 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_160_symbol_chunk_id_idx1 on quotes_160  (cost=0.42..8.43 rows=1 width=16)
(actual time=60.826..60.827 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_161_symbol_chunk_id_idx1 on quotes_161  (cost=0.42..8.44 rows=1 width=16)
(actual time=207.193..207.193 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_162_symbol_chunk_id_idx1 on quotes_162  (cost=0.42..8.44 rows=1 width=16)
(actual time=596.949..596.949 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_163_symbol_chunk_id_idx1 on quotes_163  (cost=0.42..8.44 rows=1 width=16)
(actual time=370.000..370.000 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_164_symbol_chunk_id_idx1 on quotes_164  (cost=0.42..8.44 rows=1 width=16)
(actual time=447.076..447.076 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_165_symbol_chunk_id_idx1 on quotes_165  (cost=0.42..8.44 rows=1 width=16)
(actual time=187.770..187.770 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_166_symbol_chunk_id_idx1 on quotes_166  (cost=0.42..8.44 rows=1 width=16)
(actual time=123.740..123.740 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_167_symbol_chunk_id_idx1 on quotes_167  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.430..20.430 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_168_symbol_chunk_id_idx1 on quotes_168  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.486..16.486 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_169_symbol_chunk_id_idx1 on quotes_169  (cost=0.42..8.44 rows=1 width=16)
(actual time=34.487..34.487 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_170_symbol_chunk_id_idx1 on quotes_170  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.772..16.772 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_171_symbol_chunk_id_idx1 on quotes_171  (cost=0.42..8.44 rows=1 width=16)
(actual time=21.849..21.849 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_172_symbol_chunk_id_idx1 on quotes_172  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.413..17.413 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_173_symbol_chunk_id_idx1 on quotes_173  (cost=0.42..8.43 rows=1 width=16)
(actual time=15.372..15.372 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_174_symbol_chunk_id_idx1 on quotes_174  (cost=0.42..8.43 rows=1 width=16)
(actual time=24.842..24.842 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_175_symbol_chunk_id_idx1 on quotes_175  (cost=0.42..8.44 rows=1 width=16)
(actual time=61.523..61.523 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_176_symbol_chunk_id_idx1 on quotes_176  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.337..17.337 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_177_symbol_chunk_id_idx1 on quotes_177  (cost=0.42..8.44 rows=1 width=16)
(actual time=33.067..33.067 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_178_symbol_chunk_id_idx1 on quotes_178  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.576..28.576 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_179_symbol_chunk_id_idx1 on quotes_179  (cost=0.42..8.44 rows=1 width=16)
(actual time=678.142..678.142 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_180_symbol_chunk_id_idx1 on quotes_180  (cost=0.42..8.44 rows=1 width=16)
(actual time=157.393..157.393 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_181_symbol_chunk_id_idx1 on quotes_181  (cost=0.42..8.44 rows=1 width=16)
(actual time=36.361..36.361 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_182_symbol_chunk_id_idx1 on quotes_182  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.271..28.271 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_183_symbol_chunk_id_idx1 on quotes_183  (cost=0.42..8.43 rows=1 width=16)
(actual time=146.265..146.265 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_184_symbol_chunk_id_idx1 on quotes_184  (cost=0.42..8.43 rows=1 width=16)
(actual time=16.792..16.793 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_185_symbol_chunk_id_idx1 on quotes_185  (cost=0.42..8.44 rows=1 width=16)
(actual time=144.218..144.218 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_186_symbol_chunk_id_idx1 on quotes_186  (cost=0.42..8.44 rows=1 width=16)
(actual time=81.750..81.750 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_187_symbol_chunk_id_idx1 on quotes_187  (cost=0.42..8.44 rows=1 width=16)
(actual time=111.781..111.781 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_188_symbol_chunk_id_idx1 on quotes_188  (cost=0.42..8.44 rows=1 width=16)
(actual time=24.841..24.841 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_189_symbol_chunk_id_idx1 on quotes_189  (cost=0.42..8.44 rows=1 width=16)
(actual time=54.262..54.262 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_190_symbol_chunk_id_idx1 on quotes_190  (cost=0.42..8.43 rows=1 width=16)
(actual time=22.917..22.917 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_191_symbol_chunk_id_idx1 on quotes_191  (cost=0.42..8.44 rows=1 width=16)
(actual time=43.056..43.056 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_192_symbol_chunk_id_idx1 on quotes_192  (cost=0.42..8.44 rows=1 width=16)
(actual time=32.850..32.850 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_193_symbol_chunk_id_idx1 on quotes_193  (cost=0.42..8.44 rows=1 width=16)
(actual time=154.957..154.957 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_194_symbol_chunk_id_idx1 on quotes_194  (cost=0.42..8.44 rows=1 width=16)
(actual time=29.994..29.994 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_195_symbol_chunk_id_idx1 on quotes_195  (cost=0.42..8.44 rows=1 width=16)
(actual time=143.209..143.209 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_196_symbol_chunk_id_idx1 on quotes_196  (cost=0.42..8.44 rows=1 width=16)
(actual time=22.891..22.891 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_197_symbol_chunk_id_idx1 on quotes_197  (cost=0.42..8.44 rows=1 width=16)
(actual time=162.157..162.157 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_198_symbol_chunk_id_idx1 on quotes_198  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.513..19.513 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_199_symbol_chunk_id_idx1 on quotes_199  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.230..25.230 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
 Planning Time: 30.029 ms
 Execution Time: 19627.821 ms
(608 rows)



====================

These are the main changes I made:

1)change cache_buffers size to 30% of system memory.
2)
max_parallel_maintenance_workers = 16 # taken from max_parallel_workers
max_parallel_workers_per_gather = 16 # taken from max_parallel_workers
max_parallel_workers = 32 # maximum number of max_worker_processes that
3)disable autovacuum on this slave node
4)
work_mem = 4MB                  # min 64kB
maintenance_work_mem = 2048MB           # min 1MB



Thanks in advance!
Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

Thomas Kellerer
In reply to this post by James(王旭)
James(王旭) schrieb am 20.11.2019 um 08:56:

> I am doing a query to fetch about 10000000 records in one time. But
> the query seems very slow, like "mission impossible". I am very
> confident that these records should be fit into my shared_buffers
> settings(20G), and my query is totally on my index, which is this
> big:(19M x 100 partitions), this index size can also be put into
> shared_buffers easily.(actually I even made a new partial index which
> is smaller and delete the bigger old index)
>
> This kind of situation makes me very disappointed.How can I make my
> queries much faster if my data grows more than 10000000 in one
> partition? I am using pg11.6.

max_worker_processes can't be changed without a restart.

But work_mem and max_parallel_workers_per_gather can be changed for a single session.

If you normally don't need parallel execution, I would suggest to configure max_worker_processes and max_parallel_workers to a sensible "maximum" value.
Set max_parallel_workers_per_gather to a very low value or even 0 if you want to disable it by default.

Then, when you run a really "big" query, you can set max_parallel_workers_per_gather to a sensible value to make the query use parallel execution and increase work_mem so that potential sort, hash or grouping operations don't spill to disk. To give you some hints there we would need to see the current execution plan generated using explain (analyze, buffers, format text). If you turn on track_io_timing before that, it would be even more helpful.

Thomas







Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

James(王旭)
Thanks Thomas for this information, I will try that and get back here.

James
 
------------------ Original ------------------
Date:  Wed, Nov 20, 2019 04:26 PM
To:  "pgsql-general"<[hidden email]>;
Subject:  Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?
 
James(王旭) schrieb am 20.11.2019 um 08:56:

> I am doing a query to fetch about 10000000 records in one time. But
> the query seems very slow, like "mission impossible". I am very
> confident that these records should be fit into my shared_buffers
> settings(20G), and my query is totally on my index, which is this
> big:(19M x 100 partitions), this index size can also be put into
> shared_buffers easily.(actually I even made a new partial index which
> is smaller and delete the bigger old index)
>
> This kind of situation makes me very disappointed.How can I make my
> queries much faster if my data grows more than 10000000 in one
> partition? I am using pg11.6.

max_worker_processes can't be changed without a restart.

But work_mem and max_parallel_workers_per_gather can be changed for a single session.

If you normally don't need parallel execution, I would suggest to configure max_worker_processes and max_parallel_workers to a sensible "maximum" value.
Set max_parallel_workers_per_gather to a very low value or even 0 if you want to disable it by default.

Then, when you run a really "big" query, you can set max_parallel_workers_per_gather to a sensible value to make the query use parallel execution and increase work_mem so that potential sort, hash or grouping operations don't spill to disk. To give you some hints there we would need to see the current execution plan generated using explain (analyze, buffers, format text). If you turn on track_io_timing before that, it would be even more helpful.

Thomas







Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

Imre Samu
In reply to this post by James(王旭)
>  uuid character varying(45) NOT NULL,

Just a comment.
IF this is a real UUID ( RFC 4122, ISO/IEC 9834-8:2005 ) ; 
THEN you can use the built in  "UUID Type"  https://www.postgresql.org/docs/11/datatype-uuid.html


"UUID would be the fastest because its 128 bits -> 16 bytes and comparisons are done numerically."
The smaller size can be important for your index size ! :   "quotes_pkey PRIMARY KEY (symbol_id, uuid);"

Imre


James(王旭) <[hidden email]> ezt írta (időpont: 2019. nov. 20., Sze, 9:23):

This is the schema:

CREATE TABLE public.quotes (
    uuid character varying(45) NOT NULL,
    symbol_id smallint NOT NULL,
    symbol character varying(32) NOT NULL,
    p_open real NOT NULL,
    p_high real NOT NULL,
    p_low real NOT NULL,
    p_close real NOT NULL,
    amount numeric(20,2) NOT NULL,
    volume numeric(20,2) NOT NULL,
    pubdate timestamp with time zone NOT NULL,
    chunk_id smallint NOT NULL
)
PARTITION BY HASH (symbol_id);
ALTER TABLE ONLY public.quotes
    ADD CONSTRAINT quotes_pkey PRIMARY KEY (symbol_id, uuid);
CREATE INDEX idx_201911 ON ONLY public.quotes USING btree (symbol, chunk_id) WHERE (chunk_id >= 2595);

====================

This is explain:

EXPLAIN (ANALYZE, BUFFERS)  select p_open,p_close,p_high,p_low from quotes where symbol='MSFT' and chunk_id >= 2595;
                                                                                 QUERY PLAN

-------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------
 Append  (cost=0.42..22961.77 rows=12203 width=16) (actual time=1091.462..19600.454 rows=13286 loops=1)
   Buffers: shared hit=9 read=10065
   ->  Index Scan using quotes_0_symbol_chunk_id_idx1 on quotes_0  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.295..0.295 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_1_symbol_chunk_id_idx1 on quotes_1  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.137..0.137 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_2_symbol_chunk_id_idx1 on quotes_2  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.117..0.117 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=2 read=1
   ->  Index Scan using quotes_3_symbol_chunk_id_idx1 on quotes_3  (cost=0.42..8.44 rows=1 width=16) (act
ual time=0.072..0.072 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared hit=3
   ->  Index Scan using quotes_4_symbol_chunk_id_idx1 on quotes_4  (cost=0.42..8.43 rows=1 width=16) (act
ual time=48.475..48.475 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_5_symbol_chunk_id_idx1 on quotes_5  (cost=0.42..8.44 rows=1 width=16) (act
ual time=45.995..45.995 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_6_symbol_chunk_id_idx1 on quotes_6  (cost=0.42..8.44 rows=1 width=16) (act
ual time=23.474..23.474 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_7_symbol_chunk_id_idx1 on quotes_7  (cost=0.42..8.44 rows=1 width=16) (act
ual time=67.030..67.030 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_8_symbol_chunk_id_idx1 on quotes_8  (cost=0.42..8.44 rows=1 width=16) (act
ual time=16.230..16.230 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_9_symbol_chunk_id_idx1 on quotes_9  (cost=0.42..8.44 rows=1 width=16) (act
ual time=24.758..24.758 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_10_symbol_chunk_id_idx1 on quotes_10  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=89.762..89.762 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_11_symbol_chunk_id_idx1 on quotes_11  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=54.779..54.779 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_12_symbol_chunk_id_idx1 on quotes_12  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.391..19.391 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=4
   ->  Index Scan using quotes_13_symbol_chunk_id_idx1 on quotes_13  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=98.137..98.137 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_14_symbol_chunk_id_idx1 on quotes_14  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=33.148..33.148 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_15_symbol_chunk_id_idx1 on quotes_15  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=12.973..12.973 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_16_symbol_chunk_id_idx1 on quotes_16  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=20.718..20.718 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_17_symbol_chunk_id_idx1 on quotes_17  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=59.091..59.091 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_18_symbol_chunk_id_idx1 on quotes_18  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.220..23.220 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_19_symbol_chunk_id_idx1 on quotes_19  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=8.963..8.963 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_20_symbol_chunk_id_idx1 on quotes_20  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=7.969..7.969 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_21_symbol_chunk_id_idx1 on quotes_21  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=60.775..60.775 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_22_symbol_chunk_id_idx1 on quotes_22  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=42.488..42.488 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_23_symbol_chunk_id_idx1 on quotes_23  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=46.778..46.778 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_24_symbol_chunk_id_idx1 on quotes_24  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.818..19.818 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_25_symbol_chunk_id_idx1 on quotes_25  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.332..18.332 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_26_symbol_chunk_id_idx1 on quotes_26  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.530..25.530 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_27_symbol_chunk_id_idx1 on quotes_27  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=17.795..17.795 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_28_symbol_chunk_id_idx1 on quotes_28  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=34.632..34.632 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_29_symbol_chunk_id_idx1 on quotes_29  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=27.877..27.877 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_30_symbol_chunk_id_idx1 on quotes_30  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=61.241..61.241 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_31_symbol_chunk_id_idx1 on quotes_31  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.481..19.481 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_32_symbol_chunk_id_idx1 on quotes_32  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=11.156..11.156 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_33_symbol_chunk_id_idx1 on quotes_33  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=12.092..12.092 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Bitmap Heap Scan on quotes_34  (cost=227.44..21221.83 rows=12004 width=16) (actual time=38.646..6055.598 rows
=13286 loops=1)
         Recheck Cond: (((symbol)::text = 'MSFT'::text) AND (chunk_id >= 2595))
         Heap Blocks: exact=9422
         Buffers: shared read=9476
         ->  Bitmap Index Scan on quotes_34_symbol_chunk_id_idx1  (cost=0.00..224.44 rows=12004 width=0) (actual tim
e=32.810..32.810 rows=13286 loops=1)
               Index Cond: ((symbol)::text = 'MSFT'::text)
               Buffers: shared read=54
   ->  Index Scan using quotes_35_symbol_chunk_id_idx1 on quotes_35  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=13.357..13.357 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_36_symbol_chunk_id_idx1 on quotes_36  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=11.554..11.554 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_37_symbol_chunk_id_idx1 on quotes_37  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.527..14.527 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_38_symbol_chunk_id_idx1 on quotes_38  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=21.491..21.491 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_39_symbol_chunk_id_idx1 on quotes_39  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=38.924..38.924 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_40_symbol_chunk_id_idx1 on quotes_40  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=123.119..123.119 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_41_symbol_chunk_id_idx1 on quotes_41  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=54.460..54.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_42_symbol_chunk_id_idx1 on quotes_42  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=142.491..142.491 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_43_symbol_chunk_id_idx1 on quotes_43  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=20.998..20.999 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_44_symbol_chunk_id_idx1 on quotes_44  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=315.145..315.145 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_45_symbol_chunk_id_idx1 on quotes_45  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=231.026..231.026 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_46_symbol_chunk_id_idx1 on quotes_46  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=34.457..34.457 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_47_symbol_chunk_id_idx1 on quotes_47  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=31.663..31.663 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_48_symbol_chunk_id_idx1 on quotes_48  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.256..19.256 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_49_symbol_chunk_id_idx1 on quotes_49  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=126.794..126.794 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_50_symbol_chunk_id_idx1 on quotes_50  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.642..25.642 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_51_symbol_chunk_id_idx1 on quotes_51  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.095..24.095 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_52_symbol_chunk_id_idx1 on quotes_52  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.960..24.960 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_53_symbol_chunk_id_idx1 on quotes_53  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=140.896..140.896 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_54_symbol_chunk_id_idx1 on quotes_54  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.073..23.073 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_55_symbol_chunk_id_idx1 on quotes_55  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=29.658..29.658 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_56_symbol_chunk_id_idx1 on quotes_56  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.207..19.207 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_57_symbol_chunk_id_idx1 on quotes_57  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=13.298..13.298 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_58_symbol_chunk_id_idx1 on quotes_58  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.658..18.658 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_59_symbol_chunk_id_idx1 on quotes_59  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=17.757..17.757 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_60_symbol_chunk_id_idx1 on quotes_60  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=175.472..175.472 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_61_symbol_chunk_id_idx1 on quotes_61  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=66.575..66.575 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_62_symbol_chunk_id_idx1 on quotes_62  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=32.085..32.085 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_63_symbol_chunk_id_idx1 on quotes_63  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=59.620..59.620 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_64_symbol_chunk_id_idx1 on quotes_64  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=13.146..13.146 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_65_symbol_chunk_id_idx1 on quotes_65  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=493.484..493.484 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_66_symbol_chunk_id_idx1 on quotes_66  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=183.810..183.810 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_67_symbol_chunk_id_idx1 on quotes_67  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=17.859..17.859 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_68_symbol_chunk_id_idx1 on quotes_68  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.211..14.211 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_69_symbol_chunk_id_idx1 on quotes_69  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.271..25.271 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_70_symbol_chunk_id_idx1 on quotes_70  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=165.171..165.171 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_71_symbol_chunk_id_idx1 on quotes_71  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=28.787..28.787 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_72_symbol_chunk_id_idx1 on quotes_72  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=26.529..26.529 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_73_symbol_chunk_id_idx1 on quotes_73  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=28.887..28.887 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_74_symbol_chunk_id_idx1 on quotes_74  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=52.311..52.311 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_75_symbol_chunk_id_idx1 on quotes_75  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=26.548..26.548 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_76_symbol_chunk_id_idx1 on quotes_76  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=7.955..7.955 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_77_symbol_chunk_id_idx1 on quotes_77  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=23.569..23.569 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_78_symbol_chunk_id_idx1 on quotes_78  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.204..25.204 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_79_symbol_chunk_id_idx1 on quotes_79  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=18.848..18.848 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_80_symbol_chunk_id_idx1 on quotes_80  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=39.701..39.701 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_81_symbol_chunk_id_idx1 on quotes_81  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=32.622..32.622 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_82_symbol_chunk_id_idx1 on quotes_82  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=29.548..29.548 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_83_symbol_chunk_id_idx1 on quotes_83  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=27.357..27.357 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_84_symbol_chunk_id_idx1 on quotes_84  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=62.969..62.969 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_85_symbol_chunk_id_idx1 on quotes_85  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=22.842..22.842 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_86_symbol_chunk_id_idx1 on quotes_86  (cost=0.42..8.43 rows=1 width=16) (a
ctual time=58.698..58.698 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_87_symbol_chunk_id_idx1 on quotes_87  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=25.201..25.201 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_88_symbol_chunk_id_idx1 on quotes_88  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.345..14.345 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_89_symbol_chunk_id_idx1 on quotes_89  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=14.012..14.012 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_90_symbol_chunk_id_idx1 on quotes_90  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=19.217..19.217 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_91_symbol_chunk_id_idx1 on quotes_91  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=35.578..35.578 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_92_symbol_chunk_id_idx1 on quotes_92  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=42.653..42.653 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_93_symbol_chunk_id_idx1 on quotes_93  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=30.164..30.165 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_94_symbol_chunk_id_idx1 on quotes_94  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=64.670..64.670 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_95_symbol_chunk_id_idx1 on quotes_95  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=82.933..82.933 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_96_symbol_chunk_id_idx1 on quotes_96  (cost=0.43..8.44 rows=1 width=16) (a
ctual time=13.373..13.373 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_97_symbol_chunk_id_idx1 on quotes_97  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=73.041..73.041 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_98_symbol_chunk_id_idx1 on quotes_98  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=24.787..24.787 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_99_symbol_chunk_id_idx1 on quotes_99  (cost=0.42..8.44 rows=1 width=16) (a
ctual time=22.330..22.330 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_100_symbol_chunk_id_idx1 on quotes_100  (cost=0.42..8.44 rows=1 width=16)
(actual time=15.073..15.073 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_101_symbol_chunk_id_idx1 on quotes_101  (cost=0.42..8.42 rows=1 width=16)
(actual time=43.450..43.450 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_102_symbol_chunk_id_idx1 on quotes_102  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.937..14.937 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_103_symbol_chunk_id_idx1 on quotes_103  (cost=0.42..8.44 rows=1 width=16)
(actual time=46.738..46.738 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_104_symbol_chunk_id_idx1 on quotes_104  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.980..20.980 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_105_symbol_chunk_id_idx1 on quotes_105  (cost=0.42..8.44 rows=1 width=16)
(actual time=39.503..39.503 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_106_symbol_chunk_id_idx1 on quotes_106  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.778..19.779 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_107_symbol_chunk_id_idx1 on quotes_107  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.042..14.042 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_108_symbol_chunk_id_idx1 on quotes_108  (cost=0.43..8.44 rows=1 width=16)
(actual time=14.986..14.986 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_109_symbol_chunk_id_idx1 on quotes_109  (cost=0.42..8.43 rows=1 width=16)
(actual time=27.951..27.951 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_110_symbol_chunk_id_idx1 on quotes_110  (cost=0.42..8.44 rows=1 width=16)
(actual time=30.855..30.855 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_111_symbol_chunk_id_idx1 on quotes_111  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.702..25.702 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_112_symbol_chunk_id_idx1 on quotes_112  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.363..25.363 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_113_symbol_chunk_id_idx1 on quotes_113  (cost=0.42..8.44 rows=1 width=16)
(actual time=301.515..301.515 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_114_symbol_chunk_id_idx1 on quotes_114  (cost=0.42..8.44 rows=1 width=16)
(actual time=275.201..275.201 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_115_symbol_chunk_id_idx1 on quotes_115  (cost=0.42..8.44 rows=1 width=16)
(actual time=39.636..39.636 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_116_symbol_chunk_id_idx1 on quotes_116  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.036..13.036 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_117_symbol_chunk_id_idx1 on quotes_117  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.091..17.091 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_118_symbol_chunk_id_idx1 on quotes_118  (cost=0.42..8.44 rows=1 width=16)
(actual time=100.450..100.450 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_119_symbol_chunk_id_idx1 on quotes_119  (cost=0.42..8.44 rows=1 width=16)
(actual time=90.931..90.931 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_120_symbol_chunk_id_idx1 on quotes_120  (cost=0.42..8.43 rows=1 width=16)
(actual time=30.150..30.150 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_121_symbol_chunk_id_idx1 on quotes_121  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.342..28.342 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_122_symbol_chunk_id_idx1 on quotes_122  (cost=0.42..8.44 rows=1 width=16)
(actual time=11.281..11.281 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_123_symbol_chunk_id_idx1 on quotes_123  (cost=0.42..8.44 rows=1 width=16)
(actual time=27.195..27.195 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_124_symbol_chunk_id_idx1 on quotes_124  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.598..17.598 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_125_symbol_chunk_id_idx1 on quotes_125  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.197..13.197 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_126_symbol_chunk_id_idx1 on quotes_126  (cost=0.42..8.44 rows=1 width=16)
(actual time=29.288..29.288 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_127_symbol_chunk_id_idx1 on quotes_127  (cost=0.42..8.44 rows=1 width=16)
(actual time=12.994..12.994 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_128_symbol_chunk_id_idx1 on quotes_128  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.397..16.397 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_129_symbol_chunk_id_idx1 on quotes_129  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.008..20.008 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_130_symbol_chunk_id_idx1 on quotes_130  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.144..17.144 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_131_symbol_chunk_id_idx1 on quotes_131  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.388..19.388 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_132_symbol_chunk_id_idx1 on quotes_132  (cost=0.42..8.43 rows=1 width=16)
(actual time=11.343..11.343 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_133_symbol_chunk_id_idx1 on quotes_133  (cost=0.42..8.44 rows=1 width=16)
(actual time=15.873..15.873 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_134_symbol_chunk_id_idx1 on quotes_134  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.600..13.600 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_135_symbol_chunk_id_idx1 on quotes_135  (cost=0.42..8.43 rows=1 width=16)
(actual time=132.991..132.991 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_136_symbol_chunk_id_idx1 on quotes_136  (cost=0.42..8.44 rows=1 width=16)
(actual time=5.269..5.270 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_137_symbol_chunk_id_idx1 on quotes_137  (cost=0.42..8.44 rows=1 width=16)
(actual time=24.996..24.996 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_138_symbol_chunk_id_idx1 on quotes_138  (cost=0.42..8.44 rows=1 width=16)
(actual time=143.878..143.878 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_139_symbol_chunk_id_idx1 on quotes_139  (cost=0.42..8.44 rows=1 width=16)
(actual time=286.335..286.336 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_140_symbol_chunk_id_idx1 on quotes_140  (cost=0.42..8.43 rows=1 width=16)
(actual time=48.946..48.946 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_141_symbol_chunk_id_idx1 on quotes_141  (cost=0.42..8.44 rows=1 width=16)
(actual time=26.577..26.577 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_142_symbol_chunk_id_idx1 on quotes_142  (cost=0.42..8.44 rows=1 width=16)
(actual time=82.622..82.623 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_143_symbol_chunk_id_idx1 on quotes_143  (cost=0.42..8.44 rows=1 width=16)
(actual time=9.932..9.932 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_144_symbol_chunk_id_idx1 on quotes_144  (cost=0.42..8.44 rows=1 width=16)
(actual time=22.535..22.535 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_145_symbol_chunk_id_idx1 on quotes_145  (cost=0.42..8.44 rows=1 width=16)
(actual time=13.366..13.366 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_146_symbol_chunk_id_idx1 on quotes_146  (cost=0.42..8.44 rows=1 width=16)
(actual time=14.648..14.648 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_147_symbol_chunk_id_idx1 on quotes_147  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.620..19.620 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_148_symbol_chunk_id_idx1 on quotes_148  (cost=0.42..8.44 rows=1 width=16)
(actual time=12.460..12.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_149_symbol_chunk_id_idx1 on quotes_149  (cost=0.42..8.44 rows=1 width=16)
(actual time=81.010..81.010 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_150_symbol_chunk_id_idx1 on quotes_150  (cost=0.42..8.44 rows=1 width=16)
(actual time=52.261..52.261 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_151_symbol_chunk_id_idx1 on quotes_151  (cost=0.42..8.44 rows=1 width=16)
(actual time=140.876..140.876 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_152_symbol_chunk_id_idx1 on quotes_152  (cost=0.42..8.44 rows=1 width=16)
(actual time=9.724..9.724 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_153_symbol_chunk_id_idx1 on quotes_153  (cost=0.42..8.44 rows=1 width=16)
(actual time=111.923..111.923 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_154_symbol_chunk_id_idx1 on quotes_154  (cost=0.42..8.44 rows=1 width=16)
(actual time=206.109..206.109 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_155_symbol_chunk_id_idx1 on quotes_155  (cost=0.42..8.44 rows=1 width=16)
(actual time=393.460..393.460 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_156_symbol_chunk_id_idx1 on quotes_156  (cost=0.42..8.44 rows=1 width=16)
(actual time=231.433..231.433 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_157_symbol_chunk_id_idx1 on quotes_157  (cost=0.42..8.44 rows=1 width=16)
(actual time=246.102..246.102 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_158_symbol_chunk_id_idx1 on quotes_158  (cost=0.42..8.44 rows=1 width=16)
(actual time=316.520..316.520 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_159_symbol_chunk_id_idx1 on quotes_159  (cost=0.42..8.44 rows=1 width=16)
(actual time=194.797..194.797 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_160_symbol_chunk_id_idx1 on quotes_160  (cost=0.42..8.43 rows=1 width=16)
(actual time=60.826..60.827 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_161_symbol_chunk_id_idx1 on quotes_161  (cost=0.42..8.44 rows=1 width=16)
(actual time=207.193..207.193 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_162_symbol_chunk_id_idx1 on quotes_162  (cost=0.42..8.44 rows=1 width=16)
(actual time=596.949..596.949 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_163_symbol_chunk_id_idx1 on quotes_163  (cost=0.42..8.44 rows=1 width=16)
(actual time=370.000..370.000 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_164_symbol_chunk_id_idx1 on quotes_164  (cost=0.42..8.44 rows=1 width=16)
(actual time=447.076..447.076 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_165_symbol_chunk_id_idx1 on quotes_165  (cost=0.42..8.44 rows=1 width=16)
(actual time=187.770..187.770 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_166_symbol_chunk_id_idx1 on quotes_166  (cost=0.42..8.44 rows=1 width=16)
(actual time=123.740..123.740 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_167_symbol_chunk_id_idx1 on quotes_167  (cost=0.42..8.44 rows=1 width=16)
(actual time=20.430..20.430 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_168_symbol_chunk_id_idx1 on quotes_168  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.486..16.486 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_169_symbol_chunk_id_idx1 on quotes_169  (cost=0.42..8.44 rows=1 width=16)
(actual time=34.487..34.487 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_170_symbol_chunk_id_idx1 on quotes_170  (cost=0.42..8.44 rows=1 width=16)
(actual time=16.772..16.772 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_171_symbol_chunk_id_idx1 on quotes_171  (cost=0.42..8.44 rows=1 width=16)
(actual time=21.849..21.849 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_172_symbol_chunk_id_idx1 on quotes_172  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.413..17.413 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_173_symbol_chunk_id_idx1 on quotes_173  (cost=0.42..8.43 rows=1 width=16)
(actual time=15.372..15.372 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_174_symbol_chunk_id_idx1 on quotes_174  (cost=0.42..8.43 rows=1 width=16)
(actual time=24.842..24.842 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_175_symbol_chunk_id_idx1 on quotes_175  (cost=0.42..8.44 rows=1 width=16)
(actual time=61.523..61.523 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_176_symbol_chunk_id_idx1 on quotes_176  (cost=0.42..8.44 rows=1 width=16)
(actual time=17.337..17.337 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_177_symbol_chunk_id_idx1 on quotes_177  (cost=0.42..8.44 rows=1 width=16)
(actual time=33.067..33.067 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_178_symbol_chunk_id_idx1 on quotes_178  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.576..28.576 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_179_symbol_chunk_id_idx1 on quotes_179  (cost=0.42..8.44 rows=1 width=16)
(actual time=678.142..678.142 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_180_symbol_chunk_id_idx1 on quotes_180  (cost=0.42..8.44 rows=1 width=16)
(actual time=157.393..157.393 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_181_symbol_chunk_id_idx1 on quotes_181  (cost=0.42..8.44 rows=1 width=16)
(actual time=36.361..36.361 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_182_symbol_chunk_id_idx1 on quotes_182  (cost=0.42..8.44 rows=1 width=16)
(actual time=28.271..28.271 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_183_symbol_chunk_id_idx1 on quotes_183  (cost=0.42..8.43 rows=1 width=16)
(actual time=146.265..146.265 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_184_symbol_chunk_id_idx1 on quotes_184  (cost=0.42..8.43 rows=1 width=16)
(actual time=16.792..16.793 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_185_symbol_chunk_id_idx1 on quotes_185  (cost=0.42..8.44 rows=1 width=16)
(actual time=144.218..144.218 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_186_symbol_chunk_id_idx1 on quotes_186  (cost=0.42..8.44 rows=1 width=16)
(actual time=81.750..81.750 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_187_symbol_chunk_id_idx1 on quotes_187  (cost=0.42..8.44 rows=1 width=16)
(actual time=111.781..111.781 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_188_symbol_chunk_id_idx1 on quotes_188  (cost=0.42..8.44 rows=1 width=16)
(actual time=24.841..24.841 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_189_symbol_chunk_id_idx1 on quotes_189  (cost=0.42..8.44 rows=1 width=16)
(actual time=54.262..54.262 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_190_symbol_chunk_id_idx1 on quotes_190  (cost=0.42..8.43 rows=1 width=16)
(actual time=22.917..22.917 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_191_symbol_chunk_id_idx1 on quotes_191  (cost=0.42..8.44 rows=1 width=16)
(actual time=43.056..43.056 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_192_symbol_chunk_id_idx1 on quotes_192  (cost=0.42..8.44 rows=1 width=16)
(actual time=32.850..32.850 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_193_symbol_chunk_id_idx1 on quotes_193  (cost=0.42..8.44 rows=1 width=16)
(actual time=154.957..154.957 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_194_symbol_chunk_id_idx1 on quotes_194  (cost=0.42..8.44 rows=1 width=16)
(actual time=29.994..29.994 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_195_symbol_chunk_id_idx1 on quotes_195  (cost=0.42..8.44 rows=1 width=16)
(actual time=143.209..143.209 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_196_symbol_chunk_id_idx1 on quotes_196  (cost=0.42..8.44 rows=1 width=16)
(actual time=22.891..22.891 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_197_symbol_chunk_id_idx1 on quotes_197  (cost=0.42..8.44 rows=1 width=16)
(actual time=162.157..162.157 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_198_symbol_chunk_id_idx1 on quotes_198  (cost=0.42..8.44 rows=1 width=16)
(actual time=19.513..19.513 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
   ->  Index Scan using quotes_199_symbol_chunk_id_idx1 on quotes_199  (cost=0.42..8.44 rows=1 width=16)
(actual time=25.230..25.230 rows=0 loops=1)
         Index Cond: ((symbol)::text = 'MSFT'::text)
         Buffers: shared read=3
 Planning Time: 30.029 ms
 Execution Time: 19627.821 ms
(608 rows)



====================

These are the main changes I made:

1)change cache_buffers size to 30% of system memory.
2)
max_parallel_maintenance_workers = 16 # taken from max_parallel_workers
max_parallel_workers_per_gather = 16 # taken from max_parallel_workers
max_parallel_workers = 32 # maximum number of max_worker_processes that
3)disable autovacuum on this slave node
4)
work_mem = 4MB                  # min 64kB
maintenance_work_mem = 2048MB           # min 1MB



Thanks in advance!
Reply | Threaded
Open this post in threaded view
|

Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?

James(王旭)
Thanks Imre, this is a very important comment, 128 bits is much smaller than 45*8+2=362.

Very glad to know that, thank you very much!

James
 
 
------------------ Original ------------------
Date:  Thu, Nov 21, 2019 08:39 PM
To:  "James(王旭)"<[hidden email]>;
Cc:  "pgsql-general"<[hidden email]>;
Subject:  Re: How should I specify work_mem/max_worker_processes if I want to do big queries now and then?
 
>  uuid character varying(45) NOT NULL,

Just a comment.
IF this is a real UUID ( RFC 4122, ISO/IEC 9834-8:2005 ) ; 
THEN you can use the built in  "UUID Type"  https://www.postgresql.org/docs/11/datatype-uuid.html


"UUID would be the fastest because its 128 bits -> 16 bytes and comparisons are done numerically."
The smaller size can be important for your index size ! :   "quotes_pkey PRIMARY KEY (symbol_id, uuid);"

Imre