programing

Postgres/Postgre의 디스크 크기를 어떻게 찾습니까?SQL 테이블 및 해당 인덱스

megabox 2023. 5. 24. 21:51
반응형

Postgres/Postgre의 디스크 크기를 어떻게 찾습니까?SQL 테이블 및 해당 인덱스

오라클에서 Postgres로 와서 테이블과 인덱스 크기를 찾을 방법을 찾고 있습니다.bytes/MB/GB/etc또는 모든 테이블의 크기가 더 좋습니다.Oracle에서 user_lobs 및 user_segments를 조사하여 답변을 반환하는 불쾌한 긴 쿼리가 있었습니다.

포스그레스에 내가 사용할 수 있는 것이 있을 것 같습니다.information_schema테이블, 그런데 어디가 안 보여요.

데이터베이스 개체 크기 함수를 사용해 보십시오.예:

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()메타데이터를 포함하고 크기를 합산합니다.

데이터베이스 크기 표시:

\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의 답변 요약)

데이터베이스 이름이 다음인 경우snort다음 문장은 크기를 제공합니다.

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

시도: (인덱스 크기/사용률 통계)

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;

PostgreSQL 테이블에는 테이블 자체, 테이블에 있는 인덱스 및 잠재적으로 TOST 데이터의 세 가지 구성 요소가 있습니다.http://wiki.postgresql.org/wiki/Disk_Usage 에서 사용 가능한 정보를 다양한 방법으로 슬라이드하고 주사위를 던지는 방법을 보여주는 몇 가지 예가 있습니다.

참고로, 저는 @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

이 Wiki를 확인합니다.https://wiki.postgresql.org/wiki/Disk_Usage

선택 *, pg_size_pretty(total_bytes) AS 합계pg_size_pretty(index_bytes) AS INDEXpg_size_pretty(토스트_바이트) AS토스트pg_size_pretty(table_bytes) AS TABLE시작(선택 *, total_bytes-index_bytes-COALESCE(토스트_bytes,0) AS table_bytes From (c.oid,nspname AS table_schema,relname AS TABLE_NAME을 선택합니다.c.reltuples AS row_estimatepg_total_relation_size(c.oid) AS 합계_bytespg_indexes_size(c.oid) AS index_bytespg_total_relation_size(대상: 아스트렐리드) AS test_bytesFROMpg_class c왼쪽 JOIN pg_non.oid가 아닌 경우 = c.relnamespaceWHERE relkind = 'r') a) a

아래 쿼리를 통해 확인할 수 있습니다.

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

다음 스크립트를 사용하여 모든 테이블 크기를 찾습니다.

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

Postgre에서 크기를 찾는 다른 스크립트의 경우SQL, 다음 URL을 방문하십시오. http://www.dbrnd.com/2015/05/how-to-find-size-of-database-and-table-in-postgresql/

언급URL : https://stackoverflow.com/questions/2596624/how-do-you-find-the-disk-size-of-a-postgres-postgresql-table-and-its-indexes

반응형