分享好友 数据库首页 频道列表

PostgreSQL查看数据库,索引,表,表空间大小的示例代码

PostgreSQL  2015-07-03 11:050
一、简介

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 查看存储一个指定的数值需要的字节数

复制代码 代码如下:

david=# select pg_column_size(1);    
 pg_column_size
----------------
(1 row)

david=# select pg_column_size(10000);
 pg_column_size
----------------
(1 row)

david=# select pg_column_size('david');
 pg_column_size
----------------
(1 row)

david=# select pg_column_size('hello,world');
 pg_column_size
----------------
(1 row)

david=# select pg_column_size('2013-04-18 15:17:21.622885+08');
 pg_column_size
----------------
(1 row)

david=# select pg_column_size('中国');                        
 pg_column_size
----------------
(1 row)

david=#

3.2 查看数据库大小

查看原始数据

复制代码 代码如下:

david=# \d test
              Table "public.test"
  Column   |         Type          | Modifiers
-----------+-----------------------+-----------
 id        | integer               |
 name      | character varying(20) |
 gender    | boolean               |
 join_date | date                  |
 dept      | character(4)          |
Indexes:
    "idx_join_date_test" btree (join_date)
    "idx_test" btree (id)

david=# select count(1) from test;
  count 
---------
(1 row)

david=#

查看david 数据库大小

复制代码 代码如下:

david=# select pg_database_size('david');
 pg_database_size
------------------
(1 row)

david=#

查看所有数据库大小

复制代码 代码如下:

david=# select pg_database.datname, pg_database_size(pg_database.datname) AS size from pg_database;               
  datname  |    size    
-----------+-------------
 template0 |     6513156
 postgres  |     6657144
 jboss     |     6521348
 bugs      |     6521348
 david     |   190534776
 BMCV3     | 28147135608
 mydb      |    10990712
 template1 |     6521348
(8 rows)

david=#

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

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

复制代码 代码如下:

david=# select pg_size_pretty(pg_database_size('david'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

3.4 查看单索引大小

复制代码 代码如下:

david=# select pg_relation_size('idx_test');
 pg_relation_size
------------------
(1 row)

david=# select pg_size_pretty(pg_relation_size('idx_test'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

复制代码 代码如下:

david=# select pg_size_pretty(pg_relation_size('idx_join_date_test'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

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

复制代码 代码如下:

david=# select pg_indexes_size('test');                 
 pg_indexes_size
-----------------
(1 row)

david=# select pg_size_pretty(pg_indexes_size('test'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

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

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

复制代码 代码如下:

david=# select * from pg_namespace;
      nspname       | nspowner |               nspacl               
--------------------+----------+-------------------------------------
 pg_toast           |       10 |
 pg_temp_1          |       10 |
 pg_toast_temp_1    |       10 |
 pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
 information_schema |       10 | {postgres=UC/postgres,=U/postgres}
 public             |       10 | {postgres=UC/postgres,=UC/postgres}
(6 rows)

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;
         indexrelname          | pg_size_pretty
-------------------------------+----------------
 idx_join_date_test            | 91 MB
 idx_test                      | 91 MB
 testtable_idx                 | 1424 kB
 city_pkey                     | 256 kB
 city11                        | 256 kB
 countrylanguage_pkey          | 56 kB
 sale_pkey                     | 8192 bytes
 track_pkey                    | 8192 bytes
 tbl_partition_201211_joindate | 8192 bytes
 tbl_partition_201212_joindate | 8192 bytes
 tbl_partition_201301_joindate | 8192 bytes
 tbl_partition_201302_joindate | 8192 bytes
 tbl_partition_201303_joindate | 8192 bytes
 customer_pkey                 | 8192 bytes
 album_pkey                    | 8192 bytes
 item_pkey                     | 8192 bytes
 tbl_partition_201304_joindate | 8192 bytes
 tbl_partition_201307_joindate | 8192 bytes
 tbl_partition_201305_joindate | 0 bytes
 tbl_partition_201306_joindate | 0 bytes
(20 rows)

david=#

3.7 查看指定表大小

复制代码 代码如下:

david=# select pg_relation_size('test');               
 pg_relation_size
------------------
(1 row)

david=# select pg_size_pretty(pg_relation_size('test'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

使用pg_table_size() 函数查看

复制代码 代码如下:

david=# select pg_table_size('test');                  
 pg_table_size
---------------
(1 row)

david=# select pg_size_pretty(pg_table_size('test'));  
 pg_size_pretty
----------------
MB
(1 row)

david=#

3.8 查看指定表的总大小

复制代码 代码如下:

david=# select pg_total_relation_size('test');      
 pg_total_relation_size
------------------------
(1 row)

david=# select pg_size_pretty(pg_total_relation_size('test'));
 pg_size_pretty
----------------
MB
(1 row)

david=#

3.9 查看指定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;
            relname            | pg_size_pretty
