【问题标题】:SQL Server 2008 returns "Memory limit of 10240 KB exceeded for buffered query"SQL Server 2008 返回“缓冲查询超出 10240 KB 的内存限制”
【发布时间】:2014-12-09 23:27:31
【问题描述】:

我正在尝试用一些 SQL Server 2008 r2 数据填充 HTML 表格,控制器 (php_sqlsrv) 工作正常,表格填充得很好,但是当我尝试检索 2000 或更多行时(可能更少)它崩溃并显示此消息:

SQL 错误:数组([0] => 数组([0] => IMSSP [SQLSTATE] => IMSSP [1] => -59 [code] => -59 [2] => 内存限制为 10240缓冲查询超出了 KB [消息] => 缓冲查询超出了 10240 KB 的内存限制))

我该如何解决这个问题?这是 PHP 还是 sqlsrv 问题?我可以通过 SQL Server Management Studio 解决此问题吗?

【问题讨论】:

  • 我们可以看看你的代码吗?您是否试图将所有这些行保存在内存中?你能增加它所指的缓冲区限制吗?我不知道在哪里设置,但我想 php.net 上有文档。
  • 我只是解决问题,我的朋友;)谢谢...是的,这是关于缓冲区限制,但我不知道如何增加它...还是谢谢你!!!
  • 太棒了。请在下面的框中添加解决方案,以便其他人可以看到如何解决此错误。

标签: php sql-server-2008-r2


【解决方案1】:

更改 php.ini 中的设置。

部分:sqlsrv

指令:sqlsrv.ClientBufferMaxKBSize。

【讨论】:

  • 谢谢我做了它的遮篷......但无论如何谢谢你,问候!
【解决方案2】:

在 php.ini 中添加两行

extension=php_pdo_sqlsrv_55_ts.dll
extension=php_sqlsrv_55_ts.dll
client_buffer_max_kb_size = '50240'
sqlsrv.ClientBufferMaxKBSize = 50240

【讨论】:

  • 如果您使用 PDO(例如 Drupal),您还需要添加 pdo_sqlsrv.client_buffer_max_kb_size = 50240
  • 谢谢!这对我帮助很大。
【解决方案3】:

如果您不需要生产服务器更改 php.ini,您也可以在运行时更改设置(检查这是否适用于您的主机)。

用以下几行更新代码:

ini_set('memory_limit','256M'); // This also needs to be increased in some cases. Can be changed to a higher value as per need)
ini_set('sqlsrv.ClientBufferMaxKBSize','524288'); // Setting to 512M
ini_set('pdo_sqlsrv.client_buffer_max_kb_size','524288'); // Setting to 512M - for pdo_sqlsrv

要检查您的服务器是否支持此功能,请在设置上述内容后尝试打印值。

echo ini_get('memory_limit');
echo ini_get('sqlsrv.ClientBufferMaxKBSize');
echo ini_get('pdo_sqlsrv.client_buffer_max_kb_size');

新值应该是我们在 ini_set() 中设置的值。否则,服务器不支持运行时配置更改。

【讨论】:

  • 最佳解决方案,基于应用而非全局。
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多