Batch file DOS CMD-等待并行MAXL Shell脚本完成

Batch file DOS CMD-等待并行MAXL Shell脚本完成,batch-file,cmd,essbase,Batch File,Cmd,Essbase,我正在测试通过加载缓冲区将数据加载到Essbase多维数据集。这里的目标是并行加载数据,然后提交数据。目前,我发现的最快的方法是通过MAXL自己运行SQL加载规则。我还尝试过使用MAXL“使用多个规则文件”,这花费了更长的时间 《Oracle Essbase数据库管理员指南》提到可以将数据加载到缓冲区,以提高并行速度。为了做到这一点,我需要同时向load_缓冲区启动3个MAXL Shell 我遇到的问题是数据C、m和R在不同的时间完成:SUB_C。规则C有1200万条记录,规则m有10.5M,规

我正在测试通过加载缓冲区将数据加载到Essbase多维数据集。这里的目标是并行加载数据,然后提交数据。目前,我发现的最快的方法是通过MAXL自己运行SQL加载规则。我还尝试过使用MAXL“使用多个规则文件”,这花费了更长的时间

《Oracle Essbase数据库管理员指南》提到可以将数据加载到缓冲区,以提高并行速度。为了做到这一点,我需要同时向load_缓冲区启动3个MAXL Shell

我遇到的问题是数据C、m和R在不同的时间完成:SUB_C。规则C有1200万条记录,规则m有10.5M,规则R有15M。我希望数据R最后完成,但规则C仍然存在,并且在加载所有数据之前,该过程在:SUB_E中提交更改

使用当前的SQL加载规则,执行时间约为333秒。使用load_缓冲区(当它工作时),执行时间达到450秒。每个加载规则本身(C、M、R)需要100、96和220秒

这是我的密码:

SET $1-$9 (Parameters 1-9)
CALL    :SUB_A
CALL    :SUB_B
CALL    :SUB_C
CALL    :SUB_D
CALL    :SUB_E
CALL    :SUB_F

GOTO    :EOF

:SUB_A
    ECHO STARTING_REBUILD_%$4%- Started at %time% on %date% > D:\Logs\Rebuild_%$4%_Start.log
EXIT /B

:SUB_B
    REM DIMENSION BUILDS
    ECHO STARTING REBUILD_%$4%
    START "REBUILD %$4%" /W CMD /c D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_%$4%.msh %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
    ECHO ENDING REBUILD_%$4%
EXIT /B

:SUB_C
REM DATA LOADS USING LOAD_BUFFER - After a lot of research, these loads tend to end at different times and skip to the next section so parallel won't work
    START "DATA_C %$4%" CMD /c D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_%$4%_Data_C.msh %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
    START "DATA_M %$4%" /W CMD /c D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_%$4%_Data_M.msh %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
    START "DATA_R %$4%" /W CMD /c D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_%$4%_Data_R.msh %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
EXIT /B

:SUB_D
REM - Test
EXIT /B

:SUB_E
    REM COMMIT DATA
    START "COMMIT %$4%" /W CMD /c D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_%$4%_Data_Z.msh %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
EXIT /B


:SUB_F
    ECHO ENDING_REBUILD_%$4%- Ending at %time% on %date% > D:\Logs\Rebuild_%$4%_End.log
EXIT /B

:EOF

为什么要使用
start”“/wait“x.bat”args…
,而
call
应该更合适。您要求
C
首先启动,然后立即启动,与
F
并行,然后您要求
R
仅在等待
F
完成后启动。这意味着
R
总是在最后开始和结束,另外两个可能要争夺第一名,这取决于您在每个批处理文件中运行的任何命令对其指令的优先级。你的结果并不令我惊讶。你希望发生什么,这与你的实际结果相矛盾?我们如何帮助您修复它?如果我将[START”“/W CMD/C]替换为[CALL],我正在使用的shell将无法工作。如果我使用CALL,最后一个参数$9将被错误解释,批处理将失败。我已尝试删除/W以使其同时运行,但一旦完成,sub将继续执行sub_D/sub_e中的下一步,使用多个启动命令并等待所有命令完成@如果我读对了,我真的需要这么做吗(START“CMD/c startMaxl.bat Data_c.msh%1%etc START”CMD/c startMaxl.bat Data_M.msh%1%etc START“CMD/c startMaxl.bat Data_R.msh%1%etc”)| set/P“=”``有许多更重要的因素可以提高Essbase的数据负载,例如:多维数据集碎片整理、块大小、数据排序、启用(并检查加载时它是否工作)并行数据加载。您也看过了吗?