이 쿼리를 실행하여 MySQL 데이터베이스의 모든 테이블 크기를 얻을 수 있습니다.
show table status from myDatabaseName;
결과를 이해하는 데 도움이 필요합니다. 가장 큰 크기의 테이블을 찾고 있습니다.
어떤 열을보아야합니까?
이 쿼리를 실행하여 MySQL 데이터베이스의 모든 테이블 크기를 얻을 수 있습니다.
show table status from myDatabaseName;
결과를 이해하는 데 도움이 필요합니다. 가장 큰 크기의 테이블을 찾고 있습니다.
어떤 열을보아야합니까?
답변:
이 쿼리를 사용하여 테이블의 크기를 표시 할 수 있습니다 (변수를 먼저 대체해야 함).
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
AND table_name = "$TABLE_NAME";
또는이 쿼리는 모든 데이터베이스에서 모든 테이블의 크기를 나열합니다.
SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;
AND table_name IN ('table_1', 'table_2', 'table_3');
VARCHAR
하고 입력 BLOB
합니까?
SELECT TABLE_NAME AS "Table Name",
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30
" information_schema "-> SCHEMATA 테이블-> " SCHEMA_NAME "열 에서 스키마 이름을 얻을 수 있습니다.
추가 다음과 같이 mysql 데이터베이스의 크기를 얻을 수 있습니다 .
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
결과
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
당신은 할 수 있습니다 여기에서 추가 정보를 얻을.
쿼리에서 현재 선택된 데이터베이스를 사용하려는 경우 이 검색어를 복사하여 붙여 넣기 만하면됩니다. (수정 필요 없음)
SELECT table_name ,
round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;
SIZE_MB
FROM information_schema.TABLES WHERE table_schema = DATABASE () ORDER BY (data_length + index_length) ASC;
Workbench를 사용하여 많은 정보를 얻는 쉬운 방법이 있습니다.
스키마 이름을 마우스 오른쪽 단추로 클릭하고 "스키마 관리자"를 클릭하십시오.
결과 창에는 여러 개의 탭이 있습니다. 첫 번째 탭 "정보"는 대략적인 데이터베이스 크기 (MB)를 보여줍니다.
두 번째 탭인 "테이블"은 각 테이블의 데이터 길이 및 기타 세부 사항을 보여줍니다.
모든 테이블의 크기 :
데이터베이스 또는 TABLE_SCHEMA
이름이 "news_alert" 라고 가정하십시오 . 그런 다음이 쿼리는 데이터베이스에있는 모든 테이블의 크기를 보여줍니다.
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
산출:
+---------+-----------+
| Table | Size (MB) |
+---------+-----------+
| news | 0.08 |
| keyword | 0.02 |
+---------+-----------+
2 rows in set (0.00 sec)
특정 테이블의 경우 :
당신 TABLE_NAME
이 "뉴스" 라고 가정하십시오 . 그런 다음 SQL 쿼리는
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
AND
TABLE_NAME = "news"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
산출:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news | 0.08 |
+-------+-----------+
1 row in set (0.00 sec)
다음 쉘 명령을 시도 DB_NAME
하십시오 (데이터베이스 이름으로 바꾸 십시오).
mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head
Drupal / drush 솔루션의 경우 사용중인 가장 큰 테이블을 표시하는 다음 예제 스크립트를 확인하십시오.
#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20
bash 명령 줄을 사용하여이를 해결하는 또 다른 방법이 있습니다.
for i in
mysql -NB -e 'show databases'
; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done
ChapMic의 대답에서 내 특별한 요구에 적응했습니다.
데이터베이스 이름 만 지정한 다음 선택한 데이터베이스 내의 LARGEST에서 SMALLEST 테이블까지 내림차순으로 모든 테이블을 정렬하십시오. 하나의 변수 만 교체하면됩니다 (데이터베이스 이름).
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;
ssh
액세스 권한이 있으면 간단하게 시도 du -hc /var/lib/mysql
하거나 ( datadir
에서 설정 한대로 다른) 시도 하십시오 my.cnf
.
점유 된 행 수와 공간을 표시하고 순서를 나타내는 다른 방법입니다.
SELECT
table_schema as `Database`,
table_name AS `Table`,
table_rows AS "Quant of Rows",
round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;
이 쿼리에서 대체해야하는 유일한 문자열은 "yourDatabaseName"입니다.
기존 답변이 실제로 디스크의 테이블 크기를 제공하지 않는 것이 더 도움이됩니다. 이 쿼리는 data_length & index를 기반으로 한 테이블 크기와 비교하여 더 정확한 디스크 추정치를 제공합니다. 디스크를 물리적으로 검사하고 파일 크기를 확인할 수없는 AWS RDS 인스턴스에 이것을 사용해야했습니다.
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc
마지막에 데이터베이스의 총 크기를 계산하십시오.
(SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
UNION ALL
(SELECT
'TOTAL:',
SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
이것은 postgresql이 아닌 mysql에서 테스트해야합니다.
SELECT table_schema, # "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) # "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;