Sql server SQL Server express维护
我目前正在尝试使用SQL Server 2012 Express开发与SCADA应用程序相关的数据记录解决方案。SCADA应用程序配置为在SQL Server上执行存储过程,以将数据推送到数据库中 数据流imho相当繁重(经过一些调整后,每天1.4-1.9m行,平均长度为43字节)。存储数据的表在三列上有一个聚集索引。目前,我们的重点是尽可能紧凑地存储这些数据,而不产生太多的碎片(选择现在不太重要) 目前数据库占用了大约250 MB(我已经为数据库预先分配了5120 MB),并且只保存这个数据表、另一个可以忽略的表以及事务日志 我的问题是:Sql server SQL Server express维护,sql-server,database,sql-server-express,Sql Server,Database,Sql Server Express,我目前正在尝试使用SQL Server 2012 Express开发与SCADA应用程序相关的数据记录解决方案。SCADA应用程序配置为在SQL Server上执行存储过程,以将数据推送到数据库中 数据流imho相当繁重(经过一些调整后,每天1.4-1.9m行,平均长度为43字节)。存储数据的表在三列上有一个聚集索引。目前,我们的重点是尽可能紧凑地存储这些数据,而不产生太多的碎片(选择现在不太重要) 目前数据库占用了大约250 MB(我已经为数据库预先分配了5120 MB),并且只保存这个数据表
如果你认为我不熟悉数据库,那么你是对的。Atm只有一个scada应用程序使用SQL Server,但实际的应用程序是冗余设置的,因此最终一切都将占用两倍的资源(scada应用程序的每个实例都将有自己的存储)。我还需要指出的是,我不能只升级到SQL Server的高级版本,但我可以自由使用任何一款免费软件。大多数答案都跨越了4个数字,因此我只需在项目符号中添加回复以帮助:
- 可能应该维护索引,但在您的情况下,它们可能是禁止的。除了表上的聚集索引外,索引通常(非聚集类型)用于查询数据
- 由于没有代理可以使用,要让计划任务执行此工作,请使用sqlcmd实用程序()。可能必须安装命令行工具,但您可以编写一个批处理脚本来运行SQL命令
- 如果一个应用程序能像你描述的那样进行大量的插入,我将设计一个两步流程。首先,一个没有非聚集索引的基本表来接受插入。其次,一个你将要查询数据的表。然后,使用一个计划任务调用一个存储的进程来将事务数据从表1传输到表2,可能是每小时或每天一次ur查询需要(并且在传输到表2后从表1中删除原始数据-这肯定应该在事务中完成)
- 否则,每次插入不仅要插入表的原始数据,还要插入索引的记录
- 由于插入的数量,可能应避免高填充系数(可能设置为小于50%)。高填充系数(100%)填充因子意味着非聚集索引不会在表的页面中留下任何空间来实际插入记录。插入的每一条记录都意味着必须重新组织表的页面。具有高填充因子将在表的每一页中留下空间,以便在索引中插入新记录,而不必重新组织它们
- 为了优化插入,我将使用上面的两步过程将记录直接插入到第一个表中。如果你可以让你的应用程序使用SQL批量复制,我也将探索这一点
- 要优化空间,您可以探索以下几点:
- 您是否需要所有可实时访问的记录?也许您可以与业务部门合作创建一个数据保留策略,在该策略中,您可以将数据库中的每个记录保留24小时,然后按分钟或其他方式汇总一周,每小时备份两周,每天备份6个月,等等。您可以通过每天备份来增强这一点,以便可以如果需要,将任何一天全部储存起来
- 考虑将数据库级别从完全恢复更改为简单或大容量日志。这可以通过您可能正在执行的大容量插入来控制您的事务日志
- 更多信息:
- 你必须努力工作来管理你的事务日志。经常进行检查点和事务日志备份