转载:PostgreSQL 查看数据库,索引,表,表空间大小

前端之家收集整理的这篇文章主要介绍了转载:PostgreSQL 查看数据库,索引,表,表空间大小前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载:http://www.cnblogs.com/mchina/archive/2013/04/19/3028573.html

一、简介

Postgresql 提供了多个系统管理函数来查看表,索引,表空间及数据库的大小,下面详细介绍一下。

二、数据库对象尺寸函数

函数 返回类型 描述
pg_column_size(any) int 存储一个指定的数值需要的字节数(可能压缩过)
pg_database_size(oid) bigint 指定OID的数据库使用的磁盘空间
pg_database_size(name) bigint 指定名称数据库使用的磁盘空间
pg_indexes_size(regclass) bigint 关联指定表OID或表名的表索引的使用总磁盘空间
pg_relation_size(relation regclass,fork text) bigint 指定OID或名的表或索引,通过指定fork('main', 'fsm' 或'vm')所使用的磁盘空间
pg_relation_size(relation regclass) bigint pg_relation_size(...,'main')的缩写
pg_size_pretty(bigint) text Converts a size in bytes expressed as a 64-bit integer into a human-readable format with size units
pg_size_pretty(numeric) text 把以字节计算的数值转换成一个人类易读的尺寸单位
pg_table_size(regclass) bigint 指定表OID或表名的表使用的磁盘空间,除去索引(但是包含TOAST,自由空间映射和可视映射)
pg_tablespace_size(oid) bigint 指定OID的表空间使用的磁盘空间
pg_tablespace_size(name) bigint 指定名称的表空间使用的磁盘空间
pg_total_relation_size(regclass) bigint 指定表OID或表名使用的总磁盘空间,包括所有索引和TOAST数据

三、实例讲解

3.1 查看存储一个指定的数值需要的字节数


  1. david=# select pg_column_size(1);
  2. pg_column_size
  3. ----------------
  4. 4
  5. (1 row)
  6.  
  7. david=# select pg_column_size(10000);
  8. pg_column_size
  9. ----------------
  10. 4
  11. (1 row)
  12.  
  13. david=# select pg_column_size('david');
  14. pg_column_size
  15. ----------------
  16. 6
  17. (1 row)
  18.  
  19. david=# select pg_column_size('hello,world');
  20. pg_column_size
  21. ----------------
  22. 12
  23. (1 row)
  24.  
  25. david=# select pg_column_size('2013-04-18 15:17:21.622885+08');
  26. pg_column_size
  27. ----------------
  28. 30
  29. (1 row)
  30.  
  31. david=# select pg_column_size('中国');
  32. pg_column_size
  33. ----------------
  34. 7
  35. (1 row)
  36.  
  37. david=#

3.2 查看数据库大小

查看原始数据


  1. david=# \d test
  2. Table "public.test"
  3. Column | Type | Modifiers
  4. -----------+-----------------------+-----------
  5. id | integer |
  6. name | character varying(20) |
  7. gender | boolean |
  8. join_date | date |
  9. dept | character(4) |
  10. Indexes:
  11. "idx_join_date_test" btree (join_date)
  12. "idx_test" btree (id)
  13.  
  14. david=# select count(1) from test;
  15. count
  16. ---------
  17. 1835008
  18. (1 row)
  19.  
  20. david=#

查看david 数据库大小


  1. david=# select pg_database_size('david');
  2. pg_database_size
  3. ------------------
  4. 190534776
  5. (1 row)
  6.  
  7. david=#

查看所有数据库大小


  1. david=# select pg_database.datname,pg_database_size(pg_database.datname) AS size from pg_database;
  2. datname | size
  3. -----------+-------------
  4. template0 | 6513156
  5. postgres | 6657144
  6. jboss | 6521348
  7. bugs | 6521348
  8. david | 190534776
  9. BMCV3 | 28147135608
  10. mydb | 10990712
  11. template1 | 6521348
  12. (8 rows)
  13.  
  14. david=#

这样查出来的结果,看上去太长了,不太容易读数。

3.3 以人性化的方式显示大小


  1. david=# select pg_size_pretty(pg_database_size('david'));
  2. pg_size_pretty
  3. ----------------
  4. 182 MB
  5. (1 row)
  6.  
  7. david=#

3.4 查看单索引大小


  1. david=# select pg_relation_size('idx_test');
  2. pg_relation_size
  3. ------------------
  4. 41238528
  5. (1 row)
  6.  
  7. david=# select pg_size_pretty(pg_relation_size('idx_test'));
  8. pg_size_pretty
  9. ----------------
  10. 39 MB
  11. (1 row)
  12.  
  13. david=#


  1. david=# select pg_size_pretty(pg_relation_size('idx_join_date_test'));
  2. pg_size_pretty
  3. ----------------
  4. 39 MB
  5. (1 row)
  6.  
  7. david=#

3.5 查看指定表中所有索引大小


  1. david=# select pg_indexes_size('test');
  2. pg_indexes_size
  3. -----------------
  4. 82477056
  5. (1 row)
  6.  
  7. david=# select pg_size_pretty(pg_indexes_size('test'));
  8. pg_size_pretty
  9. ----------------
  10. 79 MB
  11. (1 row)
  12.  
  13. david=#

idx_test 和idx_join_date_test两个索引大小加起来差不多等于上面pg_indexes_size() 查询出来的索引大小。

