특정 MySQL 테이블이 차지하는 디스크 공간을 어떻게 확인할 수 있습니까?


145

특정 MySQL 테이블이 차지하는 디스크 공간을 결정하는 빠른 방법이 있습니까? 테이블은 MyISAM 또는 Innodb 일 수 있습니다.


PHPMyAdmin에서는 ob 테이블을 클릭하여 공간 사용량을 볼 수 있습니다.
AR.

이 질문에 대한 답변은 솔루션을 얻는 데 도움이되었습니다. 데이터를 얻기 위해 동일한 쿼리 매번를 실행하지 않고 나를 도울 수있는 도구에 대한 철저한 검색이 나를 통과했다 MONyog , MySQL의 기업 모니터 , Percona 툴킷 . 그들 모두는 디스크 정보에 대한 세부 정보를 제공하지만, 더 나은 그래픽 차트와 쉬운 GUI를 위해 MONyog를 선택했습니다.
Mathew

답변:


285

테이블의 mydb.mytable경우 다음을 위해 이것을 실행하십시오.

바이트

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

킬로바이트

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

메가 바이트

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

기가 바이트

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

일반적인

다음은 최대 단위 표시가 TB (TeraBytes) 인 일반 쿼리입니다.

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

시도 해봐 !!!


6
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;mydb크기별로 이름과 크기 가있는 모든 테이블 목록을 가져옵니다 .
kqw

1
더 많은 디스크 공간을 소비하는 테이블을 보려면 ORDER BY 절에 "DESC"를 추가하십시오. ;)
mvsagar

정확하게하기 위해, 이진 접두사 (2의 거듭 제곱으로 곱하기)를 사용할 때 Ki bi 바이트 (KiB), me bi 바이트 (MiB) 및 gi bi 바이트 (GiB) 단위를 호출 할 수 있습니다 . 또는, 당신은 단위 기 (1000 힘으로 곱셈) 진수 접두사를 사용하고 호출 할 수 있습니다 보라 바이트 (KB), 나 조지아 바이트 (MB)와 GI GA 바이트 (GB). 더보기 : en.wikipedia.org/wiki/Binary_prefix
마튼 타마스에게

아무도 MSSQL에서 동일한 작업을 수행하는 방법을 알고 있습니까?
Ivan Yurchenko


15

상위 20 개의 가장 큰 테이블을 MB 단위로 가져 오는 빠른 SQL

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

누군가에게 도움이 되길 바랍니다!



2

기본적으로 mysql이 설치된 Linux에서 :

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

NIXCRAFT의 mysql db 위치 에 기반


문제는 특정 테이블이 차지하는 공간을 측정하는 방법을 묻는 것 입니다.
Flimm

@ShariqueAbdullah 기본값이 아닌 innodb_file_per_table을 사용하는 경우 작동하지만 매우 일반적이거나 권장되는 것으로 생각합니다 (누군가가 내 잘못을 쉽게 증명할 수 있음).
Seaux

@Seaux, 5 월일 수도 있지만 필자가 권장하는 서버 설정에서 사용되지 않았습니다. 그래서 당신이 옳을 수도 있지만, 기본값이 아니기 때문에 그는 그것을 찾지 못할 수도 있습니다. 또한 innodb 기능은 MyISAM과는 상당히 다릅니다. 따라서 파일 크기가 있어도 MyISAM의 경우보다 정확하지 않을 수 있습니다. 그러나 하나의 해결책 일 수 있습니다. 개인적으로 파일 크기를 측정하는 대신 MySQL 명령을 사용하여이 정보를 얻는 것을 선호합니다.
Sharique Abdullah

2

RolandMySQLDBA의 답변을 기반으로 위의 내용을 사용하여 테이블의 각 스키마 크기를 얻을 수 있다고 생각합니다.

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

정말 좋아했습니다!


0

아마도 파일 크기를 볼 수 있습니다 ...

각 테이블은 데이터베이스라고하는 이름을 가진 폴더 안에 별도의 두 파일로 저장됩니다. 이 폴더는 mysql 데이터 디렉토리에 저장됩니다.

거기에서 'du -sh. *'를 수행하여 디스크의 테이블 크기를 얻을 수 있습니다.


이것은 MyISAM 데이터베이스에서만 작동합니다. OP는 InnoDB와 함께 작동하는 솔루션을 요구했습니다.
Bgs

0

에서 촬영 내 데이터베이스가 사용하고있는 디스크 공간을 확인하려면 어떻게합니까?

phpMyAdmin왼쪽 프레임에서 데이터베이스 이름을 클릭하고 오른쪽 프레임에서 거기에있는 테이블의 크기를 읽음으로써 제어판 에서 MySQL 테이블 크기를 확인할 수 있습니다 .

아래 쿼리는 동일한 정보를 얻는 데 도움이됩니다. bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name';

이것은 phpMyAdmin이 설치된 것으로 가정합니다
thebigjc

-1

다음과 같이 ' mysqldiskusage '도구를 사용합니다.

$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB

영업 이익은 특정 MySQL의 테이블이 아니라 전체 데이터베이스의 디스크 공간 요구
machineaddict
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.