데이터베이스

    PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 #2 - 옵션 별 실제 동작 확인하기

    PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 #2 - 옵션 별 실제 동작 확인하기

    안녕하세요. 어느덧 4월이 찾아왔습니다. 2024년이 시작된 것이 엊그제 같은데 정말 많은 일들이 있었네요 ㄷㄷㄷ 이번에는 PostgreSQL EXPLAIN 명령어에 대해서 조금 더 자세히 공부해보려고 합니다. EXPLAIN 명령어를 공부한 적이 있었지만 지금 보니 많이 까먹었더라고요 ㅜㅠ PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 - 언제까지 쿼리 하나하나 시간 측정하면서 튜닝할 거에요! 이참에 자세히 공부해보겠습니다! 0. EXPLAIN 명령어 옵션에는 어떤 것들이 있을까요? 이전에는 ANALYZE 옵션만 사용했는데 이번 기회에 다른 파라미터들도 사용하면서 공부해보려고 합니다. PostgreSQL 데이터베이스에 테스트 데이터를 채운 상태로 각 옵션을 활성화/비활성화 시켰을 때의 결과값..

    데이터베이스 테이블 rotation - DB에 데이터가 계속해서 쌓여서 용량이 꽉차면 어떡하죠...?

    안녕하세요. 오늘은 데이터베이스 table rotation에 대해서 공부해보도록 하겠습니다. log rotation이라는 용어는 많이 들어보셨을 거에요! 파일 크기가 커지기 쉬운 로그는 관리하지 않으면 로그 파일이 너무 커져서 시스템의 디스크 용량을 모두 차지하여 부팅이 안되는 등의 문제가 발생할 수 있습니다. 이를 예방하기 위해서 로그 파일이 일정 크기 이상 커지거나 일정 기간이 지난 경우 제거하고는 합니다. 이렇게 로그 파일의 크기를 일정하게 유지하는 일련의 작업들을 log rotation 이라고 합니다. 로그 파일과 비슷하게 데이터베이스의 테이블에도 데이터가 계속해서 쌓일 수가 있습니다. 데이터베이스 테이블의 용량을 무제한으로 설정할 수는 없기 때문에 table rotation을 수행해줘야 합니다!..

    PostgreSQL 계정 생성하기

    1. psql를 이용해서 PostgreSQL에 접속 계정을 생성할 수 있는 권한을 가진 계정으로 접근해야 합니다! 2. alter user {유저 ID} with password '{수정하고 싶은 비밀번호}'; 예시) CREATE USER postgres WITH PASSWORD 'newpassword';

    PostgreSQL constraint - DB가 할 수 있는건 DB한테 맡기자!

    안녕하세요. 오늘은 PostgreSQL의 constraint에 대해서 공부해보려고 합니다. constraint이란 대부분의 데이터 타입은 숫자인지, UUID 포맷을 따르는지 등의 아주 기본적인 제약사항만 가지고 있습니다. 하지만 비즈니스 로직을 수행하기 위해서는 보다 상세한 제약사항이 필요합니다. 예를 들어, "통장"이라는 테이블에 "잔고(원)"라는 열이 있다면 이 열은 0 이상의 정수여야 합니다. SQL에서 이를 지원해주는 것이 바로 constraint입니다. 어플리케이션 레이어에서 유효성을 확인하는 것보다 DB의 constraint을 활용하는 것이 훨씬 간단하고, 효율적이니 활용하는 것을 적극 추천드립니다. constraint의 종류 PostgreSQL에서 지원하는 constraint에는 다음 종류가..

    PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요?

    안녕하세요! 오늘은 Oracle 데이터베이스를 공부하다가 데이터 타입에서 SERIAL을 찾지 못하여 글을 남기게 되었습니다. SERIAL 데이터 타입 PostgreSQL에서 지원하는(MySQL도 지원하더라구요) SERIAL 데이터 타입은 정확한 의미로 타입은 아닙니다. SEQUENCE를 자동으로 설정해주는 일종의 wrapper 데이터 타입입니다. PostgreSQL에서는 smallserial(2 byte), serial(4 byte), bigserial(8 byte)를 제공하고 있습니다. SEQUENCE란? SEQUENCE는 데이터베이스에서 관리해주는 스트림으로 고유한 NUMERIC 필드를 위해서 사용됩니다. 데이터베이스에서 자체적으로 원자성을 지켜주기 때문에 중복된 값이 들어갈 염려가 없다는 장점이 있..

    PostgreSQL 에러 "too many connections ~" 대응 방법

    PostgreSQL 에러 "too many connections ~" 대응 방법

    PostgreSQL을 사용하다 보면 종종 "too many connections ~" 에러를 접한 적이 있으신가요? 이 에러는 말 그대로 데이터베이스가 허용할 수 있는 최대치의 연결이 맺어져서 더 이상의 연결을 거절하는 것입니다. 그러면 어떤 상황에서 데이터베이스에 연결이 많이 맺어질까요? 제가 겪었던 상황은 크게 2가지였습니다. 서버에 데이터 조회 요청이 순간적으로 많이 몰릴 때 쿼리 실행 중 에러가 발생하여 연결이 Idle인채로 남아있을 때 각각의 상황을 살펴보도록 하겠습니다. 1. 서버에 데이터 조회 요청이 순간적으로 많이 몰릴 때 1. 데이터베이스의 스케일링 2. API 서버에서의 연결 수 제어 3. 캐시 레이어의 추가로 데이터베이스 부하 조절 이 문제를 해결할 수 있는 대표적인 방법으로는 데이터..