Sun Java System Directory Server Enterprise Edition 6.0 管理指南

第 12 章 目錄伺服器編製索引

目錄伺服器的索引如同書中的索引一般,經由建立搜尋字串與目錄內容參照的關聯可加速搜尋。

如需有關索引類型與索引調校的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 6 章「Directory Server Indexing」

本章包含下列主題:

管理索引

本節說明如何管理特定屬性的索引,包含建立、修改與刪除索引的相關資訊。如需虛擬清單檢視 (VLV) 作業特有的程序,請參閱管理瀏覽索引

Procedure列出索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要列出現有的索引與其特性,請使用此指令:


    $ dsconf list-indexes -h host -p port -v suffix-DN
    

Procedure建立索引


備註 –

您無法建立新的系統索引。僅會保留目錄伺服器內部定義的現有系統索引。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 建立新的索引配置。

    使用 dsconf create-index 指令行公用程式,指定要編製索引的屬性,以配置新的索引資訊。

    例如,若要建立 preferredLanguage 屬性的索引項目,請使用此指令:


    $ dsconf create-index -h host -p port dc=example,dc=com preferredLanguage

    備註 –

    指令 dsconf create-index 會設定索引配置,但是不會實際建立搜尋所需的索引檔案。產生索引檔案會影響效能。在建立新的索引配置之後手動產生索引檔案,可讓您在編製索引程序期間有更多的控制權。

    建立索引時,請一律使用屬性的主要名稱。請勿使用屬性的別名。屬性的主要名稱為模式中所列的第一個屬性名稱,例如 userid 屬性的主要名稱為 uid


  2. (可選擇) 使用 dsconf set-index-prop 指令設定索引特性。

    dsconf create-index 指令會以預設特性建立索引。若要修改這些特性,請使用 dsconf set-index-prop 指令。如需修改索引特性的詳細資訊,請參閱修改索引

  3. 產生索引檔案。

    請參閱產生索引

  4. 針對所有要編製索引的伺服器重複上述步驟。

Procedure修改索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 修改索引特性。


    $ dsconf set-index-prop -h host -p port suffix-DN attr-name property:value
    

    例如,若要啟用 preferredLanguage 索引的近似索引 approx-enabled,請使用此指令:


    $ dsconf set-index-prop -h host -p port dc=example,dc=com preferredLanguage approx-enabled:on

    您可以修改各個索引的下列特性:

    • eq-enabled 相同

    • pres-enabled 存在

    • sub-enabled 子字串

    想要修改的其中一個特性可能是選擇性的 nsMatchingRule 屬性。此屬性包含伺服器已知的所有相符規則之 OID。它會啟用國際化索引的語言比較順序之 OID,以及 CaseExactMatch 等其他的相符規則。如需支援的語言環境清單與相關比較順序的 OID,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

    如需索引配置屬性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

  2. 重新產生新的索引。

    請參閱產生索引

  3. 針對所有包含已修改屬性的索引之伺服器重複上述步驟。

Procedure產生索引

本程序會產生索引檔案,以讓新的或修改過的索引可進行搜尋。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    依下列其中一種方式產生索引檔案:

    • 以線上方式產生新的索引檔案。


      $ dsconf reindex -h host -p port [-t attr] suffix-DN
      

      其中 -t 會指定僅能重新編製特定單一屬性或特定多重屬性的索引,而不是所有屬性。

      例如,若要重新產生 preferredLanguage 索引,請鍵入:


      $ dsconf reindex -h host -p port -t preferredLanguage dc=example,dc=com

      dsconf reindex 指令執行期間,可透過伺服器使用尾碼內容。但是在指令完成之前,無法編製搜尋的索引。重新編製索引是相當耗費資源之作業,可能會影響到伺服器上其他作業的效能。

    • 以離線方式產生新的索引檔案。


      $ dsadm reindex -t attr instance-path suffix-DN
      

      例如,若要重新產生 preferredLanguage 索引,請鍵入:


      $ dsadm reindex -t preferredLanguage /local/ds dc=example,dc=com
    • 重新初始化尾碼可在離線狀態下快速重新產生所有的索引。

      重新初始化尾碼時,會自動重新產生所有索引檔案。根據目錄大小的不同,重新初始化尾碼一般會比重新編製兩個或兩個以上的索引還要快。但是,初始化期間無法使用尾碼。如需更多資訊,請參閱重新初始化以重新編製尾碼的索引


    備註 –

    如果在多個尾碼上平行執行 dsconf importdsconf reindex 或同時執行兩個指令,作業事件記錄會變大而可能對效能造成不良影響。


