이 문서는 읽기전용 PostgreSQL 서버를 대상으로 하는 튜닝 경험에 대해서 정리한 것입니다. 환경 테스트된 서버 환경은 다음과 같습니다. CPU: Inter(R) Xeon(R) CPU E5606@2.13GHz * 2 RAM: 32GB HDD: SAS 450GB OS: Linux PostgreSQL: 9.2 이 서버는 하루에 한번 덤프된 PosgreSQL 데이터를 전송받아서 Restore 하고 읽기전용, 그러니까 SELECT 쿼리만 사용 합니다. Linux 튜닝 리눅스 튜닝에 핵심은 공유메모리, 최대 열수 있는 파일수, 메모리관련 커널 파라메터들 입니다. 이는 최대 물리 메모리에 영향을 받습니다. 공유메모리 리눅스의 최대 공유메모리는 다음과 같은 계산으로 세팅이 가능합니다. 단, […]
git 파일 삭제후 복구.
git 를 사용하다 보면 local 저장소에서 실수로 파일을 삭제하는 실수를 저지를 수 있다. 이때 파일을 되살린다고 ‘git pull’ 이나 ‘git fetch’를 해봐도 나오는 메시지는 최신판(Already up-to-date)라는 것이다. 이를 이용하는 경우에 어떻게 해야하나? 먼저 삭제한 디렉토리로 이동한다. 그리고 다음과 같이 입력을하면 삭제한 파일 목록을 얻을 수 있다.
1 |
]$ git ls-files -d |
사실 삭제된 파일은 다시 checkout 받으면 된다. 다음과 같이 말이다.
1 |
]$ git checkout a.py |
리눅스를 잘 다루는 사람이라면 이것을 한번에 할수 있다.
1 |
]$ git ls-files -d | xargs git checkout -- |
차량 정비 할 것들
연료필터 카트리지 – 점검해서 교체해야겠다면 해주시면 됨. 아무 유상이라고 들었는데, 돈 낼 의향있음. 브레이크패드 점검, 브레이크액 점검 – 점검 바랍니다. 급정거할때 조금 밀리는듯 하기도 하던데, 부품교체 않하고도 뭘 조정하면 되는건지… 마스터 실린더 압력 세나? 트렁크 쇼바 – 잘 안올라감. 다른 분과 비교해봐도 문제 있음 트렁크 재진패드 – 이건 전에 이슈가 되었는데 정비받지 않았음. 엔진떨림(엔진미미) – 거기다 엔진미미 개선품 나온거 알고 있음. 그리고 문제가 있는게 정차, 저속과 약간 오르막에서 떨림 많음 있음. 저속에서 차량 긁는 소리도 간혹 들림. 토션빔 점검(타이어 편마모) […]
Thread
이 문서는 Perl Thread 문서를 기반으로 작성되었습니다. Thread 의 기초부터해서 Thread의 구현을 Perl, Python 으로 직접 구현해보고 비교하도록 하겠습니다. 출처: http://www.xav.com/perl/lib/Pod/perlthrtut.html Thread? 쓰레드(Thread)는 프로세스(Process)보다 작은 프로그램 단위 입니다. 좀 더 정확하게 말하자면 프로그램은 적어도 한개의 프로세스로 구성되며 적어도 하나의 쓰레드로 구성됩니다. 적어도 하나의 프로세스에서 하나의 쓰레드는 결국 하나의 실행 포인트를 가집니다. 적어도 하나의 프로세스내에서 다중 쓰레드를 쓴다는 것은 결국 다중의 실행 포인트를 가진다는 것을 의미 합니다. 다중의 실행 포인트? 요즘에 멀티코어(Multi Core) CPU가 많이 나옵니다. 프로그램은 이 멀티코어 CPU에 의해서 실행되는데 […]
LG 노트북 P420-KE45K 하드디스크 교체기
4년전쯤에 노트북이 필요해서 둘러보던중에 14인치 노트북을 구매했습니다. LG 에서 나온 노트북인데, i5(샌디브릿지), 4GB RAM, 640GB, 블루투스, Wifi 인터넷등 필요한 기능이 다 있으면서도 13인치 폼팩터에 화면크기는 14인치라서 휴대성도 높을거 같아서 구매했습니다. 제게 시간이 지났어도 이만한 노트북을 다시는 볼수 없더군요. (뭐.. Dell XPS13 도 있지만 13인치는 너무 작아서…) 그런데, 이 녀석의 단점이 하나 있습니다. 바로 HDD 교체가 힘들다는 겁니다. 대부분의 노트북은 뒷판에 일부분을 열어서 교체할 수 있도록 되어 있지만, 이 노트북은 뒷판에 나사를 풀고 키보드 상판을 뜯어야 합니다. 문제는 상판을 아주 시원하게 […]
튜플(Tuple) 과 백쿰(VACUUM)
PostgreSQL 은 다른 데이터베이스 시스템은 테이블(Table)에 데이터를 레코드(Record) 혹은 로우(Row)라고 한다. 그런데, PostgreSQL 에서는 튜플(Tuple)이라는 것이 존재합니다. 이 튜플은 PostgreSQL 에서 매우 중요한 요소 입니다. 이에 대해서 간략하게 알아 보도록 하겠습니다. 통계정보 확보. 먼저 이 튜플을 알기 위해서는 PostgreSQL 이 제공하는 통계정보를 알아 볼 필요가 있다. 이 통계정보에는 로우 갯수와 튜플 갯수등을 볼 수 있고 로우에 변화에 따라서 이들이 어떻게 변하는지를 추적할 수 있으며 이를 토대로 튜플이 과연 무엇인지를 알 수 있게 된다. 샘플 테이블을 만들자.
1 2 3 4 5 6 |
testdb2=> CREATE TABLE tuple_test ( id NUMERIC NOT NULL, rand_num NUMERIC NOT NULL, birth DATE, CONSTRAINT id_pk PRIMARY KEY (id) ); |
그리고 샘플 데이터를 […]
Better VACCUM FULL For PostgreSQL 9.0
원문:https://wiki.postgresql.org/wiki/What’s_new_in_PostgreSQL_9.0#Better_VACUUM_FULL 지금까지 VACUUM FULL 은 매우 느렸다. 이 구문(Statement)는 테이블로부터 빈공간을 확보하고 그것의 크기(Size)를 줄였지만 VACUUM 은 만족할만큼 빠르게 동작하지 않았다. 이것이 느린 이유는 동작 방법에 문제가 있었기 때문이다. 레코드를 그들의 소스블럭으로부터 테이블에 시작점에 가까운 블럭으로 하나하나씩 읽어서 옮겼었다. 그리고 테이블에 끝이 빈공간이면 그 부분을 지웠다. 전략적으로 이러한 방법은 매우 비효율적(Inefficient) 이다. 레코드를 하나하나씩 옮기는 것은 랜덤 I/O를 발생시킨다. 게다가, 인덱스(Index)를 재구성하는 동안에 그것을 유지하고, 더 많은 비용이 들어가는, 인덱스는 파편화된다. 이럴바에는 VACUUM FULL이 다 끝나고 나서 재인덱스(reindex)를 하는 것이 […]
명시적 락킹(Explicit Locking)
이 문서는 PostgreSQL 9.1.2 문서중에 13.3 챕터를 해석한 것입니다. 전문 번역가도 아니고 중학교 영어만으로 해석한 것이어서 의미전달이 제대로 되지 않을 수도 있음을 미리 밝힙니다. 원문: http://www.postgresql.org/docs/9.1/static/explicit-locking.html 13.3 명시적 락킹(Explicit Locking) PostgreSQL 은 테이블의 데이터에 동시적 접근(concurrent access)을 제어하기 위해서 다양한 락 모드(Lock mode)를 제공합니다. 이러한 모드들은 MVCC(다중 버전닝 동시성 제어)가 바라던 해동을 제공해주지 않을때에 애플리케이션 제어 락킹을 하려고 할때에 사용되어질수 있습니다. 또 대부분의 PostgreSQL 명령어들(commands)은 명령어가 실행되는 동안에 비호환적인 방법으로 참조하는 테이블이 변경되거나 버려지진(Dropped)않도록 하기위해서 자동적으로 적절한 락을 획득합니다. (예를들어, TRUNCATE는 […]
외부에서 Postgresql 접속할 수 있도록 설정하기
Postgresql 설치를 하게되면 외부에서 접속을 기본적으로 할 수 없게 되어 있다. 호스트 기반 인증 파일인 pg_hba.conf 파일만 고친다고 되지 않는다. 외부에서 접속하는 서버의 IP를 192.168.0.18 이라고 가정한다. pg_hba.conf 파일 Postgresql 은 Host Based Authorization 기반으로 외부 접속을 제어 한다. 이는 pg_hba.conf 파일을 다음과 같이 편집함으로써 가능하다.
1 |
host all all 192.168.0.18/32 md5 |
위 설정은 모든 데이터베이스에 대해서 모든 사용자에 대해서 192.168.0.18 에서 접속을 허용한다는 내용이다. postgresql.conf 파일 이 파일도 반드시 설정을 바꿔줘야 외부에서 접속을 할 수 있다. 바꿔야 할 설정은 다음과 같다.
1 |
listen_addresses = '*' # what IP address(es) to listen on; |
이걸하지 않하면, […]
PostgreSQL 과 문자셋
PostgreSQL 도 문자셋에 관해서 많은 옵션들을 제공한다. 그런데, 대부분은 이에 대해서 잘 모르는 듯해서 여기서 정리해 본다. PostgreSQL 에서 문자셋 지정을 처음 하는 부분은 바로 설치를 마친후에 initdb 명령어를 사용하면서 부터다 대충 다음과 같이 사용한다.
1 |
su -l postgres -c "/usr/local/pgsql9.1/bin/initdb -E UTF8 --locale=ko_KR.UTF-8 --pgdata='$PGDATA' " |
문제는 저러한 문제셋 설정이 과연 향후 PostgreSQL 을 사용하는데 있어 어떤 영향을 주는가 하는 것이다. 먼저 PostgreSQL 은 ISO C 와 POSIX 등의 언어표현에 관해 지원 한다. Locale 보통 initdb –locale=ko_KR.UTF-8 로 사용되어지는 것으로 운영체제에 종속적이다. 운영체제에서 지원하는 locale 만 사용할 수 있는데, 리눅스의 […]