2013-04-11 3 views
2

Этот запрос LDAP мгновенна:Как ускорить комбинированный запрос ldap?

"Find all groups which user1 is not member" 
(& 
    (objectclass=groupOfNames) 
    (!(member=cn=user1)) 
) 

Как это:

"Find these groups" 
(& 
    (objectclass=groupOfNames) 
    (|(cn=group1) (cn=group2) (cn=group3) ... ) 
) 

Но, сочетая их как это приводит в течение нескольких минут обработки!

"From these groups, find all which the user1 is not a member" 
(& 
    (objectclass=groupOfNames) 
    (!(member=cn=user1)) 
    (|(cn=group1) (cn=group2) (cn=group3) ... ) 
) 

Я понятия не имею, почему сервер ldap задыхается от комбинированного запроса. Любые идеи, что можно сделать?

Сервер Novell eDirectory, если это помогает.

ответ

0

Странно, что для получения результата требуется несколько минут. У вас более двух миллионов объектов?

Одна из возможностей может быть, что поиск 1 просматривает только один раздел вашего дерева, поиск 2 в другом, и оба вместе взятые будут явно смотреть в оба, что должно быть хорошо, если сервер, который вы запрашиваете по крайней мере, прочитал реплику на этих разделах.

Кроме того, вы можете, пожалуйста, попробуйте следующий вариант:

(& 

    (& 
    (objectclass=groupOfNames)(!(member=cn=user1)) 
) 

    (& 
    (objectclass=groupOfNames)(|(cn=group1) (cn=group2) (cn=group3) ... ) 
) 

) 

Это должно дать вам ответ, который вы были первоначальными запрашивая, но в битовом simpley образом.

Если это не поможет вам выполнить ndstrace на запрошенном сервере и посмотреть, что он делает именно с запросом.

Так короче:

  1. Obivously: убедитесь, что ваш NDS здоров (ndsrepair, TID 3564075 и этажерка)
  2. проверки, если оба запроса находится в том же разделе
  3. проверка, если сервер имеет по крайней мере чтения копия раздела (ов)
  4. пытаются изменить запрос, как предложено
  5. сделать ndstrace при запросе, чтобы увидеть, Что так долго
Смежные вопросы