전체 글

'DBA 업무'와 '알게되는 정보'를 기록하는 공간
Vacuum 사전적의미로 청소, 진공, 공백을 의미합니다. PostgreSQL 에서 Vacuum 은 MVCC 에 의해 현재 사용되지 않는 이전의 저장된 값들을 정리합니다. Vacuum 을 하는 이유 PostgreSQL 은 MVCC 에 의해 이전의 값들이 갱신되거나 삭제되더라도 새로운 데이터로 추가(갱신 경우)하고 기존의 데이터는 정리하지 않고 삭제표기만 남겨둡니다. 이렇게 사용하지 않는 값들로 인해 파일 사이즈가 커져 성능저하가 발생하게 되는걸 방지합니다. Transaction ID 가 겹침으로 인해 자료의 손실이 발생하는 것을 방지합니다. 이전의 데이터가 정리되면서 실행계획에서 사용할 통계치 정보를 최신으로 갱신해 줍니다. Visibility MAP ( VM = Dead Tuple 의 존재 여부를 표기..
MVCC 란 ( Multi Version Concurrency Control ) 하나의 트랜잭션에서 데이터에 접근하는 경우 데이터의 다중버전 상태 중 보장되는 버전에 맞는 값을 반환하여 처리하는 방법을 의미합니다. 데이터의 다중버전 상태 아래의 단계를 설명하겠습니다. Step 1. a 에는 30이라는 데이터가 저장되어 있습니다. Step 3. 트랜잭션1에서 a 는 50 으로 데이터를 갱신했습니다. 이 값을 commit 하기 전입니다. Step 4. 트랜잭션2에서 a 는 30 으로 데이터가 조회됩니다. 트랜잭션1에서 데이터를 갱신했지만, 트랜잭션 2는 여전히 이전의 값을 조회하고 있습니다. 어떻게 조회할 수 있는것일까요? 데이터를 다중버전 상태로 유지하고 있어 commit 전까지는 이전의 값을 undo 영..
PostgreSQL 백업 방법 PostgreSQL 은 장애시 복구를 위해 3가지 백업방법이 있습니다. 3가지 방법은 SQL 덤프 / 파일 시스템 기반 백업 / 아카이브 모드 백업입니다. 이 중 아카이브 모드 백업에 대해 다뤄보겠습니다. 아카이브 모드 백업 PostgreSQL 은 미리쓰기기로그 (WAL, Write ahead log) 을 pg_xlog 디렉터리에서 관리합니다. 이 로그는 데이터베이스에 대한 모든 조작 기록을 보관하고 있어, 서버가 갑자기 비정상적으로 종료된경우 데이터파일에 적용하지 못한 작업은 이 로그파일을 읽어서 복구할 수 있습니다. 이 로그를 다른 서버로 보내, 이 로그의 내용을 그대로 실행하여 원본 서버와 똑같이 만들수 있습니다. 또한 특정시점 까지만 실행하도록 하여, 특정시점으로 복..
PostgreSQL 백업 방법 PostgreSQL 은 장애시 복구를 위해 3가지 백업방법이 있습니다. 3가지 방법은 SQL 덤프 / 파일 시스템 기반 백업 / 아카이브 모드 백업입니다. 이 중 파일 시스템 기반 백업에 대해 다뤄보겠습니다. 파일시스템 백업 방법 말그대로 데이터파일을 압축해서 백업하는 방식입니다. 백업 전 PostgreSQL 을 중지해야 합니다. 1 tar -cvzf PostgreSQL.tar.gz /var/lib/postgresql/10/main cs 파일시스템 복원 방법 압축한 파일을 PostgreSQL 데이터경로에 풀어줍니다. 이 후 DB 를 재구동합니다. 버전과 아키텍처에 영향을 받습니다. 만약 복원경로가 변경되는 경우에는 pg_ctl 명령어를 사용하여 기본 디렉터리를 변경해 줍니다..
PostgreSQL 데이터베이스 경로 확인 방법 1. 데이터베이스의 기본 데이터파일 경로 확인 data_directory 를 확인합니다. 실제 데이터파일은 이 폴더경로의 base 폴더 하위에 있습니다. 1 2 3 4 postgres=# show data_directory; data_directory ----------------------------- /var/lib/postgresql/10/main cs 2. 각 데이터베이스의 oid 를 확인 이 oid 를 확인해 주는 이유는 위 data_directory 경로의 base 폴더에 database_id 값으로 폴더가 생성되기 때문입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 postgres=# select oid as database..
PostgreSQL 백업 방법 PostgreSQL 은 장애시 복구를 위해 3가지 백업방법이 있습니다. 3가지 방법은 SQL 덤프 / 파일 시스템 기반 백업 / 아카이브 모드 백업입니다. 이 중 SQL 덤프에 대해 다뤄보겠습니다. SQL 덤프 백업방법 이 백업방식은 pg_dump 명령어로 진행합니다. pg_dump 를 실행하면 DB_NAME 데이터베이스에 생성된 객체와 데이터들을 SQL 구문 텍스트 형식으로 백업합니다. 기본적으로 표준출력이기 때문에 리다이렉션 기능을 사용하여 파일로 저장합니다. 1 $ pg_dump DB_NAME > postgres_DB_NAME_bak.sql cs pg_dump 에서 제공하는 연결 옵션 옵션을 보면 일반 클라이언트와 동일하게 원격으로 접속할 수 있는 옵션을 제공하고 있습..
인터페이스와 추상클래스 개념 모두 추상이라는 개념을 사용하여 자식클래스의 기능을 구현해줍니다. 추상클래스 뒤에 클래스라고 붙은 것처럼, 추상클래스는 클래스의 한 종입니다. 클래스의 일종이기 때문에 자식클래스에서 추상클래스를 상속받아 사용할 수 있고, 추상클래스에서 추상클래스를 상속받아서도 사용할 수 있습니다. ( 자식클래스는 일반 혹은 추상클래스 중 한개만 상속가능 ) 추상클래스는 추상메소드를 사용할 수 있고, 자식클래스에서 추상메소드의 구현을 강제하도록 합니다. 추상클래스를 상속받은 자식클래스에서 추상메소드 구현을 안하면 오류가 발생합니다. 인터페이스 클래스의 유형이 아니기 때문에 자식클래스는 여러개의 인터페이스를 상속받을 수 있습니다. 인터페이스도 마찬가지로 추상메소드를 구현할 수 있습니다. 다만, ..
일반클래스와 추상클래스 차이 일반클래스는 클래스 앞에 abstract 명령어가 붙지 않는 반면 추상클래스는 클래스 앞에 abstract 명령어가 붙는 클래스를 의미합니다. 일반클래스 내에서 함수에 abstract 를 붙일 수 없는 반면 추상클래스 내에서는 함수에 abstract 를 붙일 수도 붙이지 않을 수도 있습니다. 일반클래스는 부모클래스라고 하더라도 객체 생성이 가능한 반면 추상클래스는 객체생성이 불가능 합니다. 자식클래스는 일반클래스 혹은 추상클래스를 상속을 통해 부모클래스로 둘 수 있습니다. ( 한 개만 가능 ) 일반 클래스 1 2 3 4 5 6 7 8 class A { public A () { } // 생성자 메소드 abstract public void f_a() { } // 이렇게 추상메소드..
오류 발생 이클립스에서 자바 프로그램을 작성 후, 실행을 했는데 아래와 같은 오류가 발생했습니다. The selection cannot be launched, and there are no recent launches. 이 오류는 실행모드가 저장이 안되어 있어서 발생하는 오류이며, 저같은 경우에는 이클립스 실행 시 metadata 충돌로 metadata 폴더를 삭제 후 발생했습니다. 오류 해결 방법 1. 이클립스에서 Window - Preferences 로 들어갑니다. 2. Launching 에서 Launch the associated project 를 선택합니다. 설정을 보니 Launch the previously launched application 으로 되어있던데, 이는 프로그램 실행 이전에 실행했..
자바 코드의 기초 자바의 모든 프로그램은 public static void main (String[] args) 함수로 시작합니다. 왜 모든 코드는 위의 구문으로 실행이 되어야 할까요? 이 의미를 파헤쳐 보도록 하겠습니다. ( 자바의 기초를 아시는 분들은 이해하기가 좀 더 쉬울 수 있습니다. ) 코드 파헤치기 public 제한자 부분으로, 모든 함수의 앞에는 이 함수를 어디에서 접근할 수 있는지 범위를 지정할 수 있습니다. 제한자는 public, private, protected 종류를 지정할 수 있지만 main 함수만은 public 을 지정해야 합니다. private 나 protected 를 사용하게 되면 아래와 같은 에러가 발생합니다. 왜그럴까요? main 함수는 모든 실행프로그램의 기본이 되는 함수..
꽁담
꽁담