আপনি পোস্টগ্র্রেস / পোস্টগ্রিএসকিউএল টেবিল এবং এর সূচকগুলির ডিস্ক আকারটি কীভাবে খুঁজে পান


156

আমি ওরাকল থেকে পোস্টগ্র্রেসে আসছি এবং টেবিল এবং সূচকের আকারের দিক থেকে bytes/MB/GB/etcবা সমস্ত টেবিলের চেয়ে আরও ভাল আকারের সন্ধানের জন্য একটি উপায় খুঁজছি । ওরাকলে আমার একটি বাজে লম্বা প্রশ্ন ছিল যা ইউজার_লব এবং ইউজার_সেজমেন্টের দিকে তাকিয়ে উত্তর দিয়েছিল।

আমি ধরে নিলাম পোস্টগ্র্রেসে এমন কিছু আছে যা আমি 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;

সম্পাদনা করুন: এখানে সুবিধার্থে @ ফোর্ডের ক্যোয়ারী জমা দেওয়া হয়েছে:

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
আপনি এটির নাম রাখতে পারবেন না, তবে আপনি সর্বদা এটি একটি সাবকোয়ারিতে চালাতে পারেন ... যেমন: নির্বাচন করুন টেবিল_ফুল_নাম, পিজি_সাইজ_স্প্যাটিটি (আকার) থেকে (নির্বাচন করুন .. টেবিল_ফুল_নাম হিসাবে, .. AS আকার থেকে আকার ....) x অর্ডার আকারের
ম্যাগনাস হাগান্ডার

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
আকারের দ্রুত দেখার জন্য সহজ উত্তর view আমি এটি একটি শেল ফাংশনে রেখেছি 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

পোস্টগ্রিএসকিউএল টেবিলের তিনটি উপাদান রয়েছে: টেবিলটি নিজেই, এতে কোনও সূচক এবং সম্ভাব্য টোস্ট ডেটা। Http://wiki.postgresql.org/wiki/Disk_Usage- এ বিভিন্ন উপায়ে উপলভ্য তথ্য কীভাবে স্লাইড এবং ডাইস করা যায় তার কয়েকটি উদাহরণ রয়েছে showing


5

কেবলমাত্র তথ্যের জন্য, আমি @ বাইবার কাছ থেকে দুর্দান্ত উত্তর পেয়েছি এবং এটির জন্য এটি একটু সংশোধন করেছি:

  • "সর্বজনীন" স্কিমা থেকে কেবল সারণী প্রাপ্ত হচ্ছে
  • এছাড়াও দেন রূপায়িত মতামত ডেটা এবং সূচক আকার

বস্তুগত দৃশ্যে আমরা একই সাথে মেটেরিয়াল ভিউগুলি রিফ্রেশ করার জন্য সূচক ব্যবহার করতে পারি , যা আপডেট করার সময় এগুলি ব্যবহারের অনুমতি দেয়।

ঠিক আছে, আমার জিজ্ঞাসাটি নিম্নলিখিত হবে:

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_ ব্যাখ্যা (টেবিল_বাইটস) হিসাবে টেবিল
  থেকে
  নির্বাচন করুন *, মোট_বাইটস-ইনডেক্স_বাইটস-কোয়েলসসিও (টোস্ট_বাইটস, 0) যেমন টেবিল_বাইটস থেকে (
      সিলেক্ট সিওয়েড, এএস টেবিল_সেমি, এনএসপাম হিসাবে AS TABLE_NAME নামকরণ করুন
              , c.reltuples AS সারি_সীমাবদ্ধ
              , পিজি_টোটাল_ রিলেশন_সাইজ (সি.অয়েড) এএস টোটাল_বাইটস
              , pg_indexes_size (c.oid) AS সূচক_বাইটস
              , পিজি_টোটাল_ রিলেশন_সাইজ (রিলটোস্ট্রেলিড) এএস টোস্ট_বাইটস
          Pg_class থেকে গ
          বাম যোগদান করুন পিজি_নাম্পেসে n অন এন.এইড = সি.রেলনেমস্পেস
          যেখানে relind = '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

: অন্যান্য বিভিন্ন স্ক্রিপ্ট পোস্টগ্রি মাপ এটি জন্য, দয়া করে এই url এ যান http://www.dbrnd.com/2015/05/how-to-find-size-of-database-and-table-in-postgresql/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.