Sqlserver Datasource を使用した CakePHP 2.7.1 のアプリに問題があります。
任意のテーブルで操作を行うfind
と、応答時間が非常に遅くなります (1 分以上)。
XDebug + QCachegrind を使用して調査を行ったところSqlserver->listSources()
、データベース上の 1385 個のテーブルがすべてリストされていることが問題であることがわかりました。
これは短縮されたコードです (コア ファイル lib\Cake\Model\Datasource\Database\Sqlserver.php:172)
public function listSources($data = null) {
$result = $this->_execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES");
while ($line = $result->fetch(PDO::FETCH_NUM)) {
$tables[] = $line[0];
}
return $tables;
}
ブロックmicrotime
の周りに簡単なベンチマークを置いたところ、ほぼすべての処理時間がこれら 3 行に費やされました。while
これをスピードアップする方法はありますか?
プロセスを実行しないように CakePHP に指示する方法はありlistSources
ますか?