CakePHP输出缓慢,但查询似乎达到了标准

时间:2011-05-10 17:23:45

标签: mysql sql cakephp benchmarking

我要说的大部分结果都是显而易见的,但我正在寻找核心中可能提供的任何其他配置选项或建议,或者我可以对脚本进行的其他修改:

  1. 我将CakePHP应用程序从开发服务器切换到生产服务器。

  2. 我正在测试的查询需要2倍的时间来处理新服务器(大约10-12秒)。对于此测试,我实际上是在计算屏幕结果加载时间。所以从第二个按下提交按钮到实际的视觉输出结果就完成了。

  3. CakePHP调试输出的查询是(完全相同的查询):

  4. - 开发:132个查询耗时5毫秒 - 制作:132个查询耗时53毫秒。

    很明显,查询的速度差别很大,但即使是较慢的结果也会在一秒钟之内!

    看起来减速是网络或处理器,但我在使用CakePHP的MySQL基准测试中没有足够的经验来知道这是一个控制器负载问题还是实际的MySQL问题。事实上,较慢的结果是53ms不会让我相信我的MySQL查询很慢,它似乎在实际输出中的某处发生减速..

    以下是完整MySQL查询调试转储的链接: http://notepub.com/#fb=&note=185197

    我尝试删除查询的各个部分,更改我的连接方法,并且我也使用可包含的输出结果。我将继续测试..感谢任何反馈或想法。

3 个答案:

答案 0 :(得分:0)

这个答案不仅仅是一个答案,但它可能对你有所帮助:

查看您的日志,实际上只有一个查询需要花时间,而且:

SELECT `Zip`.`id`, `Zip`.`title`, `PlansZip`.`id`, `PlansZip`.`plan_id`, `PlansZip`.`zip_id` FROM `zips` AS `Zip` JOIN `plans_zips` AS `PlansZip` ON (`PlansZip`.`plan_id` IN (253, 774, 137, 505, 114, 260, 501, 841, 268, 239, 497, 762, 768, 246, 123, 750, 756, 130, 886, 836, 839, 315, 331, 299) AND `PlansZip`.`zip_id` = `Zip`.`id`) ORDER BY `Zip`.`title` ASC

我认为它花费这么长时间的原因是你加入这两张桌子的方式。我想你会发现这样的事情要快得多:

SELECT `Zip`.`id`, `Zip`.`title`, `PlansZip`.`id`, `PlansZip`.`plan_id`, `PlansZip`.`zip_id` FROM `zips` AS `Zip` JOIN `plans_zips` AS `PlansZip` ON `PlansZip`.`zip_id` = `Zip`.`id`
WHERE `PlansZip`.`plan_id` IN (253, 774, 137, 505, 114, 260, 501, 841, 268, 239, 497, 762, 768, 246, 123, 750, 756, 130, 886, 836, 839, 315, 331, 299) ORDER BY `Zip`.`title` ASC

我在自己的数据库中进行了类似的查询,发现使用第二种方法可以减少运行查询所需的时间。

我提出的另一个问题是你的开发系统是否是生产系统的镜像。如果你的prod系统中有更多的记录,你可能会看到慢速查询无法扩展。返回与生产的记录数量之间的差异是什么?即使SQL不是问题,也可能因为必须传输大量数据甚至在屏幕上呈现它而滞后。

答案 1 :(得分:0)

我认为我遇到的部分问题是我的查询是完成了CakePHP风格,我正在研究如何翻译你所拥有的。

这是我原来的:

array(
        'joins'      => array(
            array(
                'table'      => 'plans_zips',
                'alias'      => 'PZips',
                'type'       => 'inner',
                'foreignKey' => false,
                'conditions' => array('Plan.id = PZips.plan_id')
            ),
            array(
                'table'      => 'zips',
                'alias'      => 'Zips',
                'type'       => 'inner',
                'foreignKey' => false,
                'conditions' => array('Zips.id = PZips.zip_id')
            ),   
        ),

答案 2 :(得分:0)

  1. 查询129检索10563行,自然会导致一些(网络?)流量达到如此多的行数
  2. 如果您想加快查询速度,可以尝试在以下字段中添加索引: PlansZip.plan_id PlansZip.zip_id
  3. 以user470714建议
  4. 重构您的查询