내 서버 중 하나가 다른 서버보다 성능이 뛰어나고 이유를 알고 싶습니다. 다른 서버도 잘 작동하도록하려면 다음과 같이하십시오.네트워크를 통한 SQL에 대한 .NET 액세스가 로컬보다 빠릅니다. 그 이유는 무엇입니까?
여기 내) 시나리오 : 프로덕션 환경 인 하나의 SQL Server 2012 상자가 있습니다.이 PROD를 호출 해 봅시다. 몇 가지 쿼리를 반복해서 실행하는 .NET 도구가 있습니다. 로컬 데이터베이스와 통신하는 서버 자체에서이 도구를 실행하면 간단한 쿼리 집합에 대해 4 ~ 20ms의 응답 시간을 얻고보다 복잡한 쿼리에 대해서는 응답 시간이 589 ~ 731ms가됩니다.
동일한 사양의 다른 SQL Server 2012 상자도 있습니다.이 STAG을 호출하겠습니다. 이 상자에 동일한 도구를 실행하면 PROD 데이터베이스 (예 : 동일한 코드, 동일한 연결 문자열 등)에 연결하면 간단한 쿼리의 경우 0 ~ 1ms, 복잡한 쿼리의 경우 109 ~ 133ms의 응답 시간이 발생합니다. 즉 현저히 좋다.
동일한 사양의 세 번째 SQL Server 2012 상자가 있습니다.이 테스트를 호출하겠습니다. 다시 PROD에 연결되는 동일한 도구를 실행하면 응답 시간이 4에서 15 사이, 600에서 800 ms 사이가됩니다.
사실이 패턴은 STAG 환경을 제외한 모든 서버 (또는 클라이언트)에서이 도구를 실행하면 타이밍이 거의 동일하다는 것입니다. 다른 모든 환경을 수행하는 것은 단지 STAG이며, 나는 그 이유를 정말로 알고 싶습니다!
SSMS에서 쿼리를 실행하면 모두 성능이 좋습니다 (예 : 예상했던대로 매우 빠름).
그래서 대부분의 상자에서 .NET에서 데이터베이스에 액세스하는 것은 STAG 서버를 제외하고는 오버 헤드가 있으며 모든 서버가이 수준의 성능을 갖기를 바랍니다.
것들 내가 확인했는데 모두 일치 나타납니다
- SQL 클라이언트 및 서버 프로토콜 및 구성
- 기본 하드웨어 (이 모두 같은은 vSphere 인프라에서 실행중인)
- .NET 프레임 워크 버전
- AV 버전과 정책은
내가 확인하기 위해 다른 알고 손실에있어 적용 - 누구든지 다른 제안을 할 수 있습니까?
감사
마크
분석하십시오. 내 말은, * 실제 * 분석은 설정을 비교하거나 상황이 동일해야한다고 가정하지 않습니다.Wireshark를 사용하여 네트워크 트래픽을 추적하고 패킷 지연, 쿼리 통계 설정 (SET STATISTICS ON ON), 쿼리 계획을 확인하십시오. SQL Server 또는 기본 네트워크/CPU/메모리 인프라에서 쿼리 실행으로 인한 차이가 있는지 여부를 먼저 확인해야합니다. 내 돈은 후자에 달렸어. (가상 하드웨어도 하드웨어이기 때문에 실제 하드웨어보다 훨씬 이상하게 작동 할 수 있습니다.) –
나는 위에 언급 한 설정으로 SSMS에서 동일한 쿼리를 실행하는 것과 관련하여 SQL Server와 관련이 없으며, 0 밀리 초가 걸립니다. 또한 STAG 서버에서 PROD 로의 액세스 속도가 훨씬 빠르다는 사실은 데이터베이스를 쿼리하는 다른 방법이 빠르기 때문에 .NET 자체와 관련이 있음을 나타냅니다. wireshark에 대해 살펴 보겠습니다.하지만 서버 자체가 다른 서버보다 속도가 느리다는 사실 또한 이상하게 보입니다. –
Wireshark를 사용하여 TEST 서버에 대한 데이터 송수신이 STAG보다 약 30ms 느리다는 것을 알 수 있습니다. STAG는 네트워크 및 PROD 서버의 기본 하드웨어가 문제가 아니라는 것을 보여줍니다. 실행중인 코드 줄 및 네트워크를 통한 메시징 - .NET System.Data.SqlClient 내부? 하지만 이것을 우리가 사용하는 블랙 박스와 똑같지 않습니까? –