我们有一个laravel 4.1应用程序曾经在PHP 5.4下运行,但是自从升级到5.6.13(今天到5.6.14)后,我注意到查询已经开始有时为FOUND_ROWS()
返回0 。在我们的一些查询中,它似乎是间歇性的,但在其他问题上,它更像是一个永久性的问题。
受影响最大的集合是具有子查询的集合。
我们正在使用PDO(我们不使用laravel模型,只是直接与其PDO对象进行交互)。 MySQL在这个时间框架内也没有被修改过。
尝试了所有种类 - 一个建议是将跟踪模式设置为0,但这并没有帮助。我尝试将PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
设置为false,但是当您尝试选择FOUND_ROWS()
时,会导致PDO错误(现在无法获取确切的消息)。
没有回到5.4(请上帝没有),我完全陷入了困境......
直接在MySQL中运行这些查询,然后运行FOUND_ROWS()
始终会返回正确的结果。
答案 0 :(得分:5)
New Relic Application有一些问题。 NewRelic应用程序监控守护程序或扩展程序正在干扰FOUND_ROWS()
目前的解决方法是=>
newrelic.transaction_tracer.explain_enabled = false
目前还不清楚你的sql PDO查询是什么。仍在尝试使用PDO使用FOUND_ROWS()
。检查您是否使用相同的方式或请提供您正在尝试的一些查询。
$db = new PDO(DSN...);
$db->setAttribute(array(PDO::MYSQL_USE_BUFFERED_QUERY=>FALSE));
$rs = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT 5,15');
$rs1 = $db->query('SELECT FOUND_ROWS()');
$rowCount = (int) $rs1->fetchColumn();
答案 1 :(得分:0)
嗯,事实证明这是由于New Relic PHP插件。禁用此功能会立即修复所有返回零的FOUND_ROWS()
个查询的问题。
答案 2 :(得分:0)
最近刚刚向New Relic通知了这一点,现在它已成为向开发人员提交的问题。
你可以在newrelic.ini配置中禁用explain_plans,这样你就可以解决问题并保持New Relic的APM报告而不必完全删除它,那么你只会在慢速查询报告页面上丢失解释计划,你否则应该具有所有New Relic功能,直到我们发布包含修复的代理。
如果您遇到一个问题,您认为需要完全卸载New Relic,请通过support.newrelic.com与我们联系,如果您是New Relic客户或者在pro试用或者discussion.newrelic.com上我们将积极监督和参与我们的公共论坛,并根据需要将其提请我们的开发人员注意。
感谢这个主题中的所有好消息,我将全力以赴帮助找到根本原因并解决这个问题。
答案 3 :(得分:0)
只是为了让你知道。我遇到了同样的问题,我可以确认问题是在 PHP Agent 6.6.0.169 (New Relic)之后修复的。我目前正在使用 PHP Agent 6.7.0.174 ,并且在 FOUND_ROWS()问题方面工作得很好。
干杯!