우리는 느린 조회로 자신의 사이트를 파괴했다
5104 단어 codequalitydatabasearchitecture
일련의 게시물에서, 나는 우리가 지난 3개월 동안 저지른 다섯 개의 코드 설계 오류를 공유할 것이다.모든 게시물에서, 나는 너에게 무슨 일이 일어났는지 확실히 알 수 있도록 충분한 세부 사항을 제공할 것이다.나는 또한 우리가 이 문제를 어떻게 발견했는지, 우리가 그것을 어떻게 복원했는지, 그리고 우리가 어떻게 개발과 코드 심사 과정을 개선함으로써 대응했는지 토론할 것이다.나의 목표는 당신에게 정보와 건의를 제공하는 것입니다. 당신은 이런 정보와 건의를 사용하여 같은 실수를 피할 수 있습니다!
첫 번째 예에 들어가기 전에 코드 디자인 오류의 본질을 살펴보자.우선, 우리는 이러한 문제들을 성능, 안정성(bug), 안전성과 유지보수성 등 네 가지로 나누는 것이 매우 도움이 된다는 것을 발견했다.
All four of these weaknesses represent some of
the most difficult areas to analyze a system on.
이 목록을 자세히 살펴보면 그들이 말한'분석하기 어렵다'는 것은'정적 분석을 찾을 수 없다'는 것을 가리킨다.개발자가 코드의 질을 유지하기 위해 정적 분석기에 의존할 수 없다는 뜻이다.우리가 복잡한 문제를 찾아내고 해결하는 가장 좋은 도구는 코드 심사이다. 이것이 바로 우리가 모든 예시에 제공한 건의에서 더욱 좋은 코드 심사 실천이 현저한 위치를 차지하는 이유이다.이 점을 기억하고 우리의 첫 번째 실수를 시작합시다.
1. 우리는 느린 조회(성능)로 자신의 사이트를 파괴했다
이 잘못은 그것을 생산에 투입시켰기 때문에, 우리는 어쩔 수 없이 후퇴하여 그것을 복원해야 한다
느린 조회가 진정한 문제일 수도 있다.사용자 체험을 떨어뜨릴 뿐만 아니라, 웹 사이트의 성능이 충분하지 않으면 웹 서버와 인터페이스가 시간을 초과하여 (보통 30초 후) 응용 프로그램은 완전히 사용할 수 없을 것이다.AppLand Server 제품에는 약 100만 개의 AppMaps, 총 1TB의 데이터가 포함되어 있습니다.이것은 FAANG 규모는 아니지만, 여전히 충분하고, 효율이 낮은 조회는 문제를 초래할 수 있다.이게 우리한테 일어난 일인데..
맑은 날, 업데이트가 끝난 후, 우리는 프로그램의 홈페이지가 항상 시간을 초과하는 것을 발견했다.MiniProfiler을 사용하면 느린 검색이 문제를 일으킨 것을 알 수 있습니다.그리고 우리는 PostgreSQL EXPLAIN의 특성을 이용하여 조회를 분석한다.
다음은 조회 계획에 대한 링크입니다. 무슨 일이 일어났는지 정확히 알고 싶으면.
Slow query, cost = 175,000
구제책
모든 팀은 조회 계획을 읽고 조회를 최적화할 수 있는 사람이 필요하다. 우리는 확실히 이런 사람이 있다.일단 우리가 조회 계획이 생기면, 우리의 데이터베이스 전문가들은 문제의 근원이 인덱스되지 않은 연결이라는 것을 확정할 수 있다.영어로 말하자면, 우리의 조회는 두 표의 데이터를 한데 연결시킨다.처음에 우리의 데이터베이스가 매우 어렸을 때 조회 속도가 매우 빨라서 아무도 그 효율이 낮다는 것을 알아차리지 못했다. (작은 데이터 집합에서 효율이 낮은 조작은 어쨌든 매우 빠르다.)테이블이 점점 커지면서 조회도 점점 느려진다. 왜냐하면 우리는 데이터베이스에 색인을 제공하지 않았기 때문에, 이것은 효과적으로 줄을 매칭할 수 있기 때문이다.색인을 추가하는 것은 기본적으로 즉각적인 복구이다.솔직히 101 데이터베이스다.그러나 새로운 응용 프로그램을 개발할 때 이런 것들은 틈새에서 쉽게 빠져나간다.
프리벤션
아마도 당신은 PostgreSQL 조회 계획 전문가가 아닐 것입니다.나도 아니야.그러나 성능이 저하되는 문제를 방지하기 위해서는 쿼리 계획의 두 가지 사항만 알아야 합니다.
다음은 제안된 코드 변경에서
SQL DELETE
문이 삭제된 AppMap Trace Diff의 예입니다.우리의 코드 심사에서, 우리는 조회에 대한 어떤 대가가 높은 변경도 강조했다.그리고 가능하다면, 우리는 배치하기 전에 생산 데이터베이스에 있는 조회 계획을 검사하여, 그것들이 효력이 발생하기 전에 어떠한 의외의 상황도 포착할 수 있도록 한다.응용 프로그램과 데이터베이스에 더 좋은 모니터링 기능을 추가했습니다.마찬가지로 이것은 매우 기본적인 것이지만 창업팀은 매우 바쁘다.때때로 (많은 경우...) 더 중요한 것은 사용자의 수요를 충족시키기 위해 제품을 개선하는 것이지, 어느 날 발생할 수 있는 문제를 방지하는 것이 아니다.이 조회 속도가 느린 문제는 SQL을 감시하고 처리하는 데 있어서 우리의 수준을 향상시킬 때가 되었다는 것을 일깨워 준다.
읽어주셔서 감사합니다!이 시리즈의 다음 네 편의 문장을 계속 갱신하다.
AppMap for VSCode은 더 나은 Python, Ruby, Java 코드를 작성할 수 있도록 상호작용 맵과 체계 구조 분석을 제공합니다.2인치/₂ 차트를 설치, 구성 및 생성하는 분 수입니다.VS 코드 시장 보기!
AppMap과 코드 아키텍처의 차이점에 대한 자세한 내용은 our demo at the New York Enterprise Tech Meetup을 참조하십시오.
Reference
이 문제에 관하여(우리는 느린 조회로 자신의 사이트를 파괴했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/appland/we-knocked-out-our-own-site-with-a-slow-query-58c1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)