
Aurora でクエリによって読み取られたバイト数を取得することは可能ですか? クエリ レベルではない場合、テーブル レベルで取得することは可能ですか?
パフォーマンス インサイトと performance_schema テーブルを調べましたが、物理バイト数ではなく、ROWS_SCANNED のデータのみが含まれているようです。パフォーマンス インサイトの I/O のメトリックも、テーブルではなくデータベース レベルにあるようです。
答え1
InnoDBの詳細については、SHOW STATUS LIKE 'Innodb_%';
メトリックがデータベース レベルやテーブル レベルではなくグローバルであるのには理由があります。buffer_pool はキャッシュです。各クエリは他のすべてのクエリに依存し、干渉します。少なくとも I/O レベルではそうです。
「スキャンされたバイト数」が関連しているかどうかについては異論があります。「アクセスされた行数」の方が便利なようです。クエリを実行する際に、I/O の次に最もコストのかかるタスクは行へのアクセスです。
残念ながら、Innodb ステータス値は集計統計であるため、単一のステートメントの統計を取得するには、静かな時間に 1 つのクエリを実行する必要があります。
クエリの前後にこれを実行し、違いを調べます。
SHOW STATUS LIKE 'Innodb%read%';
注意: 行数をカウントするものもあれば、ブロック数をカウントするもの、バイト数をカウントするものもあります。
ブロッキングのため、「ディスクから読み取られたバイト数」などは 16KB の倍数になることに注意してください。「スキャンされたバイト数」を監視するものはないと思います。
データを入手できた場合、そのデータを使って何をしたいのかを詳しく教えてください。より的を絞った回答ができるかもしれません。
これは、SHOW SESSION STATUS LIKE 'Handler%';
単一のクエリでどれだけの作業が発生するかを解読するのに非常に便利です。また、セッションごとに (グローバルにも) 行われます。
「書き込み」メトリックは通常、複雑なをサポートするために構築された一時テーブルを指しますSELECTs
。