DB 9

PostgreSQL Connection이 90분만에 끊어지는 상황 해결하기

네트워크 라우터의 TCP 연결 타임아웃과 Postgres keep-alive 설정에 대한 흥미로운 사례를 공유하고자 한다.부제는 "Cisco와 Windows의 조합으로 만들어진 혼돈" 정도로 하고자 한다. 문제 상황Windows 환경에서 Postgres 클라이언트와 DB 서버를 사용하던 중, 90분이 지나면 연결이 끊어지는 현상이 발생했다. 이 문제를 해결하기 위해 Cisco 공식 문서를 찾아보면서 원인을 파악할 수 있었다.라우터의 연결 상태 관리 방식라우터는 로컬 상태 테이블에서 연결들을 추적하며, 이를 통해 라우팅 결정을 내리고 유효하지 않은 패킷을 필터링한다. 이 상태 정보는 다음과 같은 경우에 제거된다:양쪽 중 한 쪽이 연결을 종료할 때연결이 너무 오랫동안 유휴 상태일 때 (클라이언트와 서버가 모..

DB/PostgreSQL 2024.11.29

벡터 데이터베이스는 잘못된 추상화임

AI 애플리케이션을 구축하려는 엔지니어링 팀을 괴롭히는 메시지 : "임베딩이 다시 동기화되지 않았습니다"간단한 벡터 검색 구현은 모니터링, 동기화 및 문제 해결의 복잡한 오케스트라로 발전함벡터 데이터베이스로 AI 시스템을 구축하는 엔지니어링 팀과 이야기를 나눈 결과, 벡터 데이터베이스의 잘못된 추상화와 오늘날 사용 방식의 결함을 발견함"RAG 시스템을 구축하는 공통적인 사례"Pinecone을 벡터 데이터베이스로 사용하여 임베딩을 저장하고 검색함텍스트 데이터가 Pinecone의 메타데이터에 잘 맞지 않아 DynamoDB로 블롭과 애플리케이션 데이터를 처리함어휘 검색을 위해 OpenSearch가 필요했음 이제 3개의 시스템을 연결하고 동기화하는 것이 악몽임소스 문서를 삭제할 때 다음을 수행해야 함:boto3..

DB/Vector DB 2024.11.05

PostgreSQL Vacuum 관련 쿼리 간단 모음

PostgreSQL를 사용하는 프로젝트에서 DevOps 업무를 맡았을 때 자주 사용했던 쿼리들을 간단히 정리해보았다. -- t_product 테이블의 Auto VACUUM 설정을 비활성화 ALTER TABLE public.t_product SET (autovacuum_enabled = false); -- 가장 오래된 20개의 테이블들의 목록 조회 SELECT c.oid::regclass AS table_name, greatest(age(c.relfrozenxid), age(t.relfrozenxid)) AS age, pg_size_pretty(pg_table_size(c.oid)) AS table_size FROM pg_class c LEFT JOIN pg_class t ON c.reltoastrelid..

DB/PostgreSQL 2024.02.07

[MySQL 8.0] 중복된 인덱스 및 거의 사용되지 않는 인덱스 조회하기

데이터베이스 성능 향상을 위해 모든 엔지니어가 가장 먼저 고려하는 것이 바로 인덱스의 적용이다. 적절한 인덱스를 추가하는 것만으로 왠만하면 성능이 개선되기 때문에 인덱스 추가는 DB 성능 관련해서는 빠질수가 없는 솔루션이다. 인덱스는 성능에 있어 필요하지만 때때로 엔지니어들은 너무 과도하게 인덱스를 사용하는 경우가 있다. 이러한 경우, 중복 인덱스가 발생해서 오히려 전체 성능이 크게 저하되기 마련이다. 인덱스가 많아지게 되면 각 인덱스에 필요한 용량이 늘어나기 때문에 역설적으로 각 인덱스가 사용할 수 있는 가용 메모리의 크기가 줄어들게 된다. 또한, INSERT 등의 write 요청에 대해 고려해야 하는 인덱스의 수가 늘어나게 되면 해당 쿼리의 성능이 점점 떨어지게 된다. MySQL 5.x에서는 중복 인..

DB/MySQL 2024.02.07

MySQL where문에서 boolean 체크 관련 성능 튜닝

MySQL에서 boolean 타입의 플래그를 추가하기 위해 보통 BOOLEAN 타입을 사용하게 된다. 이 boolean 타입은 사실 tinyint(1)과 유의하다고 볼 수 있다. MySQL에서 제공해주는 false나 true와 같은 상수를 사용해서 where문에 조건을 추가해 줄 수가 있게 된다. 이 불린 값 체크를 위해서 아래와 같이 많은 방법이 있을 수 있다: -- is문 사용 SELECT * FROM TABLE WHERE flag is true; -- boolean값 자체를 조건문으로 사용 SELECT * FROM TABLE WHERE flag; -- '='을 사용해서 값을 비교 SELECT * FROM TABLE WHERE flag = true; 논리적인 관점에서 위의 3가지 타입의 쿼리는 모두 ..

DB/MySQL 2024.01.17

데이터베이스 정규화

정규화(Normalization) 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 조금 더 이론적으로 접근해 보면 함수적 종속성을 이용해서 연관성 있는 속성들을 분류하고, 각 릴레이션들에서 이상현상이 생기지 않도록 하는 과정을 말한다. 정규화 된 정도를 정규형(Normal Form) 으로 표현하는데, 정규형에는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 까지 있다. 비공식적 표현으로는 3NF 가 되었으면 정규화 되었다고 말한다. 3NF 테이블의 대부분이 삽입, 변경, 삭제 이상이 없으며, 3NF 테이블의 대부분이 BCNF, 4NF, 5NF이다. 각 정규형이 되기 위해서는 만족시켜야 할 제약조건들이 있다. 높은 차수의 정규형으로 갈 수록 ..

DB 2022.03.31

E-R 모델 (E-R Model)

E-R 모델 (E-R Model) E-R 모델은 데이터를 개체(Entity), 속성(Attribute), 관계성(Relationship)으로 나타내는 데이터 모델이다. 1. 개체 (Entity) 개체란 단독으로 존재하는 객체를 의미한다. 하나의 E-R 모델에서는 동일한 객체가 둘 이상 존재하지 않는다.E-R 다이어그램에서는 개체를 네모로 표시한다. 개체중에는 약한 개체(Weak Entity)라고 불리는 것이 있다. 이 약한 개체란, 스스로 존재할 수 없으며, 반드시 상위 개체가 존재해야 존재할 수 있는 개체이다. 약한 개체는 E-R 다이어그램에서 2개의 네모 (네모 안에 네모가 있는 형태)로 표시한다. 2. 속성 (Attribute) 개체가 갖는 속성이다. E-R 다이어그램에서 속성은 원(혹은 타원)으로..

DB 2018.10.22

관계형 모델 (Relational Model)

관계형 모델 (Relational Model) 1. 관계형 모델 "관계형 모델"은 함수 종속(Functional Dependency)에 의해 정규화(Normalization)된 모델이다. "함수 종속"이란, 어떤 릴레이션 R에서 X, Y가 릴레이션 R의 부분 속성(Attribute)이라고 할 때 속성 X의 도메인 값 각각에 대해 시간에 관계 없이 항상 속성 Y의 도메인 값이 오직 한개만 연관된다면 Y는 X의 함수 종속이라고 하고, X(결정자) -> Y(종속자)로 표시한다. 함수 종속과 정규화에 대해서는 나중에 자세히 다루도록 하겠다. 관계형 모델은 데이터를 컬럼(column = 열)과 로우(row = 행)를 이루는 하나 이상의 테이블(또는 관계)로 정리하며, 고유 키(Primary key)가 각 로우(r..

DB 2018.10.22

데이터베이스 기본 지식

데이터베이스와 파일 시스템 1. 데이터베이스란? 데이터베이스는 체계화된 데이터의 모임이다. 즉, 작성된 목록으러써 여러 응용시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용데이터들의 묶음이다. 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다. 2. 파일 시스템이란? 파일 시스템(file system)은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 가리키는 말이다. 파일 시스템은 통상 하..

DB 2018.10.07