sql-server - 计划执行代码以在 SQL Server 中进行数据库操作

标签 sql-server

如果我想定期执行一些数据库操作,我可以:

  • 使用 SQL Server 代理(如果是 SQL Server)定期调用存储过程和/或执行 T-SQL

  • 运行一些执行数据库操作的外部进程(例如由操作系统的任务调度程序调度)

  • 等等

两个问题:

  1. 还有哪些其他方法可以实现这一目标
  2. 应该使用什么决策标准来决定最佳方法?

谢谢。

最佳答案

另一种可能性是在某处有一个任务队列,当使用数据库的应用程序执行某些操作时,它们也会从队列中执行一些任务。维基百科通过其作业队列做了类似的事情。调度并不像其他方法那样确定,但您可以例如当您的服务器负载过重时,请推迟执行内务工作。

编辑: 它不一定比其他技术更好或更差。它适用于不必在任何特定截止日期前执行的任务,但应“时不时”或“很快,但不一定现在”完成。

优点

  • 您无需编写单独的应用程序或设置 SQL Server 代理。
  • 您可以使用您可以编程的任何标准来决定是否运行任务:立即运行、经过一定时间后运行、或者仅在服务器负载不重时运行。
  • 如果计划任务是优化索引之类的任务,那么您可以在不太必要时(例如,更新很少时)降低执行频率,而在更新频繁时提高执行频率。

缺点

  • 您可能需要修改多个应用程序才能正确协作。
  • 您需要确保队列不会堆积太多。
  • 您无法可靠地确保任务在特定时间之前运行。
  • 您可能会有很长一段时间没有收到任何请求(例如在晚上),而推迟/计划的任务可以完成,但实际上却没有。您可以将其与其他想法之一结合起来,使用一个特殊的程序来执行队列中的作业,但您可以根本不理会队列。

关于sql-server - 计划执行代码以在 SQL Server 中进行数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083300/

相关文章:

php - PHP 中的 SQL Server 存储过程输出参数

sql-server - SQL Server : One Table with 400 Columns or 40 Tables with 10 Columns?

java - SqlServer 转换为 mySql5.5,jpa @GeneratedValue 不起作用

sql-server - SSIS:不同驱动程序的两个不同错误。一个是 32 位的,另一个是 64 位的。以 32 位运行导致另一个驱动程序失败

sql-server - T-SQL CASE/子查询

sql-server - 以日期为参数在T-SQL中执行存储过程

mysql - 如何将 dbdeploy 与 SQL Server 一起使用?

sql - T-SQL 计数问题

sql-server - T-SQL 将计数器添加到分组数据

sql - TSQL:包含 0-9 之间除 5 之外的所有数字的子字符串