SQL Server始终打开和连接池

时间:2015-09-28 19:32:52

标签: sql-server database-connection alwayson

我正在尝试找出我在设置只读副本时遇到的问题。我有一个简单的应用程序将查询只读副本,我可以通过运行@@ servername来验证它是否正确。一切都按计划进行。我可以故障转移到同步服务器而没有任何问题,我的测试应用程序仍然可以从副本中读取。

我遇到的问题是,当我重新启动只读副本时,应用程序永远不会返回到只读副本。即使在只读副本重新联机后,它也会转到路由中设置的任何内容。来自不同服务器的新连接将命中只读副本。如果我尝试使用不同的方法连接到服务器上的AG,我正在运行测试,它将连接到只读副本。下面的powershell脚本将继续命中另一台服务器。

如果我停止应用程序,请等待大约10或15分钟,然后启动应用程序,然后我将点击只读副本。如果我将连接字符串设置为使用pooling = false。然后,一旦副本准备好接受连接,它就会按照它应该的方式运行。

这就是我用来测试只读副本方案的内容。

function Get-Readonly-Server
{
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server=AG_OLTP_Listnr.myenv.local;Database=AGTest;Integrated Security=True;applicationintent=readonly"
    $SqlConnection.Open()
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "select @@servername as colName into #tmp; select colName from #tmp; drop table #tmp"
    $SqlCmd.Connection = $SqlConnection
    $servername = $SqlCmd.ExecuteScalar()
    $SqlConnection.Close()
    $servername
}

for ($i=1; $i -le 1000000; $i++) 
    {
        Get-Readonly-Server
        write-host $i
        Start-Sleep -s 1
    }

我错过了什么?或者我的测试不正确?

0 个答案:

没有答案