【问题标题】:"sqlsrv_query" static cursor type is slow“sqlsrv_query”静态游标类型很慢
【发布时间】:2021-06-02 15:28:06
【问题描述】:

我发现使用 PHP 与 MSSQL 数据库通信时,使用 sqlsrv_fetch_array() 的结果非常缓慢。使用 sqlsrv_query 和 "Scrollable" => "static" 允许我们在 35 秒内遍历 600 个项目的列表,而缓冲在 1 秒内完成。

我想到的只有一件事 - 这是另一台服务器上的远程数据库,使用静态游标需要我们每次都直接从数据库中获取结果。

或者这些查询从根本上破坏了某些东西。

作为参考,应用程序位于 Microsoft Azure 应用服务中,而数据库位于 Azure 中的“SQL 实例”中。但是,当我在本地 PC 上以调试模式运行应用程序时,我得到了类似的结果。

我不太热衷于改变“默认值”。

是什么导致了这个问题,解决方法是什么?还是在通过远程连接处理数据列表时使用缓冲游标是正确的解决方案?

【问题讨论】:

    标签: sqlsrv


    【解决方案1】:

    我可以确认使用静态游标需要更长的时间,并且受 SQL 服务器上的工作负载的影响。例如,使用静态游标迭代包含近 14,000 条记录的结果集时,我可以获得的最佳时间是 14 秒。如果我们不使用静态游标并使用默认值,我们有时可以在不到一秒的时间内迭代相同的结果集。这是静态游标可以做到的最好的。我们有一些例子,从 SQL 服务器中提取所有行需要 30 秒、50 秒甚至超过一分钟。 至少在 17.8.1.1 和包括静态游标的 php 驱动程序中似乎存在一个主要问题。 result of command yum list installed msodbc*

    作为记录,这个 php 是版本: PHP 7.3.23(cli)(构建:2020 年 9 月 29 日 08:33:03)(NTS) 版权所有 (c) 1997-2018 PHP 集团 Zend Engine v3.3.23,版权所有 (c) 1998-2018 Zend Technologies 使用 Zend OPcache v7.3.23,版权所有 (c) 1999-2018,由 Zend Technologies 提供

    在 CentOS Linux 版本 7.8.2003(核心)上运行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多