Sybase连接长时间空闲

Sybase connection is idle for a long time

我正在使用 Table 输入步骤从 Sybase 中的 table 读取数据。查询真的很简单:

SELECT person_ref, displayname FROM person

table 大约有 200 万行。我正在连接到 Sybase ASE 12。我的用户具有只读权限。 PDI 正在使用具有以下选项的 jconnect 驱动程序:

IMPLICIT_CURSOR_FETCH_SIZE=5000
SELECT_OPENS_CURSOR=True

我也试过在该查询上使用 noholdlock 选项来更改隔离级别。

问题是查询似乎闲置了很长时间,将近一分钟。 PDI 指示该步在该时间处于空闲状态,然后变为 运行。这使得很难测量进程花费的时间,因为 PDI 不会开始测量时间,直到步骤从空闲状态更改。

我似乎无法在手册中找到任何内容,也找不到任何可以通过减少或消除此空闲时间来加快阅读时间的选项。我有什么选择吗?空闲状态是否意味着 PDI 只是在等待 Sybase 的响应?

在我看来,你在锁定 table 人的转变过程中又迈出了一步。极有可能您有 Output table 个步骤试图截断 table 人。

也许您的查询很长,无法检索数据。

延迟时间在jdbc架构中。它将查询发送到数据库,数据库将数据存储在缓冲区中。只有当此缓冲区已满时,数据才会传回 PDI。在接收到一些数据之前,Input table 处于空闲模式。

如果要测量包括空闲时间在内的时间,请放置一个将在没有任何延迟的情况下触发的步骤,例如 Generate row(1 行就足够)步骤。您不需要将此步骤连接到任何东西,因为 PDI 会尽快并行启动所有步骤。

您不会在 Step Metrics 底部选项卡的 Input table 行中看到总结果。但是你会在 Metrics.

上得到结果

您也可以使用 Block this step until steps finish。您的发行版随附的示例目录中有一个示例。打开 youKettleInstallDir/sample/transformation/Block this step until steps finish.ktr,并用您的流程替换第一行。然后看blocking step的统计

我不知道这是否是我所说的答案,但我确实找到了一种让 Sybase 连接快速响应的方法。任何地方都有一个名为 Sybase 的查询工具,您可以使用它直接查询数据库。我所做的是在一台连接良好的单独机器上查看安装。

那台机器有一个为 Sybase 数据库定义的 ODBC 连接,客户端工具的安装有它自己版本的 Sybase 驱动程序,以及一些 DLL 文件。我对 jars 和 dll 进行了加工,并将它们放入安装了 PDI 的机器中。我确保它们都在类路径中,并创建了一个指向系统 ODBC 的通用 JDBC 连接。它以您现在期望的速度进行。