当执行一个简单的DB查询时,CakePHP的响应非常慢


very slow response from CakePHP when performing a simple DB query

我是CakePHP框架的新手,正在尝试建立一个"Hello World"项目。在使用它时,当执行一个简单的DB查询时,CakePHP的响应非常慢。

以下是我所做的步骤:
    下载CakePHP框架(2.3.0 RC1)并安装
  1. 创建一个名为"Tests"的空表的"Test"数据库。
  2. 按如下方式编辑默认的AppController.php文件:

    class AppController extends Controller {
        var $uses = array('Test');
        function say_hello() {
        $this->Test->query("select * from test where id=0");
        echo "hello";
        }
    }
    
  3. 之后,我访问了链接"http://localhost/app/say_hello",响应时间超过15秒。

如果我将查询语句注释掉,如下所示:

class AppController extends Controller {
    var $uses = array('Test');
    function say_hello() {
        //$this->Test->query("select * from test where id=0");
        echo "hello";
    }
}

然后,只需要大约60ms的响应。

这对我来说似乎不对,因为在一个空表上执行一个简单的查询不应该花费~940ms。我试过调试DebugKit,它显示ControllerAction(在这种情况下,say_hello动作非常简单)花费了超过15秒的处理时间。还请注意,缓慢问题不是由DB引起的,因为DebugKit显示,在执行say_hello动作时只有一个查询,并且该查询几乎需要0ms才能完成。

我不确定是什么原因导致这么慢。有经验的CakePHP成员能告诉我在这种情况下什么是错的吗?我还应该做些什么来排除故障并解决问题?

谢谢。

在调试模式下,CakePHP将在短时间内刷新数据库绑定、对象缓存和模式,描述映射到定义模型的表。

在测试CakePHP应用程序性能之前,确保将调试级别更改为0。

请检查您的web服务器和数据库服务器是否在同一台物理机器上。
如果它们在同一台物理机器上,所花费的时间应该更少,通常是几百毫秒,如果它们不在同一台物理机器上,那么网络延迟就会产生影响。你可以深入研究CakePHP框架的源代码,它使用PDO连接数据库并调用PDO的一些函数,由于网络延迟时间,每次都会花费相当长的时间。所以这个解决方案可能是不合适的,你应该写一个特定的API,然后你的PHP代码调用API而不是直接查询数据库。