Studio SQL Server Management memperlambat koneksi atau waktu habis saat menggunakan Otentikasi Windows

23

Saya mendapatkan keterlambatan yang sangat lama (10 ~ 30 detik) di SQL Server Management Studio 2014 ketika mencoba untuk terhubung ke contoh SQL Server 2012 melalui TCP menggunakan Windows Authentication . Ini terjadi ketika menghubungkan Object Explorer atau jendela permintaan kosong baru. Setelah tersambung, menjalankan kueri dengan cepat. Masalahnya tidak terjadi ketika saya terhubung menggunakan otentikasi SQL Server.

Lingkungan Hidup:

  • Windows 7, masuk sebagai pengguna domain
  • Koneksi TCP melalui alamat IP (bukan nama host)
  • Server berada di lokasi terpencil yang terhubung melalui VPN
  • Tanpa enkripsi

Ketika saya masuk ke komputer Windows 7 rekan kerja dengan akun domain saya, dan terhubung ke SQL Server yang sama melalui VPN yang sama, tidak ada penundaan. Ketika rekan kerja yang sama masuk ke PC saya dengan akun domain sendiri, ia mengalami keterlambatan. Tes ini menunjukkan bahwa masalahnya unik untuk PC saya. Juga, masalah hanya muncul ketika menghubungkan ke SQL Server dan VPN khusus ini; Saya dapat terhubung ke SQL Server lain di jaringan lokal melalui Windows Authentication tanpa penundaan.

Hal-hal yang saya coba tanpa hasil:

  • Anti-virus dan firewall dinonaktifkan
  • Mengganti nama folder "12.0" di bawah "% userprofile% \ AppData \ Roaming \ Microsoft \ SQL Server Management Studio" menjadi "_12.0" untuk memaksa SSMS menciptakan kembali pengaturan pengguna saya.
  • Paksa protokol Jaringan ke TCP daripada <default>. Saya juga mencoba Pipa Bernama tetapi server saya tidak siap untuk itu.
  • Menginstal SSMS 2012 dan mencobanya bukan 2014.
  • IPv6 dinonaktifkan
  • Blackholed crl.microsoft.com ke 127.0.0.1 di file etc \ hosts saya.
  • Menonaktifkan Program Peningkatan Pengalaman Pelanggan di SSMS, Visual Studio, dan Windows.
  • Copot semua aplikasi terkait SQL Server dari PC saya dan instal ulang hanya tahun 2012.

Petunjuk TCPView:

  • Menggunakan TCPView, saya perhatikan bahwa ketika saya membuat koneksi baru, kondisinya menjadi ESTABLISHED segera, tetapi kemudian satu atau dua koneksi dengan SQL Server terus dicoba dan ditutup dengan TIME_WAIT . Di komputer rekan kerja saya, koneksi ini ESTABLISHED dan solid. Jadi saya cukup yakin ini adalah sumber dari timeout, tetapi untuk apa koneksi, dan mengapa mereka gagal? (Saya tidak memiliki addons di SSMS saya.)

Ada ide?

Pembaruan: Petunjuk Intellisense / Autocomplete (?):

Saya perhatikan bahwa begitu saya akhirnya terhubung, Intellisense / Autocomplete tidak berfungsi. Apakah itu memerlukan koneksi terpisah dari SSMS? Saya mencoba menonaktifkannya, dan sepertinya tidak menyelesaikan penundaan koneksi yang lama.

Jordan Rieger
sumber
Sudahkah Anda mencoba menjalankan SSMS dengan saklar / log?
Tuan Magoo
@MisterMagoo mencobanya sekarang. Sebenarnya tidak mencatat apa pun tentang upaya koneksi (file tidak tumbuh ketika membuat koneksi baru). Sebagian besar hal tentang memuat paket-paket tertentu di UI, misalnya "Berhasil memuat perakitan komponen dari cache". Saya tidak dapat menemukan kesalahan atau pengecualian.
Jordan Rieger
Ok, saya tidak yakin apakah itu akan, tetapi saya pikir itu patut dicoba dengan cepat. Jika Anda benar-benar tertarik dengan apa yang sedang terjadi, Anda mungkin perlu keluar Sysinternals Process Monitor dan lihat apakah Anda dapat mengidentifikasi apa yang sedang terjadi. technet.microsoft.com/en-us/library/bb896645.aspx
Mister Magoo
Saya sudah meneliti tentang dump ProcMon selama sekitar satu jam, tetapi ada begitu banyak peristiwa (bahkan difilter ke Ssms.exe) sehingga saya tidak bisa menghasilkan banyak dari itu.
Jordan Rieger
@MisterMagoo Yang bisa saya lihat adalah upaya koneksi yang saya lihat dengan TcpView memang memakan waktu lama (masing-masing lebih dari 5 detik). Saya mendasarkan bahwa pada melihat acara "TCP Connect" pada port lokal tertentu, dan kemudian waktu berikutnya saya melihat sesuatu yang dikirim atau diterima pada port lokal itu selalu setelah setidaknya 5 detik.
Jordan Rieger

Jawaban:

19

Coba jalankan jejak dengan SQL Profiler saat Anda, dan kemudian rekan kerja Anda, terhubung ke server.
Pilih RPC, Pernyataan SQL & PreConnect - Mulai / Selesai.
Pilih opsi Simpan Hasil Ke Tabel, lalu bandingkan 2 tabel untuk menemukan bottleneck.

Atau, karena Anda terhubung dengan IP, itu bisa melakukan pencarian Reverse DNS. Jika demikian, tambahkan entri di file host Anda.

