10

我们有一个以前在 PHP 5.4 下运行的 laravel 4.1 应用程序,但是自从升级到 5.6.13(今天升级到 5.6.14)后,我注意到查询有时开始返回 0 FOUND_ROWS()。在我们的一些查询中,它似乎是断断续续的,但在其他查询中,它更像是一个永久性问题。

受影响最大的集合是带有子查询的集合。

我们正在使用 PDO(我们没有使用 laravel 模型,只是直接与其 PDO 对象交互)。MySQL 在这个时间范围内也没有被修改。

尝试了各种方法 - 一个建议是将跟踪模式设置为 0,但这并没有帮助。我尝试设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY为 false,但是当您尝试选择时会导致 PDO 错误FOUND_ROWS()(现在无法获得确切的消息)。

没有回滚到 5.4(请上帝不),我完全被卡住了......

直接在 MySQL 中运行这些查询,然后运行FOUND_ROWS() 总是返回正确的结果。

4

4 回答 4

5

新遗物有问题

New Relic Application 有一些问题。NewRelic 应用程序监控守护进程或扩展正在干扰结果FOUND_ROWS()

当前的解决方法是 =>

newrelic.transaction_tracer.explain_enabled = false

如何使用 FOUND_ROWS

目前尚不清楚您的 sql PDO 查询是什么。仍在尝试我使用FOUND_ROWS()PDO 的方式。检查您是否使用相同的方式,或者请提供您正在尝试的一些查询。

$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();  
于 2015-12-07T12:28:45.440 回答
0

好吧,事实证明这是由于 New Relic PHP 插件。禁用此功能会立即解决所有FOUND_ROWS()返回零的查询的问题。

于 2015-12-09T14:30:26.043 回答
0

这已在最近通知 New Relic,因此现在已向开发人员提交了一个问题。

您可以在 newrelic.ini 配置中禁用 explain_plans,这将允许您解决您的问题并保留来自 New Relic 的 APM 报告,而无需完全删除它,那么您只会在慢查询报告页面上丢失解释计划,否则您应该有所有 New Relic 功能,直到我们发布包含修复的代理。

如果您遇到一个您认为需要完全卸载 New Relic 的问题,如果您是 New Relic 的客户,或者正在试用或正在讨论中,请通过 support.newrelic.com 与我们联系,因为我们将积极监控和参与我们的公共论坛,并根据需要提请我们的开发人员注意。

感谢此线程中的所有好信息,我将全部反馈以帮助找到根本原因并解决此问题。

于 2016-04-26T13:50:15.807 回答
0

只是让你知道。我遇到了同样的问题,我可以确认该问题已在PHP 代理 6.6.0.169(New Relic)中/之后得到修复。我目前正在使用PHP Agent 6.7.0.174 ,它在FOUND_ROWS()问题方面工作得很好。

干杯!

于 2016-11-03T13:31:24.530 回答