我有一个Visual Studio VB.NET项目,它基本上对数据库运行大量查询。
将数据库从本地内部部署SQL Server移动到Azure SQL后,性能显著下降。
当然会慢一些。但它慢了10倍。。。延迟当然是这里的问题。
有什么方法可以提高速度吗?某些东西"聪明";在连接字符串或命令对象中?
我无法更改";架构";(从我手中(。必须有很多(5000+(小查询返回一个值(一次运行一个值(。
这是我的意思的一个例子。在";本地";SQL Server需要10秒-在Azure中需要200秒:
Dim Server As String = "AZURE.poweranalyzedevazuretest.database.windows.net"
Dim User As String = "*****"
Dim password As String = "******!"
Dim PRODUCTIONDATABASE As String = "MYDB"
Dim SQL_CONNECTION_STRING As String = "Server=" & Server & "; Database=" & PRODUCTIONDATABASE & "; User Id=" & User & "; Password=" & password & ";"
Dim SDataSet = New DataSet
Dim SDataAdapter = New SqlClient.SqlDataAdapter
Dim SCommand As New SqlClient.SqlCommand
Dim CurrConnection = New SqlConnection(SQL_CONNECTION_STRING)
CurrConnection.Open()
Debug.Print(Now().ToString)
For i = 1 To 1000
SCommand.Connection = CurrConnection
SCommand.CommandText = "SELECT 'Hello World'"
Dim p As Object = SCommand.ExecuteScalar()
Next
CurrConnection.Close()
Debug.Print(Now().ToString)
/perove
我针对一个预处理的SQL Server实例运行了您的代码,它只运行了不到1秒。针对Azure SQL数据库(基本层(的相同代码在60秒内运行。此测试测量的是网络延迟,而不是数据库性能。
我希望在Azure中运行代码,特别是在与数据库相同的区域中,将提供与运行两个on-prem相当的性能。
我认为,如果您在本地运行应用程序并连接到Azure SQL数据库,默认情况下,它使用连接的代理方法,并且每次都必须协商连接。然而,如果你从Azure虚拟机连接,它会更快,因为默认情况下,它只需要协商一次连接(重定向方法(,而不必再次协商。我认为您可以更改此默认值,但它可能涉及打开端口或其他内容。如果可能的话,也许最好在虚拟机中运行。
这是在这段微软YouTube视频的结尾解释的(1小时53分钟(实时学习-Azure SQL部署和配置简介| Azure SQL训练营(第1节(
这是你的声明";必须有很多(5000+(小查询返回一个值(一次运行一个值("这让我意识到这可能是你的答案。
连接架构
SQL连接体系结构
请参阅Azure SQL Server的网络、连接。