d -_- b
sumber
2
Saya menambahkan entri lokal / host lain untuk alamat IP server saya, lalu mencoba SSMS lagi. Bingo! Sangat cepat. Terima kasih! (Saya meninggalkan SSMS terhubung melalui alamat IP seperti sebelumnya, bukan nama host.) Saya hanya ingin tahu mengapa saya perlu solusi ini tetapi rekan kerja saya tidak. Tampaknya terkait DNS. Bagaimanapun, ini adalah solusi yang cukup bagus untuk saya, jadi saya akan memberi Anda hadiah setelah Anda memperbarui jawaban Anda.
Jordan Rieger
Saya pikir itu adalah pencarian terbalik karena ketika saya menghapus entri host, ping - a ###. ###. ###. ### sangat lambat sebelum ping pertama (dijeda 5 detik untuk pencarian balik.) Ketika ditambahkan kembali entri host, ping -a cepat. Tidak ada perbedaan dalam tracert atau nslookup. Saya pikir ada sesuatu yang berbeda pada PC saya yang menyebabkan saya melakukan reverse lookup ketika rekan kerja saya tidak (atau hanya lebih cepat pada mereka.) BTW, Intellisense saya berfungsi lagi sekarang karena kecepatan koneksi cepat.
Jordan Rieger
Bahkan entri DNS palsu untuk IP dalam file host membuat ini bekerja lebih cepat! Terima kasih!
felickz
Saya mendapatkan batas waktu mencoba menghubungkan SSMS di VPN hingga saya membaca jawaban Anda, ya masuk akal karena saya terhubung ke server melalui IP dan resolusi nama tidak berfungsi. Menambahkan entri dalam file host akhirnya membuatnya berfungsi setelah berjam-jam mencoba agar ini berfungsi. Terima kasih! Sebagai catatan kaki saya ingin mengatakan bahwa saya menggunakan otentikasi Windows dari domain yang berbeda dengan runas / netonly dan berfungsi baik dengan solusi ini.
RobbZ
5

Yang harus Anda periksa pertama adalah pengaturan DNS server atau klien Anda

Bukan jarang SQL Server Anda mengalami masalah saat menyambung ke Active Directory. Jika Anda mencoba dengan akun Windows lokal saya yakin Anda tidak akan memiliki masalah. Bukan hal aneh bahwa server dikonfigurasikan dengan DNS internet publik dan ketika SQL Server terhubung ke DC untuk memeriksa kredensial dan memverifikasinya, ia akan mencoba menghubungi DNS publik sebagai ganti DNS server AD. Karena informasi ini tidak disimpan pada DNS publik, maka akan gagal untuk memverifikasi dan ini akan menyebabkan penundaan sampai ia berhasil menghubungi server DNS atau DC yang tepat melalui NTLM

Karena Anda tidak mengalami masalah dengan SQL Server lain, maka hampir pasti masalahnya tidak terkait dengan konfigurasi AD atau DC

Jalankan perintah IPConfig.exe / all dari cmd untuk memeriksa server DNS yang dikonfigurasi. Anda seharusnya hanya mengonfigurasi server DNS AD. Hapus semua server DNS publik, dan tinggalkan hanya server DNS AD.

NikolaD
sumber
Apakah Anda menyarankan bahwa SQL Server sedang menghubungi DNS publik untuk mencari alamat IP Pengontrol Domain, dan itu menyebabkan penundaan ketika mencoba untuk memvalidasi Otentikasi Windows saya? Jika itu masalahnya, mengapa itu bisa berfungsi dengan baik dari PC rekan kerja saya di jaringan lokal yang sama, melalui VPN yang sama? Saya memeriksa pengaturan DNS di komputer saya, dan ada server DNS tambahan ketiga yang diminta oleh departemen IP saya untuk ditambahkan, yang tidak ada pada PC rekan kerja saya. Tetapi ketika saya menghapus server itu, melakukan ipconfig / flushdns, dan mencoba lagi, masih lambat.
Jordan Rieger
Menggunakan alamat IP atau FQDN server (bukan hanya nama host) membuat perbedaan besar bagi saya. Jelas merupakan masalah DNS yang lambat dalam kasus saya.
userSteve
0

Saya memperpanjang C:\Windows\System32\drivers\etc\hostsfile dengan menambahkan baris seperti ini:

201.202.203.204     mysqlserver

201.202.203.204 adalah alamat IP dari SQL Server Anda.

mysqlserver - nama apa pun yang Anda suka (Anda tidak harus menggunakannya di mana saja).

Ini membuat server saya lebih cepat.

Terima kasih kepada: d -_- b, Jordan, Rieger, felickz, RobbZ

Dennis Gorelik
sumber
0

Matikan Windows Firewall di server SQL Anda untuk profil jaringan Domain.

  • Mulai Powershell
  • Jalankan Get-NetFirewallProfile -Profile Domainuntuk memeriksa kondisi saat ini
  • Jika diaktifkan, jalankan: Set-NetFirewallProfile -Profile Domain -Enabled Falseuntuk mematikannya.

Jika ini masalahnya, Anda dapat mengaktifkannya kembali nanti dan menyesuaikan pengaturan Anda. Atau, jika Anda berada di lingkungan yang aman, Anda dapat mengabaikannya.

Yang aneh adalah bahwa bahkan jika Windows Firewall memblokir komunikasi, Anda masih akan dapat terhubung tetapi baik jabat tangan awal dan permintaan berikutnya akan sangat lambat. Teori saya (berdasarkan tidak ada bukti nyata) adalah bahwa dalam kasus ini komunikasi jatuh kembali di Named Pipes yang jauh lebih lambat antara PC jarak jauh.

Laszlo Mako
sumber