You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL Trigger在空闲的隔离式C#函数应用中无法触发的问题咨询

解决SqlTrigger在消费计划空闲后停止触发的问题

核心原因

消费计划下的Azure Functions实例在无活动一段时间后会被自动回收休眠,而SqlTrigger的轮询逻辑仅在实例运行时执行。实例休眠后,轮询停止,自然无法检测到数据库变更;通过HttpTrigger唤醒实例后,轮询恢复,触发器正常工作。

可行解决方案

1. 开启消费计划的“始终开启”功能

在Azure门户中进入你的函数应用:

  • 导航到配置 > 常规设置
  • 找到“始终开启”选项,切换为开启状态
  • 保存配置

该设置会阻止实例进入休眠状态,确保SqlTrigger的轮询持续运行。注意:此配置会增加一定的运行成本,需根据业务需求权衡。

2. 添加定时触发器定期唤醒实例

添加一个简单的TimerTrigger函数,定期执行空逻辑,维持实例活动状态:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

public class KeepAliveFunction
{
    private readonly ILogger<KeepAliveFunction> _logger;

    public KeepAliveFunction(ILogger<KeepAliveFunction> logger)
    {
        _logger = logger;
    }

    [Function("KeepAlive")]
    public void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
    {
        _logger.LogInformation("Instance keep-alive triggered at: {Time}", DateTime.Now);
    }
}

配置说明:0 */5 * * * *表示每5分钟执行一次,可根据实际情况调整间隔(建议不超过10分钟,避免实例休眠)。

3. 调整SqlTrigger的轮询配置

在host.json中显式配置SqlTrigger的轮询参数,缩短轮询间隔,确保实例保持活动:

{
  "version": "2.0",
  "extensions": {
    "sql": {
      "pollingInterval": "00:00:30",
      "batchSize": 100,
      "maxBatchSize": 1000
    }
  }
}
  • pollingInterval:设置为30秒(或更短),增加轮询频率,让实例持续有活动
  • batchSize/maxBatchSize:根据业务调整批量处理的记录数,不影响休眠,但确保触发逻辑正常

额外验证步骤

  • 确认目标数据库表已开启变更跟踪:SqlTrigger依赖SQL Server的变更跟踪功能,需确保对应表已启用
  • 检查函数应用的实例日志:确认实例休眠时间与轮询停止时间一致,验证问题根源
  • 测试配置变更后,观察数据库日志中“获取最后同步版本”的查询是否持续执行

内容的提问来源于stack exchange,提问作者NotFound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:21:20