PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tìm nguồn truy vấn thông qua pgbouncer

Cách tôi sử dụng để theo dõi khách hàng khỏi pgbouncer là tham gia pg_stat_statements với pgbouncer show clients yêu cầu. Đây là một ví dụ:

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

(Bằng mọi cách, bạn có thể chỉ sử dụng dblink hoặc chỉ postgres_fdw - Tôi sử dụng kết hợp để hỗ trợ việc sử dụng lỗi thời trên sản phẩm ... Nếu bạn không có bất kỳ ghi chú nào, hãy bỏ qua điều đó ...)

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

Bây giờ chúng ta có thể tham gia chế độ xem pgbouncer với 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)

Đây app - 10.10.10.10:24514 có nghĩa là pid này là từ pgbouncer và để pgbouncer nó được kết nối từ 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. LoạiORM Bộ lọc OneToMany trong quan hệ không có hiệu lực để dẫn đến kết quả

  2. Ngày JSONb:ngày thực tế trong nội bộ?

  3. Postgres CHỌN ... ĐỂ CẬP NHẬT trong các chức năng

  4. Cách sử dụng tính năng INSERT ... ON CONFLICT (UPSERT) của PostgreSQL với flask_sqlalchemy?

  5. Làm thế nào để làm cho một tiện ích mở rộng không thể di dời?