본문 바로가기

Database

(50)
파티셔닝 실습 - postgresql 1) 선언적 파티션 선언적 파티션 구성 실습은 postgres 10.X 이상에서만 가능하다. 9.* 버전의 경우 테이블 파티션 명령어가 없기 때문에 2) Partitioning Using Inheritance(하단 참조)를 사용해야 한다. select version(); 1. 파티션 테이블 생성 대형 아이스크림 회사를 위한 데이터베이스를 구축한다고 가정합니다. 이 회사는 매일 최고 기온과 각 지역의 아이스크림 판매량을 저장할 테이블을 다음과 같이 예정이다. 1 2 3 4 5 6 CREATE TABLE measurement ( city_id int not null, -- 도시 id logdate date not null, -- 날짜 peaktemp int, -- 최고 온도 unitsales int -- 판..
파티션 개념 DB 운영 방식 한대의 DB 서버에서 운영한다. 이중화 : 한대의 서버만 운영하니까 불안해, DB 서버가 죽으면 서비스가 되지 않으니까 DB 서버를 두대로 만들자. 레플리카 : 서버 두대로도 부족한 거 같아. 한대가 죽으면, 한대로 운영하는 동안 백업을 할 수가 없어 레플리카는 기본적으로 서버 4대가 한 묶음이다. 샤딩 / 파티션 : 하나의 테이블에 너무 많은 데이터가 있어서 느려졌어, 관리도 힘들어, 테이블을 나누지만 하나의 테이블처럼 사용하자 proxySQL : 서버 여러대를 하나의 서버처럼 사용하고 싶어 파티션 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 설루션 파티션을 사용하는 이유 하나의 테이블이 너무 커서 인덱스의 크기..
객체 지향 데이터베이스 (OODB / object-oriented Database) 객체지향 데이터베이스 객체 지향 데이터베이스는 객체 지향 패러다임을 사용하는 객체지향 프로그래밍에서 영향을 받아 생성되었다. 객체지향 프로그래밍과 마찬가지로 실세계의 객체를 DB로 표현하기 위해 만들어졌었다. 객체 표현을 관리하는 데이터베이스 기술, ODMG 2.0 표준으로 기술되어 있다. 객체 모델의 핵심 기능은 다음과 같습니다. 속성 및 관계 개체 속성 개체 작업 (동작) 및 예외 다중 상속 범위 및 키 개체 이름 지정 Atomic, structured and collection literals List, set, bag and array collection classes 동시성 제어 및 객체 잠금 객체 관계 데이터베이스를 위한 데이터 언어 표준으로 ISO에서 제시한 SQL3가 있다. 참고로 객체지향..
LeetCode sql 문제, 유저별 월별 집계 https://leetcode.com/problems/reformat-department-table/ Reformat Department Table - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 쉬운 문제인데, 푸는데 너무 오래 걸렸다. sql은 언제나 수행이 부족하다. 아래와 같이 테이블이 있을 때 Department table: +------+---------+-------+ | id | revenue | month | +------+---------+-..
postGIS 쿼리 튜닝 자체 서버에서 돌고 있던 postgreSQL을 aws의 RDS로 이관하는 작업을 하였다. RDS로 이관 후 CPU가 99%에서 내려오질 않는 현상을 발견했다. 해당 테이블은 데이터도 적을 뿐더러, 기존 자체 서버의 성능이 워낙 좋았던 탓에 누구도 쿼리를 손보지 않고 돌리고 있었던 것으로 판단하였다. (기존 서버에서는 cpu성능이 좋아서 30%을 넘지 않았다) 쿼리 변경전 RDS CPU 모니터링 상황 해당 쿼리는 GIS 관련 쿼리로 하나의 포인트 지점에서 가장 가까운 5곳에 해당하는 데이터를 가져오는 쿼리였다. 테이블 : wstn 테이블내 데이터 갯수 : 1567 공간칼럼이름 : loc 기존 쿼리는 ST_Distance_Sphere를 이용해서 작성되었었다. 1. ST_Distance_Sphere 두 개의 ..
1. redis 설치 & 실행 설치 $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make install 실행 / 종료 # start $ redis-stable/src/redis-server # stop $ src/redis-cli shutdown 백그라운드 실행 redis.conf의 daemonize no → yes 옵션 변경 필요 $ grep "daemonize" redis.conf daemonize yes $ redis-stable/src/redis-server redis-stable/redis.conf redis 사용량 통계 프로그램 github.com/junegunn/redis-stat
postgreSQL core Oracle, PostgreSQL, MySQL Core Architecture 책 발췌 1. MVCC architecture postgreSQL는 Multi Generation Architecture이다. 이는 update 작업이 발생 시 페이지의 이전 레코드를 overwrite 하는 대신 새로운 레코드를 만드는 구조이다. postgreSQL의 레코드의 헤더는 레코드가 어디에 입력했는지 가르키는 라인 포인터를 가지고 있으며, 실제 레코드의 정보는 튜플의 헤더에 정보를 가지고 있다. - t_xmin : insert 시의 XID - t_xmax : delete 시의 XID - t_cid : insert, delete , command id - t_ctid : 해당 튜플의 현재 버전을 가리키는 포인터 - t_..
DBMS core architecture 2 Buffer manager - 버퍼 캐시를 관리하는 메인 메모리 영역, - Replacement algorithm ( victim frame selection을 위한 dirty bits를 유지 관리 ) == 페이징 교체 알고리즘 1. 페이징 교체 알고리즘 1.1 victim frame selection - 메모리는 프레임(frame) 단위 - 디스크의 페이지가 메모리에 올라오면 free frame에 할당하는데 만일 모든 프레임이 사용 중이라면 비어 있는 프레임 확보 필요. 이 작업을 victim frame selection이라 한다. - 프레임에 있는 페이지가 dirty 상태라면 디스크에 변경된 내역을 저장 - dirty 상태가 아니라면 프레임 clear() Oracle, mysql(innodb) : L..