본문 바로가기

Database/DB

(41)
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..
DBMS core architecture 1 1. MVCC (Multi Version Concurrency Control) DBMS에서 Lock을 사용하지 않고, 데이터의 일기 일관성을 보장해 주는 내부 기법. (Lock은 서버의 동시성을 크게 떨어트린다. ) 객체의 변경사항을 모두 버전을 나누어 저장하고, 데이터 객체는 이 버전을 모두 연속체로서 정의, 관리하게 하여 락을 사용하지 않고 일관된 읽기를 보장. 1.1. MGA - Multi Generation Architecture (PostgreSQL) 데이터를 변경할때 해당 데이터를 변경하는것이 아닌, 새로운 데이터를 추가 후 새로운 데이터를 링크를 연결하는 방식 1.2 Undo 방식 (Oracle, mysql/innodb) Undo 영역을 따로 두고 최신 데이터는 데이터 영역에 두고, 올드 데..
postgreSQL 튜닝 이 글은 postgreSQL의 내부 구조를 어느 정도 안다고 가정하에 진행합니다. 1. shared buffer 튜닝 - DISK I/O를 최소화 함으로써 I/O의 성능을 향상하기 위한 버퍼 - 많은 사용자의 동시 접근할때의 경합 최소화가 목표 - 자주 사용되는 블록은 최대한 버퍼 내에 있어야 한다. 1.1 pg_prewarm() - 해당 테이블을 강제로 buffer로 올린다. (캐시처럼 사용하기 위해 미리 로드) - 테이블의 크기에 따라 buffer가 더 느려질 수도 있다. creste extension pg_prewarm; select pg_prewarm('t1') 1.2 HOT (heap only tuple) - MGA에 의한 단점으로 해당 테이블의 변경이 빈번할 경우 테이블 크기 상승과 해당 데이..
ERROR: cannot change sequence "*****" DB postgresql에서 PK의 다음번 순서를 변경해야 하는 상황이였습니다. (참고로 MySQL 은 컬럼에 AUTO_INCREMENT 속성을 사용 합니다. sequence는 오라클과 postgresql에만 있습니다.) 테이블의 구성은 아래와 같습니다. 즉 auth_user_id_seq를 변경해야 하는 상황에서 기존 쿼리문과 같이 update으로 실행하면 아래와 같이 에러가 발생합니다. sequence는 기존 테이블 방식이 아닌 Function형태로 작동하며, 변경 또한 다르게 표현됩니다. alter sequence 시퀀시이름 restart with 변경할값; DDL 형태로 변경하면 값을 변경할수 있습니다. 단지 last_value의 값이 현재의 값이며, 해당 값을 변경하기 위해서는 "restart w..
프로그래머스 SQL 고득점 KIT 몇몇 문제의 답안 입니다. (다 푸시고 보세요!!) 1. group by > 입양시각 구하기 (1) SELECT hour(DATETIME) as 'hour', count(hour(DATETIME)) as 'count' from ANIMAL_OUTS GROUP BY hour( DATETIME ) HAVING hour >= 9 and hour 입양시각 구하기 (2) select b.hour, ifnull(a.count, 0) as 'count' from (SELECT hour(DATETIME) as 'hour', count(hour(DATETIME)) as 'count' from ANIMAL_OUTS GROUP BY hour( DATETIME )) as a right outer join (SELECT 0 a..
sql Index 고려사항 1. 인덱스 대상 후보컬럼 선정 기준 분포도가 좋은 컬럼인가? 분포도의 기준은 1%이내 ex) 주문 테이블의 ‘배송여부’ 컬럼은 Y/N으로 분포도는 50%이다. 논리적식별은 50%이지만 대부분의 실데이터는 Y가 될것이고 분포도가 한쪽으로 극단적으로 쏠리기 때문에 인덱스 후보로 해도된다. ex) 고객 테이블의 성별은 남자/여자 로 50%이다. 하지만 이는 변하지 않는 데이터 이며, 50%의 분포도를 가지므로 인덱스가 딱히 필요치 않다 결합 인덱스의 경우도 해당 결합된 데이터의 분포도를 추산하여 인덱스를 선정한다. 갱신이 자주 발생하지 않는 컬럼인가? update가 발생하면 index를 갱신하기 때문에 성능에 좋지 않지만! 꼭 필요한 경우에는 복합인덱스로 해야 한다. ( 검색 조건에 필요한 경우에 ) 조건절..
Field 'ssl_cipher' doesn't have a default value ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value Mysql 버전이 높아지면서 보안관련 인한 오류 User 생성시 Host, User ,Password, ssl_cipher, x509_issuer, x509_subject 를 입력 필수 ssl_cipher, x509_issuer, x509_subject 값은 '' 빈값을 입력. $ insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) values('localhost','사용자명',password('비밀번호'),'','',''); ERROR 1364 (HY000): Field 'authenticat..