2010-06-22 41 views
1

每隔一段時間,我們都會在MySQL中得到一段特別長的全文查詢。查詢將運行很長時間,目前我看到一個運行時間爲50,000秒(仍然會)。對查詢使用Kill或Kill Query似乎什麼也不做。另外,客戶端的命令Timeout是30秒,所以客戶端已經失敗並退出了,但服務器只是繼續運行查詢,佔用了相當多的資源。在過去,我們必須重新啓動MySQL服務才能讓這些查詢停止運行。有沒有其他的方法來阻止這些查詢。我們正在採取措施確保查詢不首先運行,但它們仍然每隔一段時間運行一次,這是一個主要的難題。主要是因爲在查詢運行時,我們無法在表上執行更新。MySQL全文查詢鎖定表

長時間運行的查詢的一個例子是沿着線的東西:

SELECT id,Title From Articles WHERE MATCH(ArticleText) AGAINST('+Nintendo*HD*Wii*' IN BOOLEAN MODE) 

這個特別長的運行,因爲在搜索字符串中間的*的,以及在的結束串。

+0

也許顯示這些長時間運行的查詢之一的示例? – pjanaway 2010-06-22 16:36:20

回答

0

你使用的是什麼版本的MySQL?您可能可以通過升級來解決這個問題。

此外,該示例查詢是真實的嗎?我期望搜索字符串是'+ Nintendo * + HD * + Wii *'而不是'+ Nintendo HD Wii *。

我從未在5.0版本中遇到這種類型的問題,但在早期版本的MySQL 5.1中,我發現了幾個非常類似的問題,這些問題涉及到搜索字符串中的某些內容,從而導致全文查詢掛起並且無法運行。

這裏有一個我在42年1月5日所看到的,這是固定在45年5月1日: http://bugs.mysql.com/bug.php?id=50556 其標記爲愚弄的人: http://bugs.mysql.com/bug.php?id=50351

我報道的全文查詢另一個問題掛當搜索字符串包含冒號。這個問題在5.1.31中存在,並且在5.1.37中被固定。

+0

這些都是真實的,除了我用假表和列名替換假冒的搜索詞,但真正的搜索詞是相同的樣式。我們已經消除了用戶在文字中間輸入通配符的能力,但它似乎是一個反覆出現的事情。我們也遇到過與搜索「。」的用戶相似的問題。在詞的中間。似乎是許多角色持續存在的問題。也許最好的選擇是升級,所有的問題都會消失。 – Kibbee 2010-06-23 01:04:56

+0

您使用的是哪個版本的MySQL? – 2010-06-23 14:34:10