slow index lookups on large mailboxes

Bron Gondwana brong at fastmail.fm
Thu Aug 2 04:05:29 EDT 2012



On Wed, Aug 1, 2012, at 11:20 PM, Deniss wrote:
> hello here,
> 
> after upgrade of cyrus from 2.3 to 2.4 I noticed some slowdown on few 
> huge mailboxes doing multiple FETCH UID queries. I briefly checked a 
> codebase of new cyrus and found out that to find any required record in 
> index the new code loops through all records and output matched data.
> for example:
>      for (msgno = 1; msgno <= state->exists; msgno++) {
>          im = &state->map[msgno-1];
>          checkval = usinguid ? im->record.uid : msgno;
>          if (!seqset_ismember(seq, checkval))
>              continue;
>          r = index_fetchreply(state, msgno, fetchargs);
>          if (r) break;
>          fetched = 1;
>      }
> 
> This approach brings constant time of index query for any numbers of 
> requested records. But for large indexes and single record requested 
> this algorithm is clearly ineffective.
> 
> is there plans to tune index lookups in future ?

Yes:

http://git.cyrusimap.org/cyrus-imapd/commit/?id=6b8c92d9ea92a74e508a6399a1a1dc5fe55936d3

(and bug fixes afterwards)

it's in -master, so will be in 2.5.

Bron.
-- 
  Bron Gondwana
  brong at fastmail.fm



More information about the Cyrus-devel mailing list