MySQL如何查看某個(gè)表所占空間大小
一、使用SQL查詢查看表空間
1.1 查詢所有表的大?。ò〝?shù)據(jù)和索引)
SELECT table_schema AS '數(shù)據(jù)庫名', table_name AS '表名', ROUND(data_length/1024/1024, 2) AS '數(shù)據(jù)大小(MB)', ROUND(index_length/1024/1024, 2) AS '索引大小(MB)', ROUND((data_length + index_length)/1024/1024, 2) AS '總大小(MB)', table_rows AS '行數(shù)' FROM information_schema.TABLES WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema') ORDER BY (data_length + index_length) DESC;
SELECT round(data_length/1024/1024, 2) AS '數(shù)據(jù)大小(MB)', round(index_length/1024/1024, 2) AS '索引大小(MB)', round((data_length + index_length)/1024/1024, 2) AS '總大小(MB)' FROM information_schema.TABLES where table_name = '表名';
1.2 查詢特定數(shù)據(jù)庫的表大小
SELECT table_name AS '表名', ROUND(data_length/1024/1024, 2) AS '數(shù)據(jù)大小(MB)', ROUND(index_length/1024/1024, 2) AS '索引大小(MB)', ROUND((data_length + index_length)/1024/1024, 2) AS '總大小(MB)', table_rows AS '行數(shù)' FROM information_schema.TABLES WHERE table_schema = '你的數(shù)據(jù)庫名' ORDER BY (data_length + index_length) DESC;
1.3 查詢單個(gè)表的詳細(xì)空間信息
SELECT table_name AS '表名', engine AS '存儲(chǔ)引擎', ROUND(data_length/1024/1024, 2) AS '數(shù)據(jù)大小(MB)', ROUND(index_length/1024/1024, 2) AS '索引大小(MB)', ROUND((data_length + index_length)/1024/1024, 2) AS '總大小(MB)', ROUND(data_free/1024/1024, 2) AS '碎片空間(MB)', table_rows AS '行數(shù)', avg_row_length AS '平均行長度(字節(jié))', create_time AS '創(chuàng)建時(shí)間', update_time AS '更新時(shí)間' FROM information_schema.TABLES WHERE table_schema = '你的數(shù)據(jù)庫名' AND table_name = '你的表名';
二、使用命令行工具查看表空間
2.1 使用mysql客戶端查詢
mysql -u用戶名 -p密碼 -e "SELECT table_name AS '表名', \ ROUND(data_length/1024/1024,2) AS '數(shù)據(jù)大小(MB)', \ ROUND(index_length/1024/1024,2) AS '索引大小(MB)', \ ROUND((data_length+index_length)/1024/1024,2) AS '總大小(MB)' \ FROM information_schema.TABLES \ WHERE table_schema='你的數(shù)據(jù)庫名' \ ORDER BY (data_length+index_length) DESC;"
2.2 查看物理文件大?。ㄟm用于MyISAM/InnoDB)
# 切換到MySQL數(shù)據(jù)目錄 cd /var/lib/mysql/你的數(shù)據(jù)庫名/ # 查看文件大小 ls -lh *.ibd *.frm *.MYD *.MYI # 計(jì)算總大小 du -sh ./*
三、查看InnoDB表的空間使用詳情
3.1 查看InnoDB表空間狀態(tài)
SHOW TABLE STATUS FROM 你的數(shù)據(jù)庫名 LIKE '你的表名'\G
3.2 查看InnoDB引擎狀態(tài)(包含緩沖池等信息)
SHOW ENGINE INNODB STATUS\G
3.3 查詢InnoDB表空間文件信息
SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, TOTAL_EXTENTS, EXTENT_SIZE, INITIAL_SIZE, MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE';
四、高級(jí)空間分析工具
4.1 使用pt-diskstats(Percona工具包)
pt-diskstats --devices=/var/lib/mysql
4.2 使用pt-mysql-summary(Percona工具包)
pt-mysql-summary --user=用戶名 --password=密碼
4.3 使用mysqldumpslow分析表空間增長
mysqldumpslow -s t /var/log/mysql/mysql-slow.log
五、空間優(yōu)化相關(guān)查詢
5.1 查找碎片化嚴(yán)重的表
SELECT table_schema AS '數(shù)據(jù)庫', table_name AS '表名', ROUND(data_free/1024/1024, 2) AS '碎片空間(MB)', ROUND((data_length + index_length)/1024/1024, 2) AS '總大小(MB)', ROUND((data_free/(data_length + index_length + data_free))*100, 2) AS '碎片率(%)' FROM information_schema.TABLES WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema') AND data_free > 0 ORDER BY data_free DESC LIMIT 10;
5.2 查看表空間自動(dòng)擴(kuò)展設(shè)置
SELECT table_name, engine, row_format, create_options FROM information_schema.TABLES WHERE table_schema = '你的數(shù)據(jù)庫名';
六、注意事項(xiàng)
權(quán)限要求:查詢information_schema需要相應(yīng)的權(quán)限
數(shù)據(jù)準(zhǔn)確性:table_rows是估算值,特別是對于InnoDB表
存儲(chǔ)引擎差異:
• InnoDB表數(shù)據(jù)存儲(chǔ)在.ibd文件中(獨(dú)立表空間)或共享表空間中
• MyISAM表數(shù)據(jù)存儲(chǔ)在.MYD文件中,索引存儲(chǔ)在.MYI文件中
臨時(shí)表空間:臨時(shí)表和使用內(nèi)存引擎的表不會(huì)顯示在磁盤使用統(tǒng)計(jì)中
二進(jìn)制日志和事務(wù)日志:這些日志文件占用空間但不包含在表空間統(tǒng)計(jì)中
七、自動(dòng)化監(jiān)控腳本示例
#!/bin/bash # MySQL表空間監(jiān)控腳本 DB_USER="用戶名" DB_PASS="密碼" DB_NAME="數(shù)據(jù)庫名" OUTPUT_FILE="/tmp/mysql_table_sizes_$(date +%Y%m%d).csv" echo "表名,數(shù)據(jù)大小(MB),索引大小(MB),總大小(MB),行數(shù),碎片空間(MB)" > $OUTPUT_FILE mysql -u$DB_USER -p$DB_PASS -e "SELECT \ CONCAT(table_name, ',', \ ROUND(data_length/1024/1024, 2), ',', \ ROUND(index_length/1024/1024, 2), ',', \ ROUND((data_length + index_length)/1024/1024, 2), ',', \ table_rows, ',', \ ROUND(data_free/1024/1024, 2)) \ FROM information_schema.TABLES \ WHERE table_schema = '$DB_NAME' \ ORDER BY (data_length + index_length) DESC;" >> $OUTPUT_FILE ???????echo "報(bào)告已生成: $OUTPUT_FILE"
通過以上方法,您可以全面了解MySQL數(shù)據(jù)庫中各個(gè)表的空間占用情況,為數(shù)據(jù)庫優(yōu)化和維護(hù)提供數(shù)據(jù)支持。
到此這篇關(guān)于MySQL如何查看某個(gè)表所占空間大小的文章就介紹到這了,更多相關(guān)MySQL查看表空間大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文深入理解MySQL中的UTF-8與UTF-8MB4字符集
在全球化的今天,數(shù)據(jù)的存儲(chǔ)與處理需要支持多種語言與字符集,對于 Web 應(yīng)用程序和數(shù)據(jù)庫系統(tǒng)來說,字符集的選擇尤為重要,特別是在處理包含多種語言字符(如中文、阿拉伯文、表情符號(hào)等)的系統(tǒng)中,本文將深入探討 MySQL 中的兩個(gè)常見字符集:UTF-8 和 UTF-8MB42024-11-11mysql中mysql-bin.000001是什么文件可以刪除嗎
這篇文章主要介紹了mysql中mysql-bin.000001是什么文件可以刪除嗎,需要的朋友可以參考下2019-05-05MySQL解決Navicat設(shè)置默認(rèn)字符串時(shí)的報(bào)錯(cuò)問題
本文主要介紹了MySQL解決Navicat設(shè)置默認(rèn)字符串時(shí)的報(bào)錯(cuò),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06總結(jié)MySQL修改最大連接數(shù)的兩個(gè)方式
最大連接數(shù)是可以通過mysql進(jìn)行修改的,mysql數(shù)據(jù)庫修改最大連接數(shù)常用有兩種方法,今天我們分析一下這兩種方法之間的特點(diǎn)和區(qū)別,以便我們能更好的去維護(hù)mysql。下面我們來看一下mysql修改最大連接數(shù)的方法,希望文章能夠幫助到各位朋友。2016-08-08MySQL 8中新增的這三大索引 隱藏、降序、函數(shù)
這篇文章主要介紹了MySQL 8.x版本中新增的三大索引 隱藏索引、降索引序、函數(shù)索引,如果文章對你有點(diǎn)幫助,小伙伴們點(diǎn)贊、收藏、評論、分享走起呀2021-09-09Mysql事務(wù)隔離級(jí)別原理實(shí)例解析
這篇文章主要介紹了Mysql事務(wù)隔離級(jí)別原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03