17 Mart 2013 Pazar

PostgreSQL veritabanı disk kullanım değerleri

PostgreSQL veritabanında hangi veritabanının veya tablonun ne kadar yer kapladığını aşağıdaki sorgularla bulabilirsiniz.

 
pg_database_size fonksiyonu ile veritabanının boyutunu integer olarak alırsınız. pg_size_pretty fonksiyonu ile de bu integer değerini daha okunabilir bir formata çevirirsiniz.


mail=> select pg_size_pretty(pg_database_size('mail'));
 pg_size_pretty
----------------
 313 MB
(1 row)


Tek bir tablonun boyunu ise pg_relation_size fonksiyonu ile bulabilirsiniz.

mail=> select pg_size_pretty(pg_relation_size('maillog_130315'));
 pg_size_pretty
----------------
 480 kB
(1 row)



http://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE adresindeki diğer fonksiyonları da kullanarak tablespace ve kolon bazında disk kullanım değerlerini görebilirsiniz.


http://wiki.postgresql.org/wiki/Disk_Usage adresindeki belirtilen aşağıdaki sorguyu çalıştırarak en fazla yer kaplayan 20 veritabanını kullanım sırasına göre listeleyebilirsiniz.



mail> 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;
 
  name    |  owner   |  size   
-----------+----------+---------
 mail      | surmail  | 313 MB
 webmail   | surmail  | 9581 kB
 clouddb   | postgres | 7641 kB
 template1 | postgres | 6369 kB
 postgres  | postgres | 6369 kB
 template0 | postgres | 6361 kB
(6 rows) 


Ayrıca \dt+ komutu ile de tabloların boyutlarını görebilirsiniz. Fakat burada tablo sıralaması tablo adına göre yapılmaktadır.


mail=> \dt+
                                List of relations
 Schema |            Name     | Type  |  Owner  |    Size    | Description
--------+--------------------------+-------+---------+------------+-------------
 public | auditlogs           
| table | mail | 103 MB     |
 public | clientlogs           | table | mail | 432 kB     |
 public | summary              | table | mail | 8192 bytes |
 public | summarydays          | table | mail | 400 kB     |  


1 yorum:

  1. Güzel bir konu olmuş hocam, teşekkürler.
    Bazı uygulamalar logları veri tabanına yazmakta ve tablo boyut zaman zaman yükselmekte hatta bazen o kadar yükseliyor ki, logları view ettiğimiz gui ye veri cekemiyoruz, select çektiğimizde cevap alamıyoruz.
    VACUUM ettiğimizde de bir sonuca ulaşamayabiliyoruz bu gibi durumlar da "TRUNCATE logstable" tabloların içeriğini temizlemek için oldukça faydalı olabilmekte.

    Konuya katkıda bulunmak adına bir türkçe dökümana http://www.linuxakademi.org/2012/12/komut-satirindan-postgresql-islemlerini-yurutmek.html ben paylaşmış olayım.

    YanıtlaSil