3

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ますか?

4

2 に答える 2