Microsoft SQL Server每秒都会将数据插入到大型表中

时间:2013-08-14 12:25:39

标签: c# sql sql-server linq-to-sql sql-server-2008-r2

我有一个数据采集系统,可以读取某些工业设备的值,并将值记录到Microsoft SQL Server 2008 R2数据库中。数据记录间隔约为20秒。每个记录数据包含大约600字节的数据。

现在我需要从新硬件插入数据,但这个时间记录间隔必须是1秒。换句话说,我每秒在SQL服务器数据库中插入1条600字节的记录。

我有两个问题:

  1. 在每秒插入数据时可能会遇到任何问题吗?我认为Microsoft SQL服务器对于这种插入频率是相当不错的,但我不确定很长一段时间。

  2. 程序是一个长期运行的应用程序。我大约每周清理数据表。当我每秒记录数据时,我每小时会在表中有3600行,每天有86400行,而在每周结束时会有大约600K行。这对于高水平的阅读数据是否可以?或者我应该尝试更改我的方法,以便在表格中没有这么多行?

  3. 顺便说一句,我使用LinqToSQL进行所有数据库操作,使用C#进行编程。

4 个答案:

答案 0 :(得分:1)

  

在每秒插入数据时可能会遇到任何问题吗?我认为Microsoft SQL服务器对于这种插入频率是相当不错的,但我不确定很长一段时间。

如果数据库设计得合理,则不应该遇到任何问题。我们以更快的速度保存GIS数据,没有任何问题。

  

这对于良好的阅读数据水平是否可以?或者我应该尝试改变我的方法,以便在表中没有这么多的行?

这取决于,如果您需要所有数据而不是如何更改方法?如果你不需要它为什么要保存呢?

答案 1 :(得分:0)

首先,您必须考虑插入数据的表上的现有索引,因为索引会降低插入过程的速度。其次,如果你有完整的恢复模型,那么每个插入过程都将写入事务日志中,你的日志文件将迅速上升。

考虑将恢复模式更改为SIMPLE,并禁用索引。

当然,从该表中选择行会比较慢,但我不知道你的请求是什么。

答案 2 :(得分:0)

根据我在大学的论文经验,如果您的系统完全稳定且不会崩溃或溢出等等。您可以使用SqlBulkCopy来避免每条记录的I / O操作。 这是DataTable批量复制的示例代码,此方法应每隔1小时调用一次:

        private void SaveNewData()
        {
            if (cmdThesis.Connection.State == ConnectionState.Open)
            {
                cmdThesis.Connection.Close();
            }

            SqlBulkCopy bulkCopy = new SqlBulkCopy(@"Data Source=.;Initial Catalog=YourDb;Integrated Security=True");
            bulkCopy.BatchSize = 3000;
            bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col1", "Col1"));
            bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col2", "Col2"));
            bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col3", "Col3"));
            bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col4", "Col4"));
            bulkCopy.DestinationTableName = "DestinationTable";
            bulkCopy.WriteToServer(Result);

            Result.Rows.Clear();

        }

答案 3 :(得分:0)

虽然我认为你应该没问题,因为你显然使用的是.NET平台,你可以查看StreamInsight:http://technet.microsoft.com/en-us/library/ee391416.aspx