SQL Server Management Studio повільне підключення або час очікування під час використання автентифікації Windows


23

У мене вкрай великі затримки (10 ~ 30 секунд) в SQL Server Management Studio 2014 при спробі підключення до екземпляра SQL Server 2012 через TCP за допомогою автентифікації Windows . Це відбувається під час підключення Провідника об’єктів або нового порожнього вікна запиту. Після підключення виконання запитів швидко. Проблема не виникає, коли я підключаюсь за допомогою аутентифікації SQL Server.

Середовище:

  • Windows 7, увійшов як користувач домену
  • TCP-з'єднання через IP-адресу (не ім'я хоста)
  • Сервер знаходиться у віддаленому місці, підключеному через VPN
  • Немає шифрування

Коли я ввійшов у комп’ютер Windows 7 з моїм обліковим записом домену та підключився до того ж SQL Server через той же VPN, затримки не було. Коли той самий співробітник увійшов до мого ПК із власним обліковим записом домену, він зазнав затримки. Ці тести показують, що проблема є унікальною для мого ПК. Також проблема з’являється лише при підключенні до цього конкретного SQL Server та VPN; Я можу без будь-якої затримки підключитися до інших серверів SQL у локальній мережі через автентифікацію Windows.

Те, що я намагався успішно:

  • Вимкнено антивірус та брандмауер
  • Перейменовано папку "12.0" у розділі "% userprofile% \ AppData \ Roaming \ Microsoft \ SQL Server Management Studio" на "_12.0", щоб змусити SSMS відтворити мої налаштування користувача.
  • Примушуйте мережевий протокол до TCP, а не <default>. Я також спробував названі труби, але мій сервер не налаштований на це.
  • Встановив SSMS 2012 і спробував це замість 2014 року.
  • Інвалід IPv6
  • Blackholed crl.microsoft.com до 127.0.0.1 у моєму файлі etc \ hosts
  • Вимкнено програму вдосконалення клієнтського досвіду в SSMS, Visual Studio та Windows.
  • Видалено всі програми, пов’язані з SQL Server, з мого ПК та перевстановлено лише у 2012 році.

TCPView підказки:

  • Використовуючи TCPView, я помітив, що коли я встановлюю нове з'єднання, його стан відразу встановлюється ВСТАНОВЛЕНО, але потім одне або два більше з'єднання з SQL сервером постійно намагаються і закриваються TIME_WAIT . На комп’ютері мого колеги ці зв’язки встановлені та міцні. Тож я впевнений, що це джерело таймаутів, але для чого потрібні з'єднання, і чому вони виходять з ладу? (У мене в SSMS немає додаткових добавок.)

Якісь ідеї?

Оновлення: Intellisense / Autocomplete ключ (?):

Я помітив, що як тільки я нарешті підключуюся, Intellisense / Autocomplete не працює. Чи потрібні окремі з'єднання від SSMS? Я спробував їх відключити, але, здається, це не вирішило тривалу затримку з'єднання.


Ви спробували запустити SSMS за допомогою перемикача / log?
Містер Магуо

@MisterMagoo намагається це зараз. Він насправді нічого не записує про свої спроби з'єднання (файл не росте під час нового з'єднання). Це здебільшого інформація про завантаження певних пакетів в інтерфейс, наприклад, "Успішно завантажена складова компонента з кешу". Я не міг знайти жодних помилок чи винятків.
Йордан Рігер

Гаразд, я не був впевнений, чи буде так, але подумав, що варто спробувати швидше. Якщо ви дійсно зацікавлені в тому, що відбувається, вам може знадобитися вийти з монітора процесів Sysinternals і подивитися, чи зможете ви визначити, що відбувається. technet.microsoft.com/en-us/library/bb896645.aspx
Mister Magoo

Я переношу над сміттєзвалищами ProcMon близько години, але просто так багато подій (навіть відфільтрованих до Ssms.exe), що я не можу багато з цього зробити.
Йордан Рігер

@MisterMagoo Все, що я можу побачити, - це те, що я бачив спроби з'єднання, які я бачив із TcpView, справді займає тривалий час (понад 5 секунд кожна). Я базую це на тому, що я бачу подію "TCP Connect" на певному локальному порту, а потім наступного разу, коли я бачу що-небудь надіслане чи отримане на цьому локальному порту, завжди проходить не менше 5 секунд.
Джордан Рігер

Відповіді:


19

Спробуйте запустити слід із SQL Profiler, поки ви, а потім ваш колега, підключитесь до сервера.
Виберіть RPC, SQL Statement та PreConnect - Початок / Завершено.
Виберіть пункт Зберегти результати в таблиці, а потім порівняйте дві таблиці, щоб знайти вузьке місце.

Або, оскільки ви підключаєтесь по IP, це може робити зворотний пошук DNS. Якщо так, додайте запис у файл хостів.


