Мы сталкиваемся с очень длительным временем загрузки для просмотра списка записей на многих страницах. Чтобы понять, что является причиной этого, мы хотим проанализировать выполненные SQL-запросы. (В конечном счете, нам может потребоваться админ-панель для бэкенда).
Теоретически, Doctrine DBAL поддерживает перехват SQLLogger, но мы не знаем, где будет замена / внедрение класса для этого.
Мы нашли возможность исправления файла typo3/cms/typo3/sysext/core/Classes/Database/Connection.php
и просто создали новый метод, перезаписывающий родительский файл:
/**
* Debug all the things
*
* If the query is parametrized, a prepared statement is used.
* If an SQLLogger is configured, the execution is logged.
*
* @param string $query The SQL query to execute.
* @param array $params The parameters to bind to the query, if any.
* @param array $types The types the previous parameters are in.
* @param \Doctrine\DBAL\Cache\QueryCacheProfile|null $qcp The query cache profile, optional.
*
* @return \Doctrine\DBAL\Driver\Statement The executed statement.
*
* @throws \Doctrine\DBAL\DBALException
*/
public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null) {
$fp = fopen('/var/www/html/logs/mysql.log', 'a'); fwrite($fp, '[QUERY-DOCTRINE] ' . $query . "\n"); fclose($fp);
return parent::executeQuery($query, $params, $types, $qcp);
}
Но этот подход на самом деле не переносим и требует исправления созданных композитором файлов поставщиков. Кроме того, ему не хватает правильной необработанной регистрации и способностей сложных SQLLoggers. Так что где-нибудь мы сможем вызвать методы класса Doctrine Configuration
?