Datastream에서 안정적인 복제를 유지하고 다운타임을 최소화하려면 스트림과 소스 데이터베이스 전반에 운영 권장사항을 적용하면 됩니다. 이러한 권장사항은 스트림의 소스 데이터베이스를 전환하고, 측정항목 알림을 구성하고, 지연 시간을 해결하고, 스트림당 테이블 한도를 계획하는 데 도움이 됩니다.
스트림의 소스 데이터베이스 변경
경우에 따라 스트림의 소스 데이터베이스를 변경해야 할 수 있습니다. 예를 들어 기본 데이터베이스 인스턴스가 아닌 복제본에서 복제하도록 스트림을 수정해야 할 수 있습니다.
- 복제본 인스턴스의 연결 프로필을 만듭니다.
- 스트림 만들기, 만든 복제본의 연결 프로필과 대상의 기존 연결 프로필 을 사용하여 연결합니다.
- 이전 백필이 중지된 상태로 스트림을 시작합니다. 스트림이 시작되면 바이너리 로그의 데이터만 가져옵니다.
- (선택사항) 스트림을 실행한 후 수정하여 자동 백필을 사용 설정합니다.
- 기본 인스턴스에서 읽는 스트림을 일시중지합니다.
- (선택사항) 기본 인스턴스에서 데이터를 스트리밍하는 스트림을 삭제합니다.
- (선택사항) 기본 인스턴스의 연결 프로필을 삭제합니다.
Datastream의 알림 및 모니터링
Datastream 대시보드에는 많은 정보가 포함되어 있습니다. 이 정보는 디버깅 목적으로 유용할 수 있습니다. 로그에서 추가 정보를 확인할 수 있으며 이는 Cloud Logging에서 제공됩니다.
Datastream 알림
Datastream에 설정된 기본 알림은 없습니다. 예를 들어 개요 탭에서 알림 정책 만들기 링크를 클릭하여 데이터 최신 상태 측정항목에 대한 알림 정책을 만들 수 있습니다. 나머지 측정항목의 경우 다음 단계를 따르세요.
Google Cloud 콘솔에서 notifications 알림 페이지로 이동합니다.
정책 만들기를 클릭합니다.
측정항목 선택 드롭다운을 클릭합니다.
필터 필드에
Datastream를 입력합니다.선택사항: 사용 가능한 모든 측정항목을 보려면 활성 필터를 사용 중지해야 할 수 있습니다.
Datastream 스트림 에서 모니터링할 측정항목을 검색합니다.
적용을 클릭합니다.
선택사항: 필터 추가 및 데이터 변환 섹션에 필요한 세부정보를 입력합니다. 다음을 클릭합니다.
알림 트리거 구성 섹션에 필요한 정보를 입력합니다. 다음을 클릭합니다.
알림 구성 및 완료 섹션에서 알림을 구성합니다.
알림을 검토하고 준비가 되면 정책 만들기 를 클릭합니다.
각 단계를 완료하는 방법에 대한 자세한 내용은 알림 정책 만들기를 참고하세요.
다음 Datastream 측정항목에 대한 알림을 만드는 것이 좋습니다.
- 데이터 최신 상태
- 스트림 지원되지 않는 이벤트 수
- 스트림 총 지연 시간
이러한 측정항목에 대한 알림은 스트림 또는 소스 데이터베이스에 문제가 있음을 나타낼 수 있습니다.
지연 시간 이해
Datastream은 복제 지연 시간을 이해하는 데 도움이 되는 다음 측정항목을 제공합니다.
- 데이터 최신 상태: 데이터가 소스에 커밋된 시간 과 Datastream에서 데이터를 읽은 시간 간의 차이입니다. 이 측정항목이 높으면 Datastream이 소스에서 생성되는 것보다 느리게 데이터를 읽고 있음을 나타냅니다. 이는 소스 또는 소스에 대한 네트워크 연결에 문제가 있을 수 있음을 나타냅니다.
- 시스템 지연 시간: 이벤트가 소스에서 읽힌 순간부터 대상에 작성될 때까지 Datastream이 이벤트를 처리하는 데 걸리는 시간입니다.
- 총 지연 시간: 데이터가 소스에 커밋된 시점부터 대상에 작성될 때까지의 총 시간을 나타내는 엔드 투 엔드 복제 지연 시간입니다.
데이터 기록 빈도가 높은 경우 일반적인 원인은 다음과 같습니다.
- 소스 과부하: 소스 데이터베이스가 Datastream에서 읽을 수 있는 것보다 빠르게 로그 (binlog 파일, 재실행 로그 파일, WAL 파일)를 생성합니다.
- MySQL/Oracle의 작업:
maxConcurrentCdcTasks매개변수를 늘려 더 많은 로그를 병렬로 읽습니다. - PostgreSQL의 작업: 변동성이 높은 테이블을 자체 전용 스트림으로 격리합니다.
- SQL Server의 작업:
maxConcurrentCdcTasks매개변수를 늘려 더 많은 변경 테이블을 병렬로 읽습니다.
- MySQL/Oracle의 작업:
- 소스 리소스 부족: 소스 데이터베이스 서버 자체에 높은 CPU 사용률, 낮은 메모리 또는 디스크 I/O 병목 현상과 같은 문제가 발생합니다.
- 작업: 소스 인스턴스가 정상인지 확인합니다. CPU/RAM 사용량을 확인합니다. PostgreSQL의 경우
logical_decoding_work_mem매개변수의 값을 늘리는 것이 좋습니다. Oracle의 경우 충분한 시스템 전역 영역 (SGA)이 할당되어 있는지 확인합니다.
- 작업: 소스 인스턴스가 정상인지 확인합니다. CPU/RAM 사용량을 확인합니다. PostgreSQL의 경우
- 네트워크 용량 문제:
소스와 Google Cloud간의 높은 핑 시간 또는 포화된 대역폭입니다.
- 작업: VPN 또는 Cloud Interconnect 대역폭 및 지연 시간을 모니터링합니다.
- 단일 대규모 트랜잭션: 수백만 행에 대한
UPDATE와 같은 대규모 일괄 작업은 일시적인 지연 시간 급증을 일으킬 수 있습니다.- 작업: 예상되는 동작입니다. Datastream이 대규모 이벤트를 처리할 때까지 기다립니다. 향후 대규모 일괄 작업을 더 작은 청크로 나누는 것이 좋습니다.
시스템 지연 시간이 높으면 Datastream 또는 대상에 문제가 있음을 나타낼 수 있습니다.
- 작업: Cloud Logging에서 지속적인 행 수준 오류 (예:
invalid input for type json)를 확인합니다. 데이터 유형 또는 제약조건 오류로 인해 스트림이 재시도 루프에 있는 경우 소스에서 수동으로 데이터를 수정해야 할 수 있습니다. 명백한 오류가 없으면 Google 지원팀에 문의하여 도움을 받으세요.
단일 스트림에서 처리할 수 있는 테이블 수는 얼마인가요?
단일 스트림에 최대 10,000개의 테이블을 포함하는 것이 좋습니다. 테이블 크기에는 제한이 없습니다. 테이블이 더 많은 스트림을 만들어야 하는 경우 스트림이 오류 상태로 전환될 수 있습니다. 이를 방지하려면 소스를 여러 스트림으로 분할하는 것이 좋습니다.