たとえば5MBを超える結果セットを生成するクエリをログに記録するようにpgbouncerに依頼する方法はありますか?
要するに-no
show stats;
を使用して、データベースごとにtotal_received
およびtotal_sent
を取得できます。クエリの前後で統計を確認できると仮定すると、差を計算してもクエリの結果サイズはわかりません。理想的な環境でも、他の並列セッションが存在しない場合。例えば:
t=# copy (select id from t) to '/tmp/1';
COPY 1043482
t=# \! du -h /tmp/1
7.0M /tmp/1
受け取った小切手:
t=# select 40493353-40493297;
?column?
----------
56
(1 row)
えーと、クエリ結果のサイズは7MBですが、受信バイト数は56です。ああ!クエリ結果をサーバーに保存しました!したがって、pgbouncerは技術的には実際に大量のデータを受信しませんでした、わかりました-クライアントに送信してください:
t=# \copy (select objectid from pond_user) to '/tmp/1';
COPY 1043482
t=# select 40493442-40493353;
?column?
----------
89
(1 row)
同じ話...多分送信されたバイトをチェックさせますか?..
t# select (355612622-343149820)/(1024*1024);
?column?
----------
11
(1 row)
11MB ...特に正確な一致ではありません。
[〜#〜] so [〜#〜]:
pgbouncerは結果セットのサイズをログに記録しません。セッションを時間内に分離でき、推定でサイズの非常に大まかな概算が得られると仮定して、show stats
を使用できます。
また
人々は同じようにiptraf
などを使用しています。誰かが、log_min_duration_statement
で長い時間をかけてクエリをログに記録し、CREATE TABLE AS
で繰り返してサイズを取得します パッチを書き込むこともあります クライアントの場合。
さらに
ここでの分析的アプローチは、さらに複雑になります。
https://stackoverflow.com/questions/13570613/making-sense-of-postgres-row-sizes