任务:
每秒将时间戳写入 MS SQL 数据库表。
解决方案:
- 按计划写入时间戳的外部应用程序(例如 Sql 代理)。
- 存储过程,它在无限循环中写入时间戳。
问题。
- 哪种解决方案最好?
- 在存储过程中运行无限循环有什么缺点吗?
- 服务器重启后如何启动存储过程?
- 还有其他解决方案吗?
任务:
每秒将时间戳写入 MS SQL 数据库表。
解决方案:
问题。
WAITFOR DELAY
1、两者各有利弊。根据您的环境评估和选择
过程优点:
- 没有每秒一次 SQL 代理处理的开销。(事实上,我不认为你可以让 SQL 代理每秒持续启动一次相同的作业。)
- 我不认为 WAITFOR 模式下的过程正在使用资源 - 但你想检查一下
程序失败:
- 如果程序失败(以某种方式停止),它将不会启动。(除非您有一个 SQL 代理作业正在运行以检查该过程是否已停止,在这种情况下最好继续该过程)
- 可能比您想象的更容易停止/中断(并发/死锁,分离的数据库,手动在维护期间停止然后忘记重新启动)
工作优势:
- 如果工作失败(可能数据库不可用),下一个工作仍然会启动
Job Disads:
- 看起来很笨拙,让 SQL 代理每秒运行一次。如果您这样做,请测量所需的服务器开销。
- 如果 SQL 代理失败或停止,作业将不会运行
一个建议:必须每秒一次吗?可以每 5、10、15 或 30 次吗?
2,不应该是任何,除非是上面提到的。确保你不会遇到锁定、阻塞或死锁的情况!
3,就像@gbn 说的,sp_procoption
4,没有什么不涉及基于悲观锁定技术的繁琐技巧,或基于时间戳(不是日期时间)数据类型的拜占庭逻辑。最好的解决方案似乎是将这两个数据库合并为一个的长期解决方案,但这不是短期选择。
出于纯粹的偏执,我会像这样将两者结合起来:
尝试使用 SQL 服务代理异步执行此操作,其队列系统允许您不会丢失任何数据,即使必须重新启动 SQL Server 服务。我曾经在这种轮询场景中使用过一次。
http://msdn.microsoft.com/en-us/library/ms345108(SQL.90).aspx#sqlsvcbr_topic2
这可能会有所帮助, http: //msdn.microsoft.com/en-us/library/bb839488.aspx