cakephp paginator extremely slow



我有一个CakePHP应用程序2.4,我对Paginator组件有问题。首先,这不是数据库,它绝对是解析查询结果的执行。我已经安装了Debugkit,并且可以看到我对分页数据的MySQL查询需要整个2毫秒。该表有250万条消息记录和50万用户。显然,适当的索引已经到位。但是,控制器动作采用6167.82毫秒。所以,这是我的控制器动作:

$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';

我已经在Google上搜索并搜索了堆栈溢出。大多数响应是针对差的MySQL优化,这不是我的情况。另一半响应表明可以包含。所以,我尝试了可容纳的。实际上,使用限制实际上较慢,因为它试图从用户字段中获取更多数据,而不是用户名,照片和ID。然后,当Cake从查询结果中构建数组时,由于我假设的额外用户数据,它可以使用可容纳近500毫秒。

我现在要挖掘蛋糕司机的组件,看看为什么要花这么长时间才能建立响应。我希望有人击败我,并有一个很好的解决方案来帮助加快这一点。

我的Web服务器正在使用安装APC的3GB RAM,APACHE和MOD_PHP运行Ubuntu 12.04,并为模型和Core Cache工作。数据库在单独的服务器上。我还拥有一个redis服务器,持续存在其他用户数据和蛋糕会话数据。这里有足够的力量从包含大约十列行的MySQL查询中解析10个记录。

编辑:答案

正如伊利·潘迪亚(Ilie Pandia)首先建议的那样,还有其他事情,例如回调,这正在减慢分页。这实际上与分页分量无关。收件人模型的行为为第三方服务的设置回调中加载了SDK。该服务需要几秒钟的回应。当加载查询中的LinkedModel以过滤结果时,就会发生这种情况。希望其他任何正在寻找蛋糕表现不佳的原因的人也会查看应用程序和插件中的型号的回调。

我认为这根本没有慢速运行。

因此,这表明安装了一些回调(在模型或控制器中)进行了其他处理并夸大了操作时间。

假设控制器中没有别的,只有您的写作。

您实际上可以测量拨打电话本身的时间,我认为您会发现它非常快。因此,瓶颈在代码中的其他地方。

ps:您也可以尝试禁用debugkit一段时间。对于某些特定情况,内省可能需要很长时间。

为您的应用程序安装debugkit。

检查哪个查询需要太多时间。从那里,您应该能够跟踪瓶颈。

最新更新