Share via


效能微調與最佳化 (全文檢索搜尋)

更新: 2006 年 4 月 14 日

全文檢索索引和全文檢索查詢的效能會受硬體資源的影響,例如記憶體、磁碟速度和 CPU 速度。

全文檢索索引效能

全文檢索索引效能降低的主要原因就是硬體資源的限制:

  • 如果 MSFTESQL 服務和 SQL Server 的 CPU 使用率接近百分之百,CPU 就是瓶頸所在。
  • 如果平均磁碟等候佇列長度超過磁碟讀寫頭數目的兩倍,磁碟就有瓶頸。主要的解決方式是建立和 SQL Server 資料庫檔案和記錄分開的全文檢索目錄。請將記錄、資料庫檔案和全文檢索目錄放在不同的磁碟上。購買較快速的磁碟以及使用 RAID 也有助於改善索引效能。
  • 如果實體記憶體 (3 GB 的限制) 短缺且編目記錄檔中出現服務暫停訊息,記憶體就是瓶頸所在。如需如何解決這個問題的詳細資訊,請參閱<暫停的 Microsoft SQL Server 全文檢索引擎 (MSFTESQL) 服務>。MSFTESQL 服務不支援 AWE。加入大於 4 GB 的記憶體只對 SQL Server 有幫助。

如果在系統上沒有發現任何硬體瓶頸,您可以微調系統,最大化硬體容量。沒有硬體瓶頸時,Microsoft SQL Server 2005 中「全文檢索搜尋」的索引效能大多取決於下列條件:

  • SQL Server 建立全文檢索批次所花的時間。
  • MSFTESQL 服務可以消化所建立之批次的速度。

SQL Server 和 MSFTESQL 服務之間的互動必須進行微調,以達到最佳效能。如果 SQL Server 產生的批次多於 MSFTESQL 服務所能消化的批次,服務就會暫停並產生編目記錄檔訊息,表示此暫停狀態。如需如何解決這個問題的詳細資訊,請參閱<暫停的 Microsoft SQL Server 全文檢索引擎 (MSFTESQL) 服務>。

在另一方面,如果 SQL Server 沒有產生足夠的全文檢索批次讓 MSFTESQL 服務保持忙碌,服務就會閒置。這個狀態並不理想,事實上這就是索引執行速度緩慢的最常見原因。若要確定 MSFTESQL 服務保持最佳狀態,您必須追蹤和微調下列計數器:

  • Batches in progress 計數器:Microsoft 全文檢索引擎篩選背景程式 (MSFTELFD)
    此計數器應等於系統中的 CPU 數目或為其兩倍低 CPU 使用量的值為 0、1 或 2 表示 SQL Server 的效能不佳。例如,如果您的電腦規格為 4-way 的話,則此數應介於 4 和 8 之間。
  • Batches in ready queue:MSFTESQL 服務

該值應該接近編目範圍計數的 10 倍。若要決定要使用多少範圍建立資料表的索引,請從 sys.dm_fts_population_ranges 執行查詢。

如果計數器值很低,您可使用下列方式改善:

  • 確定資料表具有多重編目範圍。若要驗證,請查詢 sys.dm_fts_population_ranges。理想上,編目範圍計數應該為 CPU 數目的兩倍。編目範圍由資料表中的資料列數、CPU 數目和 max full-text crawl range 組態選項限制。您必須重新啟動編目作業,該選項才會生效。
    ms142560.note(zh-tw,SQL.90).gif附註:
    這僅適用於完整的編目。
  • 請確定基底資料表具有叢集索引。對叢集索引的第一個資料行使用整數資料類型。避免在叢集索引的第一個資料行使用 GUID。叢集索引的多重範圍編目可產生最高的編目速度。
  • 請使用 UPDATE STATISTICS 陳述式更新基底資料表的統計資料。更重要的是,請更新叢集索引上的統計資料或完整編目的全文索引索引鍵。這有助於多重範圍編目在資料表上產生良好的資料分割。
  • 如果您想要改善累加母體擴展的效能,請在時間戳記資料行上建立次要索引。
ms142560.note(zh-tw,SQL.90).gif附註:
和完整的編目不同,累加、手動和自動變更追蹤母體擴展並非設計來最大化硬體資源以達到更快的速度。因此,這些微調建議可能無法增強全文檢索索引的效能。

增加全文檢索查詢效能的建議事項

以下是有助於增加全文檢索查詢效能的建議事項清單:

  • 使用 ALTER INDEX REORGANIZE 來重組基底資料表的索引。
  • 使用 ALTER FULLTEXT CATALOG REORGANIZE 來重新組織全文檢索目錄。在進行效能測試之前,請確定完成此動作,因為執行此陳述式會造成該目錄中之全文檢索的主要合併。
  • 請將您的全文檢索索引鍵資料行的選擇限制為小資料行。雖然支援 900 位元組的資料行,但我們不建議您建立使用此種大小之索引鍵資料行的全文檢索索引。
  • 將多個 CONTAINS 述詞結合為一個 CONTAINS 述詞。在 SQL Server 中,您可以在 CONTAINS 查詢中指定資料行清單。
  • 如果您只需要全文檢索索引鍵或等級資訊,請分別使用 CONTAINSTABLEFREETEXTTABLE,而不要使用 CONTAINS 或 FREETEXT。
  • 若要限制結果並增加效能,請使用 FREETEXTTABLE 和 CONTAINSTABLE 語法的 TOP_N_BY_RANK 選項。如果您不想檢視找到的所有項目,請使用此選項。
  • 請檢查全文檢索查詢計劃,確定已選擇適當的聯結計劃。必要的話,請使用聯結提示或查詢提示。如果在全文檢索查詢中使用某個參數,該參數的首次值就會決定查詢計劃。您可使用 OPTIMIZE FOR 查詢提示,強制查詢使用您想要的值進行編譯。這有助於達到決定性的查詢計劃和更佳的效能。

請參閱

概念

管理全文檢索搜尋

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 大幅修改效能微調建議。