使用Job scheduler执行JobNet可能会发生死锁。

 
使用Job scheduler执行JobNet可能会发生死锁。

【发生条件】
使用Microsoft SQL Server

当删除或更新Job scheduler使用的表的记录时,会执行不必要的隐式类型转换,从而很容易执行表扫描。
执行表扫描时,会逐页获取锁,这可能会导致死锁。

在本FAQ中,将记载处理上述现象的对应方法。

【解决方法】
确保不进行不必要的隐式类型转换。
请下载并应用附加模块(im_job_scheduler_8_0_7_later_specific_patch-1.0.0.imm)。
*在应用附加模块之前,请确认下面记载的注意事项和应用(安装)方法。

【模块中包含的改善/修改需求】
附加模块中包含的需求如下。

使用Job scheduler执行JobNet可能会发生死锁。
https://issue.intra-mart.jp/issues/29271

【注意事项】
1. 附加模块可适用于intra-mart Accel Platform 2014 Spring (Granada)以后的版本。

2.虽然我们已经进行了彻底的测试,但在应用于您的环境时,请务必进行自行检查操作。

3. 其他,请遵守以下产品的限制事项。
  intra-mart Accel Platform 2014 Spring (Granada) 及左侧列出的更新产品

4. 附加模块在intra-mart Accel Platform启动时,仅执行一次将以下表的VARCHAR类型更改为NVARCHAR类型的SQL(*1)。
  * imjob_monitor(管理JobNet的执行状况和执行结果的表)
  * imjob_monitor_task(管理监视器上每个Job的详细信息任务信息的表)
  由于上表中的所有记录都被复制两次,因此如果记录较多,预计应用附加模块后首次启动intra-mart Accel Platform 需要一些时间。

  因此,请在您有时间的时候进行。
  这是一个参考值,但当我们验证它时,在以下条件下启动intra-mart Accel Platform大约需要20分钟。
  ・imjob_monitor:约200万个
  ・imjob_monitor_task:约800万个
  
 第二次及以后的启动将不会被执行。

  *1. 将更改NVARCHAR类型的SQL
========================================================
      CREATE TABLE imjob_monitor_bk (
          tenant_id VARCHAR(100) NOT NULL,
          id VARCHAR(200) NOT NULL,
          jobnet_id VARCHAR(200) NOT NULL,
          trigger_id VARCHAR(200) NOT NULL,
          status VARCHAR(24) NOT NULL,
          start_date_time DECIMAL(13,0) NOT NULL,
          end_date_time DECIMAL(13,0),
          message NVARCHAR(1000),
          create_user_cd VARCHAR(100) NOT NULL,
          create_date DATETIME2 NOT NULL,
          record_user_cd VARCHAR(100) NOT NULL,
          record_date DATETIME2 NOT NULL,
          PRIMARY KEY (tenant_id, id)
      );

      INSERT INTO imjob_monitor_bk SELECT * FROM imjob_monitor;

      DROP TABLE imjob_monitor;

      CREATE TABLE imjob_monitor (
          tenant_id NVARCHAR(100) NOT NULL,
          id NVARCHAR(200) NOT NULL,
          jobnet_id NVARCHAR(200) NOT NULL,
          trigger_id NVARCHAR(200) NOT NULL,
          status NVARCHAR(24) NOT NULL,
          start_date_time DECIMAL(13,0) NOT NULL,
          end_date_time DECIMAL(13,0),
          message NVARCHAR(1000),
          create_user_cd NVARCHAR(100) NOT NULL,
          create_date DATETIME2 NOT NULL,
          record_user_cd NVARCHAR(100) NOT NULL,
          record_date DATETIME2 NOT NULL,
          PRIMARY KEY (tenant_id, id)
      );

      INSERT INTO imjob_monitor SELECT * FROM imjob_monitor_bk;

      DROP TABLE imjob_monitor_bk;

      CREATE TABLE imjob_monitor_task_bk (
          tenant_id VARCHAR(100) NOT NULL,
          monitor_id VARCHAR(200) NOT NULL,
          task_id VARCHAR(200) NOT NULL,
          job_id VARCHAR(200) NOT NULL,
          status VARCHAR(24),
          start_date_time DECIMAL(13,0) NOT NULL,
          end_date_time DECIMAL(13,0),
          message NVARCHAR(1000),
          create_user_cd VARCHAR(100) NOT NULL,
          create_date DATETIME2 NOT NULL,
          record_user_cd VARCHAR(100) NOT NULL,
          record_date DATETIME2 NOT NULL,
          PRIMARY KEY (tenant_id, monitor_id, task_id)
      );

      INSERT INTO imjob_monitor_task_bk SELECT * FROM imjob_monitor_task;

      DROP TABLE imjob_monitor_task;

      CREATE TABLE imjob_monitor_task (
          tenant_id NVARCHAR(100) NOT NULL,
          monitor_id NVARCHAR(200) NOT NULL,
          task_id NVARCHAR(50) NOT NULL,
          job_id NVARCHAR(200) NOT NULL,
          status NVARCHAR(24),
          start_date_time DECIMAL(13,0) NOT NULL,
          end_date_time DECIMAL(13,0),
          message NVARCHAR(1000),
          create_user_cd NVARCHAR(100) NOT NULL,
          create_date DATETIME2 NOT NULL,
          record_user_cd NVARCHAR(100) NOT NULL,
          record_date DATETIME2 NOT NULL,
          PRIMARY KEY (tenant_id, monitor_id, task_id)
      );

      INSERT INTO imjob_monitor_task SELECT * FROM imjob_monitor_task_bk;

      DROP TABLE imjob_monitor_task_bk;
