Chapter 10. Managing cache settings Directory Server uses the following caches: The entry cache, which contains individual directory entries. The distinguished name (DN) cache is used to associate DNs and relative distinguished names (RDN) with entries. The database cache, which contains the database index files *.db files. For the highest performance improvements, all cache sizes must be able to store all of their records. If you do not use the recommended auto-sizing feature and have not enough RAM available, assign free memory to the caches in the previously shown order. 10.1. How the cache-autosize and cache-autosize-split parameters influence the database and entry cache sizes By default, Directory Server uses an auto-sizing feature to optimize the size of both the database and entry cache on the hardware resources of the server when the instance starts. Important Red Hat recommends to use the auto-sizing feature and not to set cache sizes manually. The following parameters in the cn=config,cn=ldbm database,cn=plugins,cn=config entry control the auto-sizing: nsslapd-cache-autosize These settings control if auto-sizing is enabled for the database and entry cache. Auto-sizing is enabled: For both the database and entry cache, if the nsslapd-cache-autosize parameter is set to a value greater than 0 . For the database cache, if the nsslapd-cache-autosize and nsslapd-dbcachesize parameters are set to 0 . For the entry cache, if the nsslapd-cache-autosize and nsslapd-cachememsize parameters are set to 0 . nsslapd-cache-autosize-split The value sets the percentage of RAM that Directory Server uses for the database cache. The server uses the remaining percentage for the entry cache. Using more than 1.5 GB RAM for the database cache does not improve the performance. Therefore, Directory Server limits the database cache to 1.5 GB. By default, Directory Server uses the following defaults values: nsslapd-cache-autosize: 25 nsslapd-cache-autosize-split: 25 nsslapd-dbcachesize: 1,536 MB Using these settings, 25% of the system's free RAM is used ( nsslapd-cache-autosize ). From this memory, the server uses 25% for the database cache ( nsslapd-cache-autosize-split ) and the remaining 75% for the entry cache. Depending on the free RAM, this results in the following cache sizes: Table 10.1. Cache sizes if both nsslapd-cache-autosize and nsslapd-cache-autosize-split use their default values GB of free RAM Database cache size Entry cache size 1 GB 64 MB 192 MB 2 GB 128 MB 384 MB 4 GB 256 MB 768 MB 8 GB 512 MB 1,536 MB 16 GB 1,024 MB 3,072 MB 32 GB 1,536 MB 6,656 MB 64 GB 1,536 MB 14,848 MB 128 GB 1,536 MB 31,232 MB 10.2. Required cache sizes The dsconf monitor dbmon command enables you to monitor cache statistics at runtime. To display the statistics, enter: # dsconf -D " cn=Directory Manager " ldap://server.example.com monitor dbmon DB Monitor Report: 2022-02-24 10:25:16 -------------------------------------------------------- Database Cache: - Cache Hit Ratio: 50% - Free Space: 397.31 KB - Free Percentage: 2.2% - RO Page Drops: 0 - Pages In: 2934772 - Pages Out: 219075 Normalized DN Cache: - Cache Hit Ratio: 60% - Free Space: 19.98 MB - Free Percentage: 99.9% - DN Count: 100000 - Evictions: 9282348 Backends: - dc=example,dc=com (userroot): - Entry Cache Hit Ratio: 66% - Entry Cache Count: 50000 - Entry Cache Free Space: 2.0 KB - Entry Cache Free Percentage: 0.8% - Entry Cache Average Size: 8.9 KB - DN Cache Hit Ratio: 21% - DN Cache Count: 100000 - DN Cache Free Space: 4.29 MB - DN Cache Free Percentage: 69.8% - DN Cache Average Size: 130.0 B Optionally, pass the -b back_end or -x option to the command to display the statistics for a specific back end or the index. If your caches are sufficiently sized, the number in DN Cache Count matches the values in the Cache Count backend entries. Additionally, if all of the entries and DNs fit within their respective caches, the Entry Cache Count count value matches the DN Cache Count value. The output of the example shows: Only 2.2% free database cache is left: Database Cache: ... - Free Space: 397.31 KB - Free Percentage: 2.2% However, to operate efficiently, at least 15% free database cache is required. To determine the optimal size of the database cache, calculate the sizes of all *.db files in the /var/lib/dirsrv/slapd- instance_name /db/ directory including subdirectories and the changelog database, and add 12% for overhead. To set the database cache, see Setting the database cache size using the command line . The DN cache of the userroot database is well-chosen: Backends: - dc=example,dc=com (userroot): ... - DN Cache Count: 100000 - DN Cache Free Space: 4.29 MB - DN Cache Free Percentage: 69.8% - DN Cache Average Size: 130.0 B The DN cache of the database contains 100000 records, 69,8% of the cache is free, and each DN in memory requires 130 bytes on average. To set the DN cache, see Setting the DN cache size using the command line . The statistics on the entry cache of the userroot database indicates that the entry cache value should be increased for better performance: Backends: - dc=example,dc=com (userroot): ... - Entry Cache Count: 50000 - Entry Cache Free Space: 2.0 KB - Entry Cache Free Percentage: 0.8% - Entry Cache Average Size: 8.9 KB The entry cache contains in this database 50000 records and only 2 Kilobytes of free space are left. To enable Directory Server to cache all 100000 DNs, the cache must be increased to minimum of 890 MB (100000 DNs * 8,9 KB average entry size). However, Red Hat recommends to round the minimum required size to the highest GB and double the result. In this example, the entry cache should be set to 2 Gigabytes. To set the entry cache, see Setting the entry cache size using the command line . 10.3. Setting the database cache size using the command line The database cache contains the Berkeley database index files for the database, meaning all of the *.db and other files used for attribute indexing by the database. This value is passed to the Berkeley DB API function set_cachesize() . This cache size has less of an impact on Directory Server performance than the entry cache size, but if there is available RAM after the entry cache size is set, increase the amount of memory allocated to the database cache. Procedure Disable automatic cache tuning # dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --cache-autosize=0 Manually set the database cache size: # dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --dbcachesize= 268435456 Specify the database cache size in bytes. In this example, the command sets the database cache to 256 MB. Restart the instance: # dsctl instance_name restart 10.4. Setting the database cache size using the web console The database cache contains the Berkeley database index files for the database, meaning all of the *.db and other files used for attribute indexing by the database. This value is passed to the Berkeley DB API function set_cachesize() . This cache size has less of an impact on Directory Server performance than the entry cache size, but if there is available RAM after the entry cache size is set, increase the amount of memory allocated to the database cache. Prerequisites You are logged in to the instance in the web console. Procedure Navigate to Database Global Database Configuration . Deselect Automatic Cache Tuning . Click Save Config . Enter the database cache size in bytes, such as 268435456 for 256 MB, into the Database Cache Size field. Click Save Config . Click Actions in the top right corner, and select Restart Instance . 10.5. Setting the DN cache size using the command line Directory Server uses the entryrdn index to associate distinguished names (DN) and relative distinguished names (RDN) with entries. It enables the server to efficiently rename subtrees, move entries, and perform moddn operations. The server uses the DN cache to cache the in-memory representation of the entryrdn index to avoid expensive file I/O and transformation operations. If you do not use the auto-tuning feature, for best performance, especially with but not limited to renaming entries and moving operations, set the DN cache to a size that enables Directory Server to cache all DNs in the database. If a DN is not stored in the cache, Directory Server reads the DN from the entryrdn.db index database file and converts the DNs from the on-disk format to the in-memory format. DNs that are stored in the cache enable the server to skip the disk I/O and conversion steps. Procedure Display the suffixes and their corresponding back end: # dsconf -D " cn=Directory Manager " ldap://server.example.com suffix list dc=example,dc=com (userroot) This command displays the name of the back end database to each suffix. You require the suffix's database name in the step. Set the DN cache size: # dsconf -D " cn=Directory Manager " ldap://server.example.com backend suffix set --dncache-memsize= 20971520 userRoot This command sets the DN cache for the userRoot database to 20 megabytes. Restart the instance: # dsctl instance_name restart 10.6. Setting the DN cache size using the web console Directory Server uses the entryrdn index to associate distinguished names (DN) and relative distinguished names (RDN) with entries. It enables the server to efficiently rename subtrees, move entries, and perform moddn operations. The server uses the DN cache to cache the in-memory representation of the entryrdn index to avoid expensive file I/O and transformation operations. If you do not use the auto-tuning feature, for best performance, especially with but not limited to renaming entries and moving operations, set the DN cache to a size that enables Directory Server to cache all DNs in the database. If a DN is not stored in the cache, Directory Server reads the DN from the entryrdn.db index database file and converts the DNs from the on-disk format to the in-memory format. DNs that are stored in the cache enable the server to skip the disk I/O and conversion steps. Prerequisites You are logged in to the instance in the web console. Procedure Navigate to Database Suffixes suffix_name . Enter the DN cache size in bytes to the DN Cache Size field. Click Save Configuration . Click Actions in the top right corner, and select Restart Instance . 10.7. Setting the entry cache size using the command line Directory Server uses the entry cache to store directory entries that are used during search and read operations. Setting the entry cache to a size that enables Directory Server to store all records has the highest performance impact on search operations. If entry caching is not configured, Directory Server reads the entry from the id2entry.db database file and converts the distinguished names (DN) from the on-disk format to the in-memory format. Entries that are stored in the cache enable the server to skip the disk I/O and conversion steps. Procedure Disable automatic cache tuning: # dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --cache-autosize=0 Display the suffixes and their corresponding back end: # dsconf -D " cn=Directory Manager " ldap://server.example.com suffix list dc=example,dc=com (userroot) This command displays the name of the back end database to each suffix. You require the suffix's database name in the step. Set the entry cache size in bytes for the database: # dsconf -D " cn=Directory Manager " ldap://server.example.com backend suffix set --cache-memsize= 2147483648 userRoot This command sets the entry cache for the userRoot database to 2 gigabytes. Restart the instance: # dsctl instance_name restart 10.8. Setting the entry cache size using the web console Directory Server uses the entry cache to store directory entries that are used during search and read operations. Setting the entry cache to a size that enables Directory Server to store all records has the highest performance impact on search operations. If entry caching is not configured, Directory Server reads the entry from the id2entry.db database file and converts the distinguished names (DN) from the on-disk format to the in-memory format. Entries that are stored in the cache enable the server to skip the disk I/O and conversion steps. Prerequisites You are logged in to the instance in the web console. Procedure Navigate to Database Suffixes suffix_name Settings . Disable the Automatic Cache Tuning setting. Click Save Configuration . Click Actions in the top right corner, and select Restart Instance . Navigate to Database Suffixes suffix_name Settings . Set the size of the database cache in the `Entry Cache Size field. Click Save Configuration . Click Actions in the top right corner, and select Restart Instance .

