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