========================================================
【应用(安装)方法】
1. 启动IM-Juggling。

2. 打开现有项目(juggling.im)文件。

3. 选择“用户模块”选项卡,点击右上角的“+”图标。

4. 添加下载的im_job_scheduler_8_0_7_later_specific_patch-1.0.0.imm 文件。
  https://document.intra-mart.jp/library/iap/public/setup/iap_setup_guide/texts/create_war/user_module.html

5. 进行WAR文件(※1)和静态文件(※2)的输出。

6. 请进行卸载。
  https://document.intra-mart.jp/library/iap/public/setup/iap_setup_guide/texts/uninstallation/index.html#war 

7. 卸载后,请部署文件*1和*2。
  https://document.intra-mart.jp/library/iap/public/setup/iap_setup_guide/texts/deploy/index.html

【卸载方法】
1. 打开IM-Juggling项目,删除本FAQ中添加的用户模块。
  选择用户模块后,单击右上角的“X”图标即可删除该用户模块。

2. 进行WAR文件(*3)和静态文件(*4)的输出。

3. 请进行卸载。
  https://document.intra-mart.jp/library/iap/public/setup/iap_setup_guide/texts/uninstallation/index.html#war

4. 在系统数据库中请执行以下SQL。
  *在目的只是卸载附加模块的情况下,无需执行SQL,但如果目的是更新产品,则需要执行SQL。
