zoukankan      html  css  js  c++  java
  • phalcon:跟踪sql语句

    phalcon没有像yii那些框架一样内置trace工具,所以我们只能自己搞。

    在phalcon里有一个PhalconDbProfiler 类,这个类可以用来记录sql语句并计算消耗的时间。

    那么如何使用它呢?

    手册里其实已经提供了方法,总结如下:

    1.向$di里注册profiler服务

    $di->set('profiler', function(){
      return new PhalconDbProfiler();
    }, true);


    2.注册db服务时,顺便注册下事件
    $di->set('db', function() use ($di) {
    //新建一个事件管理器
    $eventsManager = new PhalconEventsManager();

    //从di中获取共享的profiler实例
    $profiler = $di->getProfiler();

    //监听所有的db事件
    $eventsManager->attach('db', function($event, $connection) use ($profiler) {
      //一条语句查询之前事件,profiler开始记录sql语句
      if ($event->getType() == 'beforeQuery') {
        $profiler->startProfile($connection->getSQLStatement());
      }
      //一条语句查询结束,结束本次记录,记录结果会保存在profiler对象中
      if ($event->getType() == 'afterQuery') {
        $profiler->stopProfile();
      }
    });

    $connection = new PhalconDbAdapterPdoMysql(array(
      "host" => "localhost",
      "username" => "root",
      "password" => "secret",
      "dbname" => "invo"
    ));

    //将事件管理器绑定到db实例中
    $connection->setEventsManager($eventsManager);

    return $connection;
    });


    3.程序中调出sql记录
    //执行一些查询
    Robots::find();
    Robots::find(array("order" => "name"));
    Robots::find(array("limit" => 30));

    //获取所有的prifler记录结果,这是一个数组,每条记录对应一个sql语句
    $profiles = $this->di->get('profiler')->getProfiles();
    //遍历输出
    foreach ($profiles as $profile) {
      echo "SQL语句: ", $profile->getSQLStatement(), " ";
      echo "开始时间: ", $profile->getInitialTime(), " ";
      echo "结束时间: ", $profile->getFinalTime(), " ";
      echo "消耗时间: ", $profile->getTotalElapsedSeconds(), " ";
    }

    //直接获取最后一条sql语句
    echo $this->di->get('profiler')->getLastProfile()->getSQLStatement();

  • 相关阅读:
    python 二进制加法
    python性能测试值timeit的使用示例
    Java和python中的面向对象
    python itern机制的
    Python选择指定文件夹的文件然后复制出其中几个文件到新的文件夹
    软件开发中什么是CI/CD
    python 列表切片之负数的含义代码示例
    python 找出数组重复的元素
    python位运算版的算术四则运算
    [转载]逐步建设企业DevOps能力
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8295262.html
Copyright © 2011-2022 走看看