Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
Sql server SQL Server始终打开和连接池_Sql Server_Database Connection_Alwayson - Fatal编程技术网

Sql server SQL Server始终打开和连接池

Sql server SQL Server始终打开和连接池,sql-server,database-connection,alwayson,Sql Server,Database Connection,Alwayson,我正试图找出在设置只读复制副本时遇到的一个问题。我有一个简单的应用程序可以查询只读副本,我可以通过运行@servername来验证它是否命中了正确的副本。一切都按计划进行。我可以无任何问题地故障切换到同步服务器,并且我的测试应用程序仍然从副本读取数据 我遇到的问题是,当我重新启动只读复制副本时,应用程序永远不会返回只读复制副本。即使在只读副本重新联机后,它也会转到路由中设置的任何位置。来自不同服务器的新连接将命中只读副本。如果我在运行测试的服务器上尝试不同的方法连接到AG,它将连接到只读副本。下

我正试图找出在设置只读复制副本时遇到的一个问题。我有一个简单的应用程序可以查询只读副本,我可以通过运行@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
    }

我错过了什么?还是我的测试不正确?

为什么要将测试插入到#tmp中?不确定这是否会超过只读副本行为,因为这是一个写操作。您是否尝试过在输出中选择@SERVERNAME?我尝试了两种方法。我将#tmp放在那里,以便检查具有临时表的查询是否符合应用程序的目的。是的。这里的问题是,如果我关闭只读复制副本,它将停止从复制副本读取数据(这是您所期望的),但当它恢复时,应用程序将不再开始从只读复制副本读取数据。我还要补充一点,如果我在同步数据库上导致故障转移,到只读复制副本的连接再次开始工作。但这样做有点违背目的。你为什么要插入tmp作为你的测试?不确定这是否会超过只读副本行为,因为这是一个写操作。您是否尝试过在输出中选择@SERVERNAME?我尝试了两种方法。我将#tmp放在那里,以便检查具有临时表的查询是否符合应用程序的目的。是的。这里的问题是,如果我关闭只读复制副本,它将停止从复制副本读取数据(这是您所期望的),但当它恢复时,应用程序将不再开始从只读复制副本读取数据。我还要补充一点,如果我在同步数据库上导致故障转移,到只读复制副本的连接再次开始工作。但这有点违背了目的。