MySQL 데이터베이스의 테이블 크기를 가져오려면 어떻게 해야 합니까?
다음 쿼리를 실행하여 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;
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
ORDER BY `DB Size in MB` DESC;
결과
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
자세한 내용은 이쪽에서 보실 수 있습니다.
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"
ORDER BY size DESC;
크기(MB 단위 DB 크기)가 정렬됩니다.
쿼리에서 현재 선택된 데이터베이스를 사용하는 경우.이 쿼리를 복사 붙여넣기만 하면 됩니다.(수정 불필요)
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;
모든 테이블의 크기:
데이터베이스 또는
TABLE_SCHEMA
name은 news_discloss입니다.그런 다음 이 쿼리는 데이터베이스 내의 모든 테이블의 크기를 표시합니다.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)
Workbench를 사용하여 많은 정보를 쉽게 얻을 수 있는 방법이 있습니다.
스키마 이름을 마우스 오른쪽 버튼으로 클릭하고 "Schema inspector"를 클릭합니다.
표시되는 창에는 여러 탭이 있습니다.첫 번째 탭 "Info"는 데이터베이스 크기(MB)의 대략적인 견적을 보여줍니다.
두 번째 탭인 "테이블"에는 각 테이블의 데이터 길이 및 기타 세부 정보가 표시됩니다.
다음 셸 명령을 사용해 보십시오(바꾸기).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
phpmyadmin을 사용하는 경우 테이블 구조로 이동합니다.
예.
Space usage
Data 1.5 MiB
Index 0 B
Total 1.5 Mi
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의 답변에 따라 특별히 필요한 사항을 충족시킵니다.
데이터베이스 이름만 지정한 다음 선택한 데이터베이스 내에서 모든 테이블을 내림차순으로 정렬합니다.하나의 변수만 바꾸면 됩니다= 데이터베이스 이름입니다.
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;
기존 답변에서는 디스크의 테이블 크기를 알 수 없기 때문에 더 도움이 됩니다.이 쿼리는 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
「 」가 ssh
access를 '접속'을 시도해 볼 수 있습니다.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"뿐입니다.
이는 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;
SELECT TABLE_NAME AS table_name,
table_rows AS QuantofRows,
ROUND((data_length + index_length) /1024, 2 ) AS total_size_kb
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'db'
ORDER BY (data_length + index_length) DESC;
위의 2개 모두 mysql에서 테스트됩니다.
마지막에 데이터베이스의 총 크기를 계산합니다.
(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"
)
select x.dbname as db_name, x.table_name as table_name, x.bytesize as the_size from
(select
table_schema as dbname,
sum(index_length+data_length) as bytesize,
table_name
from
information_schema.tables
group by table_schema
) x
where
x.bytesize > 999999
order by x.bytesize desc;
테이블 크기(바이트 및 행 수)를 추적하기 위해 이 셸 스크립트를 만들었습니다.
#!/bin/sh
export MYSQL_PWD=XXXXXXXX
TABLES="table1 table2 table3"
for TABLE in $TABLES;
do
FILEPATH=/var/lib/mysql/DBNAME/$TABLE.ibd
TABLESIZE=`wc -c $FILEPATH | awk '{print $1}'`
#Size in Bytes
mysql -D scarprd_self -e "INSERT INTO tables_sizes (table_name,table_size,measurement_type) VALUES ('$TABLE', '$TABLESIZE', 'BYTES');"
#Size in rows
ROWSCOUNT=$(mysql -D scarprd_self -e "SELECT COUNT(*) AS ROWSCOUNT FROM $TABLE;")
ROWSCOUNT=${ROWSCOUNT//ROWSCOUNT/}
mysql -D scarprd_self -e "INSERT INTO tables_sizes (table_name,table_size,measurement_type) VALUES ('$TABLE', '$ROWSCOUNT', 'ROWSCOUNT');"
mysql -D scarprd_self -e "DELETE FROM tables_sizes WHERE measurement_datetime < TIMESTAMP(DATE_SUB(NOW(), INTERVAL 365 DAY));"
done
이 MySQL 테이블이 있는 것을 전제로 하고 있습니다.
CREATE TABLE `tables_sizes` (
`table_name` VARCHAR(128) NOT NULL,
`table_size` VARCHAR(25) NOT NULL,
`measurement_type` VARCHAR(10) NOT NULL CHECK (measurement_type IN ('BYTES','ROWSCOUNT')),
`measurement_datetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP()
) ENGINE=INNODB DEFAULT CHARSET=utf8
이것은 단지 나중에 참고하기 위한 메모입니다.모든 답변은 다음 항목에 의존합니다.I_S.TABLES
테이블 내에 blob 필드가 있는 경우 등 정확한 크기를 알 수 없습니다.LOB 페이지는 외부 페이지에 저장되므로 클러스터된 인덱스에서 계산되지 않습니다.실제로 다음과 같은 주의사항이 있습니다.
NDB 테이블의 경우 이 문의 출력에는 BLOB 열이 고려되지 않는 것을 제외하고 AVG_ROW_LENGH 및 DATA_LENGH 열에 대한 적절한 값이 표시됩니다.
저는 InnoDB에도 해당된다는 것을 알게 되었습니다.
저는 같은 목적으로 커뮤니티 버그를 만들었습니다.
언급URL : https://stackoverflow.com/questions/9620198/how-to-get-the-sizes-of-the-tables-of-a-mysql-database
'source' 카테고리의 다른 글
Django의 CharField에 자리 표시자를 추가하려면 어떻게 해야 합니까? (0) | 2022.11.04 |
---|---|
Vue 형제 간에 데이터 전달 (0) | 2022.11.04 |
Node.js에서 환경변수를 읽습니다. (0) | 2022.11.04 |
Java에서의 동적 다형과 정적 다형의 차이점은 무엇입니까? (0) | 2022.11.04 |
다른 라이브러리 없이 순수 c/c++로 BMP 이미지 쓰기 (0) | 2022.11.04 |