Sql server 使用计时器触发的Azure函数异步执行长时间运行的存储过程

Sql server 使用计时器触发的Azure函数异步执行长时间运行的存储过程,sql-server,azure,stored-procedures,azure-functions,azure-sql-database,Sql Server,Azure,Stored Procedures,Azure Functions,Azure Sql Database,从Azure计时器触发的函数获取正在执行的存储过程时遇到了一些问题,我正在努力找出原因 我有一堆小的存储过程,它们根据一些逻辑执行一些行更新和插入,这些逻辑是使用Azure计时器触发的函数执行的,没有任何问题,但是其中一个出现了错误 存储过程是从这里开始的自适应索引碎片整理:() 运行大约需要一分钟,计划每天在夜间运行 以下是执行函数的代码,该函数负责执行上述存储过程: public static class MyFunction { [FunctionName("My

从Azure计时器触发的函数获取正在执行的存储过程时遇到了一些问题,我正在努力找出原因

我有一堆小的存储过程,它们根据一些逻辑执行一些行更新和插入,这些逻辑是使用Azure计时器触发的函数执行的,没有任何问题,但是其中一个出现了错误

存储过程是从这里开始的自适应索引碎片整理:()

运行大约需要一分钟,计划每天在夜间运行

以下是执行函数的代码,该函数负责执行上述存储过程:

    public static class MyFunction {
    [FunctionName("MyFunction")]
    public static async Task Run([TimerTrigger("0 0 0 */1 * * ")] TimerInfo myTimer, ILogger log) {
        await using var conn = new SqlConnection("connection string");

        await using var command = new SqlCommand("do_the_thing", conn) {CommandType = CommandType.StoredProcedure};
        try {
            command.Connection.Open();
            var result = await command.ExecuteScalarAsync();
            log.LogInformation($"Query result: {result}");
        }
        catch (Exception ex_) {
            log.LogError(ex_, "OH NO!");
        }

        log.LogInformation("Went smoothly");
    }
}
结果值为-1,Azure monitor表示查询已成功执行,但查看日志和加载sql server端,存储过程尚未运行

运行较小存储过程的所有其他函数都重用上述代码。我使用精确的代码制作了一个带有测试存储过程的测试函数,它工作得很好,但是执行索引碎片整理总是失败,但没有给出错误或异常。一切看起来都很好,唯一告诉我存储过程无法运行的指示器是Azure函数负责执行索引碎片整理存储过程的持续时间计时器,它总是太短,我看到的最大值是2.5秒,应该超过一分钟


任何帮助都将不胜感激。

最后,您尝试传递@debugMode=1参数,然后收到一条消息,表明代码仅具有有限的权限,可以从
SqlConnection.InfoMessage
事件执行某些任务。授予权限后,您可以通过计时器触发的Azure函数成功地异步执行存储过程。

日志中没有任何内容?SQL中有什么样的错误处理,也许它正在吞咽错误?就我所见,在日志中添加和添加实际的SQL将毫无帮助。也许还有其他一些日志我应该深入研究,但我不是SQL专家。存储过程的代码在链接中给出。它有2500多行。这个过程使用了一个名为
tbl\u AdaptiveIndexDefrag\u Analysis\u log
的表格,里面有什么吗?你用什么参数来调用它?换言之:您可以发布完整的调用代码吗?存储过程是使用默认参数调用的。我不在乎。经过更多的测试后,我开始相信,正是这场大爆发抛出了一些没有被捕获的东西。我在SSMS和.NET代码中运行相同的“EXECUTE do_the_thing”。在SSMS下,它工作正常,但从代码。。。运气不好。传递
@debugMode=1
参数并通过
SqlConnection.InfoMessage
事件接收消息怎么样?