PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Temukan sumber kueri melalui pgbouncer

Cara yang saya gunakan untuk terus melacak klien dari pgbouncer adalah bergabung dengan pg_stat_statements dengan pgbouncer show clients memerintah. Ini contohnya:

t=# create extension "postgres_fdw";
CREATE EXTENSION
t=# CREATE SERVER pgbouncer FOREIGN DATA WRAPPER postgres_fdw OPTIONS ( host '10.10.10.10', port '6432', dbname 'pgbouncer');
CREATE SERVER

(Dengan segala cara Anda dapat menggunakan hanya dblink atau hanya postgres_fdw - Saya menggunakan campuran untuk mendukung penggunaan usang pada prod... Jika Anda tidak memiliki catatan, abaikan saja...)

t=# create extension "dblink";
CREATE EXTENSION
t=#  create view bnc_client AS SELECT _.type,
        _."user",
        _.database,
        _.state,
        _.addr,
        _.port,
        _.local_addr,
        _.local_port,
        _.connect_time,
        _.request_time,
        _.ptr,
        _.link,
        _.remote_pid,
        _.tls
       FROM dblink('pgbouncer'::text, 'show clients'::text) _(type text, "user" text, database text, state text, addr text, port integer, local_addr text, local_port integer, connect_time timestamp with time zone, request_time timestamp with time zone, ptr text, link text, remote_pid smallint, tls text);
CREATE VIEW
t=# create user mapping FOR vao server pgbouncer options (user 'pgbouncer_known_user', password 'password_here');
CREATE USER MAPPING

Sekarang kita dapat bergabung dengan tampilan pgbouncer dengan pg_stat_statements :

t=# select
        datname
      , usename
      , p.state
      , case when b.user is not null then 'pgBouncer' else application_name end app
      , case when b.user is null then client_addr else addr::inet end ip
      , b.user
      , b.state "bState"
      , case when waiting then true else null end w
      , b.connect_time
      , query_start
      , md5(query)::uuid
      , pid
    from pg_stat_activity p
    left outer join bnc_client b
      on addr||':'||b.port = regexp_replace(p.application_name,'^.{0,}(- )','')
    where pid <> pg_backend_pid()
  ;
 datname | usename | state |          app           |      ip      | user | bState | w | connect_time |          query_start
|                 md5                  |  pid
---------+---------+-------+------------------------+--------------+------+--------+---+--------------+-------------------------------
+--------------------------------------+-------
 dbn  | usr   | idle  |                        | 192.168.0.1 |      |        |   |              | 2017-03-09 17:19:46.206643+00
| d1730c52-dffd-3650-a399-23f4dd4aa456 | 12614
 dbn  | usr   | idle  | app - 10.10.10.10:24514 | 10.10.10.10  |      |        |   |              | 2017-03-10 11:24:34.999174+00
| 92a0340c-9ecc-9375-37c0-e70e8b225db4 | 22563
(2 rows)

Di sini app - 10.10.10.10:24514 berarti pid ini dari pgbouncer, dan ke pgbouncer itu terhubung dari 0.10.10.10




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan Rails Postgres, memilih hanya item yang muncul di semua parameter pencarian dengan asosiasi

  2. PostgreSQL unnest() dengan nomor elemen

  3. Ekspor ke CSV dan Kompres dengan GZIP di postgres

  4. kunci duplikat postgresql melanggar batasan unik

  5. Bagaimana cara huruf kecil array postgresql?