Shell 在SPL-本地范围内设置PDQ?

Shell 在SPL-本地范围内设置PDQ?,shell,informix,Shell,Informix,为了根据批处理作业运行的时间对PDQ资源的分配进行微调,我们有一个实用程序,该实用程序根据某一周中的某一天/一天中的某一小时规则设置PDQPRIORITY,例如: PDQPRIORITY=$(throttle); export PDQPRIORITY 但是,这在脚本启动时是固定的,因此长时间运行的作业在进行时不会受到限制。为了纠正这种情况,我们尝试了以下方法: CREATE PROCEDURE informix.set_pdq() RETURNING VARCHAR(50); DEFINE

为了根据批处理作业运行的时间对PDQ资源的分配进行微调,我们有一个实用程序,该实用程序根据某一周中的某一天/一天中的某一小时规则设置PDQPRIORITY,例如:

PDQPRIORITY=$(throttle); export PDQPRIORITY
但是,这在脚本启动时是固定的,因此长时间运行的作业在进行时不会受到限制。为了纠正这种情况,我们尝试了以下方法:

CREATE PROCEDURE informix.set_pdq() RETURNING VARCHAR(50);
  DEFINE pdq, dow SMALLINT;
  DEFINE hr SMALLINT;

  LET dow = WEEKDAY(CURRENT);
  LET hr = TO_CHAR(CURRENT, '%H');

  IF (dow == 0 OR dow == 6 OR hr < 8 OR hr > 14) THEN
      LET pdq = 100;
      SET PDQPRIORITY 100; -- SET PDQ does not accept a variable name arg.
  ELIF (hr >= 8 AND hr <= 10) THEN
      LET pdq = 40;
      SET PDQPRIORITY 40;
  ELIF (hr >= 11 AND hr <= 12) THEN
      LET pdq = 60;
      SET PDQPRIORITY 60;
  ELIF (hr >= 13 AND hr <= 14) THEN
      LET pdq = 80;
      SET PDQPRIORITY 80;
  END IF;
  RETURN "PDQPriority set to " || pdq;
END PROCEDURE;
然而,尽管没有失败,但SET PDQ的范围似乎是SPL的本地范围
onstat-g mgm
不报告对原始分配资源的任何更改。因此,添加这些
set_pdq()
调用似乎没有任何效果-在程序开始时分配的资源保持不变

代码在shell中嵌入SQL,即:

 dbaccess -e $DBNAME << EOSQL
   SELECT .. INTO TEMP ..;
   EXECUTE PROCEDURE set_pdq();
   SELECT .. INTO TEMP ..;
   --etc
 EOSQL

dbaccess-e$DBNAME正如您从提问时间和第一次尝试回答之间的过度延迟中推断的那样,这并不是一件小事


我认为,部分问题在于,在创建存储过程或更新其统计信息时,会捕获PDQPRIORITY。事实上,这可能就是问题的全部。现在,临时表会导致存储过程出现另一组问题—当涉及临时表时,存储过程通常需要重新优化(除非SP可能自己创建临时表)。

正如您从提问和第一次尝试回答之间的过度延迟中推断的那样,这不是小事


我认为,部分问题在于,在创建存储过程或更新其统计信息时,会捕获PDQPRIORITY。事实上,这可能就是问题的全部。现在,临时表会导致存储过程出现另一组问题—当涉及临时表时,存储过程通常需要重新优化(除非SP本身可能创建临时表)。

谢谢Jonathan—我已经放弃了在这一点上获得响应。我一直在想我可能必须重写选择。。。作为perl DBI do()调用,这将使我有机会在必要时包装PDQ。谢谢Jonathan-我已经放弃了在这一点上获得响应。我一直在想我可能必须重写选择。。。以perl DBI do()调用的形式将其转换为临时代码,这将使我有机会在必要时包装PDQ。
 dbaccess -e $DBNAME << EOSQL
   SELECT .. INTO TEMP ..;
   EXECUTE PROCEDURE set_pdq();
   SELECT .. INTO TEMP ..;
   --etc
 EOSQL