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.
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 |
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 |
Güzel bir konu olmuş hocam, teşekkürler.
YanıtlaSilBazı 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.