========================================================
     CREATE TABLE imjob_monitor_bk (
         tenant_id VARCHAR(100) NOT NULL,
         id VARCHAR(200) NOT NULL,
         jobnet_id VARCHAR(200) NOT NULL,
         trigger_id VARCHAR(200) NOT NULL,
         status VARCHAR(24) NOT NULL,
         start_date_time DECIMAL(13,0) NOT NULL,
         end_date_time DECIMAL(13,0),
         message NVARCHAR(1000),
         create_user_cd VARCHAR(100) NOT NULL,
         create_date DATETIME2 NOT NULL,
         record_user_cd VARCHAR(100) NOT NULL,
         record_date DATETIME2 NOT NULL,
         PRIMARY KEY (tenant_id, id)
     );

     INSERT INTO imjob_monitor_bk SELECT * FROM imjob_monitor;

     DROP TABLE imjob_monitor;

     CREATE TABLE imjob_monitor (
         tenant_id VARCHAR(100) NOT NULL,
         id VARCHAR(200) NOT NULL,
         jobnet_id VARCHAR(200) NOT NULL,
         trigger_id VARCHAR(200) NOT NULL,
         status VARCHAR(24) NOT NULL,
         start_date_time DECIMAL(13,0) NOT NULL,
         end_date_time DECIMAL(13,0),
         message NVARCHAR(1000),
         create_user_cd VARCHAR(100) NOT NULL,
         create_date DATETIME2 NOT NULL,
         record_user_cd VARCHAR(100) NOT NULL,
         record_date DATETIME2 NOT NULL,
         PRIMARY KEY (tenant_id, id)
     );

     INSERT INTO imjob_monitor SELECT * FROM imjob_monitor_bk;

     DROP TABLE imjob_monitor_bk;

     CREATE TABLE imjob_monitor_task_bk (
         tenant_id VARCHAR(100) NOT NULL,
         monitor_id VARCHAR(200) NOT NULL,
         task_id VARCHAR(200) NOT NULL,
         job_id VARCHAR(200) NOT NULL,
         status VARCHAR(24),
         start_date_time DECIMAL(13,0) NOT NULL,
         end_date_time DECIMAL(13,0),
         message NVARCHAR(1000),
         create_user_cd VARCHAR(100) NOT NULL,
         create_date DATETIME2 NOT NULL,
         record_user_cd VARCHAR(100) NOT NULL,
         record_date DATETIME2 NOT NULL,
         PRIMARY KEY (tenant_id, monitor_id, task_id)
     );

     INSERT INTO imjob_monitor_task_bk SELECT * FROM imjob_monitor_task;

     DROP TABLE imjob_monitor_task;

     CREATE TABLE imjob_monitor_task (
         tenant_id VARCHAR(100) NOT NULL,
         monitor_id VARCHAR(200) NOT NULL,
         task_id VARCHAR(200) NOT NULL,
         job_id VARCHAR(200) NOT NULL,
         status VARCHAR(24),
         start_date_time DECIMAL(13,0) NOT NULL,
         end_date_time DECIMAL(13,0),
         message NVARCHAR(1000),
         create_user_cd VARCHAR(100) NOT NULL,
         create_date DATETIME2 NOT NULL,
         record_user_cd VARCHAR(100) NOT NULL,
         record_date DATETIME2 NOT NULL,
         PRIMARY KEY (tenant_id, monitor_id, task_id)
     );

     INSERT INTO imjob_monitor_task SELECT * FROM imjob_monitor_task_bk;

     DROP TABLE imjob_monitor_task_bk;
========================================================
5. 卸载后,请部署文件*3和*4。
   https://document.intra-mart.jp/library/iap/public/setup/iap_setup_guide/texts/deploy/index.html

-- 适用对象 -------------------------------------------------------------------------
iAP/Accel Platform/2023 Autumn
iAP/Accel Platform/2023 Spring
iAP/Accel Platform/2022 Winter
iAP/Accel Platform/2022 Spring
iAP/Accel Platform/2021 Winter
iAP/Accel Platform/2021 Summer
iAP/Accel Platform/2021 Spring
iAP/Accel Platform/2020 Winter
iAP/Accel Platform/2020 Summer
iAP/Accel Platform/2020 Spring
iAP/Accel Platform/2019 Winter
iAP/Accel Platform/2019 Summer
iAP/Accel Platform/2019 Spring
iAP/Accel Platform/2018 Winter
iAP/Accel Platform/2018 Summer
iAP/Accel Platform/2018 Spring
iAP/Accel Platform/2017 Winter
iAP/Accel Platform/2017 Summer
iAP/Accel Platform/2017 Spring
iAP/Accel Platform/2016 Winter
iAP/Accel Platform/2016 Summer
iAP/Accel Platform/2016 Spring
iAP/Accel Platform/2015 Winter
iAP/Accel Platform/2015 Summer
iAP/Accel Platform/2015 Spring
iAP/Accel Platform/2014 Winter
iAP/Accel Platform/2014 Summer
iAP/Accel Platform/2014 Spring
--------------------------------------------------------------------------------

FAQID:1300
这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
由 Zendesk 提供技术支持