如何获取 mysql 表转储大小的估计值

如何获取 mysql 表转储大小的估计值

大家好,有人知道如何估算一个 mysql 表的大小吗?我的意思是,我打算备份我所有服务器上的所有 mysql 表,但我想知道在不进行物理转储的情况下每个转储表应该有多大。有没有什么命令可以做到这一点?我在 debian 6 上使用 mysql 5.1 干杯

答案1

正如所见这里,您可以在数据库上运行这些查询(从页面上的评论中窃取,然后进行调整)。

  • 按数据库:

SELECT table_schema 'database', concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size FROM information_schema.TABLES WHERE ENGINE=('MyISAM' || 'InnoDB' ) GROUP BY table_schema;

  • 按表:

SELECT concat( table_schema, '.', table_name ) table_name, concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length, concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length, concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size FROM information_schema.TABLES ORDER BY ( data_length + index_length ) DESC;

答案2

由于 mysqldump 是数据库的逻辑表示,因此您只能找到实际数据。索引永远不会存储在 mysqldump 中,但表定义将决定如何填充索引。

很难从 mysqldump 中提取出一个准确的数字,因为写入 mysqldump 的内容如下:

  • 扩展 INSERT 命令,包含数十、数百或数千行
    • 每个 INSERT 有数十或数百个括号和逗号
  • 表创建命令
  • 指令
    • 在 mysqldump 期间禁用外键和唯一键
    • 记录日志文件和mysqldump的位置
    • 禁用/启用索引(仅限 MyISAM)
    • 锁定整个表以进行写入
    • 保存/恢复全局变量

你可以衡量的因素只是数据长度的总和:

SELECT SUM(data_length)/POWER(1024,2) TotalDB_MB
FROM information_schema.tables;

要查看数据库的总和以及总计:

SELECT table_schema,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema
WITH ROLLUP;

要查看每个表和数据库的小计:

SELECT table_schema,table_name,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema,table_name
WITH ROLLUP;

您可以使用以下

  • POWER(1024,1)以 KB 为单位的报告
  • POWER(1024,2)以 MB 为单位的报告
  • POWER(1024,3)英国报道
  • POWER(1024,4)结核病报告
  • POWER(1024,5)PB 中的报告
    • 这就是 PB 级的数据
    • 如果你必须使用这个,我会收取合理的咨询费

你可以使用这个公式

  • NOC = 每张表的列数
  • 逗号数 = NOC - 1
  • 报价数量 = 表中字符列数量 X 2
  • NumRows = 每张表的行数
  • 括号数 = 行数 X 2
  • CharactersForSQLPerTable = NumRows X (NumCommas + NumQuotes) + NumParens

mysqldump 近似大小的最终公式

  • CharactersForSQLPerTable X NumberOfTables
  • + Characters for "INSERT INTO tblname VALUES "
  • + TotalDB_MB

相关内容