전체글622 NOT IN 쿼리 성능 개선하기 (PostgreSQL) 일반적으로 모든 RDBMS에서 부정조건 (not in, != 등) 은 인덱스를 선택하지 못한다. 이는 부정조건이 그 조건 외 나머지 모두를 뜻하기 때문인데, 지정된 대상을 빨리 찾는것이 인덱스임을 고려하면 그것 외 나머지라는 것 자체가 전체를 읽어야만 알 수 있는 정보이기 때문이다. 이럴때 가장 효율적인 해결 방법은 not in 을 없애는 것이다. 가장 대표적으로는 left outer join 이 있다. as-is) 아래의 쿼리는 현재 거의 2초에 가까운 시간이 소요되는 쿼리이다. select id from courses WHERE ("status"::text = 'publish' AND "published_date" < now() AND "exposure" AND "deleted_at" IS NULL).. 2022. 1. 17. NodeJS 와 PostgreSQL Query Timeout 작은 서비스를 운영할때는 문제가 없던 서비스가 데이터가 적재되면 될수록 점점 슬로우 쿼리가 등장하게 됩니다. 이때 쿼리 시간을 제한하지 않으면, 5분/10분씩 수행되는 쿼리가 운영 환경에서 실행하게 되기도 하는데요. 이런 쿼리가 트래픽에 맞춰 여러개 요청이 온다면 결국 Node에서 사용가능한 Connection Pool이 가득차 더이상 쿼리 질의를 못하거나, 심한 경우 데이터베이스의 장애로 서비스가 사용불가능하게 되기도 합니다. 그래서 적정시간 이상으로 쿼리가 수행되면 강제로 종료하고, 다시 요청하도록 하는것이 일반적인 방식인데요. 해당 상황과 PostgreSQL에서의 옵션에 대해 소개드립니다. 1. 실험 환경 실험의 경우 아래 환경에서 진행합니다. Node 16 PostgreSQL 14 (by Dock.. 2022. 1. 14. PostgreSQL (Aurora) 10 vs 11 버전 성능 비교 PostgreSQL은 버전별로 굉장히 많은 개선이 있다. 2022년 1월 13일 현재, AWS RDS Aurora는 PostgreSQL 버전을 10, 11, 12, 13까지 지원하고 있다. 실제 PostgreSQL은 14까지 나와있으며, 현재 Aurora가 아닌 RDS는 14 RC1 까지 준비되었다. 10 버전이 이미 출시된지 4년 이상 지났고, 현재까지 메이저 14버전까지 출시되면서 성능/자원관리/기능등 여러 개선이 있었다. 특히나 인덱스가 10.x에서 비효율적으로 작동하는 부분이 굉장히 크기 때문에 이를 버전 업그레이드를 통해 성능개선 효과를 볼 필요가 있다. 10 vs 11 비교 PostgreSQL의 10 ~ 14버전 간 여러 기능 비교 중, 인덱스 & 제약조건에 관한 비교를 본다. PostgreS.. 2022. 1. 13. Mac 업데이트 이후 Docker 실행 안될 경우 어느날 Mac 업데이트 이후부터, docker-compose 실행이 안되기 시작했습니다. 아래와 같은 에러가 발생했는데요. 전체 에러로그는 다음과 같습니다. Traceback (most recent call last): File "docker/api/client.py", line 268, in _raise_for_status File "requests/models.py", line 941, in raise_for_status requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/version During handling of the above exception, anothe.. 2022. 1. 9. 여러컬럼으로 Join 맺어야할 경우의 인덱스 실제 발생했던 쿼리) SELECT i.id, i.titles[1] title, i.icon_url, ic.user_id FROM institutions i INNER JOIN interested_corporations ic ON ic.institution_id = i.id AND ic.deleted_at IS NULL INNER JOIN users u ON ic.user_id = u.id AND u.deleted_at IS NULL INNER JOIN vouchers v ON v.user_id = u.id AND v.deleted_at IS NULL AND v.course_id = ? WHERE i.priority > ? AND i.type = ? AND NOT (u.is_admin = true AND .. 2022. 1. 7. 지금이 유튜브 나갈때냐? 월/화 장애가 이젠 완전히 해소된 것 같아서 회고 정리중에, 이번주 월/화동안 고객센터(채널톡) 에서 내 이름이 꽤 언급되었다. 내용은 다음과 같은 유형이다. "직장인들 퇴근하고 가장 많이 공부하는 시간에 접속이 안되네요 이동욱씨 유튜브에서 좋은 개발자 어쩌구 하기전에 서비스부터 좋게 만드셨으면 하네요" 비슷한 건들이 몇개 더 있다 이틀 연속 동일한 시간대에 몇시간씩 장애가 났기때문에, 유료 서비스를 사용중인 고객분들 입장에서 화 나는건 당연하다고 생각한다. 과거의 코드가 서비스의 발목잡는건 너무 흔한일이고, 인프런 합류할때 어느정도 예상한 일이기도 했지만, 그걸 핑계로 고객분들 사용하시는데 불편을 드리는게 당연한 일은 아니라고 생각한다. 그래서 죄송한 마음 뿐이다. 아 물론 이걸로 화 안나냐고 하실분도.. 2022. 1. 6. 이전 1 ··· 23 24 25 26 27 28 29 ··· 104 다음