dblink

PostgreSQL에서 TXID_CURRENT()와 DBLINK를 이용해서 XID를 아주 빠르게 증가시키는 방법

간혹, PostgreSQL의 내부 동작원리를 파악하기 위해서 XID를 아주 큰 값 (10억 또는 20억)으로 증가시켜야 할 경우가 있습니다. 이러한 경우, 이전 포스팅에서 소개한 것과 같이 DBLINK를 이용한 LOOP COMMIT 방식을 사용할 수도 있지만, DML을 통해 10억건 이상을 생성(또는 생성 후 삭제)하는 것은 리소스 소모적이며 그에 따라 오랜 시간이 소요됩니다. 따라서 아주 빠르게 XID를 증가시킬 수 있는 방법이 필요합니다. 가장 효과적인 방법은 TXID_CURRENT() 함수를 이용하는 것입니다. SELECT 수행 시에는 XID가 증가하지 않지만, SELECT TXID_CURRENT();를 수행하면 XID가 1 증가합니다. 이러한 속성을 이용해서 다음과 같은 프로시저를 작성합니다. (제 환경에서 XID를 10억 증가시키는데 소요되는 시간은 대략 20시간 정도입니다. DB LINK & LOOP COMMIT 방식은 10일 이상 소요될 것으로 예상된 것에 비하면 10배 이상 빠른 방법입니다)

(more…)

PostgreSQL의 dblink extension을 이용한 autonomous 트랜잭션 구현 방법

PostgreSQL은 현재까지(버전 9.6) plpgsql내에서 autonomous 트랜잭션을 지원하지 않습니다. 하지만 dblink 익스텐션을 이용하면 autonomous 트랜잭션을 구현하는 것이 가능합니다. 제 경우에는 Vacuum 동작원리를 파악하기 위해 XID를 빠르게 증가시킬 필요가 있었습니다. 하지만 PostgreSQL은 LOOP 내에서의 COMMIT을 허용하지 않으므로 dblink 익스텐션을 이용해서 해당 기능을 구현했습니다. 사용 방법은 다음과 같습니다.

(more…)