在MySQL中计算一个月的表大小,以MB为单位

时间:2012-07-30 14:12:01

标签: mysql sql

考虑到MySQL中的以下表格列,我想每个月计算一下我的表格大小的增长:

id (BIGINT) - Primary Key
Date (DateTime)
PageViews (INT)
ProductId (INT)

我的商店里有2000件商品。在最糟糕的情况下,每个产品每天至少会被查看一次。每行代表特定产品每天的总页面浏览量。

例如:

id = 6
DateTime = 02/12/2012
PageViews = 0
ProductId = 159

我想计算表格的总大小,或者更好地说,以KB或MB为单位计算每个月的增长量。

我知道有很多事情我应该考虑并附加到计算中,但我不知道它们,也不知道如何计算它们。

我打算将我的MySQL数据库存储在Xeround.com上,限制为50GB,因此我需要确保在使用此模式时我可以放心,在接下来的10年中,我不会遇到任何问题: )

每年将增加100种产品(大致)。

感谢。

1 个答案:

答案 0 :(得分:0)

刚刚发现这篇帖子和对不起的家伙,但评论不是很有用,所以决定回答我在我的一台mySQL服务器上分享的内容。

并非每个人都跟踪自己的数据库增长,但这并不难实现。 这个想法是每周从INFORMATION_SCHEMA.TABLES获取表格统计数据的简单方法,或者根据您的需要。

首先,您可以在单独的架构或您喜欢的任何架构下创建表。

while pile !=  0:

    move = 0

    while move < 1 or move > max_stones:
        move = int(raw_input("Player 1 How Many Stones"))
    pile -= move

    if pile == 0:
        print "Player 1 wins"
        break
    else:
        print "There are %s stones left." %(pile)



    move = 0

    while move < 1 or move > max_stones:
        move = int(raw_input("Player 2 How Many Stones"))
    pile -= move

    if pile == 0:
        print "Player 2 wins"
        break
    else:
        print "There are %s stones left." %(pile)

print "Game Over"

然后添加插入脚本。您也可以使用cronjob,但我更喜欢使用MySQL EVENT调度程序:

#
# Use stats_db for the default schema for this tool
#

USE stats_db;

#
# CREATE TABLE table_growth_history
#

DROP TABLE IF EXISTS `table_growth_history` ;

CREATE TABLE `table_growth_history`
(
            `DATE` date not null
,
            `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT ''
,
            `TABLE_NAME` varchar(64) NOT NULL DEFAULT ''
,
            `ENGINE` varchar(64) DEFAULT NULL
,
            `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL
,
            `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL
,
            `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL
,
            `DATA_FREE` bigint(21) unsigned DEFAULT NULL
,
            `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL
,
            PRIMARY KEY(DATE,TABLE_SCHEMA,TABLE_NAME)
,
            KEY(TABLE_SCHEMA,TABLE_NAME)
)
            ENGINE=INNODB DEFAULT CHARSET=utf8;

这将为下一个星期一创建一个事件,然后每个星期一将在表上插入数据。根据您的需求改变一天

现在你想要的是表数据增长的月度报告,你可以使用这个查询来获得一旦你完成1个月的数据捕获就可以运行它:

#
# MySQL EVENT to add table stats for our new history table
#

DELIMITER ;;

CREATE
            EVENT IF NOT EXISTS `get_table_growth_history`
            ON SCHEDULE EVERY 1 WEEK
    STARTS CURRENT_DATE + INTERVAL 7 - WEEKDAY(CURRENT_DATE) DAY
    ON COMPLETION PRESERVE ENABLE
            DO BEGIN

INSERT INTO
                                            stats_db.table_growth_history
SELECT
       DATE(NOW())
            ,
       TABLE_SCHEMA
            ,
       TABLE_NAME
            ,
       ENGINE
            ,
       TABLE_ROWS
            ,
       DATA_LENGTH
            ,
       INDEX_LENGTH
            ,
       DATA_FREE
            ,
       AUTO_INCREMENT
FROM  
                            INFORMATION_SCHEMA.TABLES;

    END ;;
    DELIMITER ;

您也可以根据需要更改时间范围。

您将拥有服务器中所有数据库的规格和大小。