Обновлены собственные процедуры SQL DB2 Z/os

Я реализую процедуру DB2 Native SQL. Это первое, что мы попробовали в этом магазине. Я прикрепил код ниже. Что делает эта подпрограмма, так это отслеживает количество новых записей, добавляемых в таблицу по времени. Всякий раз, когда он срабатывает, он либо обновляет запись в таблице мониторинга, либо вставляет запись, если таблица не существует.

Собственные процедуры являются новыми для Z/os db2 версии 9.

В справочнике по процедурам для Z/os db2 v9 говорится: «На рис. 15-15 показаны компоненты DB2, задействованные при вызове собственной процедуры SQL либо из удаленного приложения, либо из подключенной программы DB2, либо из родственного адресного пространства соответственно. Как показано, операторы SQL больше не выполняются во внешнем адресном пространстве WLM, а изначально выполняются в адресном пространстве системных служб базы данных. Для выполнения пакеты процедур загружаются в пул EDM».

Тем не менее, если я удалю из кода строку «WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV», я получаю сообщение об ошибке, говорящее о том, что «WLM Environment должен быть указан».

Кто-нибудь знает причину, по которой с этим кодом может существовать зависимость от WLM? Нужно ли переопределять WLM_ENVIRONMENT по умолчанию? И если да, то как бы я это сделал?


Новая информация------------------------------------------------ --------


Похоже, что если вы добавите параметр «ОТКЛЮЧИТЬ РЕЖИМ ОТЛАДКИ», вам не потребуется указывать WLM для ОТЛАДКИ.

Что плохого в отключении режима отладки? Есть ли недостаток в том, чтобы оставить процедуру в «РАЗРЕШИТЬ РЕЖИМ ОТЛАДКИ»? Есть ли накладные расходы на использование процедуры, в которой можно разрешить отладку?


--#SET TERMINATOR !                                            
 CREATE PROCEDURE $172.VQT_QUOTE_INFO_COUNT_NEW_QUOTE(
                      IN RATING_STATE CHAR(2),
                      IN INSERT_TIMESTAMP TIMESTAMP)
 LANGUAGE SQL
 ALLOW DEBUG MODE
 WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV                 
 BEGIN
   DECLARE NO_RECORD_UPDATED INT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
      SET NO_RECORD_UPDATED = 1;
  UPDATE  $172.VKT_MONITORING_COUNTS
     SET MC_QUOTE_CNT = MC_QUOTE_CNT + 1
  WHERE MC_STATE_ABBREV = RATING_STATE AND
        MC_SAMPLE_DATE = DATE(INSERT_TIMESTAMP) AND
        MC_SAMPLE_HOUR = HOUR(INSERT_TIMESTAMP);
  IF NO_RECORD_UPDATED = 1    THEN
  INSERT INTO $172.VKT_MONITORING_COUNTS (
              MC_STATE_ABBREV, MC_SAMPLE_DATE, MC_SAMPLE_HOUR,
              MC_QUOTE_CNT, MC_NEW_POLICY_CNT)            
         VALUES.                                                
              (RATING_STATE, DATE(INSERT_TIMESTAMP),
               HOUR(INSERT_TIMESTAMP),  1, 0);               
 END IF;
 END.#
--#SET TERMINATOR ;               

person dsiewert    schedule 04.11.2010    source источник


Ответы (1)


WLM расшифровывается как Work Load Manager.

Диспетчер рабочей нагрузки (который является частью базовой z/OS) отвечает за выделение памяти и других ресурсов, а также за выполнение сценария.

Каждая среда WLM будет запускать сценарии с разными приоритетами и иметь свои собственные настройки максимального времени выполнения, максимального потребления ресурсов ЦП и собственный набор правил, определяющих доступ к ресурсам.

person James Anderson    schedule 05.11.2010
comment
Хорошее описание WLM. В версии 9.1 Z/os DB2 мы можем вообще избежать использования WLM с процедурами, создав собственные процедуры. Однако, если кто-то захочет в какой-то момент выполнить отладку, потребуется указать WLM, даже если в обычном режиме он не будет использоваться. В некоторых средах включение отладки означает, что в таблице символов необходимо хранить дополнительную информацию, и вы получаете слегка раздутый код с незначительным влиянием на производительность. Имеет ли включение отладки в DB2 какие-либо недостатки для собственных процедур? - person dsiewert; 08.11.2010