PostgreSQL에서 value_stream 테이블 분할
많은 양의 데이터가 포함된 value_stream 테이블은 결과 테이블 스캔으로 인해 시간 기반 질의 및 제거 작업에 상당한 시간이 소요되고 전체 서버 부하가 증가할 수 있습니다. 매주 또는 매월 분할과 drop-partition 작업 일치를 수행하면 이러한 현재 병목 현상 중 일부를 간소화할 수 있습니다.
대규모 데이터 수집의 경우 partition_value_stream_by_range_setting 명령줄을 사용하여 value_stream 테이블을 분할해 분할 범위(분할 시작 또는 종료 시기, 분할 간격 등)를 쉽게 제어할 수 있습니다. 여기에는 이전 데이터를 다시 분할하고 시작, 종료 또는 간격 시간을 변경하는 작업이 포함됩니다.
* 
복구를 위해 분할 프로세스를 시작하기 전에 데이터베이스를 복제하거나 백업하십시오.
partition_value_stream_by_range_setting 명령줄을 사용하면 다음이 지원됩니다.
1. 다운타임을 최소화하면서 기존 테이블 또는 파티션에 새 파티션을 추가합니다.
2. 특정 시간부터의 이전 데이터를 다시 분할합니다. 이렇게 하는 데 다소 시간이 걸릴 수 있습니다.
3. 다른 범위 설정으로 다시 분할합니다.
4. 데이터가 어느 파티션에도 속하지 않는 경우 DEFAULT 파티션을 사용하여 정보를 저장합니다.
value_stream 테이블을 분할하려면 주기적인 파티션을 만듭니다. 데이터베이스 스케줄러 도구를 사용하여 향후 삽입된 모든 데이터가 다음 파티션에 입력되도록 합니다.
partition_value_stream_by_range_setting 명령줄에는 다음 매개 변수가 있습니다.
매개 변수 이름
설명
기본값
설명
host
데이터베이스 호스트
필수
port
데이터베이스 포트
필수
database
value_stream 테이블이 존재하는 데이터베이스 이름
필수
username
데이터베이스 사용자
필수
password
데이터베이스 암호
필수
partition_start_date
* 
제공된 데이터가 과거 데이터인 경우 분할해야 하는 데이터의 양에 따라 다운타임이 발생할 수 있습니다. 먼저 테스트 환경에서 이를 실행하고 잠재적인 다운타임을 분석하는 것이 좋습니다. partition_start_date를 비워 두면 다운타임이 발생하지 않습니다.
파티션을 생성하려는 시점을 정의합니다. 과거나 미래일 수 있습니다.
value_stream 테이블에 있는 "time" 열의 마지막 값입니다. 데이터가 없으면 시작 날짜=현재입니다.
선택 사항
가능한 형식:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.MS
partition_end_date
파티션 생성을 중지하려는 시점을 정의합니다.
필수
가능한 형식:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.MS
미래의 값이어야 하며 최소한 "time" 열의 마지막 값에 간격을 더한 값보다 커야 합니다. 데이터가 없으면 현재 + 간격보다 커야 합니다.
partition_interval
각 파티션에 대한 필수 간격입니다.
가능한 형식:
1h 또는 hours
1d 또는 1day
1 month
1y 또는 1year
future_data_exists
선택 사항
no
가능한 값:
yes 또는 no
yes(선택 사항)이면 스크립트가 향후 데이터 분할을 지원합니다.
명령줄을 실행한 후 매개 변수에 따라 value_stream 테이블이 분할되고 데이터가 정확한 파티션으로 푸시됩니다.
partition_value_stream_by_range_setting 명령줄을 사용하려면 다음을 수행하십시오.
1. PTC 소프트웨어 다운로드 사이트로 이동하여 ThingWorx PostgreSQL 폴더로 이동한 다음 partition_value_stream_by_range_setting.sh 스크립트를 다운로드합니다.
2. ThingWorx 데이터베이스에 연결된 서버로 스크립트를 복사합니다.
3. 명령줄을 열고 위의 매개 변수를 사용하여 원하는 대로 명령을 실행합니다.
예: ./partition_value_stream_by_range_setting.sh -host localhost -port 5432 -database thingworx -username DBA -password password -partition_start_date '2024-06-17 00:00:00.000' -partition_end_date '2025-06-17 00:00:00.000' -partition_interval '1 months'
* 
특정 매개 변수가 반복적으로 제공되지 않도록 하려면 스크립트를 편집하고 DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD 매개 변수를 설정할 수 있습니다.
4. 파티션을 유지 관리합니다. 예를 들어, 향후 파티션을 추가하고 오래된 파티션을 보관하거나 삭제하기 위한 스케줄러를 만듭니다. 그러나 파티션 수가 많으면 질의 계획 시간이 크게 늘어날 수 있으므로 수천 개에 달하는 파티션을 사용하지 않는 것이 좋습니다.
도움이 되셨나요?