コンテンツにスキップ

低レベル API の統計情報

AkkEngine::stats()akkaradb::engine::EngineStats のスナップショットを返します。値はカウンタとサブシステムの瞬間状態で、デバッグ、運用ダッシュボード、ベンチマーク、統合テストの確認に使います。

const auto stats = db->stats();
const double readHitRate =
stats.getsTotal == 0
? 0.0
: double(stats.getsMemtableHit + stats.getsSstHit) / double(stats.getsTotal);
フィールド意味
currentSeq書き込みに割り当てられた最新のシーケンス番号です。
nodeIdローカルまたはクラスタ動作で使われる安定したノード ID です。
putsTotal最上位の put 呼び出し総数です。
removesTotal最上位の remove 呼び出し総数です。
getsTotal最上位の get 呼び出し総数です。
getsMemtableHitMemTable から返せた読み取り数です。
getsSstHitSST から返せた読み取り数です。
getsMiss有効な値が見つからなかった読み取り数です。
existsTotal存在確認の呼び出し総数です。
scansTotal範囲スキャンの呼び出し総数です。
blobPutsTotalBlob ストレージへ回された書き込み数です。

getsMemtableHitgetsSstHitgetsMissgetsTotal と比較すると、読み取り対象がメモリ上に多いのか、SST に落ちているのか、そもそも存在しないキーが多いのかを判断できます。

フィールド意味
memtable.shardCount現在の MemTable シャード数です。
memtable.thresholdBytesPerShardシャードごとのフラッシュ閾値です。
memtable.approxBytesMemTable が保持している概算バイト数です。
memtable.putsAppliedMemTable 内部へ適用された put 数です。
memtable.removesAppliedMemTable 内部へ適用された削除マーカー数です。
memtable.flushesCompleted完了した MemTable フラッシュ数です。
memtable.bytesFlushedフラッシュで出力されたバイト数です。

approxBytesthresholdBytesPerShard * shardCount に近づくほど、フラッシュ圧力が高い状態です。フラッシュ回数が多いのに 1 回あたりのバイト数が小さい場合は、閾値が小さすぎる可能性があります。

フィールド意味
wal.enabledWAL が有効かどうかです。
wal.shardCount現在の WAL シャード数です。
wal.entriesWrittenWAL に書かれたエントリ数です。
wal.bytesWrittenWAL に書かれた総バイト数です。
wal.batchesFlushedグループ化されてフラッシュされたバッチ数です。
wal.syncsExecuted物理同期の実行回数です。
wal.segmentRotationsWAL セグメントのローテーション回数です。

SYNC では syncsExecuted が書き込み数に近づきやすくなります。ASYNC では、複数書き込みがまとめられるため、entriesWritten に対して batchesFlushedsyncsExecuted が少なくなるのが自然です。

フィールド意味
sst.enabledSST ストレージが有効かどうかです。
sst.levelsレベルごとのファイル数、バイト数、予算です。
sst.fileCountSST ファイルの総数です。
sst.bytesSST の総バイト数です。
sst.l0FileCountLevel 0 のファイル数です。
sst.compactionPending圧縮処理待ちがあるかどうかです。
sst.compactionsCompleted完了した圧縮処理数です。
sst.filesCompacted圧縮処理で消費されたファイル数です。
sst.bytesCompactedIn圧縮処理で読み込まれたバイト数です。
sst.bytesCompactedOut圧縮処理で書き出されたバイト数です。
sst.l0StallsL0 関連の停止イベント数です。

l0FileCountcompactionPendingl0Stalls はまとめて見ます。継続的な書き込み中にこれらが上がり続ける場合、フラッシュ生成に対して圧縮処理が追いついていない可能性があります。

sst.levels の各要素は以下の形です。

フィールド意味
levelLSM のレベル番号です。
fileCountそのレベルのファイル数です。
bytesそのレベルの保存バイト数です。
budgetBytesそのレベルの目標サイズ予算です。
フィールド意味
blob.enabledBlob ストレージが有効かどうかです。
blob.thresholdBytesBlob 化される値サイズの閾値です。
blob.blobsWritten書き込まれた Blob 数です。
blob.bytesUncompressed圧縮前のペイロード総バイト数です。
blob.bytesOnDiskディスク上の Blob バイト数です。
blob.blobsDeleted削除された Blob 数です。
blob.gcCyclesBlob GC の実行回数です。

