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
),

クエリが遅くなるたびに application.log に何かを書き込むことができるように、DBProfiler または別の方法でプラグインするにはどうすればよいですか?

4

3 に答える 3

2

db コンポーネント構成の config/main.php で、enableParamLogging および enableProfiling params を 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 に答える