Chapter 4. Improving Search Performance (and Balancing Read Performance)
The most effective way to improve search operations against the directory is to configure thorough indexes for entries, combined with reasonable limits on search results.
4.1. Using Indexes
An index (as it implies) is a tag that shows that a certain entry contains a certain attribute, without having to contain any other detail about the entry (which saves space and makes returning search results faster). Each index is organized around a Directory Server attribute and a certain way of matching that attribute:
- Presence index (pres) simply shows what entries contain an attribute.
- Equality index (eq) shows which attribute values match a specific search string.
- Approximate index (approx) is used for efficient sounds-like searches, which shows entries which have a value that phonetically matches a string.
- Substring index (sub) matches any substring of an attribute value to the given search string. (This index if very expensive for the server to maintain.)
- International index uses a matching rule to match strings in a directory which contains values in languages other than English.
Note
Indexing is described in much more detail in the Managing Indexes chapter in the Red Hat Directory Server Administration Guide.
However, just creating indexes is not directly going to increase server performance. Maintaining indexes puts a burden on the Directory Server for every modify, add, and delete operation by having to verify every attribute in the change against every index maintained by the server:
- The Directory Server receives an add or modify operation.
- The Directory Server examines the indexing attributes to determine whether an index is maintained for the attribute values.
- If the created attribute values are indexed, then the Directory Server generates the new index entries.
- Once the server completes the indexing, the actual attribute values are created according to the client request.
For example, the Directory Server adds the entry:
dn: cn=John Doe, ou=People,dc=example,dc=com objectclass: top objectClass: person objectClass: orgperson objectClass: inetorgperson cn: John Doe cn: John sn: Doe ou: Manufacturing ou: people telephoneNumber: 408 555 8834 description: Manufacturing lead for the Z238 line of widgets.
The Directory Server is maintaining the following indexes:
- Equality, approximate, and substring indexes for
cn
(common name) andsn
(surname) attributes. - Equality and substring indexes for the telephone number attribute.
- Substring indexes for the description attribute.
When adding that entry to the directory, the Directory Server must perform these steps:
- Create the
cn
equality index entry forJohn
andJohn Doe
. - Create the appropriate
cn
approximate index entries forJohn
andJohn Doe
. - Create the appropriate
cn
substring index entries forJohn
andJohn Doe
. - Create the
sn
equality index entry forDoe
. - Create the appropriate
sn
approximate index entry forDoe
. - Create the appropriate
sn
substring index entries forDoe
. - Create the telephone number equality index entry for
408 555 8834
. - Create the appropriate telephone number substring index entries for
408 555 8834
. - Create the appropriate description substring index entries for
Manufacturing lead for the Z238 line of widgets
. A large number of substring entries are generated for this string.
Before creating new indexes, make sure to balance the overhead of maintaining the indexes against the potential improvements in search performance. Especially important, match the types of indexes that you maintain to the type of information stored in the directory and the type of information users routinely search for.
- Approximate indexes are not efficient for attributes commonly containing numbers, such as telephone numbers.
- Substring indexes do not work for binary attributes.
- Equality indexes should be avoided if the value is big (such as attributes intended to contain photographs or passwords containing encrypted data).
- Maintaining indexes for attributes not commonly used in a search increases overhead without improving global searching performance.
- Attributes that are not indexed can still be specified in search requests, although the search performance may be degraded significantly, depending on the type of search.
- The more indexes you maintain, the more disk space you require.
Note
Creating indexes is much more effective for directories which have a high search operation load and low modify operation load.