Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure函数静态SqlConnection-正确的扩展方式?_Azure_Static_Azure Sql Database_Azure Functions_Sqlconnection - Fatal编程技术网

Azure函数静态SqlConnection-正确的扩展方式?

Azure函数静态SqlConnection-正确的扩展方式?,azure,static,azure-sql-database,azure-functions,sqlconnection,Azure,Static,Azure Sql Database,Azure Functions,Sqlconnection,我正在为部分工作负载使用带有队列触发器的Azure函数。特定的函数查询数据库,这会产生缩放问题,因为对数据库进行ping操作的函数实例的大量并发会导致不断命中Azrue db连接的最大允许数量 本文将HttpClient列为应设置为静态的资源之一。 为了解决这个问题,数据库访问是否也应该通过静态SqlConnection设置为静态,或者通过保持常量connection对象会导致其他一些问题 数据库访问是否也应该通过静态SqlConnection设置为静态 绝对不是。每个函数调用都应该在using

我正在为部分工作负载使用带有队列触发器的Azure函数。特定的函数查询数据库,这会产生缩放问题,因为对数据库进行ping操作的函数实例的大量并发会导致不断命中Azrue db连接的最大允许数量

本文将HttpClient列为应设置为静态的资源之一。 为了解决这个问题,数据库访问是否也应该通过静态SqlConnection设置为静态,或者通过保持常量connection对象会导致其他一些问题

数据库访问是否也应该通过静态SqlConnection设置为静态

绝对不是。每个函数调用都应该在using块中打开一个具有相同连接字符串的新SqlConnection。目前还不清楚运行时将对应用程序的单个实例进行多少次并发函数调用。但是如果大于1,那么单例SqlConnection是一件坏事

我想知道您在SQL数据库中到底碰到了哪一个,连接限制还是并发请求限制?在这两种情况下,我都有点惊讶(不是函数专家),您会得到这么多并发函数调用,所以可能会发生其他事情。就像你在泄漏SqlConnections一样

但是阅读函数文档,我猜函数运行时是通过启动函数应用程序的多个实例来扩展的。你的.NET应用程序可以在一个进程中扩展,但这显然不是功能的工作方式。功能应用程序的每个实例都有自己的SQL Server连接池,默认情况下,每个连接池可以有100个连接


如果您在连接字符串中严格限制最大池大小,可能就不会打开这么多连接。当达到最大池大小时,对SqlConnection.Open()的新调用将被阻止长达30秒,等待池中的SqlConnection可用。因此,这不仅限制了应用程序每个实例的连接使用,还限制了负载下的吞吐量

您可以使用中的配置设置来控制每个实例执行的函数的并发级别,以及控制扩展到多少实例的设置。这将允许您控制数据库上的总负载量。

对于未来的读者,请说明:

您的函数代码可以使用.NET Framework SQL Server数据提供程序(SqlClient)连接到SQL关系数据库。这也是依赖ADO.NET的数据框架(如实体框架)的底层提供程序。与HttpClient和DocumentClient连接不同,ADO.NET默认情况下实现连接池。但是,由于连接可能仍然不足,因此应该优化到数据库的连接。有关详细信息,请参阅SQL Server连接池(ADO.NET)


因此,您不应该将
SqlConnection
设置为静态。

该设置的注释指定“此设置是一项预览功能,只有当设置为某个值时才可靠,最近在函数中引入的DI是否会改变什么?它们将SqlConnection指定为应该属于单例范围的内容。您将如何在函数中作为单例执行SqlConnection。。。