Amazon RDS 데이터베이스 (MySQL)가 얼마나 큰지 어떻게 알 수 있습니까?


12

RDS를 사용하여 Amazon AWS에서 호스팅되는 웹 사이트에 대한 MySQL 데이터베이스가 있습니다. 사용 가능한 스토리지가 5GB입니다. 실제로 데이터의 크기가 얼마나 큰지 어떻게 알 수 있습니까 (따라서 남은 5GB 할당량의 양)?

답변:


13

INFORMATION_SCHEMA에 대한보다 체계적인 쿼리는 다음과 같습니다.

스토리지 엔진 별 크기

SELECT
    IFNULL(B.engine, 'Total') "Storage Engine",
    CONCAT(LPAD(REPLACE(FORMAT(B.DSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Data Size",
    CONCAT(LPAD(REPLACE( FORMAT(B.ISize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Index Size",
    CONCAT(LPAD(REPLACE( FORMAT(B.TSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') "Table Size" 
FROM
    (SELECT
            engine,
            SUM(data_length) DSize,
            SUM(index_length) ISize,
            SUM(data_length + index_length) TSize 
        FROM
            information_schema.tables 
        WHERE
            table_schema NOT IN ('mysql', 'information_schema', 'performance_schema')
            AND engine IS NOT NULL 
        GROUP BY engine WITH ROLLUP
    ) B,
    (SELECT 3 pw) A 
ORDER BY TSize;

데이터베이스 별 크기

SELECT
    dbname,
    Concat(Lpad(Format(sdsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Data Size",
    Concat(Lpad(Format(sxsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Index Size",
    Concat(Lpad(Format(stsize / Power(1024, pw), 3), 17, ' '), ' ', Substr(' KMGTP', pw + 1, 1), 'B') "Total Size" 
FROM
    (SELECT
            Ifnull(db, 'All Databases') DBName,
            Sum(dsize) SDSize,
            Sum(xsize) SXSize,
            Sum(tsize) STSize 
        FROM (SELECT
                    table_schema DB,
                    data_length DSize,
                    index_length XSize,
                    data_length + index_length TSize 
                FROM information_schema.tables 
                WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
            ) AAA 
        GROUP BY db WITH rollup
    ) AA,
    (SELECT 3 pw) BB 
ORDER BY ( sdsize + sxsize ); 

데이터베이스 / 스토리지 엔진 별 크기

SELECT
    Statistic,
    DataSize "Data Size",
    IndexSize "Index Size",
    TableSize "Table Size" 
FROM
    (SELECT
            IF(ISNULL(table_schema) = 1, 10, 0) schema_score,
            IF(ISNULL(engine) = 1, 10, 0) engine_score,
            IF(ISNULL(table_schema) = 1, 'ZZZZZZZZZZZZZZZZ', table_schema) schemaname,
            IF(ISNULL(B.table_schema) + ISNULL(B.engine) = 2, "Storage for All Databases", IF(ISNULL(B.table_schema) + ISNULL(B.engine) = 1, CONCAT("Storage for ", B.table_schema), CONCAT(B.engine, " Tables for ", B.table_schema))) Statistic,
            CONCAT(LPAD(REPLACE(FORMAT(B.DSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') DataSize,
            CONCAT(LPAD(REPLACE( FORMAT(B.ISize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') IndexSize,
            CONCAT(LPAD(REPLACE(FORMAT(B.TSize / POWER(1024, pw), 3), ',', ''), 17, ' '), ' ', SUBSTR(' KMGTP', pw + 1, 1), 'B') TableSize 
        FROM
            (SELECT
                    table_schema,
                    engine,
                    SUM(data_length) DSize,
                    SUM(index_length) ISize,
                    SUM(data_length + index_length) TSize 
                FROM
                    information_schema.tables 
                WHERE
                    table_schema NOT IN ('mysql', 'information_schema', 'performance_schema')
                    AND engine IS NOT NULL 
                GROUP BY
                    table_schema, engine WITH ROLLUP
            ) B,
            (SELECT 3 pw) A
    ) AA 
ORDER BY schemaname, schema_score, engine_score;

경고

세 개의 쿼리 각각에을 볼 수 (SELECT 3 pw)있습니다. pw1024의 전원을위한 스탠드는 특정 단위로 결과를 표시합니다 :

  • (SELECT 0 pw) 보고서를 바이트 단위로 표시합니다
  • (SELECT 1 pw) 킬로바이트 단위로 보고서를 표시합니다
  • (SELECT 2 pw) 메가 바이트 단위로 보고서를 표시합니다
  • (SELECT 3 pw) 기가 바이트 단위로 보고서를 표시합니다
  • (SELECT 4 pw) 테라 바이트 단위로 보고서를 표시합니다
  • (SELECT 5 pw) PetaBytes로 보고서를 표시합니다 (이를 실행하면 저에게 연락하십시오)

형식이 약간 적은 보고서 쿼리는 다음과 같습니다 KB.

SELECT
    IFNULL(db, 'Total') "Database",
    datsum / power(1024, pw) "Data Size",
    ndxsum / power(1024, pw) "Index Size",
    totsum / power(1024, pw) "Total" 
FROM
    (
        SELECT
            db,
            SUM(dat) datsum,
            SUM(ndx) ndxsum,
            SUM(dat + ndx) totsum 
        FROM
            (
                SELECT table_schema db, data_length dat, index_length ndx 
                FROM information_schema.tables 
                WHERE engine IS NOT NULL AND table_schema NOT IN ('information_schema', 'mysql')
            ) AA 
        GROUP BY db WITH ROLLUP
    ) A,
    (SELECT 1 pw) B;

시도 해봐 !!!


당신은 굉장합니다!
플레이어 1

7

마지막으로 몇 번의 클릭으로 Amazon에서 직접이 정보를 얻을 수있는 쉬운 방법을 찾았습니다.

  1. RDS 관리 대시 보드에 로그인
  2. "DB 인스턴스"를 클릭하십시오
  3. 관심있는 인스턴스를 클릭하십시오. 그것은 그것을 확장하고 그것에 대해 훨씬 더 많은 정보를 보여 주어야합니다.
  4. 왼쪽의 "모니터링"탭을 봅니다 (기본적으로 선택되어 있어야 함).
  5. 사용하는 공간의 양과 사용 가능한 양의 그래프를 보여주는 "저장소"모니터가 있습니다.

여기에 이미지 설명을 입력하십시오


RDS 문서에서 사용 가능한 메모리는 인스턴스의 스토리지 사용량이 아니라 "DB 인스턴스에서 사용 가능한 RAM의 양 (MB)"입니다. docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Evan Kroske

@EvanKroske "Free Storage Space"가 실제로 원하는 메트릭 인 것 같습니다. 문서 링크에 감사드립니다.
Stephen Ostermiller

이 답변을 작성한 이후 AWS가 전체 인터페이스를 개선 한 것 같습니다. 오늘보고있는 내용에 따라 업데이트했습니다.
Stephen Ostermiller

다시 수정했을 것 같습니다. 모니터링 탭이 보이지 않습니다. 스토리지에는 할당 된 총 크기 만 표시됩니다.
브라이언 토마스

2

show table status from mydatabsename; 여기서 mydatabasename은 데이터베이스 이름입니다.

테이블 및 기타 메트릭 당 Data_length 및 Index_length 메트릭이 표시됩니다. 이 열을 합계하고 바이트 단위임을 기억해야하므로 kb를 얻으려면 1024로 나누고 meg를 얻으려면 다시 1024로, gigs를 얻으려면 1024로 다시 나누어야합니다. 또한 인덱스 / 데이터베이스 할당 내 여유 공간이 표시됩니다.

http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html 을 탐색하고 싶다면 더 세밀하고 sum () 얻을 수 있습니다.

SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS;

인덱스 / 데이터베이스 할당에서 남은 공간을 표시합니다 ...

SELECT SUM(Data_length) FROM INFORMATION_SCHEMA.PARTITIONS;

SELECT SUM(Index_length) FROM INFORMATION_SCHEMA.PARTITIONS;

... 사용 된 데이터 및 색인 크기를 표시합니다 (총 할당을 위해 추가해야 함).

좀 더 해부하고 싶다면 ...

select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(DATA_FREE) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema";

select sum(Data_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";

select sum(Index_length) from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA = "myschema" and TABLE_NAME = "aspecifictable";

물론 http://dev.mysql.com/downloads/tools/workbench/ 에서 찾은 것처럼 MySQL Workbench를 사용할 수도 있지만 데이터베이스 서버에 대한 포트 액세스 권한이 있다고 가정합니다. 여전히, 당신은 다운로드 가치가 너무 많은 오프라인을 할 수 있습니다. 워크 벤치는 나에게 의미가없는 할당을 sum ()하지 않습니다. 그러나 다시, 나는 최신 버전이 없습니다.


이 RDS 인스턴스에 100 개가 넘는 데이터베이스가 있습니다. 그들 모두를 쿼리하고 모든 것을 요약하는 편리한 방법이 있습니까?
Stephen Ostermiller

@Stephen Ostermiller 100 개의 데이터베이스 또는 100 개의 테이블? 데이터베이스는 하나 이상의 스키마로 구성됩니다. 스키마는 일반적으로 관련 테이블이있는 주제 영역입니다.
closetnoc

각각 약 20 개의 테이블이있는 100 개의 데이터베이스.
Stephen Ostermiller

내가 언급 한 페이지의 예제를 실험하고 있습니다 ... 잠시 후에 다시 연락 드리겠습니다.
closetnoc

@Stephen Ostermiller 답변을 업데이트했습니다. 도움이 되었기를 바랍니다.
closetnoc

1

2019 : MySQL 및 MariaDB의 경우 다음 AWS 제공 링크를 참조하십시오 : https://aws.amazon.com/premiumsupport/knowledge-center/view-storage-rds-mysql-mariadb/


스토리지를 사용하는 것이 무엇인지 아는 데 유용하지만 내 문제는 내가 남은 스토리지 양을 아는 것입니다.
Stephen Ostermiller

1
이를 위해 RDS 모니터링 에서 FreeStorageSpace 메트릭 을 볼 수 있으며 문서에서도 언급되었습니다.
Vigneshwar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.