SQL 문장 실행 시간 초과 로 사이트 홈 페이지 방문 고장 문제 발생

죄 송 하지만 오늘 아침 6:37~8:15 사이 에 사이트 홈 페이지 의 블 로그 목록 을 얻 은 SQL 문 구 는 갑 작 스 러 운 조회 시간 초과 문제 가 발생 하여 사이트 홈 페이지 를 방문 할 때 500 오류 가 발생 하여 귀 찮 게 하 였 습 니 다.양해 해 주 십시오.
고장 난 상황 은 이렇다.
고장 기간 에 로그 에 아래 의 오 류 를 많이 기록 하 였 습 니 다.
2020-02-03 06:37:24.635 [Error] An unhandled exception has occurred while executing the request./Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareSystem.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 at System.Data.SqlClient.SqlCommand.<>c.b__126_0(Task`1 result)
데이터베이스 서버(아 리 클 라 우 드 RDS SQL Server 2016 인 스 턴 스)의 CPU 소모 가 급증 했다.

데이터베이스 서버 의 IOPS 가 폭 증 했다.

알 리 클 라 우 드 RDS 콘 솔 의 클 라 우 드 DBA 를 통 해 고장 기간 에 첫 페이지 의 블 로 그 를 가 져 온 SQL 문 구 를 3 만 번 이상 볼 수 있 는데,이렇게 여러 번 실행 한 것 은 조회 시간 이 초과 되 어 캐 시 를 만 들 수 없고 요청 할 때마다 데이터베이스 에 접근해 야 하기 때문이다.

고장 이 발 견 된 후 우 리 는 아 리 운 RDS 의 주 비 를 통 해 정상 으로 전환 되 었 다.
고장 에 대한 조사 분석 을 통 해 잠 겨 있 는 가장 큰 혐의 대상 은 SQL Server 파라미터 탐지(상세 한 것 은 정원 안의 박문 SQL Server 파라미터 탐지 기 란 무엇 입 니까? 참조)이다.
다른 사람 이 생 성 한 실행 계획 을 다시 사용 하기 때문에 발생 하 는 수토 불복 현상 에 대해 SQL Server 는'파라미터 탐지 parameter sniffing'이라는 전문 명사 가 있다.
그리고 SQL Server 파라미터 탐지 문 제 를 일 으 키 는 조건 을 찾 았 습 니 다.
우리 의 open api 에서 첫 페이지 의 블 로그 목록 을 가 져 오 는 웹 api 를 제공 하지만 가 져 올 수 있 는 최대 블 로그 수,즉 아래 의 ItemCount 매개 변수(open api 를 제외 하고 다른 곳 에서 호출 할 때 ItemCount 값 은 모두 20)를 제한 하지 않 습 니 다.SELECT TOP (@ItemCount)만약 에 누군가가 open api 를 호출 할 때 ItemCount 에 큰 값 을 전 달 했 습 니 다.예 를 들 어 20000,같은 SQL 문 구 를 호출 했 지만 ItemCount 의 값 이 다 르 기 때문에 SQL Server 는 차이 가 큰 실행 계획 을 생 성 할 수 있 습 니 다.ItemCount 20000 의 성능 이 좋 은 실행 계획 은 ItemCount 20 에 대해 성능 이 매우 떨 어 질 수 있 습 니 다.ItemCount 20000 을 조회 할 때 생 성 된 실행 계획 이 캐 시 되 고 ItemCount 20 을 조회 할 때 이 실행 계획 을 계속 사용 하면 원래 좋 았 던 SQL 조회 가 갑자기 성능 이 매우 나 빠 집 니 다.우리 가 오늘 만난 고장 은 바로 이 원인 일 가능성 이 높 고 고장 이 났 을 때 하나의 SQL 문장 에 문제 가 발생 했 습 니 다.(마침 이 SQL 조회 캐 시 에 수토 불복 의 실행 계획 이 있 습 니 다)다른 것 은 모두 정상 적 이 고 이 추측 도 검증 되 었 습 니 다.
이번 고장 을 통 해 우리 가 얻 은 교훈 은 반드시 코드 에서 ItemCount 와 PageSize 의 최대 치 를 제한 해 야 한 다 는 것 이다.이것 은 불필요 한 저 성능 조 회 를 가 져 올 뿐만 아니 라 SQL Server 파라미터 탐지 문제 로 인해 전체 데이터 베 이 스 를 무 너 뜨 릴 수도 있다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 SQL 문장의 실행 시간 초과 로 인해 사이트 의 첫 페이지 방문 고장 문 제 를 일 으 키 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기