3.6 查看指定schema 里所有的索引大小,按从大到小的顺序排列。


  1. david=# select * from pg_namespace;
  2. nspname | nspowner | nspacl
  3. --------------------+----------+-------------------------------------
  4. pg_toast | 10 |
  5. pg_temp_1 | 10 |
  6. pg_toast_temp_1 | 10 |
  7. pg_catalog | 10 | {postgres=UC/postgres,=U/postgres}
  8. information_schema | 10 | {postgres=UC/postgres,=U/postgres}
  9. public | 10 | {postgres=UC/postgres,=UC/postgres}
  10. (6 rows)
  11.  
  12. david=# select indexrelname,pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;
  13. indexrelname | pg_size_pretty
  14. -------------------------------+----------------
  15. idx_join_date_test | 91 MB
  16. idx_test | 91 MB
  17. testtable_idx | 1424 kB
  18. city_pkey | 256 kB
  19. city11 | 256 kB
  20. countrylanguage_pkey | 56 kB
  21. sale_pkey | 8192 bytes
  22. track_pkey | 8192 bytes
  23. tbl_partition_201211_joindate | 8192 bytes
  24. tbl_partition_201212_joindate | 8192 bytes
  25. tbl_partition_201301_joindate | 8192 bytes
  26. tbl_partition_201302_joindate | 8192 bytes
  27. tbl_partition_201303_joindate | 8192 bytes
  28. customer_pkey | 8192 bytes
  29. album_pkey | 8192 bytes
  30. item_pkey | 8192 bytes
  31. tbl_partition_201304_joindate | 8192 bytes
  32. tbl_partition_201307_joindate | 8192 bytes
  33. tbl_partition_201305_joindate | 0 bytes
  34. tbl_partition_201306_joindate | 0 bytes
  35. (20 rows)
  36.  
  37. david=#

3.7 查看指定表大小


  1. david=# select pg_relation_size('test');
  2. pg_relation_size
  3. ------------------
  4. 95748096
  5. (1 row)
  6.  
  7. david=# select pg_size_pretty(pg_relation_size('test'));
  8. pg_size_pretty
  9. ----------------
  10. 91 MB
  11. (1 row)
  12.  
  13. david=#

使用pg_table_size() 函数查看


  1. david=# select pg_table_size('test');
  2. pg_table_size
  3. ---------------
  4. 95789056
  5. (1 row)
  6.  
  7. david=# select pg_size_pretty(pg_table_size('test'));
  8. pg_size_pretty
  9. ----------------
  10. 91 MB
  11. (1 row)
  12.  
  13. david=#

3.8 查看指定表的总大小


  1. david=# select pg_total_relation_size('test');
  2. pg_total_relation_size
  3. ------------------------
  4. 178266112
  5. (1 row)
  6.  
  7. david=# select pg_size_pretty(pg_total_relation_size('test'));
  8. pg_size_pretty
  9. ----------------
  10. 170 MB
  11. (1 row)
  12.  
  13. david=#

3.9 查看指定schema 里所有的表大小,按从大到小的顺序排列。


  1. 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;
  2. relname | pg_size_pretty
  3. -------------------------------+----------------
  4. test | 91 MB
  5. testtable | 1424 kB
  6. city | 256 kB
  7. countrylanguage | 56 kB
  8. country | 40 kB
  9. testcount | 8192 bytes
  10. tbl_partition_201302 | 8192 bytes
  11. tbl_partition_201303 | 8192 bytes
  12. person | 8192 bytes
  13. customer | 8192 bytes
  14. american_state | 8192 bytes
  15. tbl_david | 8192 bytes
  16. emp | 8192 bytes
  17. tbl_partition_201212 | 8192 bytes
  18. tbl_partition_201304 | 8192 bytes
  19. tbl_partition_error_join_date | 8192 bytes
  20. tbl_partition_201211 | 8192 bytes
  21. album | 8192 bytes
  22. tbl_partition_201307 | 8192 bytes
  23. tbl_xulie | 8192 bytes
  24. tbl_partition_201301 | 8192 bytes
  25. sale | 8192 bytes
  26. item | 8192 bytes
  27. track | 8192 bytes
  28. tbl_partition_201306 | 0 bytes
  29. tbl_partition | 0 bytes
  30. tbl_partition_201305 | 0 bytes
  31. person2 | 0 bytes
  32. (28 rows)
  33.  
  34. david=#

3.10 查看表空间大小


  1. david=# select spcname from pg_tablespace;
  2. spcname
  3. ------------
  4. pg_default
  5. pg_global
  6. (2 rows)
  7.  
  8. david=# select pg_tablespace_size('pg_default');
  9. pg_tablespace_size
  10. --------------------
  11. 28381579760
  12. (1 row)
  13.  
  14. david=# select pg_size_pretty(pg_tablespace_size('pg_default'));
  15. pg_size_pretty
  16. ----------------
  17. 26 GB
  18. (1 row)
  19.  
  20. david=#

另一种查看方法


  1. david=# select pg_tablespace_size('pg_default')/1024/1024 as "SIZE M";
  2. SIZE M
  3. --------
  4. 27066
  5. (1 row)
  6.  
  7. david=# select pg_tablespace_size('pg_default')/1024/1024/1024 as "SIZE G";
  8. SIZE G
  9. --------
  10. 26
  11. (1 row)
  12.  
  13. david=#

猜你在找的Postgre SQL相关文章