Procedure刪除索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    移除為屬性所配置的所有索引。


    $ dsconf delete-index -h host -p port suffix-DN attr-name
    

    例如,下列指令會刪除 preferredLanguage 屬性的所有索引:


    $ dsconf delete-index -h host -p port dc=example,dc=com preferredLanguage

    刪除預設索引時請特別小心,此舉會影響目錄伺服器運作。

變更索引清單臨界值

搜尋速度緩慢可能肇因於系統索引清單大小超過了索引清單臨界值。索引清單臨界值是每個索引鍵值的上限數。若要判定是否已超過索引清單臨界值,請檢查存取記錄。存取記錄 RESULT 訊息結尾的 notes=U 旗標表示執行了未編製索引的搜尋。相同連線與作業的前一則 SRCH 訊息會指定使用的搜尋篩選。下列兩行範例會追蹤未編製索引的搜尋 cn=Smith,並傳回 10,000 個項目。已從訊息移除時間戳記。


conn=2 op=1 SRCH base="o=example.com" scope=0 filter="(cn=Smith)"
conn=2 op=1 RESULT err=0 tag=101 nentries=10000 notes=U

如果系統經常會超過索引清單臨界值,請考慮提高臨界值以改善效能。下列程序使用 dsconf set-server-prop 指令修改 all-ids-threshold 特性。如需調校索引與 all-ids-threshold 特性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「Tuning Indexes for Performance」

Procedure變更索引清單臨界值

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 調整索引清單臨界值。

    您可以在下列任何一個層級調整索引清單臨界值:

    • 實例層級:


      dsconf set-server-prop -h host -p port all-ids-threshold:value
      
    • 尾碼層級:


      dsconf set-suffix-prop -h host -p port suffix-DN all-ids-threshold:value
      
    • 項目層級:


      dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold:value
      
    • 依搜尋類型的索引層級:


      dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold search-type:value
      

      其中 search-type 為下列其中之一:

      • eq-enabled 相同

      • pres-enabled 存在

      • sub-enabled 子字串

      近似索引無法配置 all-ids-threshold 特性。

    您可以在依搜尋類型的索引層級使用 DSCC,設定臨界值。如需更多資訊,請參閱目錄伺服器線上說明。

  2. 重新產生尾碼索引。

    請參閱產生索引

  3. 如果已為舊的所有 ID 臨界值調校資料庫的快取大小,且伺服器有足夠的實體記憶體,請考慮加資料庫的快取大小。

    根據所有 ID 臨界值增量範圍的 25%,增加資料庫的快取大小。

    亦即,如果所有 ID 臨界值從 4000 提高到 6000,則可以增加資料庫的快取大小約 12 ½% 做為索引清單大小的增量。

    使用屬性 dbcachesize 設定資料庫的快取大小。憑經驗尋找最適大小,再將變更套用到生產伺服器。

重新編製尾碼的索引

如果索引檔案損毀,則必須重新編製尾碼的索引,以在對應資料庫目錄中重建索引檔案。您可以在目錄伺服器執行期間重新編製尾碼的索引,或重新初始化尾碼以重新編製尾碼的索引。

在目錄伺服器執行期間重新編製尾碼的索引

重新編製尾碼的索引時,伺服器會檢查尾碼包含與重建索引檔案的所有項目。尾碼的內容在重新編製索引期間為唯讀。由於伺服器必須掃描整個尾碼以尋找要重新編製索引的每個屬性,因此若尾碼有百萬個項目,本程序可能需要數小時。時間長度也會隨配置的索引而定。此外,在重新編製尾碼的索引期間無法使用索引,且伺服器的效能會受影響。

Procedure重新編製尾碼上的所有索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    重新編製尾碼上的所有索引。


    $ dsconf reindex -h host -p port suffix-DN
    

    例如,若要初始化 dc=example,dc=com 尾碼上的所有索引,請使用此指令:


    $ dsconf reindex -h host -p port dc=example,dc=com

重新初始化以重新編製尾碼的索引

重新初始化尾碼時會匯入新內容,亦即尾碼內容會遭取代且會建立新的索引檔案。由於所有屬性會在項目載入時平行編製索引,因此重新初始化尾碼會比重新編製多個屬性的索引還要快。但是請注意,重新初始化尾碼期間將無法使用尾碼。

