2009-07-20 71 views
11

是否还需要定期压缩SQL CE数据库?自动缩小是否足够?我们的平均数据库大小约为100Mb,大型用户数量达到400-500Mb(但这些数据非常少见)。如果我们不得不手动压缩,我们该如何判断我们应该什么时候?有没有办法通过编程来告诉碎片级别或浪费空间的百分比?如果不是,我们还可以使用其他门槛值?应该多长时间一次压缩SQL CE数据库?

该产品以前的版本建立在MS Access数据库上,所以我们不得不定期压缩以保持其正常工作。

+0

你可能有更好的运气问这个问题http://serverfault.com/ – andychase 2009-07-20 22:05:29

回答

8

我想象一下,如果您可以设置数据库,以便根据需要自动缩小和修复,那就相当麻烦了。这就是为什么有关最佳实践的文献缺乏;有一个普遍的假设,即它“正常工作”。所以你在这方面的任何指导都会变得模糊。

这里是一个网络直播(部分)报价在http://www.microsoft.com/web/library/Details.aspx?id=sql-server-2008-compact-express-depoly-manage

维护您的SQL Server Express 版本是非常类似于管理 任何其他多用户数据库,这意味着 ,我们可以选择去和 处理文件组,我们可以处理 备份选项和恢复 模型,什么不是。 [但是]当我们使用精简版或SQL Service CE处理 时,我们没有选择几乎所有的 选项。真的,我们 唯一的选择是我们如何处理 收缩和修复。

下面是从MSDN另一个在 http://msdn.microsoft.com/en-us/library/ms838028.aspx#youcantakeitwithyou_sqlserverce_topic4

注意,他们给有关数据库的架构良好的细节,但仍然不给维护计划。他们的建议是:在数据库开始变慢时执行此操作。另外请注意,这个建议是大约在2005年,事情自那时起有所改善;即维护程序现在已经自动化了。

保持你的房子(或数据库)中
另一大因素在SQL服务器 CE 2.0的 性能大型数据库是 数据库结构本身的组织。当您的 应用程序修改数据库的内容 时,记录将变得更为 随机分布在 数据库文件结构中。在插入和删除大数 之后,该因子 尤其如此。到 确保对数据库的最佳访问, 紧凑的数据库在任何 内容的大幅改变。通过他们的 主键首先,它存储为了所有 表记录;:

除了回收未使用的 的空间, 数据库上执行紧凑对 性能两个显着的影响其次,它更新查询 处理器使用的统计信息 。

通过主键 订购记录可显着提高主键 的访问权限。这是由于SQL Server CE (和大多数其他数据库)的面向页面的 性质。相比 将数据库中的单个记录从 加载到内存中,SQL Server CE加载称为 页面的记录块。当数据库记录为 按主键排序时, 加载包含一条记录的页面 会自动加载具有相似主键值的 这些记录。对于大多数 应用程序,这会导致什么 被称为良好的“命中率”, 这意味着当你的应用程序 去访问连续的数据库 记录,有一个强大的可能性 含有这些记录 是页已经在内存中,可以直接访问 。当记录 更多的随机分布,经常 大量 插入后会和删除,有需要的SQL Server CE到 从数据库中检索 文件的详细页面来访问相同数量的 不良 命中率记录。

查询处理器统计信息 影响查询处理器 如何确定查找记录的最佳方法。诸如 之类的决定是否使用密钥或执行 顺序扫描以定位特定的 记录都受查询 处理器统计的影响。由于统计信息变得陈旧,因此查询处理器可能做出的决策不如最佳 的可能性增加。执行一个压缩文件 会刷新这些统计信息。

我同情你的Access数据库的经验。但是,我认为你会发现你在SQL Server CE上的体验很少有相似之处。

相关问题