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