Hi, didn't realize you responded to the other questions I had. Responses below. Thanks.
Regards, Carlo Accorsi -----Original Message----- From: Emmanuel Lécharny [mailto:elecha...@gmail.com] Sent: Wednesday, April 11, 2012 10:47 AM To: users@directory.apache.org Subject: Re: Plea for help with search performance Le 4/11/12 4:31 PM, carlo.acco...@ibs-ag.com a écrit : > Hi, we have a project has 80,000 users in one OU. This is a requirement. Hmm, you mean 80 000 entries under ou=something, I guess ? Like : cn=user1, ou=something cn=user2, ou=something ... cn=user80000, ou=something ? > > With guidance from this group, I've tried dozens of combinations of > indexing attributes, setting their cache sizes, increasing the partition > caches, timeout settings, etc. > > We're using the 64 bit java service wrapper and have given the JVM 5GB of > memory. > Despite this, we still have 20+ second response times when searching on > displayName and employeeNumber . > This is consistent with multiple ldap clients. That's not normal. It should be immediate. Can you tell us what kind of request you send to the server ? CA- Logins: Admin bind, search for user's DN, then rebind with user DN and user pass Name pickers: Admin Bind, search like (displayName=Smith*) Here is how I setup my connection. this.strBaseLdapUrl="ldap://"+this.strHostname+":"+Integer.toString(this.intPort); // ... LdapContext ctx = null; Hashtable<String,Object> env=new Hashtable<String,Object>(); env.put(Context.INITIAL_CONTEXT_ "com.sun.jndi.ldap.LdapCtxFactory"); env.put("java.naming.ldap.version","3"); env.put(Context.PROVIDER_URL,this.strBaseLdapUrl); try{ ctx = new InitialLdapContext(env,null); }.. Then for the search.. SearchControls srcCtrl = new SearchControls(); srcCtrl.setSearchScope(SearchControls.SUBTREE_SCOPE); srcCtrl.setCountLimit(intResultCount); srcCtrl.setTimeLimit(this.intTimeLimit); List<NamingEnumeration> lstNames= new ArrayList<NamingEnumeration>(); List<String> lstBases= new ArrayList<String>(); String strNameFilter= "(employeeNumber=" + strName + ")"; //System.out.println(strNameFilter); // if subtree is empty search internal and external String strSubtree = DirectoryAdapterMap.getSuffixByType(intType); String[] arrBases; if (DirectoryAdapterMap.isNullOrEmpty(strSubtree)){ // search both. arrBases = new String[]{strInternalBase,strExternalBase}; } else { arrBases = new String[]{strSubtree}; } for (String strBase:arrBases) { // for all base DN's, but often there's only one neDns=this.daLdapCtx.search(strBase,strNameFilter,srcCtrl); // <-- search here. if ((neDns!=null)&&(neDns.hasMore())){ lstNames.add(neDns); lstBases.add(strBase); } } //check for a result, then //RDN = (uid=123456789) SearchResult srchResult = (SearchResult)lstNames.get(0).next(); strResultDn = getDn(srchResult,lstBases.get(0)); // this assembles the DN from the RDN private String getDn(SearchResult si, String strTree) throws DirectoryAdapterException { String strDn = ""; if (si.isRelative()){ //no method si.getFullName()?? strDn = si.getName() + (strTree.trim().length() > 0 ? "," + strTree : ""); } else { strDn = si.getName(); } return strDn; } Also what kind of network configuration are you going through (firewall, etc). It would be interesting to see if you get the same 'level' of (un)performance if you do the search on the server. CA - Hosts all on same subnet, no firewalls. No real difference if I perform the search localhost or on remote host on same net. > > Every time we've made configuration or index changes, it's been to a clean > empty system and then we load our LDIF file with the 80k users. > > You've all been very helpful to us but we're backed into wall with this. > The response times are unacceptable and we don't know what else we can do. Yeah, I understand. It's definitively not acceptable, and we never had such performances on our tests, even with 5 000 000 entries under one single branch. CA - WOW, ok I am doing something wrong. > > Could someone provide us with an idea of how to configure the system > to get the best performance when searching for displayName and > employeeNumber? The displayName lengths are up to 80 characters, the > employeeNumber is 25. The best thing is certainly to index those two attributes. You might also face a bug. Which version of the server are you using ? CA - For unit testing, we've largely been working off the trunk. For this server, we decided to install 2.0.0-M6 so that I would have a known packaged release in our production server. The only modifications have been the 64bit wrapper.exe, wrapper.dll and wrapper.jar. Thanks ! -- Regards, Cordialement, Emmanuel Lécharny www.iktek.com