为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8, DB Version: 0x7000c
【操作系统】:CentOS Linux release 7.8.2003
【CPU】:Intel(R) Xeon(R) CPU E5-2609 v4 @ 1.70GHz
【问题描述】*:
当执行如下sql时, 必会造成DM8服务宕机.
SELECT COUNT(1)
FROM (SELECT M.SDIMENSION_CODE, CASE WHEN M.SDIMENSION_CODE = 'EP' THEN '人员' WHEN M.SDIMENSION_CODE = 'PJ' THEN '项目' WHEN M.SDIMENSION_CODE = 'DP' THEN '部门' WHEN M.SDIMENSION_CODE = 'PC' THEN '客商' WHEN M.SDIMENSION_CODE = 'SBPDP' THEN '客商部门' WHEN M.SDIMENSION_CODE = 'CU' THEN '币种' ELSE O.SDIMENSION END AS SDIMENSION_NAME, M.SDIMENSION_PRO_CODE, M.SDIMENSION_PRO_NAME, CASE WHEN M.SDIMENSION_CODE = 'CU' THEN 0.1 WHEN M.SDIMENSION_CODE = 'PC' THEN 0.2 WHEN M.SDIMENSION_CODE = 'PJ' THEN 0.3 WHEN M.SDIMENSION_CODE = 'DP' THEN 0.4 WHEN M.SDIMENSION_CODE = 'SBPDP' THEN 0.5 WHEN M.SDIMENSION_CODE = 'EP' THEN 0.6 ELSE O.NSORTNUM END AS NSORTNUM
FROM GL_ACCOUNT_SA_S M JOIN (SELECT REPLACE(REGEXP_SUBSTR(E.SCOMBINE, '[^,]+', 1, LEVEL), '@', '') SDIMENSION_CODE
FROM (SELECT CASE WHEN INSTR(B.SCOMBINE, '@' || 'CU' || '@') > 0 THEN B.SCOMBINE ELSE 'CU' END SCOMBINE
FROM GL_ACCPRINT_CONF A
LEFT JOIN (SELECT K.SCOMPANYCODE, K.SYEAR, K.SACCCODE, LISTAGG('@' || SDIMENSION_CODE || '@', ',') WITHIN GROUP (ORDER BY SACCCODE) SCOMBINE
FROM (SELECT J.SCOMPANYCODE, J.SYEAR, J.SACCCODE, REGEXP_SUBSTR(J.SCOMBINE, '[^,]+', 1, LEVEL) SDIMENSION_CODE
FROM (SELECT *
FROM GL_ACCPRINT_CONF_M
WHERE SCOMPANYCODE = '2BJ1402066' AND SYEAR = '2024' AND SACCCODE = '1012-8-1') J CONNECT BY LEVEL <= REGEXP_COUNT(J.SCOMBINE, '[^,]+')) K GROUP BY K.SCOMPANYCODE, K.SYEAR, K.SACCCODE) B
ON A.SCOMPANYCODE = B.SCOMPANYCODE AND A.SYEAR = B.SYEAR AND A.SACCCODE = B.SACCCODE
WHERE A.SYEAR = '2024' AND A.SCOMPANYCODE = '2BJ1402066' AND A.SACCCODE = '1012-8-1' AND A.SDIMENSION_CODE = 'CU') E CONNECT BY LEVEL <= REGEXP_COUNT(E.SCOMBINE, '[^,]+')) N
ON M.SDIMENSION_CODE = N.SDIMENSION_CODE
LEFT JOIN GL_DIMESION O
ON O.SCOMPANYCODE = M.SCOMPANYCODE AND O.SYEAR = M.SYEAR AND O.SDIMENSION_CODE = M.SDIMENSION_CODE JOIN (SELECT SDIMENSION_CODE, SDIMENSION_PRO_CODE
FROM (SELECT SDIMENSION_CODE, SDIMENSION_PRO_CODE
FROM GL_VOUCER_S UNPIVOT (SDIMENSION_PRO_CODE FOR SDIMENSION_CODE IN (SCREDIT_CODE AS 'PC', SCURRENCY_CODE AS 'CU', SDEPT_CODE AS 'DP', SPORJECT_CODE AS 'PJ', SEMPLOYEE_CODE AS 'EP', SBPDP_CODE AS 'SBPDP'))
WHERE SCOMPANYCODE = '2BJ1402066' AND SYEAR = '2024' AND SACCCODE = '1012-8-1' AND SPERIOD_CODE BETWEEN '2024-01' AND '2024-06'
UNION ALL SELECT F.SDIMENSION_CODE, F.SPROP_VALUE SDIMENSION_PRO_CODE
FROM GL_VOUCER_S S JOIN GL_VOUCHER_F F
ON S.SCOMPANYCODE = F.SCOMPANYCODE AND S.SDOC_ID = F.SDOC_ID AND S.SPERIOD_CODE = F.SPERIOD_CODE AND S.IDOC_LINE_ID = F.IDOC_LINE_ID
WHERE S.SCOMPANYCODE = '2BJ1402066' AND S.SYEAR = '2024' AND S.SACCCODE = '1012-8-1' AND S.SPERIOD_CODE BETWEEN '2024-01' AND '2024-06'
UNION ALL SELECT B.SDIMENSION_CODE, B.SPROP_VALUE SDIMENSION_PRO_CODE
FROM GL_AUX_BALANCE A JOIN GL_AUX_RELATION B
ON A.SCOMPANYCODE = B.SCOMPANYCODE AND A.SACCCODE = B.SACCCODE AND A.SYEAR = B.SYEAR AND A.SRELATION_ID = B.SRELATION_ID
WHERE A.SCOMPANYCODE = '2BJ1402066' AND A.SYEAR = '2024' AND A.SACCCODE = '1012-8-1' AND A.SPERIOD_CODE BETWEEN '2024-01' AND '2024-06' AND NVL(A.NOPEN, 0) <> 0) GROUP BY SDIMENSION_CODE, SDIMENSION_PRO_CODE) P
ON M.SDIMENSION_CODE = P.SDIMENSION_CODE AND M.SDIMENSION_PRO_CODE = P.SDIMENSION_PRO_CODE
WHERE M.SYEAR = '2024' AND M.SCOMPANYCODE = '2BJ1402066' AND M.SACCCODE = '1012-8-1')
LEFT JOIN GL_SBP_M GS
ON SDIMENSION_CODE = 'PC' AND GS.SCREDIT_CODE = SDIMENSION_PRO_CODE AND GS.SCOMPANYCODE = '2BJ1402066';
DM8服务宕机后.在bin目录产生了core文件, 我通过gdb工具分析了core文件的相关堆栈信息,
su - dmdba
cd /home/dmdba/dmdbms/bin
gdb ./dmserver /xx/coredump/core.dmserver.xxxxxx
set logging file /home/dmdba/core_stack.log
set logging on
thread apply all bt
set logging off
将core文件里面的SQL打印到文本文件中,步骤:
/bin下执行
./dmrdc sfile=/xx/coredump/core.dmserver.xxxxxx dfile=/home/dmdba/core_sql.txt
然后将core_stack.log和core_sql.txt 上传了.
core_sql.txt
core_stack.txt
同时,我用dmdbchk工具做了检查, 报告中也没有发现错误.
您好 麻烦提供下版本信息下 多谢 select id_code();
表结构方便的麻烦也提供下,便于验证多谢。