将使用Umbraco CMS(v6.2.6)的网站中的一个从本地Web和数据库服务器迁移到Azure后,后台用户的性能影响巨大。 我试图扩大资源,但这不是问题,因为DTU利用率最高只能达到35%,即使发生突发/尖峰。 SQL服务器是S0标准服务层(10个DTU),它所在的资源组是位于美国东部的S3标准服务层(4核心/ 7GB)。
我复制了Azure应用程序服务和sql数据库,并在Azure中附加了一个New Relic实例,结果令人不安。
呼叫跟踪#1 – 77%的时间用于打开SqlConnections
如果它有什么区别,我使用本地SQL服务器实例在本地运行相同的代码/testing,响应时间更快 – 几乎没有时间用来打开连接 – 本地主机StackifyPrefix跟踪。 我没有编写数据层代码,所以在这一点上调整它是绝对不可能的,因为它看起来像是值得的,还有什么可以做的,以减轻这一点? 这似乎是一个很长时间才打开SQL连接很多次
对此的修复是在连接string中 – 在2016年6月,Azure SQL数据库门户将其显示为ADO.NET的复制和粘贴连接string
Server=tcp:{your db resource group name},1433;Initial Catalog={your db instance};Persist Security Info=False;User ID={your_username};Password={your_password};Pooling=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
在过去的4到5个月中,他们从ADO.NET中的连接string示例中删除了Pooling=False ,但是现在我刚刚将连接string从一个站点复制并粘贴到另一个站点,因为它已经有了db声明/资源组名称,我所要做的就是更改它指向的实际目录。
当设置Pooling = False时,每次在.NET中使用Close()或Dispose()调用连接时,连接实际上都会closures,而不是返回到连接池供以后使用。 当需要build立新的连接时,必须build立客户端与数据库服务器之间的TCP三次握手和通信,这对于有大量查询的站点会产生很大的性能影响。 通过从连接string中删除Pooling=False ,连接池function在默认情况下通过ADO.NET自动启用。