Как узнать таблицы, которые занимают максимальную память в базе данных? - PullRequest
8 голосов
/ 30 марта 2012

Привет, я новичок в базах данных.Я работаю над огромной базой данных и пытаюсь навести порядок.Я хочу начать с поиска десяти лучших таблиц, которые занимают наибольший объем памяти во всей базе данных.Я не могу найти память каждой таблицы, так как таблиц слишком много.Мне нужны лучшие 10 или 20 столов, которые занимают максимальное пространство.Любая помощь приветствуется.Спасибо.

Ответы [ 4 ]

5 голосов
/ 30 марта 2012

Может быть что-то вроде этого:

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;

Ссылка здесь

4 голосов
/ 30 марта 2012

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;

InnoDB занимает памятьдля его данных и индексов

Чтобы найти 10 лучших таблиц InnoDB, которые могут использовать наибольшее количество памяти в худшем случае, попробуйте следующее:

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

Этот запрос показывает вам объем дискового пространства, занятый Storage Engine в ГБ

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 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);

Этот запрос показывает объем дискового пространства, занятого базой данных модулем хранилища в ГБ

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;

У трех предыдущих опубликованных мной запросов есть общая особенность: подзапрос (SELECT 3 pw)

  • Если вы используете (SELECT 0 pw), отчет в байтах
  • Если вы используете (SELECT 1 pw), отчет в килограммахБайт
  • Если вы используете (SELECT 2 pw), отчет в мегабайтах
  • Если вы используете (SELECT 3 pw), отчет в гигабайтах
  • Если вы используете (SELECT 4 pw), отчетв TeraBytes
  • Если вы используете (SELECT 5 pw), отчет в PetaBytes (Если вам это нужно, опубликуйте этот результат, пожалуйста !!!)
2 голосов
/ 30 марта 2012

Это запрос, который я использовал после прочтения всех ваших ответов.

  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;
2 голосов
/ 30 марта 2012

Вы можете использовать ПОКАЗАТЬ СТАТУС СТОЛБА , чтобы получить размеры для каждой таблицы.

...