우리는 .NET 4.0에서 개발 한 OLTP 시스템을로드 테스트 중이며 뒤에서 SQL Server 2008 R2를 실행하고 있습니다. 이 시스템은 성능이 뛰어난 SQL Server Service Broker 큐를 사용하지만 처리하는 동안 독특한 추세를 경험하고 있습니다.
SQL Server는 1 분 동안 블리 스터링 속도로 요청을 처리 한 다음 ~ 20 초의 디스크 쓰기 작업을 증가시킵니다. 다음 그래프는 문제를 보여줍니다.
Yellow = Transactions per second
Blue = Total CPU usage
Red = Sqlsrv Disk Write Bytes/s
Green = Sqlsrv Disk Read Bytes/s
문제 해결 과정에서 패턴을 크게 변경하지 않고 다음을 시도했습니다.
- SQL Server 에이전트를 중지했습니다.
- 거의 모든 다른 실행중인 프로세스를 종료했습니다 (No A / V, SSMS, VS, Windows Explorer 등)
- 다른 모든 데이터베이스를 제거했습니다.
- 모든 대화 타이머를 비활성화했습니다 (트리거를 사용하지 않음).
- 메시지 큐 기반 접근 방식에서 단순 / 원유 테이블 모니터링 설계로 이동했습니다.
- 가벼운 것에서 무거운 것까지 다른 하중을 사용했습니다.
- 모든 교착 상태를 수정했습니다.
SQL Server가 캐시를 구축하고 특정 시간 기반 간격으로 디스크에 쓰는 것처럼 보이지만이 이론을 지원하기 위해 온라인에서 아무것도 찾을 수 없습니다.
다음으로 문제를 복제 할 수 있는지 확인하기 위해 솔루션을 전용 테스트 환경으로 옮길 계획입니다. 중간에 도움이 될 것입니다.
업데이트 1 요청에 따라 Checkpoint Pages / Sec , Page Life Expectancy 및 일부 디스크 대기 시간 카운터 를 포함하는 그래프가 있습니다 .
Checkpoint (연한 파란색 선)가 관찰중인 성능 저하 (노란색 선)의 원인 인 것처럼 보입니다. ^
디스크 대기 시간은 처리 과정에서 비교적 일정하게 유지되며 페이지 수명은 눈에 띄는 영향을 미치지 않는 것 같습니다. 또한 SQL Server에 사용할 수있는 램의 양을 조정했지만 큰 영향을 미치지 않았습니다. 에서 복구 모델 변경 SIMPLE
에 FULL
또한 만들어 약간의 차이.
업데이트 2 다음과 같이 "복구 간격"을 변경하여 검사 점이 발생하는 간격을 줄였습니다.
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'recovery interval', '30'
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE
이것이 나쁜 습관인지 확실하지 않습니까?
FULL
또는에 있더라도 전체 백업을 수행 할 때까지는 BULK_LOGGED
마치 데이터베이스 처럼 작동 SIMPLE
합니다.