我正在使用Symfony 3.4
进行基于Doctrine 2.6
的项目。
是否可以自动监视所有Doctrine查询并记录执行时间超过某个阈值的查询?
我在开发版本中使用了blackfire.io
和其他工具来查找和修复潜在的性能问题。但是,即使是最好的测试也总是与在生产中的真实数据上运行相同的代码有所不同。
因此,我想知道哪些查询在生产环境中运行时花费的时间最多。
您可以使用doctrine.dbal.logging
配置选项记录所有的Doctrine查询(请参阅https://symfony.com/doc/current/reference/configuration/doctrine.html。
但是那不会给您每个查询花费的时间。为此,您必须创建自己的记录器,类似于Symfony用于调试工具栏的记录器(请参见https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php)。
另一种可能的解决方案是使用数据库引擎提供的工具将慢速查询自动记录在专用文件中,以便以后进行分析。