如果我想定期执行一些数据库操作,我可以:
使用 SQL Server 代理(如果是 SQL Server)定期调用存储过程和/或执行 T-SQL
运行一些执行数据库操作的外部进程(例如由操作系统的任务调度程序调度)
等等
两个问题:
- 还有哪些其他方法可以实现这一目标
- 应该使用什么决策标准来决定最佳方法?
谢谢。
最佳答案
另一种可能性是在某处有一个任务队列,当使用数据库的应用程序执行某些操作时,它们也会从队列中执行一些任务。维基百科通过其作业队列做了类似的事情。调度并不像其他方法那样确定,但您可以例如当您的服务器负载过重时,请推迟执行内务工作。
编辑: 它不一定比其他技术更好或更差。它适用于不必在任何特定截止日期前执行的任务,但应“时不时”或“很快,但不一定现在”完成。
优点
- 您无需编写单独的应用程序或设置 SQL Server 代理。
- 您可以使用您可以编程的任何标准来决定是否运行任务:立即运行、经过一定时间后运行、或者仅在服务器负载不重时运行。
- 如果计划任务是优化索引之类的任务,那么您可以在不太必要时(例如,更新很少时)降低执行频率,而在更新频繁时提高执行频率。
缺点
- 您可能需要修改多个应用程序才能正确协作。
- 您需要确保队列不会堆积太多。
- 您无法可靠地确保任务在特定时间之前运行。
- 您可能会有很长一段时间没有收到任何请求(例如在晚上),而推迟/计划的任务可以完成,但实际上却没有。您可以将其与其他想法之一结合起来,使用一个特殊的程序来执行队列中的作业,但您可以根本不理会队列。
关于sql-server - 计划执行代码以在 SQL Server 中进行数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083300/