Spanner では、トランザクションの問題をより深く理解し、最適化、診断するためのトランザクションの commit 統計情報を確認できます。現在、トランザクションのミューテーションの合計数を取得できます。
commit 統計情報を使用する場合
トランザクションのミューテーションの数を知ると、次のようなシナリオに役立ちます。
ラウンド トリップを最適化する
アプリケーションのパフォーマンス改善の一環として、各トランザクションで可能な限り多くの処理を行うことで、データベースへのラウンド トリップの回数を低減できます。このシナリオでは、トランザクションあたりのミューテーションの数を最大化すると同時に、システムの上限内に保持しようと考えています。
上限を超えずにトランザクションごとに commit できる行の数を決定するには、まずトランザクションの 1 行を commit します。これにより、行ごとのミューテーション カウントのベースラインが得られます。次に、システム制限をベースラインで除算して、トランザクションあたりの行数を取得します。ミューテーションのカウント方法については、こちらのメモをご覧ください。
ラウンドトリップの最適化は、特にロックの競合が増える場合は、必ずしも有益ではないことに注意してください。ロックの統計情報を使用すると、データベースのロックの競合をトラブルシューティングできます。
トランザクションをモニタリングしてシステムの上限を超えないようにする
アプリケーションの使用量の増加に伴い、トランザクション内のミューテーションの数も増加する可能性があります。システムの上限に達してトランザクションが最終的に失敗するのを回避するには、ミューテーション カウントの commit 統計情報を経時的にモニタリングします。同じトランザクションでこの値が増えていることがわかった場合は、前のセクションで説明したように、トランザクションを再最適化する必要があります。
commit 統計情報へのアクセス方法
commit 統計情報はデフォルトで返されません。代わりに、CommitRequest ごとに return_commit_stats
フラグを true に設定する必要があります。commit の試行がトランザクションの最大許容ミューテーション数を超えると、commit は失敗し、INVALID_ARGUMENT エラーが返されます。
Spanner クライアント ライブラリを使用して、commit 統計情報を返す方法の例を次に示します。
commit 統計情報を取得する
次のサンプルでは、Spanner クライアント ライブラリを使用して commit 統計情報を取得する方法を示します。
C++
次のコードでは、CommitOptions
で set_return_stats()
を呼び出し、2 行で各行 3 列を挿入または更新しているため、ミューテーションの数 6 を返します。
C#
C# では、commit 統計情報は API を介して直接返されません。代わりに、デフォルトのロガーによって Information ログレベルでログに記録されます。
次のコードでは、SpannerConnectionStringBuilder
の LogCommitStats
プロパティを true に設定することで、すべてのトランザクションの commit 統計情報のロギングを有効にします。このコードには、最後に表示された commit レスポンスへの参照を保持するサンプル ロガーも実装されます。このレスポンスから MutationCount
が取得され、表示されます。
Go
次のコードでは、ReturnCommitStats
フラグを設定し、トランザクションが正常に commit された場合にミューテーションの数を出力します。
Java
Node.js
次のコードでは、returnCommitStats
フラグを設定し、2 行で各行 3 列を挿入または更新しているため、ミューテーションの数 6 を返します。
PHP
Python
Python クライアント ライブラリは、API を使用して直接 commit 統計情報を返すのではなく、レベル Info
で stdout
を介してそれらを記録します。
次のコードでは、database.log_commit_stats = True
を設定することで、すべてのトランザクションの commit 統計情報のロギングを有効にします。このコードには、最後に表示された commit レスポンスへの参照を保持するサンプル ロガーも実装されます。このレスポンスから mutation_count
が取得され、表示されます。
Ruby
次のコードでは、return_commit_stats
フラグを設定し、2 行で各行 3 列を挿入または更新しているため、ミューテーションの数 6 を返します。