Mysql 如何找出数据库中占用最大内存的表?

Mysql 如何找出数据库中占用最大内存的表?,mysql,database,database-design,mysqldump,Mysql,Database,Database Design,Mysqldump,嗨,我是数据库新手。我正在处理庞大的数据库,并试图清理混乱。首先,我想找出在整个数据库中占用最高内存的前十个表。我无法找到每个表的内存,因为表太多了。我需要占据最大空间的前10或20张桌子。任何帮助都将不胜感激。多谢各位 可能是这样的: SELECT CONCAT(table_schema, '.', table_name), CONCAT(ROUND(table_rows / 1000000, 2), 'M')

嗨,我是数据库新手。我正在处理庞大的数据库,并试图清理混乱。首先,我想找出在整个数据库中占用最高内存的前十个表。我无法找到每个表的内存,因为表太多了。我需要占据最大空间的前10或20张桌子。任何帮助都将不胜感激。多谢各位

可能是这样的:

SELECT CONCAT(table_schema, '.', table_name),
       CONCAT(ROUND(table_rows / 1000000, 2), 'M')                                    rows,
       CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G')                    DATA,
       CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G')                   idx,
       CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
       ROUND(index_length / data_length, 2)                                           idxfrac
FROM   information_schema.TABLES
ORDER  BY data_length + index_length DESC
LIMIT  10;

参考

可以用来获取每个表的大小。

MyISAM只占用索引的内存

要查找在最坏情况下可以使用最多内存的前10个MyISAM表,请尝试以下操作:

SELECT * FROM
(
    SELECT table_schema,table_name,index_length
    FROM information_schema.tables
    WHERE engine='MyISAM' AND
    table_schema NOT IN ('information_schema','mysql','performance_schema')
    ORDER BY index_length DESC
) LIMIT 10;
SELECT * FROM
(
    SELECT table_schema,table_name,data_length+index_length tblsize
    FROM information_schema.tables
    WHERE engine='InnoDB'
    ORDER BY index_length DESC
) LIMIT 10;
InnoDB为其数据和索引占用内存

要查找在最坏情况下可以使用最多内存的前10个InnoDB表,请尝试以下操作:

SELECT * FROM
(
    SELECT table_schema,table_name,index_length
    FROM information_schema.tables
    WHERE engine='MyISAM' AND
    table_schema NOT IN ('information_schema','mysql','performance_schema')
    ORDER BY index_length DESC
) LIMIT 10;
SELECT * FROM
(
    SELECT table_schema,table_name,data_length+index_length tblsize
    FROM information_schema.tables
    WHERE engine='InnoDB'
    ORDER BY index_length DESC
) LIMIT 10;
这是另一个按大小递减的前50个表格的显示

SELECT * FROM
(SELECT TN TableName,LPAD(REPLACE(FORMAT(TS/POWER(1024,1),2),',',''),Z,' ') KB,
LPAD(REPLACE(FORMAT(TS/POWER(1024,2),2),',',''),Z,' ') MB,
LPAD(REPLACE(FORMAT(TS/POWER(1024,3),2),',',''),Z,' ') GB
FROM (SELECT CONCAT(table_schema,'.',table_name) TN,
(data_length+index_length) TS FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
AND engine IS NOT NULL) A,(SELECT 13 Z) B ORDER BY TS DESC) MMM LIMIT 50;
如果您感兴趣,我有一些查询可以告诉您MySQL实例的全部情况

此查询显示存储引擎占用的磁盘空间量(GB)

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','performance_schema')
AND engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,(SELECT 3 pw) A ORDER BY TSize;
SELECT 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')
"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 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','performance_schema')
AND engine IS NOT NULL GROUP BY table_schema,engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
此查询显示数据库占用的磁盘空间量(GB)

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','performance_schema')) AAA
GROUP BY DB WITH ROLLUP) AA,(SELECT 3 pw) BB ORDER BY (SDSize+SXSize);
此查询显示存储引擎占用数据库的磁盘空间量(GB)

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','performance_schema')
AND engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,(SELECT 3 pw) A ORDER BY TSize;
SELECT 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')
"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 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','performance_schema')
AND engine IS NOT NULL GROUP BY table_schema,engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
我之前发布的三个查询有一个共同特点:子查询
(选择3pw)

  • 如果使用
    (选择0 pw)
    ,则报告以字节为单位
  • 如果使用
    (选择1 pw)
    ,则报告以KB为单位
  • 如果您使用
    (选择2 pw)
    ,则报告以兆字节为单位
  • 如果使用
    (选择3 pw)
    ,则报告以GB为单位
  • 如果使用
    (选择4pw)
    ,则报告的单位为TB
  • 如果您使用
    (选择5pw)
    ,报告以PB为单位(如果您需要,请发布结果!!!)

这是我在阅读了您的所有答案后使用的查询

  SELECT table_name,round((data_length+index_length)/(1024 * 1024 *1024),2) table_size
  FROM information_schema.tables 
  ORDER BY data_length + index_length 
  DESC  limit 10;

你想要内存消耗还是磁盘空间???我想要磁盘空间和内存消耗。这太棒了!!你真棒!这对我帮助很大!!……)您应该在dba.stackexchange.com上发布类似的问题。我也在那个论坛上。哦!我不知道我下次一定会做的。