YII:你如何记录慢速SQL查询?

时间:2013-04-04 15:12:41

标签: sql yii

我只想记录速度慢的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的内容?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

dbprfiler

答案 2 :(得分: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);
  }

}