
VMWare ESXi에서 실행되는 Windows 2008 R2 가상 서버의 백엔드에서 SQL Server 2008 R2 Express를 실행하는 앱이 있습니다. 사용자들은 앱이 매우 느리다고 불평합니다. 나에게는 이해가 되지 않는 매우 높은 디스크 IO가 있습니다.
배경:
- 평균 디스크 큐 길이는 약 60, 최대 길이는 약 250입니다.
- 평균 디스크 읽기/초는 약 2000이고 최대 약 3500입니다.
- 리소스 모니터는 sqlservr.exe가 약 40-60MB/초의 속도로 .mdf 파일을 읽고 있음을 보여줍니다(아래 참조). 쓰기 IO가 매우 낮습니다.
- .mdf 파일은 2GB에 불과하므로 전체 파일이 메모리에 맞아야 합니다.
- 서버에 32GB RAM이 있고 일반적으로 16GB 미만을 사용합니다.
- 서버에는 RAID10에 8x 15k SAS 디스크가 있습니다. SSD를 사용하여 CacheCade(SSD 기반 읽기 캐시)를 활성화할 수 있는 PERC H710 컨트롤러를 갖춘 Dell입니다. 시도해보고 싶지만 어쨌든 모든 것이 RAM에 캐시되어야 하는 것 같아서 이것이 도움이 될지 잘 모르겠습니다.
- SQL VM은 VMWare ESXi 5를 실행하는 Dell 서버에 있습니다. 해당 ESXi 호스트에는 다른 VM이 하나 있지만 IO가 거의 없는 도메인 컨트롤러입니다.
- 이 앱은 이전에 독립 실행형 Windows 2003 서버에서 실행되었습니다. 우리는 Windows 2008 R2로 업그레이드하고 동시에 앱을 최신 버전으로 업그레이드했기 때문에 이러한 요인 중 하나가 원인일 수 있습니다.
이 문제를 더 깊이 파헤칠 수 있는 옵션은 무엇입니까? SQL 서버가 내부적으로 무엇을 하고 있는지(어떤 쿼리가 실행되고 있는지 등) 확인할 수 있는 방법이 있습니까? 이 동작은 정상적인 것으로 보입니까? 로드가 저장소에 비해 너무 큽니까? 뭔가 올바르게 구성되지 않은 것인지 궁금합니다.
답변1
http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx#Scalability
Espress는 SQL 프로세스에 1GB 이상의 RAM을 사용하지 않습니다. 4GB 이상을 사용하려면 최소한 Web 또는 Standard를 구입하여 설치해야 합니다. 둘 다 64를 지원하므로 둘 중 하나를 선택하세요.
또한 DBA가 되는 것은 꽤 깊은 주제이지만 Technet과 도움말 파일을 통해 쉽게 접근할 수 있습니다. "어떤 쿼리가 실행되고 있는지 어떻게 알 수 있습니까?"는 거의 1일 차 주제입니다(주어진 작업에 어떤 버전이 적합한지 아는 것도 마찬가지입니다.) 프로파일러는 Express에서도 사용할 수 없으므로 다음과 같은 문제가 있습니다. 지금은 구성되었습니다.
답변2
쿼리 세부 정보 보기 - 물리적 또는 논리적 IO가 높은 쿼리를 확인하고 격리한 후 쿼리 계획을 살펴보세요. 2008 R2 같은 구식 버전을 사용한지 몇년이 되었는데... http://gallery.technet.microsoft.com/scriptcenter/Find-inefficient-query-88f4611f당신에게 시작을 줄 수 있습니다.
내 포인터는 테이블 스캔을 트리거하는 누락된 인덱스를 향한 것입니다. 프로파일러와 튜닝 마법사도 문제가 있는 위치를 파악하는 데 도움이 될 수 있습니다. 2008 R2의 관리자에 이미 활동 개요가 있는 경우 가장 비용이 많이 드는 쿼리가 포함된 멋진 창이 있는 것입니다.