程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 性能損傷SQL Server 2008的全文檢索

性能損傷SQL Server 2008的全文檢索

編輯:關於SqlServer


  首先,一些不熟悉全文檢索背景的人。一般來說,計算機科學術語全文檢索只是意味著你在文檔中搜索所有的文本。對付全文檢索的另一種選擇是查找元數據,例如標題和關鍵字。

  對SQL Server而言,全文檢索提供了存儲在關系數據庫或者是文件系統上的文本的高級搜索能力。搜索並不局限於字符串,應用程序所能理解的例如詞干分析。這使得搜索“swim”,也返回“swims”, “swimming”,和“swam”。 它也可以支持權重搜索,即某些詞比其他的詞更重要,並可以搜索兩個彼此相鄰的詞語。根據搜索條件的結果可以進行一個排名。

  之前版本的全文檢索是一個外部服務,和SQL Server並排運行的服務。這樣設計,參與索引的表和列的數據不得不從SQL Server運送到全文檢索服務。全文檢索編目不能與其他的數據庫一起備份,而且兩個服務不能輕松的共享內存和CPU資源。

  為了處理這些和其他的問題,SQL Server 2008把全文檢索移到數據庫中。現在SQL Server自身可以動態管理服務器資源,為服務自動管理改變內存和CPU資源配額。不幸的是,開發人員遇到了這種設計的一些意外結果。

  他們依然會碰到的特定問題是事務。在一個事務性的數據庫中,SQL Server要時刻遵守ACID的規則。這意味著在搜索的時候行、頁或甚至整個表都被鎖定。通常情況下不會太壞,但是Brent Ozar解釋說,錯誤的搜索會讓事情變得復雜。

  如果你在修正版(Revisions)上進行全文檢索並且包含一些常見的關鍵字,像SQL滯留,則需要匹配數以萬計的記錄。當我們查看一下查詢計劃的時候,我們看到有50-100k的讀操作。在表裡面做這樣的事情,也會獲得沉重的表插入,事務性的災難。

  Jeff Attwodd繼續說道,

  我們的stackoverflow.com很大程度上依賴於全文檢索, 在SQL Server 2005下面工作得很好。不幸的是在SQL Server 2008下的情況則不同。

  Brent正在和SQL Server團隊跟進這件事,他們用我們的數據庫拷貝進行測試。[…] 根據目前為止出奇的差的SQL Server 2008全文檢索和明顯的體系結構更改,我對SQL團隊能夠為我們做些什麼感到悲觀。

  他們所指的網站StackOverflow將計劃不再長期使用全文索引。他們已經規劃出遷移到競爭的搜索引擎Lucene.Net上。但是那些計劃繼續使用全文檢索的人,在 SQL Server 2005升級到2008以後需要在這方面進行徹底的測試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved