Hi,

please, correct me if I am on the wrong list. I think, that everything
related to current cvs version belongs to dbmail.devel?

today I checked out current cvs version. It take some time for me to
convert tables. It works now, but fetching every single mail is very slow.

Here is a quota from statistics:
LOG:  query: SELECT mailbox_idnr FROM dbmail_mailboxes WHERE
mailbox_idnr = '3' AND owner_idnr = '3'
LOG:  duration: 0.004183 sec
LOG:  query: SELECT pm.rfcsize FROM dbmail_physmessage pm,
dbmail_messages msg WHERE pm.id = msg.physmessage_id AND
msg.message_idnr = '551047' AND msg.status< '2' AND msg.unique_id != ''
AND msg.mailbox_idnr = '3'
LOG:  duration: 0.094456 sec
LOG:  query: SELECT messageblk FROM dbmail_messageblks LEFT JOIN
dbmail_messages USING (physmessage_id) WHERE
dbmail_messages.message_idnr = '551047' ORDER BY messageblk_idnr
LOG:  duration: 6.670869 sec
LOG:  query: SELECT messageblk FROM dbmail_messageblks LEFT JOIN
dbmail_messages USING (physmessage_id) WHERE
dbmail_messages.message_idnr = '551047' ORDER BY messageblk_idnr
LOG:  duration: 2.088558 sec
LOG:  query: SELECT seen_flag FROM dbmail_messages WHERE message_idnr =
'551047' AND status < '2' AND unique_id != '' AND mailbox_idnr = '3'
LOG:  duration: 0.000868 sec

first of all, the message seems to be fetched 2 times, but the main
problem is in query: SELECT messageblk FROM dbmail_messageblks LEFT JOIN
dbmail_messages USING (physmessage_id) WHERE
dbmail_messages.message_idnr = '551047' ORDER BY messageblk_idnr

which takes up to 6 seconds!!!

explain SELECT messageblk FROM dbmail_messageblks LEFT JOIN
dbmail_messages USING (physmessage_id) WHERE
dbmail_messages.message_idnr = '551047' ORDER BY messageblk_idnr;
                                        QUERY PLAN
-------------------------------------------------------------------------------------------
 Sort  (cost=71153.35..71246.10 rows=37101 width=758)
   Sort Key: dbmail_messageblks.messageblk_idnr
   ->  Hash Join  (cost=21564.50..36827.54 rows=37101 width=758)
         Hash Cond: ("outer".physmessage_id = "inner".physmessage_id)
         Filter: ("inner".message_idnr = 551047::bigint)
         ->  Seq Scan on dbmail_messageblks  (cost=0.00..3764.01
rows=37101 width=742)
         ->  Hash  (cost=16381.40..16381.40 rows=702040 width=16)
               ->  Seq Scan on dbmail_messages  (cost=0.00..16381.40
rows=702040 width=16)

here are table descriptions:

 \d dbmail_messages                                    Table
"public.dbmail_messages"
     Column     |         Type          |                         Modifiers
----------------+-----------------------+-----------------------------------------------------------
 message_idnr   | bigint                | not null default
nextval('dbmail_message_idnr_seq'::text)
 mailbox_idnr   | bigint                | not null default '0'
 physmessage_id | bigint                | not null default '0'
 seen_flag      | smallint              | not null default '0'
 answered_flag  | smallint              | not null default '0'
 deleted_flag   | smallint              | not null default '0'
 flagged_flag   | smallint              | not null default '0'
 recent_flag    | smallint              | not null default '0'
 draft_flag     | smallint              | not null default '0'
 unique_id      | character varying(70) | not null
 status         | smallint              | not null default '0'
Indexes: dbmail_messages_pkey primary key btree (message_idnr),
         dbmail_messages_mailbox_idx btree (mailbox_idnr),
         dbmail_messages_physmessage_idx btree (physmessage_id),
         dbmail_messages_seen_flag_idx btree (seen_flag),
         dbmail_messages_status_idx btree (status),
         dbmail_messages_status_notdeleted_idx btree (status) WHERE
(status < 2::smallint),
         dbmail_messages_unique_id_idx btree (unique_id)
Foreign Key constraints: $3 FOREIGN KEY (physmessage_id) REFERENCES
dbmail_physmessage(id) ON UPDATE NO ACTION ON DELETE CASCADE,
                         $2 FOREIGN KEY (mailbox_idnr) REFERENCES
dbmail_mailboxes(mailbox_idnr) ON UPDATE NO ACTION ON DELETE CASCADE

dbmail=# \d dbmail_messageblks                              Table
"public.dbmail_messageblks"
     Column      |   Type   |                          Modifiers
-----------------+----------+--------------------------------------------------------------
 messageblk_idnr | bigint   | not null default
nextval('dbmail_messageblk_idnr_seq'::text)
 physmessage_id  | bigint   | not null default '0'
 messageblk      | text     | not null
 blocksize       | bigint   | not null default '0'
 is_header       | smallint | not null default '0'
Indexes: dbmail_messageblks_pkey primary key btree (messageblk_idnr),
         dbmail_messageblks_physmessage_idx btree (physmessage_id),
         dbmail_messageblks_physmessage_is_header_idx btree
(physmessage_id, is_header)
Foreign Key constraints: $2 FOREIGN KEY (physmessage_id) REFERENCES
dbmail_physmessage(id) ON UPDATE NO ACTION ON DELETE CASCADE


Do I miss some important index? Thanks in advance
--
Best regards, Sergey Spiridonov

Reply via email to