SQL 문장 실행 시간 초과 로 사이트 홈 페이지 방문 고장 문제 발생
2788 단어 SQL집행 하 다.시간 을 초과 하 다
고장 난 상황 은 이렇다.
고장 기간 에 로그 에 아래 의 오 류 를 많이 기록 하 였 습 니 다.
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.
데이터베이스 서버(아 리 클 라 우 드 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 문장의 실행 시간 초과 로 인해 사이트 의 첫 페이지 방문 고장 문 제 를 일 으 키 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.