-------------------------------+----------------
 test                          | 91 MB
 testtable                     | 1424 kB
 city                          | 256 kB
 countrylanguage               | 56 kB
 country                       | 40 kB
 testcount                     | 8192 bytes
 tbl_partition_201302          | 8192 bytes
 tbl_partition_201303          | 8192 bytes
 person                        | 8192 bytes
 customer                      | 8192 bytes
 american_state                | 8192 bytes
 tbl_david                     | 8192 bytes
 emp                           | 8192 bytes
 tbl_partition_201212          | 8192 bytes
 tbl_partition_201304          | 8192 bytes
 tbl_partition_error_join_date | 8192 bytes
 tbl_partition_201211          | 8192 bytes
 album                         | 8192 bytes
 tbl_partition_201307          | 8192 bytes
 tbl_xulie                     | 8192 bytes
 tbl_partition_201301          | 8192 bytes
 sale                          | 8192 bytes
 item                          | 8192 bytes
 track                         | 8192 bytes
 tbl_partition_201306          | 0 bytes
 tbl_partition                 | 0 bytes
 tbl_partition_201305          | 0 bytes
 person2                       | 0 bytes
(28 rows)

david=#

3.10 查看表空间大小

复制代码 代码如下:

david=# select spcname from pg_tablespace;
  spcname  
------------
 pg_default
 pg_global
(2 rows)

david=# select pg_tablespace_size('pg_default');               
 pg_tablespace_size
--------------------
(1 row)

david=# select pg_size_pretty(pg_tablespace_size('pg_default'));
 pg_size_pretty
----------------
GB
(1 row)

david=#

另一种查看方法:

复制代码 代码如下:

david=# select pg_tablespace_size('pg_default')/1024/1024 as "SIZE M";    
 SIZE M
--------
(1 row)

david=# select pg_tablespace_size('pg_default')/1024/1024/1024 as "SIZE G";
 SIZE G
--------
(1 row)

david=#

查看更多关于【PostgreSQL】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Oracle的HINT可以强制指定SQL的执行计划,比如选择索引、表的连接顺序以及表的连接方式等等。(转)
在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 :  select table_name from user_tables;  //当前用户的表 select table_name from all_tables;  //所有用户的表 select table_name from dba_tables;  //包

0评论2023-02-10857

MYSQL学习笔记——sql语句优化之索引 数据库索引调优
      上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍mysql中最简单快速的优化方法——添加索引。一、索引的添加  

0评论2023-02-10665

Oracle PL/SQL之函数索引(Function-based indexes)使用示例
函数索引(Function-based indexes)只有在where条件使用了与索引中相同的基于相同列的函数时才起作用。 duzz$scott@orclset autotrace onduzz$scott@orclcreate table t1 as select * from dept;Table created.Elapsed: 00:00:00.01duzz$scott@orclcreate i

0评论2023-02-10756

利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)##应用情景项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后发现查询很低。Oracle自带的EM控制台带有自动优化功能,能给出优化方案,本

0评论2023-02-10336

oracle 常用SQL语句学习笔记之五 删除表、索引、别名
删除表:DROP TABLE table_name;示例drop table emp;删除索引:DROP INDEX index_name;示例drop index i_1;删除别名:DROP SYNONYM synonym_name;示例drop synonym mm;

0评论2023-02-09365

Oracle 如何创建和使用全文索引
Oracle实现全文检索,其机制其实很简单。即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为 term)找出来,记录在一组 以dr$开头的表中,同时记下该term出现的位置、次数、hash 值等信息。

0评论2016-06-20172

Mysql性能优化案例 - 覆盖索引分享
这篇文章主要介绍了Mysql性能优化案例 - 覆盖索引分享,需要的朋友可以参考下

0评论2016-05-18154

Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
这篇文章主要介绍了Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE,需要的朋友可以参考下

0评论2016-05-1893

mysql索引必须了解的几个重要问题
这篇文章主要介绍了mysql索引必须了解的几个重要问题,分析了MySQL数据库索引的相关概念与使用技巧,需要的朋友可以参考下

0评论2016-05-18104

Mysql数据库之索引优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。本文给大家介绍mysql数据库之索引优化,感兴趣的朋友一起学习吧

0评论2016-05-18107

MySQL中字符串索引对update的影响分析
这篇文章主要介绍了MySQL中字符串索引对update的影响,结合实例形式分析了添加索引操作对于update语句的性能所造成的影响,需要的朋友可以参考下

0评论2016-05-18163

MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下

0评论2016-04-27364

Mongodb索引的优化
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧

0评论2016-04-2777

Oracle数据库中建立索引的基本方法讲解
这篇文章主要介绍了Oracle数据库中建立索引的基本方法,包括对性能方面进行衡量而给出的一些索引的设计和使用建议,需要的朋友可以参考下

0评论2016-03-07167

MySQL中对于索引的基本增删查改操作总结
这篇文章主要介绍了MySQL中对于索引的基本增删查改操作总结,索引可以提高MySQL的检索速度,需要的朋友可以参考下

0评论2016-01-28155

MySQL中索引优化distinct语句及distinct的多字段操作
这篇文章主要介绍了MySQL中索引优化distinct语句及distinct的多字段操作方法,distinct语句去重功能的使用是MySQL入门学习中的基础知识,需要的朋友可以参考下

0评论2016-01-2884

MongoDB索引使用详解
索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

0评论2016-01-21173

MySQL中的唯一索引的简单学习教程
这篇文章主要介绍了MySQL中的唯一索引的简单学习教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下

0评论2015-11-26162

mysql数据库索引损坏及修复经验分享
这篇文章主要介绍了mysql数据库索引损坏及修复经验分享,需要的朋友可以参考下

0评论2015-11-15105

更多推荐