查看運行時間長的sqlhtml
|
查看指定表空間下的表和索引sql
|
默認表空間的話where判斷 c.reltablespace=0 或 t.spcname is null
緩存
查看指定pid須要的鎖狀態app
|
查看未使用索引post
|
查看指定表的索引
|
某個pid在等待的鎖的持有者
|
查看全部鎖的狀態
|
查看數據庫
--查看ve數據庫的大小 select pg_size_pretty(pg_database_size('ve'));
--查看錶大小(不含索引等信息) select pg_relation_size('user'); select pg_size_pretty(pg_relation_size('use'))
--查看每一個DB的使用狀況(讀,寫,緩存,更新,事務等) select * from pg_stat_database --查看索引的使用狀況 select * from pg_stat_user_indexes; --查看錶所對應的數據文件路徑與大小 SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'empsalary';
--查看錶空間大小 select pg_tablespace_size('pg_default');
select pg_database_size('playboy'); //查看playboy數據庫的大小
select pg_database.datname, pg_database_size(pg_database.datname) AS size from pg_database; //查看全部數據庫的大小
select pg_size_pretty(pg_database_size('runoobdb')); # 以KB,MB,GB的方式來查看數據庫大小 pg_size_pretty ---------------- 7447 kB (1 row)
查看多表
postgres=# select pg_relation_size('a'); ----查看錶的大小
postgres=# \d a -----查看錶的信息(若是表中有索引會在下面顯示索引的內容)
playboy=> \d test; //至關於mysql的,mysql> desc test;
select pg_relation_size('test'); //查看錶大小
select pg_size_pretty(pg_relation_size('test')); //以KB,MB,GB的方式來查看錶大小
select pg_size_pretty(pg_total_relation_size('test')); //查看錶的總大小,包括索引大小
查看單表
select pg_relation_size('test'); //查看test表大小
select pg_size_pretty(pg_relation_size('test')); //以KB,MB,GB的方式來查看錶大小
select pg_size_pretty(pg_total_relation_size('test')); //查看錶的總大小,包括索引大小
使用pg_table_size() 函數查看查看test表大小
david=# select pg_table_size('test');
david=# select pg_size_pretty(pg_table_size('test'));
查看指定表的總大小
postgres=# select pg_total_relation_size('test');
pg_total_relation_size
------------------------
8192
(1 row)
postgres=# select pg_size_pretty(pg_total_relation_size('test'));
pg_size_pretty
----------------
8192 bytes
(1 row)
查看指定schema 裏全部的表大小,按從大到小的順序排列。
david=# select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;
查看錶空間大小
postgres=# select spcname from pg_tablespace; postgres=# select pg_tablespace_size('pg_default'); postgres=# select pg_size_pretty(pg_tablespace_size('pg_default'));
另外一種查看方法:
=# select pg_tablespace_size('pg_default')/1024/1024 as "SIZE M"; =# select pg_tablespace_size('pg_default')/1024/1024/1024 as "SIZE G";
查看索引
\di //查看數據庫的全部索引 , 至關於mysql的,mysql> show index from test;
select pg_size_pretty(pg_relation_size('playboy_id_pk')); //查看索大小
查看錶空間,以及大小
select spcname from pg_tablespace; //查看全部表空間
select pg_size_pretty(pg_tablespace_size('pg_default')); //查看錶空間大小
postgres=# select pg_size_pretty(pg_tablespace_size('pg_default')); ----查看錶空間的大小
postgres=# \db ------查看全部的表空間以及表空間對應的目錄
查看單索引大小
david=# select pg_relation_size('idx_test'); pg_relation_size ------------------ 41238528 (1 row) david=# select pg_size_pretty(pg_relation_size('idx_test')); pg_size_pretty ---------------- 39 MB (1 row)
查看指定表中全部索引大小
david=# select pg_indexes_size('test'); pg_indexes_size ----------------- 82477056 (1 row) david=# select pg_size_pretty(pg_indexes_size('test')); pg_size_pretty ---------------- 79 MB (1 row)
找出最大的表和索引
postgres=# SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;
顯示索引的尺寸
postgres=# SELECT c2.relname, c2.relpages FROM pg_class c, pg_class c2, pg_index i WHERE c.relname = 'ctetest' AND c.oid = i.indrelid AND c2.oid = i.indexrelid ORDER BY c2.relname; relname | relpages ----------------+---------- ctetest_id_idx | 2198 (1 row)
查看指定schema 裏全部的索引大小,按從大到小的順序排列。
=# select * from pg_namespace;
或者
查看全部的索引大小,按從大到小的順序排列。
=# select indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;
select * from pg_indexes where tablename='tbname';
或者
select * from pg_statio_all_indexes where relname='tbname';
建立索引
create index tbl_bb_index on tbl_bb(id,name);
注:tbl_bb 位表名稱, tbl_bb_index 爲建立的索引名稱, id 和 name 爲 表裏的字段
刪除索引
DROP INDEX index;
index是要刪除的索引名
注意 : 沒法刪除DBMS爲主鍵約束和惟一約束自動建立的索引
測試數據基數約等於行數的狀況下(IN語句中的數據量大小爲20)
EXPLAIN ANALYSE SELECT id, name, password, description FROM test_100000 WHERE name IN ( SELECT name FROM test_1000000 LIMIT 20 );
統計各數據庫佔用磁盤大小:
SELECT d.datname AS Name, pg_catalog.pg_get_userbyid(d.datdba) AS Owner, CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname)) ELSE 'No Access' END AS SIZE FROM pg_catalog.pg_database d ORDER BY CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_database_size(d.datname) ELSE NULL END DESC -- nulls first LIMIT 20;
統計數據庫中各表佔用磁盤大小:
SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;
SELECT * FROM information_schema. COLUMNS WHERE COLUMN_NAME = 'storename';
SELECT c.relname AS "表名",a.attname AS "字段名",c.oid FROM pg_class c LEFT JOIN pg_attribute a ON a.attrelid = c.oid WHERE c.relname NOT LIKE 'pg_%' -- AND c.relname = 'kx_store' AND a.attname = 'storename';
查詢當前數據庫下的全部模式
SELECT * FROM information_schema.schemata;
第一種方法是使用pg_stat_statements插件定位慢SQL,步驟以下
create extension pg_stat_statements; select pg_stat_reset(); select pg_stat_statements_reset();
查詢最耗時的SQL(通常就是致使問題的直接緣由)。
select * from pg_stat_statements order by total_time desc limit 5;
查詢讀取Buffer次數最多的SQL,這些SQL可能因爲所查詢的數據沒有索引,而致使了過多的Buffer讀,也同時大量消耗了CPU。
select * from pg_stat_statements order by shared_blks_hit+shared_blks_read desc limit 5;
第二種方法是,直接經過pg_stat_activity視圖,利用下面的查詢,查看當前長時間執行,一直不結束的SQL。這些SQL對應形成CPU滿,也有直接嫌疑。
select datname, usename, client_addr, application_name, state, backend_start, xact_start, xact_stay, query_start, query_stay, replace(query, chr(10), ' ') as query from (select pgsa.datname as datname, pgsa.usename as usename, pgsa.client_addr client_addr, pgsa.application_name as application_name, pgsa.state as state, pgsa.backend_start as backend_start, pgsa.xact_start as xact_start, extract(epoch from (now() - pgsa.xact_start)) as xact_stay, pgsa.query_start as query_start, extract(epoch from (now() - pgsa.query_start)) as query_stay , pgsa.query as query from pg_stat_activity as pgsa where pgsa.state != 'idle' and pgsa.state != 'idle in transaction' and pgsa.state != 'idle in transaction (aborted)') idleconnections order by query_stay desc limit 5;
PostgreSQL CPU佔用100%性能分析及慢sql優化 :https://www.cnblogs.com/ilifeilong/p/8488119.html