postgresqlデータベースのDBAの運用と保守で頻繁に使用されるコマンド

****

postgresqlデータベースのDBAの運用と保守で頻繁に使用されるコマンド

****


(継続更新)
最近、postgresqlデータベースを管理し、よく使うコマンドやSQL文を整理しています。
postgresql11の一般的なコマンド

**

1.デッドロック

**
postgresql自体が原因で、一部のテーブルがロックされることがよくあります

1.クエリロック

select w1.pid as 等待进程,
w1.mode as 等待锁模式,
w2.usename as 等待用户,
w2.query as 等待会话,
b1.pid as 锁的进程,
b1.mode 锁的锁模式,
b2.usename as 锁的用户,
b2.query as 锁的会话,
b2.application_name 锁的应用,
b2.client_addr 锁的IP地址,
b2.query_start 锁的语句执行时间
from pg_locks w1
join pg_stat_activity w2 on w1.pid=w2.pid
join pg_locks b1 on w1.transactionid=b1.transactionid and w1.pid!=b1.pid
join pg_stat_activity b2 on b1.pid=b2.pid
where not w1.granted;

2.デッドロックプロセスを強制終了します

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid='62560'

それでもセッションを強制終了できない場合は、オペレーティングシステムレベルで直接強制終了できます

****

2.実行中のプロセスを表示します

****

サーバーの監視に使用され、プロセスを照会でき、時間の消費はロックに関連しています

SELECT 
C.relname 对象名称,
l.locktype 可锁对象的类型,
l.pid 进程id,
l.MODE 持有的锁模式,
l.GRANTED 是否已经对锁进行授权,
l.fastpath,
psa.datname 数据库名称,
psa.usesysid 用户id,
psa.usename 用户名称,
psa.application_name 应用程序名称,
psa.client_addr 连接的IP地址,
psa.client_port 连接使用的TCP端口号,
psa.backend_start 进程开始时间,
psa.xact_start 事务开始时间,
psa.query_start 事务执行此语句时间,
psa.state_change 事务状态改变时间,
psa.wait_event_type 等待事件类型,
psa.wait_event 等待事件,
psa.STATE 查询状态,
backend_xid 事务是否有写入操作,
backend_xmin 是否执事务快照,
psa.query 执行语句,
now( ) - query_start 持续时间
FROM
pg_locks l
INNER JOIN pg_stat_activity psa ON ( psa.pid = l.pid )
LEFT OUTER JOIN pg_class C ON ( l.relation = C.oid )
-- where l.relation = 'tb_base_apparatus'::regclass
where relkind ='r'
ORDER BY query_start asc

3つのPostgreSqlクエリデータベース、インデックス、テーブル、テーブルスペースサイズ

-表スペースのサイズを照会します

select pg_size_pretty(pg_tablespace_size('pg_default'));

-すべてのデータベースのサイズを照会する

 select pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size from pg_databas;

-指定されたインデックスサイズをクエリします

select pg_size_pretty(pg_relation_size('dotime'));

-指定されたテーブルのすべてのインデックスのサイズをクエリします

select pg_size_pretty(pg_indexes_size('tb_sys_loginfo'));

–指定されたスキーマのすべてのインデックスサイズを降順でクエリします。

 select relname,indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;

-指定されたテーブルサイズをクエリします(指定されたテーブルデータのみ)

 select pg_size_pretty(pg_relation_size('tb_sys_loginfo'));

-指定されたテーブルの合計サイズ(テーブルデータとインデックスを含む)をクエリします

select pg_size_pretty(pg_total_relation_size('tb_sys_loginfo'));

-指定されたスキーマ内のすべてのテーブルのサイズをクエリします(大から小まで、指定されたテーブルデータのみ)

select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;

-指定されたスキーマのすべてのテーブルのデータサイズ、合計インデックスサイズ、合計サイズ、行数をクエリします

SELECT
    table_size.relname 表名,
    pg_size_pretty ( pg_relation_size ( relid ) ) 表数据大小,
    pg_size_pretty ( pg_indexes_size ( relid ) ) 表总索引大小,
    pg_size_pretty ( pg_total_relation_size ( relid ) ) 表总大小,
    表行数
FROM
pg_stat_user_tables table_size
    LEFT JOIN (
        SELECT
            relname,
            reltuples :: DECIMAL ( 19, 0 ) 表行数
        FROM
        pg_class r
        JOIN pg_namespace n ON ( relnamespace = n.oid )
        WHERE
            relkind = 'r'
            AND n.nspname = 'public'
        ) table_num ON table_num.relname = table_size.relname
WHERE
    schemaname = 'public'
ORDER BY
    pg_relation_size ( relid ) DESC;

****

4クエリ外部サーバー

****

select * from pg_foreign_server;

****

5つはすべてのデータベース接続を強制終了します

****

SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE
    -- don't kill my own connection
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = '库名'
    ;

****

6人がサービスを再開します

****

--启动服务:
systemctl start postgresql-11
--停止服务:
systemctl stop postgresql-11
--重启服务:
systemctl restart postgresql-11
--查看pgagent_11服务
systemctl enable pgagent_11
systemctl status pgagent_11
systemctl start pgagent_11

****

7つのバックアップと復元

****

1.データベースをバックアップします

pg_dump --file "/home/back/pgsql-all-"$(date +%F+%T)".backup" --host "0.0.0.11" --port "5432" --username "postgres" --dbname "postgres" --verbose --role "postgres" --format=c --blobs --encoding "UTF8"

2.データベースを復元します

pg_restore --username "postgres" --no-password --role "postgres" --dbname "hrmwv2" --verbose /home/back/pgsql-all-postgres-2020-07-22+11:03:28.backup

データベース構成を再ロードするには、次の3つの方法があります。

1.スーパーユーザーとして実行

postgres=# SELECT pg_reload_conf();

2. UNIXキルを使用して、HUPシグナルを手動で開始します

$ kill -HUP PID

3. pg_ctlコマンドを使用して、SIGHUPシグナルをトリガーします

$ pg_ctlリロード

おすすめ

転載: blog.csdn.net/yang_z_1/article/details/111885234