Re: Question on session_replication_role

Поиск
Список
Период
Сортировка
От Vasudevan, Ramya
Тема Re: Question on session_replication_role
Дата
Msg-id 20EE50F73664E744AF948F0106FE6DFA58ECD849@SEAMBX01.sea.corp.int.untd.com
обсуждение исходный текст
Ответ на Re: Question on session_replication_role  (Jim Nasby <Jim.Nasby@BlueTreble.com>)
Список pgsql-general

 

> Here's the part that's slow. The index scan on each partition is taking ~2.5ms, and is being repeated 1847 times *for each partition*.

 

> What is the table partitioned on?

 

The table is partitioned on registration_id.

CREATE TABLE emailsubscription.reg_email_subscriptions_p00

(

  CONSTRAINT reg_email_subscriptions_p00_pkey PRIMARY KEY (registration_id, subscription_id),

  CONSTRAINT reg_email_subscriptions_p00_registration_id_check CHECK ((abs(registration_id) % 8::bigint) = 0)

)

INHERITS (emailsubscription.reg_email_subscriptions)

WITH (

  OIDS=FALSE

);

 

 

Update:

We changed the query from

SELECT DISTINCT it.recipient_id 

FROM  iru.iru_tags it

WHERE it.recipient_id BETWEEN 758587587 and 968696896

AND   it.status = 0

AND   it.last_update_date >= date_trunc('day', now() - interval '90 days')

AND EXISTS (SELECT DISTINCT res.registration_id

                    FROM emailsubscription.reg_email_subscriptions res

                    WHERE res.registration_id = it.recipient_id

                    AND  res.subscription_id = 200400);

 

to:

SELECT DISTINCT it.recipient_id

FROM   iru.iru_tags it

where   it.STATUS = 0

AND       it.last_update_date >= date_trunc('day', now() - interval '90 days')

AND       EXISTS   (SELECT res.registration_id

                                FROM   emailsubscription.reg_email_subscriptions res

                                WHERE res.registration_id = it.recipient_id

                                and        res.registration_id BETWEEN 8706059856 AND 8706077435

                                AND       res.subscription_id = 200400);

                                                     

And it slightly improved the performance.

 

                                                      QUERY PLAN

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

