我确实有存储过程来计算一些事实(比如usp_calculate
(。它填充类缓存表表的部分(由过程的参数决定(表必须每20分钟重新计算一次。基本上,如果缓存的数据是新鲜的,usp_calculate
会提前返回,或者它会花一分钟的时间来计算。。。然后返回。
usp_calculate
由更多需要数据的外部过程共享如果程序中耗时的部分已经由其他进程启动,我应该如何防止它启动如何实现一种信令并等待结果,而不是重新开始计算?
上下文:我确实有一个名为sayusp_products
的SQL存储过程。它最后执行一个SELECT
,返回产品代码、产品名称和计算信息的行——客户的特殊价格和存储位置。有很多组合(客户、价目表、其他条件(可以防止通过单独的过程预先计算信息。对于特定组合,它必须是按需计算的。
作为信息来源的第三方数据库不是为检测更改而设计的。无论如何,时间条件(不超过20分钟(被认为足够好,可以认为数据是"新鲜的"。
这方面的构建块可能是应用程序锁。
您可以使用sp_getapplock
获得独占应用程序锁。然后,您可以使用数据中固有的新鲜度信息或用于跟踪的单独表来确定数据是否"足够新鲜"。
此时,如果需要,可以刷新数据并更新新鲜度信息。
最后,使用sp_releaseapplock
释放锁,让所有其他调用方都有机会获取锁并发现数据是新的。