1

我只想记录速度较慢的 SQL 查询,其中慢速是由任何比我指定的值更长的查询决定的。这可能吗?以及如何启用它?

DBProfiler 工作得很好,但它似乎总是输出到屏幕而不是文件:

array( //db profiler
   'class'=>'ext.db_profiler.DbProfileLogRoute',
   'countLimit' => 1, // How many times the same query should be executed to be considered inefficient
   'slowQueryMin' => 0.1, // Minimum time for the query to be slow
),

如何插入 DBProfiler 或以其他方式插入,以便每次查询缓慢时都可以将内容写入 application.log?

4

3 回答 3

2

在 db 组件配置中的 config/main.php 中,将 enableParamLogging 和 enableProfiling 参数设置为 true 并确保:

'log'=>array(
        'class'=>'CLogRouter',
        'routes'=>array(
            array(
                'class'=>'CFileLogRoute',
                'levels'=>'error, warning',
            ),
            // uncomment the following to show log messages on web pages

            array(
                'class'=>'CWebLogRoute',
            ),

        ),
    ),

是这样的。有关更多信息CDbConnectionCLogRouter

于 2013-04-05T01:28:44.783 回答
1

尝试 dbprofiler 扩展。我会帮助你的...

dbprfiler

于 2013-04-05T01:31:30.337 回答
0

我最终编写了自己的日志记录功能:

private function slowQueryEvaluator($startTime, $endTime, $identifier) {

  $MAX_TIME = 0.1;

  $IP = Controller::getRealIpAddress();
  $userID = -1;
  if (isset(YII::app()->user->id)) {
    $userID = YII::app()->user->id;
  }
  $seconds = $endTime - $startTime;
  if ($seconds > $MAX_TIME ) {
    YII::log($IP.' - '.$userID.' - '.$seconds.' seconds - '.$identifier);
  }

}
于 2013-04-10T06:40:44.227 回答