Oracle Fusion Middleware Administration Guide for Oracle Directory Server Enterprise Edition

ProcedureTo Analyze Attribute Indexes

Using the dsconf analyze-index-filters command, gather the most used filters and their behavior. On the other hand, to know the data as appears in the index files, use dsadm analyze-indexes to have a snapshot of index files.

  1. Your server must be stopped before analyzing the attribute indexes.


    $ dsadm stop INSTANCE_PATH
    
  2. Analyze attribute indexes using the following command:


    $ dsadm analyze-indexes [-bRi] [-o FILE] INSTANCE_PATH SUFFIX_DN
    

    For example, to analyze the attribute indexes of suffix o=example.com, run the following command:


    $ dsadm analyze-indexes /local/myinst o=example.com
    This operation may take a long time and generate important amounts of data
    Do you want to continue [y/n]? y
    Generating raw index data, please wait...
    Raw index data available in file '/local/myinst/logs/db_stat_example%2ecom'
    
    Index            Type       Total Keys  ALLIDs  95%  90%  80%
    ---------------  ---------  ----------  ------  ---  ---  ---
    aci              PRESENCE            1       0    0    0    0
    ancestorid       EQUALITY            6       6    0    0    0
    cn               EQUALITY       200000       0    0    0    0
    cn               SUBSTRING       14828      15    0    0    0
    entrydn          EQUALITY       100006       0    0    0    0
    givenName        EQUALITY         8605       0    0    0    0
    givenName        SUBSTRING        4762       4    0    0    0
    givenName        PRESENCE            1       1    0    0    0
    mail             EQUALITY       100000       0    0    0    0
    mail             SUBSTRING       14975      26    1    3    2
    mail             PRESENCE            1       1    0    0    0
    nsuniqueid       EQUALITY       100007       0    0    0    0
    numsubordinates  PRESENCE            1       0    0    0    0
    objectclass      EQUALITY            7       4    0    0    0
    parentid         EQUALITY            6       5    0    0    0
    sn               EQUALITY       100000       0    0    0    0
    sn               SUBSTRING       12993       0    0    0    0
    telephoneNumber  EQUALITY        99924       0    0    0    0
    telephoneNumber  SUBSTRING        1106      24    0    0    0
    telephoneNumber  PRESENCE            1       1    0    0    0
    uid              EQUALITY       200000       0    0    0    0
    uid              PRESENCE            1       1    0    0    0
    
    aci PRESENCE
    ============
    ALLIDs keys : 0 / 1
    
    ancestorid EQUALITY
    ===================
    ALLIDs keys : 6 / 6
         [1] [2] [3] [4] [5] [6]
    
    cn EQUALITY
    ===========
    ALLIDs keys : 0 / 200000
    
    cn SUBSTRING
    ============
    ALLIDs keys : 15 / 14828
         [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [^us]
         [er1] [r10] [ser] [use]
    
    entrydn EQUALITY
    ================
    ALLIDs keys : 0 / 100006
    
    givenName EQUALITY
    ==================
    ALLIDs keys : 0 / 8605
    
    givenName SUBSTRING
    ===================
    ALLIDs keys : 4 / 4762
         [^ma] [ie$] [na$] [ne$]
    
    givenName PRESENCE
    ==================
    ALLIDs keys : 1 / 1
        [pres]
    
    mail EQUALITY
    =============
    ALLIDs keys : 0 / 100000
    
    mail SUBSTRING
    ==============
    ALLIDs keys : 26 / 14975
         [.co] [0@e] [1@e] [2@e] [3@e] [4@e] [5@e] [6@e] [7@e] [8@e] [9@e]
         [@ex] [^ma] [amp] [com] [ell] [exa]  [e.c] [ie_] [le.] [mar] [mpl] 
         [na_] [ne_] [om$] [ple] [xam]
    
    mail PRESENCE
    =============
    ALLIDs keys : 1 / 1
        [pres]
    
    nsuniqueid EQUALITY
    ===================
    ALLIDs keys : 0 / 100007
    
    numsubordinates PRESENCE
    ========================
    ALLIDs keys : 0 / 1
    
    objectclass EQUALITY
    ====================
    ALLIDs keys : 4 / 7
         [inetorgperson] [organizationalperson] [person] [top]
    
    parentid EQUALITY
    =================
    ALLIDs keys : 5 / 6
         [2] [3] [4] [5] [6]
    
    sn EQUALITY
    ===========
    ALLIDs keys : 0 / 100000
    
    sn SUBSTRING
    ============
    ALLIDs keys : 0 / 12993
    
    telephoneNumber EQUALITY
    ========================
    ALLIDs keys : 0 / 99924
    
    telephoneNumber SUBSTRING
    =========================
    ALLIDs keys : 24 / 1106
         [120] [121] [130] [140] [141] [151] [171] [180] [181] [206] [213]
         [303] [408] [415] [510] [714] [804] [818] [^12] [^13] [^14] [^15]
         [^17] [^18]
    
    telephoneNumber PRESENCE
    ========================
    ALLIDs keys : 1 / 1
        [pres]
    
    uid EQUALITY
    ============
    ALLIDs keys : 0 / 200000
    
    uid PRESENCE
    ============
    ALLIDs keys : 1 / 1
        [pres]

    Following what explained in Chapter 9, Directory Server Indexing, in Oracle Fusion Middleware Reference for Oracle Directory Server Enterprise Edition, dsadm analyze-indexes displays the status of the value keys as used by Directory Server. If most of the keys are Allid or 95% of Allid, the number of entries matching the key is at least equal to all-ids-threshold. The index most likely has to be configured with a higher value for all-ids-threshold.


    Note –

    Too high an all-ids-threshold value can impact performance.


    The dsadm analyze-indexes displays which keys are ALLID or close to be, so it can be matched with the output of dsconf analyze-index-filters. If a search specifies a filter whose value is an allid key, the search might not be indexed, depending on the entire search filter as mentioned above.