我们有一个数据库,在过去一年里有机地增长。 我们如何快速分析每张桌子使用的空间? 我们也想考虑这些指标。
当我在我的数据库中使用innodb表时,我喜欢使用innodb_file_per_table设置。 这使我能够快速了解ls所发生的事情,比如混乱。
这个声明可能会给你一个很好的想法,你有多less空间使用。
use information_schema; SELECT `TABLE_SCHEMA`, `TABLE_NAME`, `TABLE_ROWS`, `DATA_LENGTH`, `INDEX_LENGTH`, `DATA_FREE` FROM `TABLES`
我有一些疯狂的查询供你使用。 我两年前写这些,今天仍然使用它们。 给他们一个尝试!
下面是一个查询来总结所有存储引擎中的所有数据
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') 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')) 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') 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;
CAVEAT:您会注意到,在所有这些查询的尾部是一个内联SELECT,如下所示: (SELECT 3 pw)
数字3导致报告以GigaBytes出来。
实际上这里是一个数字和它使用的报告的单位列表:
(SELECT 0 pw)以字节报告 (SELECT 1 pw)以千字节报告 (SELECT 2 pw)以兆字节报告 (SELECT 3 pw)以千兆字节报告 (SELECT 4 pw)报告以TB为单位 (SELECT 5 pw)以PB为单位的报告(我从来没有使用过这个设置,但是有一天你会达到这个数字) 请享用 !!!
尝试使用这样的工具以易于阅读的格式查看您的MySQL实例: http : //www.aquafold.com/index-mysql.html
Mysql有一些内置的function
use <datbase name>; show table status;
ls -la /var/lib/mysql/*
有phpmyadmin安装在您的服务器上。
phpMyAdmin是一个用PHP编写的免费软件工具,用于处理万维网上MySQL的pipe理。 phpMyAdmin支持MySQL的各种操作。 用户界面(pipe理数据库,表,字段,关系,索引,用户,权限等)支持最常用的操作,而您仍然可以直接执行任何SQL语句