2
Я додав локальний запис etc / hosts для IP-адреси мого сервера, потім знову спробував SSMS. Бінго! Супер швидкий. Дякую! (Я залишив SSMS, який з'єднувався через IP-адресу, як і раніше, а не ім'я хоста.) Мені просто цікаво, навіщо мені потрібно це рішення, але мої колеги цього не роблять. Здається, це пов'язано з DNS. У будь-якому випадку, це досить гарне рішення для мене, тому я нагороджую вас винагородою, як тільки ви оновите свою відповідь.
Йордан Рігер

Я думаю, що це був зворотний пошук, тому що коли я видалив запис хостів, ping - a ###. ###. ###. ### був дуже повільним до першого пінгу (призупинив 5 секунд для зворотного пошуку.) Коли знову додали запис хостів, ping -a був швидким. Не було різниці в трасерті або nslookup, хоча. Я думаю, що на моєму комп’ютері має бути щось інше, що змушує мене робити зворотний пошук, коли мої колеги не є (або це просто набагато швидше на їхньому рівні). BTW, мій Intellisense знову працює зараз, коли швидкість з'єднання швидка.
Йордан Рігер

Навіть підроблений запис DNS для IP у файлі хостів робить цю роботу набагато швидшою! Дякую!
felickz

Я отримував тайм-аути, намагаючись підключити SSMS через VPN, поки я не прочитав вашу відповідь, так це має сенс, оскільки я підключався до сервера через IP-адресу, і роздільна здатність імені не працювала. Додавання запису до хост-файлу нарешті змусило його працювати через багато годин, намагаючись налагодити це. Спасибі! Хочу сказати, що я використовую автентифікацію Windows з різних доменів з runas / netonly, і це добре працює з цим рішенням.
RobbZ

5

Слід спочатку перевірити налаштування DNS вашого сервера чи клієнта

Не рідкість у вашого SQL-сервера проблеми з підключенням до Active Directory. Якщо ви спробуєте скористатися локальним обліковим записом Windows, я впевнений, що у вас не виникне проблем. Незвичайно, що сервер налаштований на загальнодоступний DNS в Інтернеті, і коли SQL Server підключиться до DC, щоб перевірити облікові дані та перевірити їх, він спробує звернутися до загальнодоступного DNS замість DNS-сервера AD. Оскільки ця інформація не зберігається на загальнодоступному DNS, її не вдасться перевірити, і це спричинить затримку, поки їй не вдасться зв’язатися з належним сервером DNS або постійним струмом через NTLM

Оскільки у вас не виникає проблем з іншими серверами SQL, майже напевно проблема не пов’язана з конфігураціями AD або DC

Запустіть команду IPConfig.exe / all з cmd, щоб перевірити налаштовані сервери DNS. У вас повинен бути налаштований лише DNS-сервери AD. Видаліть усі загальнодоступні сервери DNS та залиште лише DNS-сервери AD.


Ви припускаєте, що SQL Server звертається до загальнодоступного DNS для пошуку IP-адреси контролера домену, і це викликає затримку при спробі перевірити мою автентифікацію Windows? Якщо це так, то чому б це добре працювало з ПК мого колеги в тій же локальній мережі, в одній VPN? Я перевірив налаштування DNS на своєму комп’ютері, і з'явився додатковий третій сервер DNS, який мій відділ IP-послуг попросив мене додати, якого немає на ПК мого колеги. Але коли я видалив цей сервер, зробив ipconfig / flushdns і спробував ще раз, він все ще повільно.
Йордан Рігер

Використання IP-адреси або FQDN сервера (не лише імені хоста) створило для мене величезну різницю. У моєму випадку, безумовно, була повільна проблема DNS.
користувачSteve

0

Я розширив C:\Windows\System32\drivers\etc\hostsфайл, додавши такий рядок:

201.202.203.204     mysqlserver

201.202.203.204 - IP-адреса вашого SQL-сервера.

mysqlserver - будь-яке ім’я, яке вам подобається (не потрібно його використовувати ніде).

Це зробило мій сервер швидшим.

Дякуємо: d -_- b, Jordan, Rieger, felickz, RobbZ


0

Вимкніть брандмауер Windows на своєму SQL-сервері для профілю мережі Домен.

  • Почніть Powershell
  • Запустіть, Get-NetFirewallProfile -Profile Domainщоб перевірити його поточний стан
  • Якщо це ввімкнено, запустіть: Set-NetFirewallProfile -Profile Domain -Enabled Falseщоб вимкнути його.

Якщо це було все, ви можете ввімкнути його пізніше і точно налаштувати налаштування. Або якщо ви перебуваєте в безпечному середовищі, можете залишити його.

Дивна річ у тому, що навіть якщо брандмауер Windows блокує зв’язок, ви все одно зможете підключитися, але і початкове рукостискання, і наступні запити будуть надзвичайно повільними. Моя теорія (заснована на відсутніх реальних доказів) полягає в тому, що в цих випадках зв’язок відновлюється на Named Pipes, що набагато повільніше між віддаленими ПК.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.