web-dev-qa-db-ja.com

PGbouncerを使用して大規模なクエリをログに記録する

たとえば5MBを超える結果セットを生成するクエリをログに記録するようにpgbouncerに依頼する方法はありますか?

1
Kevin Burke

要するに-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

PostgreSQLテーブル行のサイズを測定します

mycrosoft および mysql は、このような近似を居心地の良い方法で提供しますが

1
Vao Tsun