在pentaho pdi过程中可能会导致“闲置交易”?

我每隔2小时在服务器上运行一个使用cron的ETL进程。 ETL过程填充运行Greenplum的报告数据库。 我注意到ETL过程通常会停滞,通常是“闲置交易”。 对于这些过程,我该如何去研究它起源于哪种服务? 我猜测,但我不是很确定,因为当我运行“sudo /etc/init.d/apache2优雅”它通常清除闲置事务closures。

我正在使用Sun Java在Ubuntu服务器上运行ETL过程。 希望能有一些debugging技术或解决scheme来改进这个过程。

“在事务中空闲”意味着事务是在数据库连接上启动的,并没有完成,并且不再有任何查询在运行。

在数据库服务器的进程列表中(例如: ps -ef | grep "idle in" ),您将find处于该状态的连接。 它会显示如下所示:

postgres 15268 12917 0 22:36 ? 00:00:03 postgres: user user xxxx(59830) idle in transaction

(59830)xxxx机器上的端口。

xxxx机器上,然后可以运行以下命令查找哪个进程已经build立了该数据库连接:

netstat -np | grep 59830

这会给你类似的东西:

tcp6 0 0 xxxx:59830 dbserver:5432 ESTABLISHED 25254/java

(或者Apache,或者其他什么过程)。 在这个例子中, 25254是进程的PID。

所以,在你的文章的正文中回答你的问题。

处理,当然是一个更复杂的课题。 为什么这个连接开始一个事务,而不是完成=错误的编码。 解决方法:代码正确。

注意:

Pentaho PDI有一个长期闲置交易的坏习惯。 假设您在PDI中更新了一些行。 它是:

input step --> filter step --> update step

假设您在update step中将提交批量设置为100。 你有75行通过更新步骤和input step仍然在拉行, filter step过滤行,但由于条件,没有什么是越过update step一会儿,因为没有行匹配您的标准在filter step 。 那么你有什么? idle in transaction数据库连接(已更新75行,但未提交)。

所以这一切都很好,除了让DBA得到有关长时间运行事务的警报之外,

但是现在,假设您有另外一个步骤来分支filter step并更新同一个表,但不同的是,一个logging是75个更新行(但没有提交)的一部分, update step 2现在需要更新行。 怎么了? 一个摊位。 update step 2不能更新行,直到update step已经提交了批处理。

不是说这是你所遇到的,你似乎已经发现,但没有证实,你的阻塞事务运行在Apache下,而不是PDI。 但是,上面是对可能出现的问题的描述,以说明通常发生的事情。