事务级别,nolock/readpast和并发

sor*_*rke 5 sql-server concurrency optimization locking transactions

我们有一个系统同时插入来自多个站的大量数据,同时还暴露了数据查询接口.架构看起来像这样(抱歉格式不佳):

[SyncTable]
  SyncID
  StationID
  MeasuringTime


[DataTypeTable]
  TypeID
  TypeName


[DataTable]
  SyncID
  TypeID
  DataColumns...
Run Code Online (Sandbox Code Playgroud)

数据插入是在"同步"中完成的,并且像这样(我们只将数据插入系统,我们从不更新)

INSERT INTO SyncTable(StationID, MeasuringTime) VALUES (X,Y); SELECT @@IDENTITY

INSERT INTO DataTable(SyncID, TypeID, DataColumns) VALUES 
  (SyncIDJustInserted, InMemoryCachedTypeID, Data)
  ... lots (500) similar inserts into DataTable ...
Run Code Online (Sandbox Code Playgroud)

查询就像这样(对于给定的站点,测量时间和数据类型)

SELECT SyncID FROM SyncTable WHERE StationID = @StationID 
                               AND MeasuringTime = @MeasuringTime 
SELECT DataColumns FROM DataTable WHERE SyncID = @SyncIDJustSelected
                                  AND DataTypeID = @TypeID
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将插入的事务级别和查询的NOLOCK/READPAST提示结合起来,以便:

  1. 我们在系统中最大化并发性,同时支持插入(我们需要存储大量数据,一秒钟内高达2000+记录)
  2. 查询仅从"提交"同步返回数据(我们不希望结果集具有半插入同步或由于跳过锁而与某些跳过的条目同步)
  3. 我们不关心查询中是否包含"最新"数据,我们更关心"实时"和最新数据的一致性和响应性

这可能是非常矛盾的目标,可能需要高事务隔离级别,但我对所有技巧和优化感兴趣,以实现对插入和选择的高响应性.我很乐意详细说明是否需要更多细节来清除更多调整和技巧.

更新:只需为将来的回复添加更多信息.我们最初在具有5+ TB存储空间的SAN网络上运行SQL Server 2005(可能在六个月内发布).我不确定SAn设置的是什么类型的RAID,以及我们可用的确切磁盘数量.

Sam*_*Sam 0

    \n
  1. 您将使用什么类型的磁盘系统?如果您有大型条带 RAID 阵列,写入应该表现良好。如果您可以估计每秒所需的读取和写入次数,则可以将这些数字代入公式并查看您的磁盘子系统是否能够跟上。也许你无法控制硬件......

  2. \n
  3. 您是否会将插入包装在事务中,这将使它们在插入完成之前无法读取?

  4. \n
  5. 如果您的硬件配置正确并且您正在注意 SQL 编码(看起来您确实如此),那么应该遵循以下步骤。

  6. \n
\n\n

查看 SQLIO.exe 和 SQL Stress 工具:

\n\n

SQLIOStress.exe\nSQLIOStress.exe 模拟 SQL Server 2000 I/O 行为的各种模式以确保基本的 I/O 安全。

\n\n

SQLIOStress 实用程序可以从 Microsoft 网站下载。请参阅以下文章。

\n\n

\xe2\x80\xa2 如何使用 SQLIOStress 实用程序对 SQL Server 等磁盘子系统施加压力\n http://support.microsoft.com/default.aspx?scid=kb;en-us;231619

\n\n

重要 下载包含完整的白皮书,其中包含有关该实用程序的更多详细信息。

\n\n

SQLIO.exe\nSQLIO.exe 是一个 SQL Server 2000 I/O 实用程序,用于建立基本基准测试结果。

\n\n

SQLIO 实用程序可以从 Microsoft 网站下载。请参阅以下内容:\n\xe2\x80\xa2 SQLIO 性能测试工具(SQL 开发)\xe2\x80\x93 可用客户\n http://download.microsoft.com/download/f/3/f/f3f92f8b- b24e-4c2e-9e86-d66df1f6f83b/SQLIO.msi

\n