Jdbc Sybase连接长时间处于空闲状态

Jdbc Sybase连接长时间处于空闲状态,jdbc,sap-ase,isolation-level,pentaho-spoon,pentaho-data-integration,Jdbc,Sap 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选项来更改隔离级别 问题是查询似乎在很长一段时间

我正在使用表输入步骤从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的响应?

在我看来,您在转换中还有一步要锁定表。极有可能您有一个
输出表
步骤试图截断表person。

可能您的查询需要很长时间才能检索数据

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

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

您将不会在
步骤度量
底部选项卡的
输入表
行上看到总结果。但您将在
指标上得到结果


您还可以使用
阻止此步骤,直到步骤完成。您的发行版附带的示例目录中有一个示例。打开
installdir/sample/transformation/Block此步骤,直到步骤完成。ktr
,并用流替换顶行。然后查看阻塞步骤的统计信息。

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


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

您是否尝试寻求Sybase ASE DBA的帮助,以查看Sybase中是否存在问题?如果ASE版本为12.5.0.3+,则DBA可以访问MDA/监控表,这也有助于确定问题。DBA应该能够告诉您与Sybase的连接发生了什么,例如,等待磁盘的表扫描、间歇阻塞、处于“发送睡眠”状态(意味着ASE正在等待客户机的“确认”,即它收到了最新的一批记录,等等).我正在尝试,但这是一个有点令人痛苦的过程,因为我的公司没有DB,我们只是有权使用它。但是我会发送一个请求,看看我是否可以访问这些监控表。实际上,输出是一个文本文件,该文件稍后会被批量加载到另一个数据库中。所以整个流程是:从表输入读取并转储到文本文件。我不知道空闲时间的原因是否是由于其他进程访问与我的查询相同的数据。我将尝试与DBA交谈,看看是否可以采取任何措施来加快速度。这很奇怪,因为这是一个生产数据库的副本,除了PDI和复制过程之外,任何人都不应该使用它。如果我能找到解决这个问题的办法,我一定会把它贴出来!您可以拆分该表:
选择person\u ref,displayname来自person WHERE,如'A%'
…如'B%'
,。。。然后在下一步中引导所有这些流。根据kettle的体系结构,所有步骤都将并行运行,并且延迟会更短。当然,您不需要26个
输入表
步骤,您可以创建“A%”,。。。并将其用作表输入中的参数。也许你有一个更好的方法来分配负载过程。今晚我要试试!检查表上的索引(通过sp_helpindex)并查找索引的列(如果您希望分段执行此操作),否则仍将无法获取数据子集并保持缓慢。任何用户都可以运行sp_helpindex,因此您应该有足够的权限进行检查。