我正在尝试找出我在设置只读副本时遇到的问题。我有一个简单的应用程序将查询只读副本,我可以通过运行@@ 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
}
我错过了什么?或者我的测试不正确?