![用于规划 SQL 数据库大小要求的工具](https://linux22.com/image/526365/%E7%94%A8%E4%BA%8E%E8%A7%84%E5%88%92%20SQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%A7%E5%B0%8F%E8%A6%81%E6%B1%82%E7%9A%84%E5%B7%A5%E5%85%B7.png)
我即将开始为一些 SQL Server Analysis Services 设置 SQL 数据仓库。我要切分的数据位于我无法控制的异地数据库中,因此我的想法是设置常规作业,以便获取新条目并将其插入到我自己的表中。
我想知道是否有任何好的工具可以帮助规划数据库空间需求。仅 5 个月后,我感兴趣的表已经拥有近 450 万条记录,到明年这个时候,我估计我们每月可以生成 300-400 万条记录。
我想我正在寻找的东西是可以将表定义输入其中,然后告诉我十亿行需要多少磁盘空间。
谢谢。
编辑
好吧,使用 Excel,我得出了每个记录的理论上 1098 个字节,最坏的情况是每个记录最多使用 varchar(1000)。
每月 400 万条记录,一年就是 4800 万条记录,最坏情况下每年需要 50 GB 的磁盘空间。将其改为 varchar(255) 每年可获得不到 16 GB,而 varchar(50) 每年可获得 ~6.5 GB。
有没有比我更优秀的 DBA 可以告诉我我是否错了?
编辑#2
根据此处的要求,表定义如下:
Type Size
int 4
int 4
int 4
datetime 8
Decimal(19,5) 9
int 4
int 4
varchar(1000) 1000
int 4
int 4
smalldatetime 4
int 4
int 4
int 4
int 4
decimal(9,2) 5
smallint 2
datetime 8
decimal(18,2) 9
bit 1
int 4
int 4
如果所有字段都用到最大的话,总共是 1098 个字节。
答案1
我不知道有什么工具可以做到这一点;但是,虽然这有点麻烦,但您可以根据行的列类型自行计算。如果您输出脚本create table
并将它们输入到脚本中,您可能可以编写一个 powershell 来帮助您。
也许可以编写一个脚本,搜索所有数据int
并将其添加到计数器中,对每种数据类型也执行相同的操作,然后您可以进行一些快速乘法来计算出大致的表大小。获取所有varchar(50)
和char(10)
数据类型的大小可能有些棘手,但同样,一些 powershell 魔法可能会有所帮助。
更新
我也得出了和你一样的结论,最坏的情况下,每条记录占用 1098 字节。你知道你的数据,但根据你的编辑,你的数据很有可能会比varchar(1000)
许多记录的数据要少。在这种情况下,这将为你节省每条记录的空间,所以在最好的情况下,每条记录占用 98 字节。如果我是你,我会用这些信息来检查你已经拥有的数据,并得出这个字段平均长度的基线,varchar(1000)
并使用该平均值来计算一个不错的中位数。