आप एक Postgres / PostgreSQL टेबल और उसके सूचकांक के डिस्क का आकार कैसे पाते हैं


156

मैं Oracle से Postgres पर आ रहा हूं और bytes/MB/GB/etcसभी तालिकाओं के लिए तालिका और अनुक्रमणिका आकार खोजने के तरीके की तलाश कर रहा हूं या बेहतर भी। ओरेकल में मेरे पास एक बुरा लंबी क्वेरी थी जो जवाब देने के लिए user_lobs और user_seaction को देखती थी।

मुझे लगता है कि पोस्टग्रैज में कुछ ऐसी चीजें हैं जिनका मैं information_schemaतालिकाओं में उपयोग कर सकता हूं , लेकिन मैं यह नहीं देख रहा हूं कि कहां है।


जवाबों:


271

डेटाबेस ऑब्जेक्ट आकार कार्य का प्रयास करें । एक उदाहरण:

SELECT pg_size_pretty(pg_total_relation_size('"<schema>"."<table>"'));

सभी तालिकाओं के लिए, कुछ की तर्ज पर:

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;

संपादित करें: यहाँ सुविधा के लिए @phord द्वारा प्रस्तुत क्वेरी है:

SELECT
    table_name,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        table_name,
        pg_table_size(table_name) AS table_size,
        pg_indexes_size(table_name) AS indexes_size,
        pg_total_relation_size(table_name) AS total_size
    FROM (
        SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
        FROM information_schema.tables
    ) AS all_tables
    ORDER BY total_size DESC
) AS pretty_sizes;

मैंने pg_table_size()मेटाडेटा को शामिल करने और आकारों को जोड़ने के लिए उपयोग करने के लिए इसे थोड़ा संशोधित किया है ।


3
संयोग से, अगर किसी को बड़ी, बार-बार होने वाली अभिव्यक्ति के बारे में कोई जानकारी है, तो मुझे यह सुनकर खुशी होगी।
ऐब

2
आप इसे उपनाम नहीं दे सकते, लेकिन आप इसे हमेशा एक सबक्वेरी में चला सकते हैं ... जैसे: SELECT table_full_name, pg_size_pretty (size) FROM (SELECT .. AS table_full_name, .. AS size FULL ....) x ORDER BY साइज।
मैग्नस हैगेंडर

1
एक सुझाव: इसमें बदलाव '"' || table_schema || '"."' || table_name || '"'करें format('%I.%I', table_schema, table_name)
jpmc26

174

डेटाबेस आकार दिखाएं:

\l+

जैसे

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

तालिका आकार दिखाएं:

\d+

जैसे

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

में ही काम करता है psql

( @ Zkutch के उत्तर का सारांश ।)


28
यदि किसी को टेबल और इंडेक्स दोनों को देखने की जरूरत है, \dti+तो यह ट्रिक करेगा।
तोमाज़

यह रिटर्न नाम से छांटा गया, हालांकि, शीर्ष उत्तर रिटर्न आकार के आधार पर क्रमबद्ध है
इज़्काटा

23

यदि डेटाबेस का नाम है snort, तो निम्न वाक्य इसे आकार देते हैं:

psql -c "\l+ snort" | awk -F "|" '{print $7}'

2
आकार के त्वरित दृश्य के लिए अब तक का सबसे सरल उत्तर। मैंने इसे एक शेल फ़ंक्शन में रखा है dbsize
रिचवेल

12

इसे टियर करें: (अनुक्रमणिका आकार / उपयोग के आँकड़े)

SELECT
    t.tablename,
    indexname,
    c.reltuples AS num_rows,
    pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
    pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
    CASE WHEN indisunique THEN 'Y'
       ELSE 'N'
    END AS UNIQUE,
    idx_scan AS number_of_scans,
    idx_tup_read AS tuples_read,
    idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
           JOIN pg_class c ON c.oid = x.indrelid
           JOIN pg_class ipg ON ipg.oid = x.indexrelid
           JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
    AS foo
    ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY 1,2;

10

PostgreSQL तालिकाओं में तीन घटक होते हैं: तालिका ही, उस पर कोई अनुक्रमणिका, और संभावित रूप से टोस्ट डेटा। उदाहरणों की एक जोड़ी है जो http://wiki.postgresql.org/wiki/Disk_Usage पर उपलब्ध जानकारी को विभिन्न तरीकों से स्लाइड और पासे में दिखाती है


5

बस जानकारी के लिए, मुझे @aib से उत्कृष्ट उत्तर मिला है और इसे थोड़ा संशोधित किया है:

  • "सार्वजनिक" स्कीमा से केवल टेबल प्राप्त करना
  • शो भी भौतिक विचारों और सूचकांक आकार को उत्प्रेरित करता है

भौतिकवादी दृष्टिकोण पर, हम ताज़ा विचारों के लिए अनुक्रमणिका का उपयोग समवर्ती रूप से कर सकते हैं , जो अद्यतन करते समय उनका उपयोग करने की अनुमति देता है।

खैर, मेरी क्वेरी निम्नलिखित होगी:

SELECT
    table_name,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        table_name,
        pg_table_size(table_name) AS table_size,
        pg_indexes_size(table_name) AS indexes_size,
        pg_total_relation_size(table_name) AS total_size
    FROM (
        -- tables from 'public'
        SELECT table_name
        FROM information_schema.tables
        where table_schema = 'public' and table_type = 'BASE TABLE'
        union
        -- materialized views
        SELECT oid::regclass::text as table_name
        FROM pg_class
        WHERE relkind = 'm'
        order by table_name
    ) AS all_tables
    -- ORDER BY total_size DESC
    order by table_name
) AS pretty_sizes

1

नीचे दी गई क्वेरी आपकी सेवा करेगी

SELECT nspname || '.' || relname AS "relation",
  pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
  AND C.relkind <> 'i'
  AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;

इस लिंक को देखें: https://wiki.postgresql.org/wiki/Disk_Usage


0

इस विकी की जाँच करें। https://wiki.postgresql.org/wiki/Disk_Usage

चुनें *, pg_size_pretty (total_bytes) कुल के रूप में
    , pg_size_pretty (index_bytes) के रूप में INDEX
    , pg_size_pretty (toast_bytes) AS टोस्ट
    , pg_size_pretty (table_bytes) टेबल के रूप में
  से (
  चयन करें *, Total_bytes-index_bytes-COALESCE (टोस्ट_बाइट्स, 0) AS टेबल_बाइट्स FROM से (
      चयन करें c.oid, nspname AS table_schema के रूप में, TABLE_NAME के ​​रूप में नाम बदलें
              , c.reltuples AS row_estimate के रूप में
              , pg_total_relation_size (c.oid) AS_bytes
              , pg_indexes_size (c.oid) AS index_bytes
              , pg_total_relation_size (reltoastrelid) AS toast_bytes
          Pg_class c से
          LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
          कहां तक ​​= 'r'
  ) ए
) ए

-1

सभी तालिका आकार खोजने के लिए इस स्क्रिप्ट का प्रयास करें:

SELECT
    table_schema || '.' || table_name AS TableName,
    pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS TableSize
FROM information_schema.tables
ORDER BY
    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC

PostgreSQL में आकार खोजने के लिए अन्य विभिन्न स्क्रिप्ट के लिए, कृपया इस url पर जाएं : http://www.dbrnd.com/2015/05/how-to-find-size-of-database-and-table-in-postgresql/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.