我有一個cakephp應用程序,2.4,並且我遇到了Paginator組件的問題。首先,它不是數據庫,它絕對是解析查詢結果的執行過程。我安裝了DebugKit,可以看到我的分頁數據的mysql查詢需要整整2毫秒。該表擁有250萬條消息記錄和50萬個用戶。顯然,正確的索引是到位的。但是,控制器操作需要6167.82毫秒。所以,這裏是我的控制器行動:cakephp paginator極慢
$this->Paginator->settings = array(
'Message' => array(
'fields' => array(
'Recipient.username',
'Recipient.profile_photo',
'Recipient.id',
'Message.*'
),
'joins' => array(array(
'table' => 'users',
'alias' => 'Recipient',
'type' => 'LEFT',
'conditions' => array(
'Recipient.id = `Message`.`recipient_id`'
)
)),
'conditions' => array(
'Message.sender_id' => $this->Auth->user('id'),
'Message.deleted_by_sender' => '0'
),
'limit' => 10,
'order' => 'Message.id DESC',
'recursive' => -1
)
);
$sents = $this->Paginator->paginate('Message');
$this->set('sents', $sents);
$this->view = 'index';
我已經谷歌這個和搜索堆棧溢出。大部分的迴應是針對糟糕的mysql優化,這不是我的情況。另一半的答覆表明可以容忍。所以,我嘗試了遏制。使用contains實際上比較慢,因爲它試圖從用戶的字段中獲取更多的數據,而不僅僅是用戶名,照片和id。然後當蛋糕從查詢結果中構建數組時,由於我假設的額外用戶數據,它使用可容納的元素執行速度將近500毫秒。
我現在要深入研究蛋糕Paginator組件,並瞭解爲什麼它需要這麼長時間來構建響應。我希望有人能夠擊敗我,並且有一個很好的解決方案來幫助加快速度。
我的網絡服務器運行ubuntu 12.04與3gb內存,apache和mod_php與apc安裝和模型和核心緩存工作。數據庫位於單獨的服務器上。我也有一個redis服務器,它保存其他用戶數據和蛋糕會話數據。這裏有足夠的能力來解析包含大約十幾行的mysql查詢中的10條記錄。
編輯:ANSWER
作爲最早提出由伊利耶·潘迪亞還有別的東西發生,如回調,這是減緩分頁。這實際上與分頁組件無關。收件人模型具有在第三方服務的setup回調中加載sdk的行爲。該服務需要幾秒鐘才能做出響應。加載查詢中的linkedModel以過濾結果時發生這種情況。希望其他人尋找蛋糕可能表現不佳的原因也會考慮應用程序和插件中模型的回調。
這種關係只是消息屬於收件人還是有更多? – arilia
消息屬於發件人,收件人和MassMessage。我今天早上已經調試了大約一個小時,並且已經弄清楚了這麼久了。儘管如此,我還沒有弄清楚爲什麼。只要我知道更多,我會盡快更新。 – mneil
我面臨同樣的問題。我認爲這是因爲Paginator組件需要總計數並首先使用WHERE 1 = 1進行查詢,然後按照極限「 – zeflex