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