HANA SQLScript“睡眠”命令

时间:2014-12-16 22:28:27

标签: sql hana

HANA SQLScript中是否有等效的Sleep(1000)命令?

我在HANA SQLScript参考中没有看到任何内容,因此我想知道是否可能存在一个创造性的解决方法,它不会使CPU达到100%。

2 个答案:

答案 0 :(得分:5)

HANA不支持开箱即用的任何内容。 如果你绝对必须拥有这个

,我可以想到两种方法

忙碌的等待

正如SCN上已经建议的那样,您可以创建一个滞留在while循环中的过程,直到达到某个时间阈值。 Amid Das先生建议这样的事情:

CREATE PROCEDURE PLEASE_SLEEP ( IN SLEEPING_TIME INTEGER, OUT WOKE_UP_AT TIME )
LANGUAGE SQLSCRIPT READS SQL DATA AS
  V_TIME TIME;
  V_TIME_TO_WAKE TIME;
BEGIN
  V_TIME := CURRENT_TIME;
  V_TIME_TO_WAKE < ADD_SECONDS ( TO_TIME( V_TIME ), SLEEPING_TIME );
  WHILE V_TIME != V_TIME_TO_WAKE DO
    V_TIME := CURRENT_TIME ;
  END WHILE;
  WOKE_UP_AT := V_TIME_TO_WAKE ;
END

我不确定CPU的使用量有多大,但绝对不是最好的。

使用表锁定超时

这个想法有点疯狂和复杂但可能会起作用,而不会牺牲太多的CPU能力。

唯一可以&#34;等待&#34;的SQL命令是LOCK TABLE。如果无法获取表锁,此命令将在一定时间后超时。可以使用SET TRANSACTION LOCK WAIT TIMEOUT [number of milliseconds]设置此超时。

现在我们只需要一个可以被程序锁定的表,但也需要一个不同的事务来保持该表被锁定。这是棘手的部分。可能有用的是使用XS引擎来安排连续的XS作业,以尽可能长时间地锁定所述表。或者,您可以编写一个Python脚本来保持表的锁定。

这个想法很实验,我自己也没试过。但我相信,如果一切设置正确,它应该可行。

答案 1 :(得分:0)

您可以尝试使用库SYNCLIB中的SLEEP_SECONDS过程。 我正在使用SAP HANA Platform 2.0 SPS 02及其工作。

使用示例:

BEGIN:
    USING SQLSCRIPT_SYNC AS SYNCLIB;
    CALL SYNCLIB:SLEEP_SECONDS(<TIME_IN_SECONDS>); 
END;

文档: HANA SQL Script Reference

相关问题