pg_리팩으로 데스크톱 공간 이동, 용량 위기 탈출 2018.5.23
7094 단어 PostgreSQLpgrepacktablespacetech
이것은 자신의 당초Qiita 문장을 옮긴 것이다
상당한 업무량 증가로 DB 서버(※ 0)의 용량이 위기로 치달았다.
대책으로 세계에 남은 40장의 고속 시디 카드를 사들여 증설했다.
이 증설 구역에 대한 실체 이동 수단으로 pg리팩을 사용하여 현재 문제를 성공적으로 해결합니다.
활용 사례로 사회에 도움이 되려고 기고했습니다.
개시하다
테이블 공간 정보
pg_리패키지 정보
조정 전 상태
매우 궁핍한 상태
용량(df-h)
크기
사용
잉여
% 1 사용하기
마운트 위치
/dev/fioa1
2.2T
1.7T
464G
79%
/mnt/fio/(이하 생략)
디스크 추가
끄기 전에.
증설 전에 컴퓨터를 꺼야 하며, 다음과 같은 사항을 실시할 준비를 해야 한다.
카드 추가, 드라이버 및 펌웨어 업데이트
(완전 업자가 해준 거야)
(말은 그렇지만 실시 시기의 줄 서기는 하도급자의 지시이기 때문에 주동적으로 계획하고 구상해야 한다)
(과정 중 원격 접속 컨트롤러에 로그인해야 할 경우 Windows PC를 가지고 조작하세요)(※ 2)
(2회 정도 OS 협착 재부팅, 사용 가능)
pg_리패키지로 표 공간 이동
추가 후 (형식 마운트 명령 생략)
용량(df-h)
크기
사용
잉여
% 1 사용하기
마운트 위치
/dev/fioa1
2.2T
1.7T
464G
79%
/mnt/fio/(이하 생략)
/dev/fiob
3.0T
33M
3.0T
1%
/mnt/fio2/(이하 약)
PostgreSQL 시작
설정을 확인하고 조정한 후 시작합니다.
테이블 공간 만들기
/mnt/fio2
아래 표 공간에 사용할 디렉터리 만들기소유자 권한을
postgres:postgres 700
로 설정한 후GUI를 통해 테이블 공간을 만듭니다
space2
.(※3)또한 복사된 목적지에서 같은 디렉터리 경로를 미리 정비하지 않으면 테이블 공간을 만들 때 복사가 끊깁니다.
CREATE TABLESPACE space2 LOCATION '/mnt/fio2/(以下略)';
기본 테이블 공간 수정
향후 쓰기 대상
space2
을 위해 다음 쿼리를 수행합니다.ALTER DATABASE large-db SET default_tablespace TO 'space2';
현재 기본 테이블 공간을 확인하는 방법은 각 DB를 통해 다음 명령을 실행하는 것입니다SHOW default_tablespace;
또는 테이블 단위로 테이블 공간을 확인할 수 있습니다. 새 테이블의 경우 다음 SQLSELECT
u.relname AS table_name,
current_database() AS database_name,
t.tablespace AS tablespace_name
FROM
pg_stat_user_tables u
JOIN pg_tables t ON u.relname = t.tablename
WHERE
relname = '(新規テーブル名)';
테이블 공간 이동 스크립트
첫 번째 매개변수에 테이블 리스트를 지정하고, 두 번째 매개변수에 DB 이름을 지정하며, 세 번째 매개변수에 이동할 테이블 공간을 지정하는 스크립트는 다음과 같습니다.
num
는 진전을 파악하는 의도 변수, pgrepack 전후 pgsize_pretty 함수는 재구성 효과를 표시하는 명령입니다 # !/bin/bash
tbl=$(cat $1)
db=$2
toSpace=$3
num=0
for t in ${tbl[@]}
do
num=$((num + 1))
echo "----- [$num] ----- ${t}";
psql -U postgres -h localhost -t -c"SELECT pg_size_pretty(pg_total_relation_size('${t}')) AS tbl_size" ${db}
time pg_repack -U postgres -h localhost -d ${db} -t ${t} -s ${toSpace} -S
psql -U postgres -h localhost -t -c"SELECT pg_size_pretty(pg_total_relation_size('${t}')) AS tbl_size" ${db}
echo "";
done
이를 chmod +x exec_repack_mv_space.sh
한 후 다음과 같이 집행한다../exec_repack_mv_space.sh tbl-list large-db space2
조정 후의 상태
나는 식탁 공간을 이동하는 것은 유지 보수 시간 내인 줄 알았지만 시간 내에 명세서는 아직 끝나지 않았다.
그러나 스크립트 실행은 목록이 끝날 때까지 계속되었지만 서비스 영향은 보고되지 않았습니다.
영향이 없다고 여기다sweat_smile:
용량(df-h)
크기
사용
잉여
% 1 사용하기
마운트 위치
/dev/fioa1
2.2T
1.4T
770G
65%
/mnt/fio/(이하 생략)
/dev/fiob
3.0T
208G
2.8T
7%
/mnt/fio2/(이하 약)
끝말
기타
¥l+
으로 표시된 모든 DB의 Tablespace가 최초인 것 같습니다.exec_repack_mv_space.sh
에서 제외-s ${toSpace} -S
할 수 있습니다.Reference
이 문제에 관하여(pg_리팩으로 데스크톱 공간 이동, 용량 위기 탈출 2018.5.23), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sogaoh/articles/2018_05_28-from-qiita-pg_repack텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)