Partitioned tabled not using indexes for full text search

From: Justin Funk <funkju(at)iastate(dot)edu>
To: pgsql-general(at)postgresql(dot)org
Subject: Partitioned tabled not using indexes for full text search
Date: 2009-03-27 17:08:02
Message-ID: a4c12a480903271008x46167258l4402b833b1ffdf19@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I have a table that is partitioned on a daily basis.

Full text searches used to be respectably fast with large tables (40
million + records) but insert speed would slow down. So I went with a
partitioned approach. But now, it doesn't seem like the indexes are
being used.

Any idea why it would not be using the indexes?

Here are appropriate descriptions and Explains:

syslog=# \d systemevents;
Table "public.systemevents"
Column | Type | Modifiers
--------------------+-----------------------------+-----------
message | character varying |
facility | integer |
fromhost | character varying(80) |
priority | integer |
devicereportedtime | timestamp without time zone |
receivedat | timestamp without time zone |
infounitid | integer |
syslogtag | character varying(80) |
message_index_col | tsvector |
Rules:
systemevents_insert_032509 AS
ON INSERT TO systemevents
WHERE new.devicereportedtime > '2009-03-24 23:59:59'::timestamp
without time zone AND new.devicereportedtime <= '2009-03-25
23:59:59'::timestamp without time zone DO INSTEAD INSERT INTO
systemevents_032509 (message, facility, fromhost, priority,
devicereportedtime, receivedat, infounitid, syslogtag,
message_index_col)
VALUES (new.message, new.facility, new.fromhost, new.priority,
new.devicereportedtime, new.receivedat, new.infounitid, new.syslogtag,
new.message_index_col)
systemevents_insert_032609 AS
ON INSERT TO systemevents
WHERE new.devicereportedtime > '2009-03-25 23:59:59'::timestamp
without time zone AND new.devicereportedtime <= '2009-03-26
23:59:59'::timestamp without time zone DO INSTEAD INSERT INTO
systemevents_032609 (message, facility, fromhost, priority,
devicereportedtime, receivedat, infounitid, syslogtag,
message_index_col)
VALUES (new.message, new.facility, new.fromhost, new.priority,
new.devicereportedtime, new.receivedat, new.infounitid, new.syslogtag,
new.message_index_col)
systemevents_insert_032709 AS
ON INSERT TO systemevents
WHERE new.devicereportedtime > '2009-03-26 23:59:59'::timestamp
without time zone AND new.devicereportedtime <= '2009-03-27
23:59:59'::timestamp without time zone DO INSTEAD INSERT INTO
systemevents_032709 (message, facility, fromhost, priority,
devicereportedtime, receivedat, infounitid, syslogtag,
message_index_col)
VALUES (new.message, new.facility, new.fromhost, new.priority,
new.devicereportedtime, new.receivedat, new.infounitid, new.syslogtag,
new.message_index_col)
systemevents_insert_032809 AS
ON INSERT TO systemevents
WHERE new.devicereportedtime > '2009-03-27 23:59:59'::timestamp
without time zone AND new.devicereportedtime <= '2009-03-28
23:59:59'::timestamp without time zone DO INSTEAD INSERT INTO
systemevents_032809 (message, facility, fromhost, priority,
devicereportedtime, receivedat, infounitid, syslogtag,
message_index_col)
VALUES (new.message, new.facility, new.fromhost, new.priority,
new.devicereportedtime, new.receivedat, new.infounitid, new.syslogtag,
new.message_index_col)

syslog=# EXPLAIN ANALYZE SELECT DeviceReportedTime,
REPLACE(REPLACE(Message,'<','<'),'>','>') as Message, Facility,
FromHost, Priority, ReceivedAt, InfoUnitID ,SysLogTag FROM
SystemEvents WHERE message_index_col @@ to_tsquery('english', 'MAIL')
ORDER BY DeviceReportedTime DESC LIMIT 25 OFFSET 0;

QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=61548.87..61548.93 rows=25 width=176) (actual
time=31933.287..31933.425 rows=25 loops=1)
-> Sort (cost=61548.87..61551.59 rows=1091 width=176) (actual
time=31933.280..31933.327 rows=25 loops=1)
Sort Key: public.systemevents.devicereportedtime
Sort Method: top-N heapsort Memory: 29kB
-> Result (cost=0.00..61518.08 rows=1091 width=176) (actual
time=43.351..28941.144 rows=21307 loops=1)
-> Append (cost=0.00..61512.62 rows=1091 width=176)
(actual time=43.337..23706.264 rows=21307 loops=1)
-> Seq Scan on systemevents (cost=0.00..13.00
rows=1 width=151) (actual time=0.007..0.007 rows=0 loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
-> Seq Scan on systemevents_032609 systemevents
(cost=0.00..27869.42 rows=494 width=152) (actual time=43.318..6153.645
rows=9309 loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
-> Seq Scan on systemevents_032509 systemevents
(cost=0.00..19001.65 rows=339 width=153) (actual time=0.611..5861.674
rows=6239 loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
-> Seq Scan on systemevents_032709 systemevents
(cost=0.00..14614.30 rows=256 width=153) (actual time=0.017..4062.849
rows=5759 loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
-> Seq Scan on systemevents_032809 systemevents
(cost=0.00..14.25 rows=1 width=176) (actual time=0.003..0.003 rows=0
loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
Total runtime: 32326.296 ms
(17 rows)

syslog=# \d systemevents_032509;
Table "public.systemevents_032509"
Column | Type | Modifiers
--------------------+-----------------------------+-----------
message | character varying |
facility | integer |
fromhost | character varying(80) |
priority | integer |
devicereportedtime | timestamp without time zone |
receivedat | timestamp without time zone |
infounitid | integer |
syslogtag | character varying(80) |
message_index_col | tsvector |
Indexes:
"systemevents_msg_idx_032509" btree (message_index_col)
Check constraints:
"systemevents_032509_devicereportedtime_check" CHECK
(devicereportedtime > '2009-03-24 23:59:59'::timestamp without time
zone AND devicereportedtime <= '2009-03-25 23:59:59'::timestamp
without time zone)
Inherits: systemevents

syslog=# EXPLAIN ANALYZE SELECT DeviceReportedTime,
REPLACE(REPLACE(Message,'<','<'),'>','>') as Message, Facility,
FromHost, Priority, ReceivedAt, InfoUnitID ,SysLogTag FROM
SystemEvents_032509 WHERE message_index_col @@ to_tsquery('english',
'MAIL') ORDER BY DeviceReportedTime DESC LIMIT 25 OFFSET 0;
QUERY
PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=19012.91..19012.97 rows=25 width=153) (actual
time=194408.147..194408.299 rows=25 loops=1)
-> Sort (cost=19012.91..19013.76 rows=339 width=153) (actual
time=194408.138..194408.192 rows=25 loops=1)
Sort Key: devicereportedtime
Sort Method: top-N heapsort Memory: 29kB
-> Seq Scan on systemevents_032509 (cost=0.00..19003.35
rows=339 width=153) (actual time=0.688..98662.260 rows=6239 loops=1)
Filter: (message_index_col @@ '''mail'''::tsquery)
Total runtime: 194408.443 ms
(7 rows)

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joshua D. Drake 2009-03-27 17:10:00 Re: PITRTools: Bring up warm standby -> unexpected pageaddr
Previous Message Sam Mason 2009-03-27 17:07:01 Re: Postgresql On Windows