Paul J Stevens wrote:
> I was more like thinking about some sort of lazy caching where _ic_store
> does not call db_getmailbox if the previous imap command was also
> _ic_store.
> 
> So yes: please do send me a command sequence I can work with.

OK, I'm attaching the log generated by DBMail (trace_level=5) when
Mutt updates the status on 3 messages.

Mutt is doing individual STORE commands, rather than bundling the
changes into a single STORE.  This despite the fact that I only asked
to save the state of the mailbox once.  db_getmailbox() is apparently
getting called for each STORE command, hence the speed issue.

Not sure what can be done about this.  I suppose one could consider
this a bug in Mutt, but DBMail is the only IMAP backend I've ever used
that gets slow like this with large mailboxes (that said, I don't know
how fast something that uses mbox format as the backend would be for
such a large mailbox.  I would expect it to be slow, too).


Note that the version of DBMail being used is 2.0.7 with the
modification to db_getmailbox() that uses the more efficient query.
It's still not *fast* for huge mailboxes, but it is faster.


-- 
Kevin Brown                                           [EMAIL PROTECTED]
Dec 15 14:04:11 filer dbmail/imap4d[28149]: imap4.c,IMAPClientHandler: tag = 
a0055
Dec 15 14:04:26 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:26 filer dbmail/imap4d[28149]: COMMAND: [a0056 NOOP] 
Dec 15 14:04:26 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command noop... 
Dec 15 14:04:26 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command noop 
Dec 15 14:04:26 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:26 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:26 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:26 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:26 filer dbmail/imap4d[28149]: imap4.c,IMAPClientHandler: tag = 
a0056
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: COMMAND: [a0057 UID STORE 155751 
-FLAGS.SILENT (\Seen \Flagged \Answered \Deleted)] 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[0]: 'STORE' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[1]: '155751' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[2]: '-FLAGS.SILENT' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[3]: '(' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[4]: '\Seen' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[5]: '\Flagged' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[6]: '\Answered' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[7]: '\Deleted' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[8]: ')' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command uid... 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[UPDATE dbmail_messages SET 
seen_flag=0,answered_flag=0,deleted_flag=0,flagged_flag=0 WHERE message_idnr 
BETWEEN '155751' AND '155751' AND status < '2' AND mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command uid 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: COMMAND: [a0058 UID STORE 155747 
-FLAGS.SILENT (\Seen \Flagged \Answered \Deleted)] 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[0]: 'STORE' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[1]: '155747' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[2]: '-FLAGS.SILENT' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[3]: '(' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[4]: '\Seen' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[5]: '\Flagged' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[6]: '\Answered' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[7]: '\Deleted' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[8]: ')' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command uid... 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[UPDATE dbmail_messages SET 
seen_flag=0,answered_flag=0,deleted_flag=0,flagged_flag=0 WHERE message_idnr 
BETWEEN '155747' AND '155747' AND status < '2' AND mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command uid 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: COMMAND: [a0059 UID STORE 155749 
-FLAGS.SILENT (\Seen \Flagged \Answered \Deleted)] 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[0]: 'STORE' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[1]: '155749' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[2]: '-FLAGS.SILENT' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[3]: '(' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[4]: '\Seen' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[5]: '\Flagged' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[6]: '\Answered' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[7]: '\Deleted' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: arg[8]: ')' 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command uid... 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[UPDATE dbmail_messages SET 
seen_flag=0,answered_flag=0,deleted_flag=0,flagged_flag=0 WHERE message_idnr 
BETWEEN '155749' AND '155749' AND status < '2' AND mailbox_idnr = '14']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command uid 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: COMMAND: [a0060 EXPUNGE] 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command expunge... 
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_acl_has_right: checking ACL 
for user [6] on mailbox [14]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT mailbox_idnr FROM dbmail_mailboxes WHERE mailbox_idnr = '14' AND 
owner_idnr = '6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT sum(pm.messagesize) FROM dbmail_messages msg, dbmail_physmessage pm 
WHERE msg.physmessage_id = pm.id AND msg.mailbox_idnr = '14' AND msg.status < 
'2' AND msg.deleted_flag = '1']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND 
deleted_flag='1' AND status < '2' ORDER BY message_idnr DESC]
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[UPDATE dbmail_messages SET status='2' WHERE mailbox_idnr = '14' AND 
deleted_flag='1' AND status < '2']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: db.c,db_subtract_quotum_used: 
subtracting 0 from mailsize
Dec 15 14:04:31 filer dbmail/imap4d[28149]: 
db.c.user_idnr_is_delivery_user_idnr: no need to look up user_idnr for [EMAIL 
PROTECTED]@__
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[UPDATE dbmail_users SET curmail_size = curmail_size - '0' WHERE user_idnr = 
'6']
Dec 15 14:04:31 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:32 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command expunge 
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:32 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:48 filer dbmail/imap4d[28149]: IMAPClientHandler(): line read for 
PID 28149 
Dec 15 14:04:48 filer dbmail/imap4d[28149]: COMMAND: [a0061 NOOP] 
Dec 15 14:04:48 filer dbmail/imap4d[28149]: IMAPClientHandler(): Executing 
command noop... 
Dec 15 14:04:48 filer dbmail/imap4d[28149]: IMAPClientHandler(): Finished 
command noop 
Dec 15 14:04:48 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT 
permission,seen_flag,answered_flag,deleted_flag,flagged_flag,recent_flag,draft_flag
 FROM dbmail_mailboxes WHERE mailbox_idnr = '14']
Dec 15 14:04:48 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT count(*), count(CASE WHEN seen_flag <> 0 THEN 1 ELSE NULL END), 
count(CASE WHEN recent_flag <> 0 THEN 1 ELSE NULL END) FROM dbmail_messages 
WHERE mailbox_idnr = '14' AND status IN ('0', '0')]
Dec 15 14:04:48 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '14' AND status 
< '2' ORDER BY message_idnr ASC]
Dec 15 14:04:48 filer dbmail/imap4d[28149]: dbpgsql.c,db_query: executing query 
[SELECT message_idnr + 1 FROM dbmail_messages ORDER BY message_idnr DESC LIMIT 
1]
Dec 15 14:04:48 filer dbmail/imap4d[28149]: imap4.c,IMAPClientHandler: tag = 
a0061

Reply via email to