Commands:
dsconf -D " cn=Directory Manager " ldap://server.example.com monitor dbmon DB Monitor Report: 2022-02-24 10:25:16 -------------------------------------------------------- Database Cache: - Cache Hit Ratio: 50% - Free Space: 397.31 KB - Free Percentage: 2.2% - RO Page Drops: 0 - Pages In: 2934772 - Pages Out: 219075 Normalized DN Cache: - Cache Hit Ratio: 60% - Free Space: 19.98 MB - Free Percentage: 99.9% - DN Count: 100000 - Evictions: 9282348 Backends: - dc=example,dc=com (userroot): - Entry Cache Hit Ratio: 66% - Entry Cache Count: 50000 - Entry Cache Free Space: 2.0 KB - Entry Cache Free Percentage: 0.8% - Entry Cache Average Size: 8.9 KB - DN Cache Hit Ratio: 21% - DN Cache Count: 100000 - DN Cache Free Space: 4.29 MB - DN Cache Free Percentage: 69.8% - DN Cache Average Size: 130.0 B
Database Cache: - Free Space: 397.31 KB - Free Percentage: 2.2%
Backends: - dc=example,dc=com (userroot): - DN Cache Count: 100000 - DN Cache Free Space: 4.29 MB - DN Cache Free Percentage: 69.8% - DN Cache Average Size: 130.0 B
Backends: - dc=example,dc=com (userroot): - Entry Cache Count: 50000 - Entry Cache Free Space: 2.0 KB - Entry Cache Free Percentage: 0.8% - Entry Cache Average Size: 8.9 KB
dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --cache-autosize=0
dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --dbcachesize= 268435456
dsctl instance_name restart
dsconf -D " cn=Directory Manager " ldap://server.example.com suffix list dc=example,dc=com (userroot)
dsconf -D " cn=Directory Manager " ldap://server.example.com backend suffix set --dncache-memsize= 20971520 userRoot
dsctl instance_name restart
dsconf -D " cn=Directory Manager " ldap://server.example.com backend config set --cache-autosize=0
dsconf -D " cn=Directory Manager " ldap://server.example.com suffix list dc=example,dc=com (userroot)
dsconf -D " cn=Directory Manager " ldap://server.example.com backend suffix set --cache-memsize= 2147483648 userRoot
dsctl instance_name restart