Spanner는 트랜잭션 문제를 보다 효과적으로 파악하고 최적화 및 진단하기 위해 트랜잭션 커밋 통계에 액세스할 수 있도록 합니다. 현재 트랜잭션의 총 변형 수를 검색할 수 있습니다.
커밋 통계를 사용해야 하는 경우
트랜잭션의 변형 수를 알면 다음 시나리오에서 유용할 수 있습니다.
왕복 최적화
애플리케이션 성능 향상을 위해 각 트랜잭션에서 가능한 한 많은 작업을 수행하여 데이터베이스로의 왕복 횟수를 줄일 수 있습니다. 이 시나리오에서는 트랜잭션당 변형 수를 최대화는 동시에 시스템 한도 내에서 유지하려고 합니다.
한도 미만을 유지하면서 트랜잭션당 커밋할 수 있는 행 수를 확인하려면 먼저 트랜잭션에서 하나의 행을 커밋합니다. 이렇게 하면 행당 변형 수의 기준이 됩니다. 그 다음 시스템 한도를 기준으로 분할하여 트랜잭션당 행 번호를 가져옵니다. 변형이 계산되는 방법에 대한 자세한 내용은 이 참고를 참조하세요.
특히 더 많은 잠금 경합이 발생하는 경우 왕복 횟수 최적화가 항상 유용하지는 않습니다. 잠금 통계를 사용하여 데이터베이스에서 잠금 충돌 문제를 해결할 수 있습니다.
시스템 한도를 넘지 않도록 트랜잭션 모니터링
애플리케이션 사용량이 증가하면 트랜잭션 내 변형 수도 증가할 수 있습니다. 시스템 한도에 도달하지 못하고 트랜잭션이 실패하는 경우를 방지하려면 시간 경과에 따른 변형 수 커밋 통계를 사전에 모니터링하면 됩니다. 동일한 트랜잭션에서 이 값이 증가하는 경우 이전 섹션에서 설명한 대로 트랜잭션을 다시 최적화하는 것이 좋습니다.
커밋 통계에 액세스하는 방법
커밋 통계는 기본적으로 반환되지 않습니다. 대신 각 CommitRequest에서 return_commit_stats
플래그를 true로 설정해야 합니다. 커밋 시도가 트랜잭션에 허용되는 최대 변형 수를 초과하면 커밋이 실패하고 INVALID_ARGUMENT 오류가 반환됩니다.
다음은 Spanner 클라이언트 라이브러리를 사용하여 커밋 통계를 반환하는 방법의 예입니다.
커밋 통계 가져오기
다음 샘플은 Spanner 클라이언트 라이브러리를 사용하여 커밋 통계를 가져오는 방법을 보여줍니다.
C++
다음 코드는 각 행에 2개의 행과 3개의 열을 삽입하거나 업데이트하므로 CommitOptions
에서 set_return_stats()
를 설정하고 변형 수 6을 반환합니다.
C#
C#에서 커밋 통계는 API를 통해 직접 반환되지 않습니다. 대신 기본 로거가 정보 로그 수준으로 로깅됩니다.
다음 코드는 SpannerConnectionStringBuilder
의 LogCommitStats
속성을 true로 설정하여 모든 트랜잭션에 커밋 통계 로깅을 사용 설정합니다. 또한 이 코드는 마지막으로 표시된 커밋 응답에 대한 참조를 유지하는 샘플 로거를 구현합니다. 그 다음 MutationCount
가 이 응답에서 검색되어 표시됩니다.
Go
다음 코드는 ReturnCommitStats
플래그를 설정하고 트랜잭션이 성공적으로 커밋될 때 변형 수를 출력합니다.
Java
Node.js
다음 코드는 각 행에 2개의 행과 3개의 열을 삽입하거나 업데이트하므로 returnCommitStats
플래그를 설정하고 변형 수 6을 반환합니다.
PHP
Python
Python 클라이언트 라이브러리는 API를 통해 커밋 통계를 직접 반환하는 대신 Info
수준 정보에서 stdout
를 사용해 이를 로깅합니다.
다음 코드는 database.log_commit_stats = True
를 설정하여 모든 트랜잭션에 커밋 통계 로깅을 사용 설정합니다. 또한 이 코드는 마지막으로 표시된 커밋 응답에 대한 참조를 유지하는 샘플 로거를 구현합니다. 그 다음 mutation_count
가 이 응답에서 검색되어 표시됩니다.
Ruby
다음 코드는 각 행에 2개의 행과 3개의 열을 삽입하거나 업데이트하므로 return_commit_stats
플래그를 설정하고 변형 수 6을 반환합니다.