Sql-Server
應用程序是否必須在可用性組偵聽器的連接字元串中指定 TCP:?
在我讀過的有關通過可用性組偵聽器訪問數據庫的應用程序的文章中,他們似乎都希望在其連接字元串中的偵聽器名稱之前使用 TCP: 前綴來強制 TCP 連接。
我的問題是:這真的有必要嗎?我已經測試了一些不使用此前綴的應用程序,它們都成功地建立了與 AG 組中主伺服器的 TCP 連接。我還測試了到其中一個同步輔助節點的故障轉移,這似乎也很順利。
不,這是沒有必要的。為了完整起見,這些文章可能會包含它,但根本不需要它。
TCP: 前綴不是 AG 偵聽器獨有的 - 您可以通過添加 TCP: 前綴直接連接到獨立 SQL 實例,但它不會更改連接的建立方式,除非您在本地連接。
如果您在本地連接到實例,它將預設使用共享記憶體進行連接。如果您改為使用 TCP 為連接添加前綴:它將強制連接使用 TCP 作為協議。您可以使用以下腳本對此進行測試驗證。
select c.net_transport, s.host_name, s.program_name from sys.dm_exec_connections c join sys.dm_exec_sessions s on c.session_id = s.session_id where s.host_name = host_name()
打開沒有前綴的本地實例的連接,您只會看到共享記憶體連接。然後嘗試使用前綴,您會看到它切換到 TCP。
但是,與 AG 偵聽器的連接(即使您從主副本連接)將始終使用 TCP,無論是否使用前綴。