一个SQL Server可以处理多少个SQL作业?

时间:2018-06-06 20:16:39

标签: sql-server database triggers query-performance sql-job

我正在创建一个数据库医疗系统然后我来到了一个点,我正在尝试创建一个通知功能,我将在其中使用SQL作业,其中SQL工作职责是检查一些表和将要执行的实体发现需要通知某些数据的更改会将其ID放入名为Notification的实体中,并且会调用触发器来检查该表并发送通知。

我想问的是sql server可以处理多少个SQL作业?

后台运行的SQL作业数是否会以某种方式影响我的应用程序性能或数据库性能?

注意: SQL作业将每10秒运行一次

我无法在线找到任何有用的信息。

提前感谢。

1 个答案:

答案 0 :(得分:1)

这个问题确实没有足够的背景来得到明确的答案。有什么考虑?

  1. 即使您的DBMS处于其峰值事务工作负载之下,您的十秒工作中的查询是否会在十秒内完成?显然,如果工作通常在十秒内没有完成,那么你就会把工作堆积起来。
  2. 您的作业中的查询是否会锁定表和/或索引,以便事务负载无法有效运行? (您应该尽可能多地使用SET ISOLATION LEVEL READ UNCOMMITTED;,以便数据库读取不会不必要地锁定内容。)
  3. 你工作中的查询会做很多行吗?值得插入和更新,所以淹没SQL Server事务日志?
  4. 您的服务器有多大? (CPU核心?RAM?IO容量?)您的数据库有多大?
  5. 如果您的项目成功并且您获得了很多用户,那么您对上述问题的答案是否会保持不变? (提示:没有。)
  6. 您应该花一些时间在作业中的查询执行计划上,并尽量使它们尽可能高效。添加必要的索引。如有必要,重构查询以提高查询效率。 SSMS将向您显示执行计划并建议适当的索引。

    如果您的工作正在执行删除过期行的操作,则可能需要在数据模型中构建过期日期。例如,假设您的工作

     DELETE FROM readings WHERE expiration_date >= GETDATE()
    

    并且您的应用程序执行此操作,依靠您的工作来避免过期读数。

     SELECT something FROM readings
    

    您可以重构您的应用程序查询以说明

     SELECT something FROM readings WHERE expiration_date < GETDATE()
    

    然后在一个安静的时间,而不是每十秒钟,让你的工作一夜之间完成。

    十秒钟的工作并不是世界上最伟大的想法。如果您可以重新设计应用程序,使其能够在10秒,10分钟或12小时的工作中正常运行,那么您将拥有更具弹性的生产系统。无论如何,当你的系统非常繁忙时,如果工作出现问题,你将有超过十秒的时间来修复它。