【发布时间】:2011-08-29 23:42:24
【问题描述】:
我有一个包含大约 20 个表的数据库。每个表都有一列“dtLogTime”,用于记录插入该行的时间。我想弄清楚每张桌子每天记录的大小(可能是 kb 或 mb)。更具体地说,我只对最近 3 天感兴趣。此外,这些表会在某个时间间隔(即 2 周、1 个月等)内跟踪数据,这意味着我每存储一天的新数据就会丢失一天的数据。
我遇到了这段代码,它可以显示每个表的大小。
<?php
$link = mysql_connect('host', 'username', 'password');
$db_name = "your database name here";
$tables = array();
mysql_select_db($db_name, $link);
$result = mysql_query("SHOW TABLE STATUS");
while($row = mysql_fetch_array($result)) {
/* We return the size in Kilobytes */
$total_size = ($row[ "Data_length" ] +
$row[ "Index_length" ]) / 1024;
$tables[$row['Name']] = sprintf("%.2f", $total_size);
}
print_r($tables);
?>
当我尝试做时
"SHOW TABLE STATUS WHERE dtLogTime < '2011-08-28 00:00:00'
AND dtLogTime >= '2011-08-27 00:00:00'"
它给了我一个错误。有没有办法做到这一点?
谢谢
【问题讨论】:
-
除非您真的想提取所有数据以测量其大小,否则如何每天记录数据库表文件(如果可行,取决于数据库类型)大小。或每天运行表状态并记录
-
听起来不错,但是每天都会添加新行,那么我该如何记录呢?
-
为什么这个标签是
[sql-server]? -
我的一位同事建议做(每日行数)/(总行数)* 表的总大小。任何人都同意这一点或有更好的建议。似乎有一些错误就足够了
-
@Mark,您可以使用
mysqlshow --status db_name从命令行执行相同的操作。将其与每天运行的 CRON 作业挂钩。