HashAggregate  (cost=733840.24..734045.35 rows=6837 width=8) (actual time=14208.223..14208.414 rows=891 loops=1)

   Output: it.recipient_id

   Buffers: shared hit=73563 read=18189

   I/O Timings: read=12490.324

   ->  Nested Loop  (cost=30901.28..733823.14 rows=6837 width=8) (actual time=6445.168..14203.967 rows=2547 loops=1)

         Output: it.recipient_id

         Buffers: shared hit=73563 read=18189

         I/O Timings: read=12490.324

         ->  HashAggregate  (cost=30900.72..31284.18 rows=12782 width=8) (actual time=6394.062..6413.045 rows=14452 loops=1)

               Output: res.registration_id

               Buffers: shared hit=14158 read=914

               I/O Timings: read=5771.423

               ->  Append  (cost=0.00..30868.76 rows=12782 width=8) (actual time=85.811..6361.937 rows=14452 loops=1)

                     Buffers: shared hit=14158 read=914

                     I/O Timings: read=5771.423

                     ->  Seq Scan on emailsubscription.reg_email_subscriptions res  (cost=0.00..3470.45 rows=1 width=8) (actual time=75.713..75.713 rows=0 loops=1)

                           Output: res.registration_id

                           Filter: ((res.registration_id >= 8706059856::bigint) AND (res.registration_id <= 8706077435::bigint) AND (res.subscription_id = 200400))

                           Rows Removed by Filter: 77239

                           Buffers: shared hit=569

                     ->  Index Only Scan using reg_email_subscriptions_p00_pkey on emailsubscription.reg_email_subscriptions_p00 res_1  (cost=0.57..3406.75 rows=1612 width=8) (actual time=10.095..611.086 rows=1802 loops=1)

                           Output: res_1.registration_id

                           Index Cond: ((res_1.registration_id >= 8706059856::bigint) AND (res_1.registration_id <= 8706077435::bigint) AND (res_1.subscription_id = 200400))

                           Heap Fetches: 1806

                           Buffers: shared hit=1695 read=110

                           I/O Timings: read=562.961

                     ->  Index Only Scan using reg_email_subscriptions_p01_pkey on emailsubscription.reg_email_subscriptions_p01 res_2  (cost=0.57..3061.12 rows=1401 width=8) (actual time=19.052..849.618 rows=1794 loops=1)

                           Output: res_2.registration_id

                           Index Cond: ((res_2.registration_id >= 8706059856::bigint) AND (res_2.registration_id <= 8706077435::bigint) AND (res_2.subscription_id = 200400))

                           Heap Fetches: 1794

                           Buffers: shared hit=1674 read=120

                           I/O Timings: read=739.525

                     ->  Index Only Scan using reg_email_subscriptions_p02_pkey on emailsubscription.reg_email_subscriptions_p02 res_3  (cost=0.57..3495.50 rows=1662 width=8) (actual time=19.480..1037.415 rows=1806 loops=1)

                           Output: res_3.registration_id

                           Index Cond: ((res_3.registration_id >= 8706059856::bigint) AND (res_3.registration_id <= 8706077435::bigint) AND (res_3.subscription_id = 200400))

                           Heap Fetches: 1807

                           Buffers: shared hit=1687 read=117

                           I/O Timings: read=946.189

                     ->  Index Only Scan using reg_email_subscriptions_p03_pkey on emailsubscription.reg_email_subscriptions_p03 res_4  (cost=0.57..3349.44 rows=1532 width=8) (actual time=15.859..776.363 rows=1819 loops=1)

                           Output: res_4.registration_id

                           Index Cond: ((res_4.registration_id >= 8706059856::bigint) AND (res_4.registration_id <= 8706077435::bigint) AND (res_4.subscription_id = 200400))

                           Heap Fetches: 1821

                           Buffers: shared hit=1710 read=120

                           I/O Timings: read=718.126

                     ->  Index Only Scan using reg_email_subscriptions_p04_pkey on emailsubscription.reg_email_subscriptions_p04 res_5  (cost=0.57..3600.05 rows=1713 width=8) (actual time=37.922..817.469 rows=1806 loops=1)

                           Output: res_5.registration_id

                           Index Cond: ((res_5.registration_id >= 8706059856::bigint) AND (res_5.registration_id <= 8706077435::bigint) AND (res_5.subscription_id = 200400))

                           Heap Fetches: 1809

                           Buffers: shared hit=1705 read=110

                           I/O Timings: read=740.888

                     ->  Index Only Scan using reg_email_subscriptions_p05_pkey on emailsubscription.reg_email_subscriptions_p05 res_6  (cost=0.57..3156.12 rows=1445 width=8) (actual time=26.584..645.433 rows=1789 loops=1)

                           Output: res_6.registration_id

                           Index Cond: ((res_6.registration_id >= 8706059856::bigint) AND (res_6.registration_id <= 8706077435::bigint) AND (res_6.subscription_id = 200400))

                           Heap Fetches: 1792

                           Buffers: shared hit=1691 read=112

                           I/O Timings: read=627.311

                     ->  Index Only Scan using reg_email_subscriptions_p06_pkey on emailsubscription.reg_email_subscriptions_p06 res_7  (cost=0.57..3369.90 rows=1605 width=8) (actual time=18.880..803.968 rows=1820 loops=1)

                           Output: res_7.registration_id

                           Index Cond: ((res_7.registration_id >= 8706059856::bigint) AND (res_7.registration_id <= 8706077435::bigint) AND (res_7.subscription_id = 200400))

                           Heap Fetches: 1821

                           Buffers: shared hit=1718 read=110

                           I/O Timings: read=742.403

                     ->  Index Only Scan using reg_email_subscriptions_p07_pkey on emailsubscription.reg_email_subscriptions_p07 res_8  (cost=0.57..3959.44 rows=1811 width=8) (actual time=15.284..738.786 rows=1816 loops=1)

                           Output: res_8.registration_id

                           Index Cond: ((res_8.registration_id >= 8706059856::bigint) AND (res_8.registration_id <= 8706077435::bigint) AND (res_8.subscription_id = 200400))

                           Heap Fetches: 1819

                           Buffers: shared hit=1709 read=115

                           I/O Timings: read=694.020

         ->  Index Scan using iru_tags_n1 on iru.iru_tags it  (cost=0.57..54.93 rows=1 width=8) (actual time=0.423..0.537 rows=0 loops=14452)

               Output: it.recipient_id, it.tagger_id, it.tag_id, it.batch_id, it.status, it.creation_date, it.last_update_date

               Index Cond: (it.recipient_id = res.registration_id)

               Filter: ((it.status = 0) AND (it.last_update_date >= date_trunc('day'::text, (now() - '90 days'::interval))))

               Rows Removed by Filter: 1

               Buffers: shared hit=59405 read=17275

               I/O Timings: read=6718.901

Total runtime: 14209.137 ms

 

 

> That's good. Now the question is: why was the index corrupted? It's

> *extremely* unlikely that it's Postgres. In my experience, corruption is caused be bad hardware, or a misconfiguration (specifically, fsync not doing what it's supposed to).

 

I am not sure if there was a corruption in the first place. Since we suddenly started having problem with a query that was running much faster before, we were wondering if there was a corruption. But, vacuum did not indicate that we had one. Details on the maintenance we did the night before is in the original post.

 

Thank You for your time

Ramya

В списке pgsql-general по дате отправления:

Предыдущее
От: Mathieu Basille
Дата:
Сообщение: Re: Hardware requirements for a PostGIS server
Следующее
От: Tim Uckun
Дата:
Сообщение: Re: What's a reasonable maximum number for table partitions?