是否需要定期压缩SQL CE数据库?汽车会缩水吗?我们的平均数据库大小约为100Mb,大型用户达到400-500Mb(但这些非常罕见).如果我们必须手动压缩,我们如何判断应该何时应该?有没有办法以编程方式告诉碎片级别或浪费空间的百分比?如果没有,我们可以使用什么其他门槛?
该产品的早期版本是基于(喘气)MS Access数据库构建的,因此我们必须定期进行压缩以保持其正常工作.
我想,如果您可以设置数据库以便根据需要自动缩小和修复,那就非常彻底了.这就是为什么缺乏关于最佳实践的文献; 人们普遍认为它"只是有效".因此,您在这方面获得的任何指导都将是模糊的.
以下是来自网络广播的(部分)引用,网址为http://www.microsoft.com/web/library/Details.aspx?id=sql-server-2008-compact-express-depoly-manage
维护SQL Server Express Edition与管理任何其他多用户数据库非常相似,这意味着我们可以选择进入和处理文件组,我们可以处理备份选项和恢复模型.[但]当我们处理紧凑版本或SQL Service CE时,我们没有几乎同样多的选项.真的,我们唯一的选择是如何处理收缩和修复.
这是另一个来自MSDN的 http://msdn.microsoft.com/en-us/library/ms838028.aspx#youcantakeitwithyou_sqlserverce_topic4
请注意,它们提供了有关数据库体系结构的详细信息,但仍未提供维护计划.他们的建议是:当数据库开始变慢时这样做. 另请注意,这个建议大约是2005年,从那以后情况有所改善; 即维护程序现已自动化.
让您的房子(或数据库)井然有序
SQL Server CE 2.0中大型数据库性能的另一个重要因素是数据库结构本身的组织.当您的应用程序修改数据库的内容时,记录将在数据库文件结构中随机分布.在大量插入和删除之后,这个因素尤其正确.为确保对数据库的最佳访问,请在对内容进行任何实质性更改后压缩数据库.除了恢复未使用的空间之外,在数据库上执行压缩对性能有两个显着的影响:首先,它按主键顺序存储所有表记录; 第二,它更新查询处理器使用的统计信息.
按主键排序记录可以显着改善主键访问.这是由于SQL Server CE(以及大多数其他数据库)的面向页面的特性.SQL Server CE不是将数据库中的单个记录加载到内存中,而是加载称为页面的记录块.当按主键按顺序对数据库记录进行分组时,加载包含一条记录的页面会自动加载具有相似主键值的记录.对于大多数应用程序,这会导致所谓的"命中率",这意味着当您的应用程序访问连续的数据库记录时,包含这些记录的页面很可能已经在内存中并且可以直接访问.当记录随机分布时(通常在大量插入和删除之后发生),命中率很低,要求SQL Server CE从数据库文件中检索更多页面以访问相同数量的记录.
查询处理器统计信息会影响查询处理器如何确定查找记录的最佳方法.是否使用密钥或执行顺序扫描来查找特定记录的决策都受查询处理器统计信息的影响.随着统计数据变得陈旧,查询处理器可能做出不太理想的决策的可能性增加.执行压缩会刷新这些统计信息.
我同情你对Access数据库的经验.但是,我认为您会发现您使用SQL Server CE的经验几乎没有相似之处.
| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |