Ability to control the number
of indexes being used by the Directory Server. |
Try This...
Reduce the number of indexes. |
Factoid:
Proper indexing is the most
important thing you can do to improve read performance. The performance
improvements you can achieve through all other tuning areas are insignificant
in comparison to creating the right set of indexes in your Directory Server. |
Directory Server Administrator's
Guide: Chapter 7, Managing Indexes.
Consult the Netscape Directory
Server Administrator's Guide for specific examples on running the db2index
command-line tool on NT and Unix systems. |
|
Indexing
To make sure you are getting the most out of your indexing, you
need to understand the type of searches your client performs. You
should set indexes on the attributes that your client is going to request
often. For example, if your client is a mail server, it will most
likely search only for an exact match on the UID
attribute. You would therefore set indexes on the UID attribute.
You would not need to index other attributes or use sub-string indexes
unless the directory is servicing other types of clients as well.
Using The Access Logs
You can determine which searches are indexed by notations in
the access log. Indexed searches are indicated with an "I" and un-indexed
searches will be indicated with a "U". You can look at your logs
and then set up additional indexes on attributes that are returned by un-indexed
searches.
While indexing makes searches much faster, the server must create these
indexes whenever it writes the entry. As a result, maintaining the
indexes causes adds, modifies, deletes and imports to be slower than they
would be without indexes. Sub-string indexes are the most expensive
in this respect and sometimes unnecessary as is the case with the mail
server scenario. In addition, there is no reason to maintain sub-string
indexes on all attributes. To minimize the performance impact of
maintaining unnecessary indexes, periodically check the access log to understand
the frequency of certain searches. This will help you verify that
you are not maintaining indexes for attributes that are infrequently searched.
The following table illustrates the relative cost of maintaining certain
types of indexes. The cost is expressed in terms of the number of
logical database writes associated with maintaining the index for a given
value.
Type of Index |
Relative Cost to Index a Value |
Example Value:
"first middle last" |
Presence |
1 |
1 |
Equality |
1 |
1 |
Approximate |
1 * number of words in value |
3 |
Sub-string |
1 * number of characters in value |
17 |
Reduce the number of indexes
If possible, reduce the number of indexes being used by the
directory server. For example, if the directory server is used solely for
mail lookups, only the following attributes need to be indexed (using exact
match only): uid, mail,
mailHost, and mailAlternativeAddress. These four
attributes must be indexed regardless. For the change to take effect after
index changes, the database will need to be recreated.
Note that if an index is added or modified, then the existing records
must be exported to a LDIF file before recreating the database. A command
line utility is available if only one index or one member is added.
Creating Indexes
The following is intended to give you
a general idea of how indexes are created.
From the Server Console
You can use the server console to create indexes.
While the index is being created, the server is in read-only mode and configuration
changes and changes to the contents of the directory cannot be made.
From the Directory Server Console, the general procedure is as follows:
Select the Configuration tab and then the database
icon.
Select the Indexes tab in the right pane.
Select or confirm attributes.
Select the checkbox for each type of indexes you
want maintained for the attribute.
Click save.
From the Command-Line
Creating indexes for attibutes using the command-line
is a two step process.
1. Add the index description to slapd.ldbm.conf,
then export and reimport the database
using LDIF.
The form is:
index <attribute> [<list
of indexes>] [<list of OIDs>]
2. Run the db2index command-line tool.
|