강력한 서버에서 SQL Server 2014를 실행하는 약 1TB의 큰 데이터베이스가 있습니다. 몇 년 동안 모든 것이 잘 작동했습니다. 약 2 주 전에 다음을 포함한 전체 유지 관리를 수행했습니다. 모든 소프트웨어 업데이트 설치; 모든 인덱스와 컴팩트 DB 파일을 다시 빌드하십시오. 그러나 실제로드가 동일 할 때 특정 단계에서 DB의 CPU 사용량이 100 %에서 150 % 이상 증가 할 것으로 예상하지 못했습니다.
많은 문제 해결 후 매우 간단한 쿼리로 범위를 좁혔지만 해결책을 찾지 못했습니다. 쿼리는 매우 간단합니다.
select top 1 EventID from EventLog with (nolock) order by EventID
항상 약 1.5 초가 걸립니다! 그러나 "desc"를 사용하는 유사한 쿼리는 항상 약 0ms가 걸립니다.
select top 1 EventID from EventLog with (nolock) order by EventID desc
PTable에는 약 5 억 개의 행이 있습니다. 데이터 유형이 bigint (Identity 열) 인 EventID
기본 클러스터형 인덱스 열 (ordered ASC
)입니다. 맨 위에있는 테이블에 데이터를 삽입하는 스레드가 여러 개 (큰 EventID) 있으며 맨 아래에서 데이터를 삭제하는 스레드가 하나 (작은 EventID)입니다.
SMSS에서는 두 쿼리가 항상 동일한 실행 계획을 사용하는지 확인했습니다.
클러스터형 인덱스 스캔;
예상 행 번호와 실제 행 번호는 모두 1입니다.
예상 및 실제 실행 수는 모두 1입니다.
예상 I / O 비용은 8500입니다 (높은 것으로 보입니다)
연속적으로 실행하는 경우 쿼리 비용은 둘 다에 대해 동일한 50 %입니다.
색인 통계를 업데이트했는데 with fullscan
문제가 지속되었습니다. 색인을 다시 작성하고 반나절 동안 문제가 사라진 것처럼 보였지만 다시 돌아 왔습니다.
나는 다음과 같이 IO 통계를 켰다.
set statistics io on
그런 다음 두 쿼리를 연속적으로 실행하고 다음 정보를 찾았습니다.
(첫 번째 쿼리의 경우 느린 쿼리)
'PTable'테이블. 스캔 카운트 1, 논리적 읽기 407670, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
(두 번째 쿼리의 경우 빠른 쿼리)
'PTable'테이블. 스캔 카운트 1, 논리적 읽기 4, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
논리적 읽기의 큰 차이점에 유의하십시오. 인덱스는 두 경우 모두에 사용됩니다.
인덱스 조각화는 약간 설명 할 수 있지만 그 영향은 매우 작습니다. 그리고 문제는 전에 일어난 적이 없습니다. 또 다른 증거는 다음과 같은 쿼리를 실행하는 것입니다.
select * from EventLog with (nolock) where EventID=xxxx
xxxx를 테이블에서 가장 작은 EventID로 설정하더라도 쿼리는 항상 매우 빠릅니다.
확인했으며 잠금 / 차단 문제가 없습니다.
참고 : 위의 문제를 단순화하려고했습니다. "PTable"은 실제로 "EventLog"입니다. 는 PID
것입니다 EventID
.
NOLOCK
힌트 없이 동일한 결과 테스트를 얻습니다 .
아무도 도와 줄 수 있습니까?
다음과 같은 XML의보다 자세한 쿼리 실행 계획 :
https://www.brentozar.com/pastetheplan/?id=SJ3eiVnob
https://www.brentozar.com/pastetheplan/?id=r1rOjVhoZ
create table 문을 제공하는 것이 중요하다고 생각하지 않습니다. 오래된 데이터베이스이며 유지 관리까지 오랫동안 완벽하게 실행되었습니다. 우리는 많은 연구를 스스로 해왔고 내 질문에 제공된 정보로 좁혔습니다.
테이블은 EventID
열을 기본 키로 사용하여 정상적으로 작성되었으며 이는 identity
유형 의 열입니다 bigint
. 현재 색인 조각화에 문제가 있다고 생각합니다. 인덱스 재 구축 직후, 반나절 동안 문제가 사라진 것 같습니다. 근데 왜 이렇게 빨리 돌아 왔어?