2013-04-11 52 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. 檢查如果服務器至少分區(S)
  4. 嘗試的讀取副本修改查詢的建議
  5. 做一個ndstrace在查詢時看到什麼這麼長時間