MySQL / PDO FOUND_ROWS() 有时错误地返回 0
MySQL / PDO FOUND_ROWS() sometimes falsely returning 0
我们有一个 laravel 4.1 应用程序,它曾经在 PHP 5.4 下 运行,但是自从升级到 5.6.13(今天升级到 5.6.14)后,我注意到查询已开始有时 return 0 for FOUND_ROWS()
。在我们的一些查询中,它似乎是间歇性的,但在其他查询中,它更像是一个永久性问题。
受影响最大的集合是那些带有子查询的集合。
我们正在使用 PDO(我们没有使用 laravel 模型,只是直接与其 PDO 对象交互)。 MySQL 在此时间范围内也未修改。
尝试了各种方法 - 一个建议是将跟踪模式设置为 0,但这没有帮助。我尝试将 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
设置为 false,但是当您尝试 select FOUND_ROWS()
时会导致 PDO 错误(现在无法获得准确的消息)。
没有回滚到 5.4(求求你了),我完全卡住了...
运行这些查询直接在MySQL,然后运行ning FOUND_ROWS()
always returns正确的结果。
New Relic 有问题
新的 Relic 应用程序存在一些问题。 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();
好吧,原来这是由于 New Relic PHP 插件造成的。禁用它会立即解决所有返回零的 FOUND_ROWS()
查询的问题。
最近才将此通知给 New Relic,因此现在已将其提交给开发人员。
您可以在 newrelic.ini 配置中禁用 explain_plans,这样您就可以解决您的问题并保留来自 New Relic 的 APM 报告,而不必完全删除它,这样您只会失去解释计划在慢速查询报告页面上,否则在我们发布包含修复程序的代理之前,您应该拥有所有 New Relic 功能。
如果您遇到需要完全卸载 New Relic 的问题,请通过 support.newrelic.com 联系我们(如果您是 New Relic 客户或正在试用专业版)或 discuss.newrelic.com 因为我们将积极监控和参与我们的 public 论坛,并根据需要提请我们的开发人员注意。
感谢您在本帖中提供的所有有用信息,我将反馈所有信息以帮助找到根本原因并解决此问题。
只是想让你知道。我遇到了同样的问题,我可以确认问题已解决 in/after PHP Agent 6.6.0.169 (New Relic)。我目前正在使用 PHP Agent 6.7.0.174,它在 FOUND_ROWS() 问题方面工作正常.
干杯!
我们有一个 laravel 4.1 应用程序,它曾经在 PHP 5.4 下 运行,但是自从升级到 5.6.13(今天升级到 5.6.14)后,我注意到查询已开始有时 return 0 for FOUND_ROWS()
。在我们的一些查询中,它似乎是间歇性的,但在其他查询中,它更像是一个永久性问题。
受影响最大的集合是那些带有子查询的集合。
我们正在使用 PDO(我们没有使用 laravel 模型,只是直接与其 PDO 对象交互)。 MySQL 在此时间范围内也未修改。
尝试了各种方法 - 一个建议是将跟踪模式设置为 0,但这没有帮助。我尝试将 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
设置为 false,但是当您尝试 select FOUND_ROWS()
时会导致 PDO 错误(现在无法获得准确的消息)。
没有回滚到 5.4(求求你了),我完全卡住了...
运行这些查询直接在MySQL,然后运行ning FOUND_ROWS()
always returns正确的结果。
New Relic 有问题
新的 Relic 应用程序存在一些问题。 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();
好吧,原来这是由于 New Relic PHP 插件造成的。禁用它会立即解决所有返回零的 FOUND_ROWS()
查询的问题。
最近才将此通知给 New Relic,因此现在已将其提交给开发人员。
您可以在 newrelic.ini 配置中禁用 explain_plans,这样您就可以解决您的问题并保留来自 New Relic 的 APM 报告,而不必完全删除它,这样您只会失去解释计划在慢速查询报告页面上,否则在我们发布包含修复程序的代理之前,您应该拥有所有 New Relic 功能。
如果您遇到需要完全卸载 New Relic 的问题,请通过 support.newrelic.com 联系我们(如果您是 New Relic 客户或正在试用专业版)或 discuss.newrelic.com 因为我们将积极监控和参与我们的 public 论坛,并根据需要提请我们的开发人员注意。
感谢您在本帖中提供的所有有用信息,我将反馈所有信息以帮助找到根本原因并解决此问题。
只是想让你知道。我遇到了同样的问题,我可以确认问题已解决 in/after PHP Agent 6.6.0.169 (New Relic)。我目前正在使用 PHP Agent 6.7.0.174,它在 FOUND_ROWS() 问题方面工作正常.
干杯!