2014-09-25 24 views
0

我有一個相當複雜的搜索系統的間歇性問題。每隔一段時間我寫一個PHP守護進程,它會向我們的數據庫添加新的內容,而獅身人面像的RT索引會引發一個神祕的異常。Sphinxsearch定期拋出錯誤,通過zf2數據庫適配器搜索rt索引

消息簡直是「聲明無法執行」。

,導致它(修剪)代碼:

<?php 
$itemIds = Array(79555); 
$index = 'doc'; 
$adapter = $this->dbAdapter; 

$qi = function($name) use ($adapter) { 
    return $adapter->platform->quoteIdentifier($name); 
}; 

$checkSql = ' 
    SELECT * FROM 
     '. $qi($index) . ' 
    WHERE 
     id = ' . (int)$itemIds[0]; 

$checkStatement = $this->dbAdapter->query($checkSql); 
$result = $checkStatement->execute(); 

顯得異常不會對任何特定觸發發生,但是從它的第一個拋給我重新啓動守護進程的時間的時間仍然存在。我已經輸出了由Zend \ DB \ Adapter生成的sql和bar id不同,在查詢失敗後,似乎沒有區別。

在sphinx日誌中沒有關聯的錯誤(我可以看到),如果我加載neutron/sphinxsearch-api/sphinxapi.php並運行GetLastError(),它將返回一個空白字符串。

我的想法是,這是一個連接錯誤 - 或者可能是sphinx配置的錯誤配置使其超時,但我不確定。

+1

這聽起來像你使用持久連接。在連接可能被刪除的時候,但是你的代碼沒有考慮到這一點,並且仍然試圖使用已經關閉的連接。也許嘗試檢查錯誤,如果得到它,重新連接。 – barryhunter 2014-09-25 10:51:17

+0

感謝您的提示。我會研究它。 – thelastshadow 2014-09-25 12:07:22

+0

@barryhunter你應該添加你的評論作爲答案 - 它解決了這個問題。 – thelastshadow 2014-09-29 10:18:46

回答

1

這聽起來像你使用持久連接。有時連接可能會被丟棄,但是你的代碼並沒有考慮到這一點,並且仍然嘗試使用已經關閉的連接。也許嘗試檢查錯誤,如果得到它,重新連接。

簡而言之,使代碼對於偶爾關閉的連接具有彈性。