AWS RDS에서 pg_repack 사용

9394 단어 postgresawsdatabase
데이터베이스가 계속 커짐에 따라 데이터베이스 팽창 문제를 해결해야 할 가능성이 높습니다.
Postgres 13은 인덱스를 동시에 재구축하는 내장된 방법과 함께 몇 가지 흥미로운 기능과 함께 출시되었지만 많은 사람들이 부풀림을 제거하기 위해 테이블의 온라인 재구축을 수행하기 위해 여전히 pg_repack을 사용해야 합니다. AWS RDS 고객은 이를 수행하는 방법을 파악하는 데 어려움을 겪고 있습니다. 방법을 배울 준비가 되셨습니까?

로컬 바이너리에 액세스할 서버가 없고 AWS RDS가 사용 중인 버전에 대한 바이너리를 제공하지 않기 때문에 직접 빌드해야 합니다. 공식 pg repos에는 설치 프로그램(예: sudo apt install postgresql-10-pg_repack )이 있기 때문에 생각만큼 어렵지 않습니다. 저장소를 사용하지 않는 경우 프로젝트 자체는 지침이 있는 오픈 소스 프로젝트입니다. http://reorg.github.io/pg_repack/

당신이 위의 속도를 높이는 동안 나는 RDS에서 postgres 10.9db를 돌리고 있었습니다. 게시물의 이 부분에 도달할 때까지 준비되도록 어제 시작했습니다. 몇 가지 데이터를 만들 수 있습니다.

-- let's create the table
CREATE TABLE burritos (
id SERIAL UNIQUE NOT NULL primary key,
title VARCHAR(10) NOT NULL,
toppings TEXT NOT NULL,
thoughts TEXT,
code VARCHAR(4) NOT NULL,
UNIQUE (title, toppings)
);

--disable auto vacuum
ALTER TABLE burritos SET (autovacuum_enabled = false, toast.autovacuum_enabled = false);


-- orders up
INSERT INTO  burritos (title, toppings, thoughts, code)
SELECT
  left(md5(i::text), 10),
  md5(random()::text),
  md5(random()::text),
  left(md5(random()::text), 4)
FROM GENERATE_SERIES(1, 1000000) s(i);


UPDATE burritos SET toppings = md5(random()::text) WHERE id < 250;
UPDATE burritos SET toppings = md5(random()::text) WHERE id between 250 and 500;
UPDATE burritos SET code = left(md5(random()::text), 4) WHERE id between 2050 and 5000;
UPDATE burritos SET thoughts = md5(random()::text) WHERE id between 10000 and 20000;
UPDATE burritos SET thoughts = md5(random()::text) WHERE id between 800000 and 900000;
UPDATE burritos SET toppings = md5(random()::text) WHERE id between 600000 and 700000;


(치안 판사가 부풀어 오르는 방법이 궁금하다면 여기 화면 클립이 있습니다.)


인간이 부리토와 많은 상호 작용을 한 것처럼... 우리 데이터베이스는 상당히 부풀어 있습니다. OS에 패키지를 설치하거나 컴파일을 통해 이미 pg_repack 바이너리가 있다고 가정하면 이제 확장을 활성화해야 합니다. 우리는 당신을 돕기 위해 handy reference for installing extensions을 구성했습니다.

pg_repack은 a lot of options . 자유롭게 확인하십시오. 하지만 포장을 시작하겠습니다.

/usr/local/bin/pg_repack -U greataccounthere -h bloatsy.csbv99zxhbsh.us-east-2.rds.amazonaws.com -d important -t burritos -j 4
NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: You must be a superuser to use pg_repack


이것은 RDS에 슈퍼유저를 구현했기 때문에 게임이 끝난 것처럼 느껴질 수 있지만 트릭은 믿고 도약하고 슈퍼유저 확인을 건너뛰는 다른 플래그(-k)를 추가하는 것입니다.

/usr/local/bin/pg_repack-1.4.3/pg_repack -U greataccounthere -h bloatsy.csbv99zxhbsh.us-east-2.rds.amazonaws.com -k -d important -t burritos -j 4
NOTICE: Setting up workers.conns
INFO: repacking table "public.burritos"
LOG: Initial worker 0 to build index: CREATE UNIQUE INDEX index_16449 ON repack.table_16442 USING btree (id) TABLESPACE pg_default
LOG: Initial worker 1 to build index: CREATE UNIQUE INDEX index_16451 ON repack.table_16442 USING btree (title, toppings) TABLESPACE pg_default
LOG: Command finished in worker 0: CREATE UNIQUE INDEX index_16449 ON repack.table_16442 USING btree (id) TABLESPACE pg_default
LOG: Command finished in worker 1: CREATE UNIQUE INDEX index_16451 ON repack.table_16442 USING btree (title, toppings) TABLESPACE pg_default


효과가있다! 테이블이 산뜻하고 정돈된 느낌이 들며 애플리케이션이 단계적으로 조금 더 활기를 띠고 있습니다. Magistrate을 사용하는 경우 플랫폼 매트릭스는 pg_repack이 설치되어 있는 시기를 알고 높은 부풀림 비율로 감지한 테이블에 대해 실행할 명령을 제공합니다.

좋은 웹페이지 즐겨찾기