Hi,

Considering the following assumptions;

- OpenLDAP version 2.4.51
- attributes objectClass and abc are indexed based on equality
- the EQUALITY of attribute abc is based on distinguishedNameMatch
- The database contains roughly 2 million entries
- 2 entries have defined the attribute abc with a dn value cn=foo,dc=bar and 
objectClass=someClass
- 2 entries have defined the attribute abc with a dn value cn=bar,dc=baz and 
objectClass=someClass

Now, the issue started with really slow search performance using 
objectClass=someClass & abc=cn=foo,dc=bar as filter criteria. Debugging a while 
seems to indicate that the objectClass filter returns roughly 2 million entries 
as candidates. Now, one would expect that the second filter would return only 
the 2 potential candidates from the abc index, or a subset of the whole 
database but this is not the case. The second filter also returns nearly the 
whole database entries as potential candidates and causes really slow query 
performance. Interestingly, this only occurs when attribute abc has value 
cn=foo,dc=bar, but for some reason for the entry having attribute abc with 
value cn=bar,dc=baz the query returns immediately. In both cases, the actual 
entries matching the search return immediately but for the problematic search 
"(&(objectClass=someClass)(abc=cn=foo,dc=bar))", the completion of the search 
takes a long time (around 15 seconds to be precise). 

The issue started suddenly and wasn't a degradation of query performance over 
time. 

Few things I have tried

- Rebuilt the whole database again
- Reindex the existing database again
- Testing with bdb and mdb as backends
- Increased cache sizes for bdb to hold the whole database in cache
- For bdb adjust the page size of the indexes according to suggestion by 
db_tuner
- Change the order of the filters

None of these made any difference. At the moment, there does not seem to be any 
good options to try. Any ideas or help would be greatly appreciated!

Reply via email to