【问题标题】:maxout topup fast fill sql server express 2005 2008 databasemaxout topup 快速填充 sql server express 2005 2008 数据库
【发布时间】:2011-07-07 15:02:44
【问题描述】:

我需要测试一个没有更多空间的场景(db 已满)。我的意思不是让数据库的大小变得非常小。我的意思是让最大值保持不变(2005 express 大约 4gb,sql server 2008 express 大约 10gb)。现在我有(t-sql伪代码)

for (i=1 to 10,000)
{
   for (i=1 to 10,000)
   {
      insert into some random table
   }
   commit;
}

这种类型的逻辑有效,但需要很长时间才能填满数据库。有人有更好的想法吗? 谢谢

【问题讨论】:

    标签: sql-server sql-server-2005 tsql sql-server-2008


    【解决方案1】:
    ;with a as
    (select 0 level
    union all
    select a.level + 1 from a
    where a.level < 1000000
    )
    select * into fillbase from a
    option( MAXRECURSION 0) 
    

    这是另一种更快填充它的方法

    create table mytable(v varchar(max))
    
    insert into mytable values (REPLICATE('XXX', 10000))
    
    while 1 = 1
    BEGIN
        insert mytable select v + v from @a
    END
    

    【讨论】:

      【解决方案2】:

      没有什么神奇的事情发生,见What happens when you hit the SQL Server Express 4GB / 10GB limit?

      如果你真的需要这样做,你可以insert T (f) values('xxx') 然后循环

      insert T (f)
         select f from T
      

      在 16 次迭代后,您将拥有 65k 行 * 长度为 f

      【讨论】:

        【解决方案3】:

        当 SQL 数据库已满(即没有可用空间来存储新数据)并且您尝试添加更多数据时,则:

        • 如果关闭自动增长,您将收到错误消息
        • 如果启用自动增长并且有足够的可用硬盘空间,数据库将通过获取更多硬盘空间来“增长”
        • 如果启用了自动增长并且没有足够的硬盘空间,您会收到另一个错误(迟早会惊慌失措的 IT 人员)。

        如果您尝试将数据库“填充”到但不超过需要更多磁盘空间的程度,那么这将很难校准。

        如果您尝试测试数据库需要增长但硬盘空间不足的情况,我建议您更改数据库增长因子。运行类似的东西

        ALTER DATABASE MyDB
         modify file MyDb_FileXX (NAME = MyDBFileXXLogicalName, FILEGROWTH = 100TB)
        

        会设置一个数据库(即使是一个小数据库),在空间用完时尝试增长 100 TB,这很可能会触发您可能正在寻找的条件。

        【讨论】:

        • 我们有很多逻辑会在 sql server express db 被最大化时触发。请注意,这是快递,因此自动增长不做插孔。谢谢你的信息。
        • NP。 (我看了你的标签,不知道它只是快递。)
        猜你喜欢
        • 2010-09-22
        • 2011-05-06
        • 2012-06-10
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多