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

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

那么如何使用它呢?

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

1.向$di里注册profiler服务

$di->set('profiler', function(){
  return new \Phalcon\Db\Profiler();
}, true);

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

//从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 \Phalcon\Db\Adapter\Pdo\Mysql(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(), "\n";
  echo "开始时间: ", $profile->getInitialTime(), "\n";
  echo "结束时间: ", $profile->getFinalTime(), "\n";
  echo "消耗时间: ", $profile->getTotalElapsedSeconds(), "\n";
}

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

phalcon:跟踪sql语句相关推荐

  1. ef mysql跟踪sql语句_EF Core 日志跟踪sql语句

    EF Core 日志跟踪sql语句 1.新增自定义ILoggerProvider实现类 public class EFLoggerProvider : ILoggerProvider { public ...

  2. oracle 10046事件查看,使用oracle的10046事件跟踪SQL语句

    使用oracle的10046事件跟踪SQL语句 我们在分析应用程序性能问题的时候,更多地需要关注其中SQL语句 的执行情况,因为通常应用程序的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的 ...

  3. jboss7 关闭日志打印_使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句

    jboss7 关闭日志打印 使用ORM从您的特定数据库中提取数据并让其创建和发布您必须亲自编写的所有SQL语句似乎很方便. 这就是使ORM解决方案受欢迎的原因. 但是它也有一个缺点:由于ORM为您做了 ...

  4. 使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句

    使用ORM从您的特定数据库中提取数据,并让它创建和发布您必须亲自编写的所有SQL语句似乎很方便. 这就是使ORM解决方案受欢迎的原因. 但是它也有一个缺点:由于ORM为您做了很多工作,因此您在某种程度 ...

  5. mongodb 跟踪SQL语句及慢查询收集

    有个需求:跟踪mongodb的SQL语句及慢查询收集 第一步:通过mongodb自带函数可以查看在一段时间内DML语句的运行次数. 在bin目录下面运行  ./mongostat -port 端口号  ...

  6. oracle 10046跟踪自己,使用oracle的10046事件跟踪SQL语句

    我们在分析应用程序性能问题的时候,更多地需要关注其中SQL语句的执行情况,因为通常应用程序的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的重点.利用Oracle的10046事件,可以跟踪应 ...

  7. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法

    在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的SQL语句,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出 ...

  8. oracle 执行带参数的sql语句_当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现?...

    当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现? 描述详细一点就是:在要执行的SQL语句中所用到(: parameter)这种参数的个数,因具体条件不同,而 ...

  9. oracle笔记一(sql语句方面)

    oracle笔记一(sql语句方面) 一.sql语句 --================================================ 1.增加主键    alter table ...

最新文章

  1. SBB-2016-石油污染土壤微生物群落构建与生物多样性研究
  2. C++编写Config类读取配置文件
  3. 青龙面板-傻妞sillyGirl xdd机器人频繁掉线解决方法
  4. debian安装python3_debian上安装python3.6
  5. 四、spring boot 1.5.4 日志管理
  6. Kubernetes 入门(4)集群配置
  7. 2019杭电多校第九场 Rikka with Cake (hdu6681)
  8. C# 类(11) 密封类.
  9. BZOJ1090[SCOI2003] 字符串折叠
  10. 博客前端模板源码(力荐)
  11. 「原创」如何快速获取银行、联行号的数据?
  12. 让Fireball CodeEditor控件禁止中文双倍输入
  13. linux内核纳秒精度时间,在内核获取时间 精度纳秒级
  14. Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建
  15. 不可重复读和幻读的区别_论文重复率要多少算是合格的?
  16. 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试
  17. Java人力资源管理系统源码 HR源码
  18. 计算机类普刊有哪些,基础数学类的容易发表的普刊有哪些
  19. html垂直状态的对齐方式,垂直对齐方式居中
  20. redis的保存key,value出现\xac\xed\x00\x05t\x00\x0b的解决

热门文章

  1. 使用脚本安装elasticsearch7.3的记录
  2. 正则表达式:(mysql)REGEXP
  3. SpringIOCAOP
  4. mysql组合索引的命中情况
  5. 阿里云Ubuntu安装图形界面与中文语言包
  6. 安装Matlab出现Error 1935错误解决方法
  7. HackerRank Super Six Substrings dp
  8. 字符流与字节流转换输出
  9. oracle11G在linux环境下的卸载操作
  10. 【转】Linux单人维护密码