Sybase连接闲置很长时间

时间:2018-02-05 10:44:20

标签: jdbc sybase-ase isolation-level pentaho-spoon pentaho-data-integration

我正在使用表输入步骤从Sybase的表中读取数据。查询非常简单:

SELECT person_ref, displayname FROM person

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

IMPLICIT_CURSOR_FETCH_SIZE=5000
SELECT_OPENS_CURSOR=True

我还尝试在该查询中使用noholdlock选项来更改隔离级别。

问题是查询似乎长时间闲置,差不多一分钟。 PDI表示该步骤处于空闲状态,然后更改为“正在运行”。这使得很难测量过程所需的时间,因为PDI不会开始测量时间,直到步骤从空闲状态改变状态。

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

3 个答案:

答案 0 :(得分:1)

也许您的查询很长时间才能检索数据。

潜伏时间在jdbc架构中。它将查询发送到数据库,数据库将数据存储在缓冲区中。仅当此缓冲区已满时,数据才会传输回PDI。在收到一些数据之前,Generate row处于空闲模式。

如果要测量包括空闲时间在内的时间,请放置一个没有任何延迟的步骤,例如Input table(1行就足够了)步骤。您无需将此步骤连接到任何内容,因为PDI将尽快并行启动所有步骤。

您无法在Step Metrics底部标签的Metrics行看到总结果。但是你会在Block this step until steps finish上得到结果。

您还可以使用youKettleInstallDir/sample/transformation/Block this step until steps finish.ktr。您在发行版附带的示例目录中有一个示例。打开 ui <- fluidPage(actionButton("add", "Add UI") ) server <- function(input, output, session) { observe({ insertUI( selector = "#add", where = "afterEnd", ui = textInput(paste0("txt", input$add), "Insert some text") ) }) } ,然后用流量替换顶行。然后观察阻塞步骤的统计数据。

答案 1 :(得分:0)

在我看来,你在转换锁定表人的过程中又迈出了一步。您有一个Output table步骤尝试截断表格人员的可能性极大。

答案 2 :(得分:0)

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

该计算机具有为Sybase DB定义的ODBC连接,并且客户端工具的安装具有自己的Sybase驱动程序版本以及一些DLL文件。我将罐子和dll工具放入装有PDI的机器中。我确保它们都在类路径中,并创建了一个指向系统ODBC的通用JDBC连接。它的速度是你现在所期望的速度。