之前在sql server configuration manager中的native client 11.0 configuration中設置client protocol的keep alive的時間的時候,發現並不起作用,我即使將keep alive的時間從默認的30000ms改成了25000ms,但是我用netmon測試的時候發現每一次客戶端的keepalive還是沒30秒發送一次。
當時以為我改了sql server configuration manager中的keepalive,但是沒有修改相應的注冊表,所以我去注冊表下查看相應的內容,keepalive所對應的注冊表鍵值如下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\tcp\Property2
發現Property2中的value已經是25000ms了。那么證明我前面的假設是錯誤的。
后來經過我SNI10.0上面的value是30000ms,因此懷疑是不是我在cmd中輸入的sqlcmd用的是native client10.0的程序。使用sqlcmd連接一個錯誤的數據源會提示錯誤信息, 確實用的是10.0的版本。之所以有10.0的版本是因為之前安裝visual stuido 2010的時候附帶安裝了sql server 2008 express,那個時候給我默認安裝了sql native client 10.0。現在要使用11.0的解決方法是修改環境變量中的path,將11.0的路徑放在10.0的前面就可以了。
還有就是native client有32位跟64位的區別,我這里直接在path中將32位的,跟10.0版本的全部刪除了。