Procedure透過重新初始化重新編製尾碼的索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 設定參照,並使尾碼變成唯讀模式中所述,將尾碼設為唯讀。

  2. 備份至 LDIF中所述,將整個尾碼匯出至 LDIF 檔案。

  3. 從 LDIF 檔案匯入資料中所述,匯入相同的 LDIF 檔案以重新初始化尾碼。

    初始化期間無法使用尾碼。初始化完成之後,便可以使用所有配置的索引。

  4. 設定參照,並使尾碼變成唯讀模式中所述,使尾碼再次可以寫入。

管理瀏覽索引

瀏覽索引是僅用以請求伺服器端排序結果的搜尋作業之特殊索引。「Sun Java System Directory Server Enterprise Edition 6.0 Reference」會說明瀏覽索引在目錄伺服器中的運作方式。

用戶端搜尋的瀏覽索引

排序用戶端搜尋結果的自訂瀏覽索引必須手動定義。若要建立瀏覽索引或虛擬清單檢視 (VLV) 索引,請使用下列程序。本節亦包含增加或修改瀏覽索引項目與重新產生瀏覽索引的程序。

Procedure建立瀏覽索引

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 使用 ldapmodify 指令新增瀏覽索引項目或編輯現有的瀏覽索引項目。

    如需相關指示,請參閱增加或修改瀏覽索引項目

  2. 執行 dsconf reindex 指令以產生一組新的瀏覽索引保留在伺服器上。

    如需相關指示,請參閱重新產生瀏覽索引

Procedure增加或修改瀏覽索引項目

瀏覽索引專用於指定基底項目與其子樹狀結構上指定的搜尋。瀏覽索引配置會在包含項目的尾碼資料庫配置中定義。

  1. 配置目錄伺服器上每個瀏覽索引的 vlvBasevlvScopevlvFilter 屬性。

    這些屬性會配置搜尋的基底、範圍與篩選器。這些屬性使用 vlvSearch 物件類別。

  2. 配置每個瀏覽索引的 vlvSort 屬性。

    此屬性會指定排序索引的一或多個屬性名稱。此項目是第一個項目的子項,並使用 vlvIndex 物件類別指定要排序的屬性與排序的順序。

    下列範例使用 ldapmodify 指令建立瀏覽索引配置項目:


    $ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=people_browsing_index, cn=database-name,
    cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvSearch
    cn: Browsing ou=People
    vlvBase: ou=People,dc=example,dc=com
    vlvScope: 1
    vlvFilter: (objectclass=inetOrgPerson)
    dn: cn=Sort rev employeenumber, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort rev employeenumber
    vlvSort: -employeenumber
    ^D

    vlvScope 為下列其中之一:

    • 0 僅針對基底項目

    • 1 可針對該基底的下一層子項

    • 2 可針對根目錄在該基底的整個子樹狀結構

    vlvFilter 是用戶端搜尋作業中所用相同的 LDAP 篩選。由於所有瀏覽索引項目皆位於相同位置,因此您應使用描述性 cn 值命名瀏覽索引。

    每個 vlvSearch 項目至少必須有一個 vlvIndex 項目。vlvSort 屬性是定義要排序的屬性與排序順序之屬性名稱的清單。屬性名稱之前的破折號 (-) 表示反向順序。您可以經由定義數個 vlvIndex 項目,定義多個索引以供搜尋。您可以為之前的範例增加下列項目:


    $ ldapmodify -a -h host -p port
     -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=Sort sn givenname uid, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort sn givenname uid
    vlvSort: sn givenname uid
    ^D
  3. 若要修改瀏覽索引配置,請編輯對應的 vlvSearch 項目或對應的 vlvIndex 項目。

  4. 若要移除瀏覽索引而使得伺服器不再保留該瀏覽索引,請移除個別 vlvIndex 項目。

    或者,如果僅存在一個 vlvIndex 項目,則同時移除 vlvSearch 項目與 vlvIndex 項目。

Procedure重新產生瀏覽索引

    建立瀏覽索引項目之後,請產生指定屬性的新瀏覽索引。


    $ dsadm reindex -l -t attr-index instance-path suffix-DN
    

    該指令會掃描目錄內容,並建立瀏覽索引的資料庫檔案。

    下列範例會產生上一節定義的瀏覽索引:


    $ dsadm reindex -l -b database-name -t Browsing /local/ds \
     ou=People,dc=example,dc=com

    如需 dsadm reindex 指令的更多資訊,請參閱 dsadm(1M) 線上手冊。