圧縮を有効にしている場合は bytesUncompressedbytesOnDisk を比較します。gcCycles が増えているのに blobsDeleted が増えない場合、GC は走っているものの回収対象が少ない状態です。

フィールド意味
vlog.enabledバージョン履歴が有効かどうかです。
vlog.syncModeバージョン履歴ログの同期モードの数値表現です。
vlog.groupNエントリ数によるグループ化閾値です。
vlog.groupMicros時間によるグループ化閾値です。
vlog.groupBytesバイト数によるグループ化閾値です。
vlog.asyncMaxPendingBytes非同期書き込みの未処理バイト上限です。
vlog.indexedKeys履歴がインデックスされたキー数です。
vlog.indexedEntries履歴エントリの総数です。
vlog.rollbackEntriesロールバック操作で生成されたエントリ数です。
vlog.pendingWritesまだフラッシュされていない履歴書き込み数です。
vlog.pendingBytesまだフラッシュされていない履歴ログのバイト数です。
vlog.durableBytes永続化済みの履歴ログバイト数です。
vlog.flushThreadRunning非同期フラッシュスレッドが動作中かどうかです。

pendingBytesasyncMaxPendingBytes はバックプレッシャーの兆候を見るために使います。rollbackEntries はロールバック API を使った場合だけ増えるのが自然です。

stats.api は API サーバーコンポーネントを有効化した場合に意味を持ちます。

グループフィールド
HTTP 状態httpEnabled, httpTlsEnabled, httpPort, httpMaxBatchItems, httpMaxScanItems, httpMaxHistoryEntries, httpMaxContentLength
HTTP 通信量httpConnectionsAcceptedTotal, httpConnectionsClosedTotal, httpConnectionsActive, httpRequestsTotal, httpResponsesTotal, httpBytesReceivedTotal, httpBytesSentTotal
HTTP エラーhttpProtocolErrorsTotal, httpErrorsTotal
HTTP バッチhttpBatchPutItemsTotal, httpBatchGetItemsTotal
TCP 状態tcpEnabled, tcpTlsEnabled, tcpIoBackend, tcpWorkerThreads, tcpAcceptQueueLimit, tcpListenBacklog, tcpReadTimeoutMs, tcpWriteTimeoutMs
TCP 通信量tcpConnectionsAcceptedTotal, tcpConnectionsClosedTotal, tcpConnectionsActive, tcpRequestsTotal, tcpResponsesTotal, tcpBytesReceivedTotal, tcpBytesSentTotal
TCP キュー・バックプレッシャーtcpAcceptQueueDepth, tcpAcceptQueuePeakDepth, tcpAcceptQueueRejectedTotal, tcpAcceptQueueExpiredTotal, tcpBackpressureFlushesTotal, tcpBackpressureDisconnectsTotal
TCP エラー・バッチtcpProtocolErrorsTotal, tcpCrcErrorsTotal, tcpPipelineBatchesTotal, tcpBatchPutItemsTotal, tcpBatchGetItemsTotal
gRPC 状態grpcEnabled, grpcTlsEnabled, grpcPort, grpcWorkerThreads, grpcCompletionQueues, grpcMinPollers, grpcMaxPollers, grpcMaxConcurrentStreams, grpcResourceQuotaBytes
gRPC 通信量grpcRequestsTotal, grpcResponsesTotal, grpcActiveRequests, grpcErrorsTotal, grpcBatchPutItemsTotal, grpcBatchGetItemsTotal

API 統計は、通信境界を含むテストやサービス運用で役立ちます。api.enabled が false の組み込み用途では無視して構いません。

見たいこと見るフィールド
読取経路の状態getsMemtableHit + getsSstHitgetsTotal の大半を説明できるか。
フラッシュ圧力memtable.approxBytes が閾値に近く、フラッシュが頻発していないか。
圧縮処理の遅れsst.l0FileCount, sst.compactionPending, sst.l0Stalls が増え続けていないか。
WAL のグループ化非同期モードで batchesFlushedentriesWritten より十分少ないか。
Blob の膨張blob.bytesOnDisk が実データ量より過剰に増えていないか。
履歴ログの滞留vlog.pendingBytesvlog.asyncMaxPendingBytes に近づいていないか。