201.PostgreSQL日常操作匯總

1、常用元命令:

(在psql交互界面執行)元命令能夠方便便捷的管理數據庫,

\h, \help        --獲取所有可執行命令
\h ALTER                 --獲取命令ALTER的詳細說明
\l                             --獲取所有數據庫信息,相當于mysql的show databases
\l+              --獲取所有數據庫信息+更多描述信息
\dt                            --列出所有表,相當于show tables
\dn                         --列出當前庫下的schema信息
\du                         --獲取所有用戶信息
\du+                        --就比du命令多了一個Description列
\db+             --查看表空間信息
\s               --打印歷史命令
\d                            --列出當前庫下的表
\d table_name    --查看表定義信息
\dt+ table_name  --查看表占用空間大小
\di+ index_name  --查看索引占用空間大小               
\q , exit                    --退出psql
\c mydb                    --切換數據庫,相當于MySQL的use mydb
\c mydb schemaname    --切換到mydb庫下的某個schema下
\x                ---將結果集豎行顯示,相當于MySQL在SQL結尾的\G功能;
\?                            --列出所有的元命令
\timing                    --SQL計時器,記錄某個SQL執行完所花費的時間

show hba_file    --查看參數hba_file

常用系統表

  • pg_roles --角色系統表
  • pg_tables --數據庫
  • pg_user --用戶系統表
1.1關閉數據庫

pg_ctl stop -m fast

關閉數據庫的幾種模式:

  • ms, 默認模式,等待所有連接事務完成,不允許新的事務,shutdown之前會進行checkpoint確保所有已提交事務落盤
  • mf, 快速模式,建議在繁忙系統使用,kill掉所有開啟的事務,shutdown之前會進行checkpoint確保所有已提交事務落盤
  • mi, 立即模式,緊急情況下使用,立即kill掉所有進程,實例重啟后需要Crash Recovery

2.查看數據庫當前活躍回話的SQL:

mydb=# select pid,usename,datname,query,client_addr from pg_stat_activity where pid<>pg_backend_pid() and state='active' order by query;

pid | usename | datname | query | client_addr
-----+---------+---------+-------+-------------
(0 rows)

注:state可以為‘active’或‘idle’,

為了方面,我們可以創建~/.psqlrc文件,然后自定義命令行變量,將如下內容寫入文件中:

--check the current active sessions:
\set active_session 'select pid,usename,datname,query,client_addr from pg_stat_activity where pid<>pg_backend_pid() and state=\'active\' order by query;'

使用方法:
連接到psql交互界面:

mydb=# :active_session;                --直接使用變量active_session即可調用上述SQL命令;
pid | usename | datname | query | client_addr
-----+---------+---------+-------+-------------
(0 rows)

3.查看會話等待事件

mydb=# select pid,usename,datname,query,client_addr,wait_event_type,wait_event from pg_stat_activity where pid<>pg_backend_pid() and wait_event is not null order by wait_event_type;

4.查看數據庫連接數

mydb=# select datname,usename,client_addr,count(*) from pg_stat_activity where pid<>pg_backend_pid()  group by 1,2,3 order by 1,2,4 desc;

5.計算緩存命中率

緩存命中率應該非常接近1,否則應該調整shard_buffers參數的配置

select blks_hit::float/(blks_read+blks_hit) as cache_hit_ratio from pg_stat_database where datname=current_database();

6.計算事務提交率

通過事務提交率則可以知道我們應用的健康情況,它應該等于或非常接近1,否則檢查是否有死鎖或者其他超時太多。

select xact_commit::float/(xact_commit+xact_rollback) as successful_xact_ratio from pg_stat_database where datname=current_database();

7.查詢平均執行時間最長的3條語句

注:不過需要首先開通pg_stat_statements模塊功能

select calls,total_time/calls as avg_time, left(query,80) from pg_stat_statements order by 2 desc limit 3;

8.獲取某表上索引的大小以及掃描情況跟:

select schemaname,relname,indexrelname,pg_relation_size(indexrelid) as index_size,idx_scan,idx_tup_read,idx_tup_fetch
from pg_stat_user_indexes
where indexrelname in (
    select indexname from pg_indexes where schemaname='public' and tablename='test_1');

結果如下:

schemaname | relname |  indexrelname   | index_size | idx_scan | idx_tup_read | idx_tup_fetch
------------+---------+-----------------+------------+----------+--------------+---------------
public     | test_1  | test_1_pkey     |    2260992 |       25 |           26 |            21
public     | test_1  | test_1_name_idx |    3178496 |        0 |            0 |             0

參考網址:
元命令詳述: https://blog.51cto.com/wujianwei/1980277

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • PostgreSQL備份和恢復 原創沒刮胡子 最后發布于2019-07-18 14:05:10 閱讀數 190 收...
    不玩了啊閱讀 1,963評論 0 0
  • pg_ctl 名稱 pg_ctl -- 啟動、停止、重啟 PostgreSQL語法 pg_ctl start [-...
    老肖閱讀 982評論 0 0
  • 概述 postgresql是一個開源的關系型數據庫,可以作為mysql的替代品。本篇意在讓讀者快速的了解postg...
    胖頭魚戰士閱讀 8,417評論 0 7
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學已經沒多少時間了。班主任說已經安排了三個家長分享經驗。 放學鈴聲...
    飄雪兒5閱讀 7,561評論 16 22
  • 今天感恩節哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    迷月閃星情閱讀 10,609評論 0 11