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