;WITH RESULTS AS (
SELECT 1174 AS BatchRunID, 'STATINV' AS Program, m.APPL_CD, m.ALBASE, 'CountFocusRecords' AS Measure, COUNT(*) AS Value
FROM [MISWork].[SX_FOCUS_NATIVE_200806] AS m WITH(NOLOCK)
INNER JOIN MISProcess.SXProcessCatalog AS cat WITH(NOLOCK)
ON cat.APPL_CD = m.APPL_CD
AND cat.ALBASE = m.ALBASE
AND COALESCE(cat.ProcessName, 'STATINV') = 'STATINV'
GROUP BY m.APPL_CD, m.ALBASE
UNION
SELECT 1174 AS BatchRunID, 'STATINV' AS Program, c.APPL_CD, c.ALBASE, 'CountBiminiRecords' AS Measure, COUNT(*) AS Value
FROM [MISWork].[SX_STATINV] AS c WITH(NOLOCK)
INNER JOIN MISProcess.SXProcessCatalog AS cat WITH(NOLOCK)
ON cat.APPL_CD = c.APPL_CD
AND cat.ALBASE = c.ALBASE
AND COALESCE(cat.ProcessName, 'STATINV') = 'STATINV'
GROUP BY c.APPL_CD, c.ALBASE
UNION
SELECT 1174 AS BatchRunID, 'STATINV' AS Program, m.APPL_CD, m.ALBASE, 'RecordsInFocusMissingInBimini' AS Measure, COUNT(*) AS Value
FROM [MISWork].[SX_FOCUS_NATIVE_200806] AS m WITH(NOLOCK)
LEFT JOIN [MISWork].[SX_STATINV] AS c WITH(NOLOCK)
ON m.[YEAR] = c.[YEAR]
AND m.[MONTH] = c.[MONTH]
AND m.[BANK_NO] = c.[BANK_NO]
AND m.[COST_CENTER] = c.[COST_CENTER]
AND m.[GLACCOUNT_NO] = c.[GLACCOUNT_NO]
AND m.[CUSTACCOUNT] = c.[CUSTACCOUNT]
AND m.[APPL_CD] = c.[APPL_CD]
AND m.[ALBASE] = c.[ALBASE]
INNER JOIN MISProcess.SXProcessCatalog AS cat WITH(NOLOCK)
ON cat.APPL_CD = m.APPL_CD
AND cat.ALBASE = m.ALBASE
AND COALESCE(cat.ProcessName, 'STATINV') = 'STATINV'
WHERE c.[YEAR] IS NULL
GROUP BY m.APPL_CD, m.ALBASE
UNION
SELECT 1174 AS BatchRunID, 'STATINV' AS Program, c.APPL_CD, c.ALBASE, 'RecordsInBiminiMissingInFocus' AS Measure, COUNT(*) AS Value
FROM [MISWork].[SX_FOCUS_NATIVE_200806] AS m WITH(NOLOCK)
RIGHT JOIN [MISWork].[SX_STATINV] AS c WITH(NOLOCK)
ON m.[YEAR] = c.[YEAR]
AND m.[MONTH] = c.[MONTH]
AND m.[BANK_NO] = c.[BANK_NO]
AND m.[COST_CENTER] = c.[COST_CENTER]
AND m.[GLACCOUNT_NO] = c.[GLACCOUNT_NO]
AND m.[CUSTACCOUNT] = c.[CUSTACCOUNT]
AND m.[APPL_CD] = c.[APPL_CD]
AND m.[ALBASE] = c.[ALBASE]
INNER JOIN MISProcess.SXProcessCatalog AS cat WITH(NOLOCK)
ON cat.APPL_CD = c.APPL_CD
AND cat.ALBASE = c.ALBASE
AND COALESCE(cat.ProcessName, 'STATINV') = 'STATINV'
WHERE m.[YEAR] IS NULL
GROUP BY c.APPL_CD, c.ALBASE
) SELECT * FROM RESULTS ORDER BY Program, APPL_CD, ALBASE, Measure
코드는 그냥 거기 앉아, 아니 잠금 또는 차단이 내 시스템에서 생성 된 실제 코드입니다.
UNION의 개별 구성 요소는 각각 몇 초 안에 반환됩니다. 이 코드는 일반적으로 STAT 그룹에있는 다른 모든 프로그램의 출력 결과를 확인하는 데 사용되지만이 프로그램의 경우 중지됩니다.
CTE를 제거하고 효과가 없으며 30 분/1 시간 동안 앉아 있지만 취소하기 전에 오랫동안 기다려야합니다.
UNION을 제거하면 4 개의 결과 집합이 11 초 만에 반환되며 총 4 개의 결과 집합에 대해 총 19 개의 레코드가 반환됩니다.
처음 두 개를 함께 실행하십시오. 정상적으로 작동하며 마지막 2 개를 함께 실행하십시오. 함께 처음 3, 괜찮아.
다른 요구 사항을 위해이 코드를 #temp 테이블에 출력하도록 코드를 수정 했으므로 #temp 테이블을 차례대로 출력하도록 변경하려고합니다. 그러나 SQL을 본 적이 없습니다. 막히거나 아무것도 보이지 않는 상태에서 멈추십시오.
그 중 아무 것도 효과가 없었습니다. 올바른 조깅은 그 일과 관련이 없어야합니다. 그렇죠? 코드 게인 프로 시저에서 게으르다가 출력을 뒤집는 대신 LEFT JOIN 대신 RIGHT JOIN을 만들었습니다. –
일반적으로 왼쪽 가입과 오른쪽 가입은 문제없이 서로 종속 될 수 있습니다. 그러나 이것은 쿼리 최적화 프로그램 버그와 같아서 쿼리 계획에 영향을주는 것이 무엇이든 유발할 수 있습니다. 동일한 문제가있는 테스트 DB에 액세스 할 수있는 경우 프로파일 러를 시작하고 살펴보십시오. –
생각해 보니 - 전체 쿼리에 대해 병렬 처리를 비활성화하려면 각 SELECT 끝에 (UNION ALL 이전에) OPTION (MAXDOP 1)이 필요하다고 생각합니다. –