4

Приложение MS Access со связанными таблицами с SQL Server 2005 работает медленно при использовании Windows Authentication от клиентов Windows XP.MS Access 2003 + связанные таблицы с SQL Server 2005 + Аутентификация Windows = медленно

Мы успешно его использовали с использованием проверки подлинности SQL Server, но теперь мы хотим перейти на проверку подлинности Windows для лучшего контроля безопасности.

Установка:

  • Сервер баз данных: Windows 2003 Server, SQL Server 2005 с пакетом обновления 2
  • Клиент: Windows XP SP3, ODBC для SQL Server драйвер v2000.85.1132.00
  • приложение
  • MS Access: MS Access 2003
  • строка соединения:
    DRIVER=SQL Server;SERVER=[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name]
  • только протокол TCP/IP сеть включена на сервере.

Медлительность делает не происходит в таких ситуациях:

  • App на сервер БД, SQL Authentication Server
  • App на сервер БД, проверка подлинности Windows
  • App на клиенте Windows XP, Аутентификация SQL Server
  • SQL Server Management Studio на клиенте, проверка подлинности Windows. Я провел небольшой тест с запуском 15 запросов в SQL MS. Это быстро и не вызывало никаких событий входа/выхода из системы в журнале событий безопасности на сервере.

Я проанализировал медлительность с помощью SQL Server Profiler и журнал событий на сервере, и он, кажется, сводится к следующему:

  1. Приложение выполняет запрос
  2. Новое соединение SQL Server открывается (видимо в профиле SQL Server)
  3. Идентификатор пользователя проверяется (отображается в журнале событий безопасности на сервере, происходит событие входа/выхода из системы). Это занимает несколько сотен миллисекунд.
  4. Запрос выполняется на SQL Server
  5. Результаты возвращаются для доступа

Это происходит для каждого запроса. Некоторые формы запускают + - 10 запросов при показе новой записи (обновление подформ, загрузка значений для комбо и т. Д.). Это приводит к очень низкой производительности.

Конечно, настройка нового подключения к SQL Server для каждого запроса не требуется, и повторное использование соединений может решить проблему. Я искал информацию о том, как убедиться, что Access/ODBC делает правильный пул соединений. Я нашел эти статьи MS KB:

Frequently Asked Questions About ODBC Connection Pooling
How to Enable Connection Pooling in an ODBC Application

Я пытался вызвать функцию SQLSetEnvAttr от главной формы приложения Access, но это не улучшило результаты.

Любая помощь очень ценится.

+0

Вы также можете проверить, что у вас нет проблем с DNS, когда клиент разрешает имя контроллера домена, который выполняет аутентификацию. Я обнаружил, что проблемы DNS могут быть причиной всех видов странных проблем с Access/ODBC/SQL Server, которые, похоже, не связаны. –

+0

Я думаю, что Фентон находится на правильном пути. Является ли приложение Front end запущенным в другом домене/лесу, чем экземпляр SQL Server? – JohnFx

+0

Можете ли вы разместить строку подключения? Уточните свои местные значения. :) –

ответ

0
+0

Я пробовал установить новейший собственный клиент SQL Server (https://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=536fd7d5-013f-49bc-9fc7-77dede4bb075). Это включает ту же версию драйвера SQL ODBC (2000.85.1132.00), что и у меня. Он включает в себя 2005.90.4035.00 собственного клиента SQL. Я попытался использовать это с помощью этой строки подключения: Driver={SQL Native Client};Server=[server name];Connect_Timeout=300;Trusted_Connection=Yes;APP=Microsoft Office 2003;DATABASE=[db name] Тот же результат, все еще медленный. – AronVanAmmers

3

Первый вопрос у меня есть: вы работаете контроллер домена? Это может звучать как сумасшедший вопрос, но я просто хочу убедиться. Хотя все реже и реже, я видел, как организации запускали сети Windows с рабочими группами и «сквозную» аутентификацию. Симптомы, которые вы описываете, такие же, как и в сети, настроенной таким образом.

Предполагая, что у вас есть надлежащий домен, у вас должна быть проблема где-то в сетевом стеке Named Pipes. Именованные каналы - это протокол по умолчанию, если вы используете проверку подлинности Windows. Это не плохая идея, чтобы добраться до нижней части этого, если у вас есть время, но если вы просто хотите, чтобы исправить проблемы с производительностью, то я вынудит/протокол TCP IP в вашей строке соединения:

DRIVER=SQL Server;SERVER=tcp:[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name] 

Обратите внимание на добавление префикса tcp:. Я получил этот синтаксис от Jon Galloway's blog. TCP/IP - это протокол по умолчанию для проверки подлинности SQL Server. Вы также можете сделать коммутатор протокола, отключив поддержку Named Pipes на сервере, но это скорее хлопот и может вызвать другие непредвиденные проблемы.

+0

Мы (или, вернее, наш клиент) управляем контроллером домена, да. Хотя ваше предложение звучит многообещающе, это не помогло. Именованные каналы оказались уже отключенными на сервере. Поэтому мы можем быть уверены, что TCP/IP используется в качестве сетевого протокола между клиентом и SQL-сервером. – AronVanAmmers

+0

Жаль, что это не помогло. Вы пытались включить именованные каналы на сервере? Возможно, клиент пытается подключиться к именованным каналам и не переходит к TCP/IP, при этом отказоустойчивость вызывает поражение. Разумеется, это не сработает, если сервер находится за пределами fierwall с заблокированными сетевыми портами MS. –

+0

Попробует включить именованные каналы и будет отчитываться.Объяснит ли это также, почему проверка подлинности SQL Server выполняется быстрее, чем проверка подлинности Windows, и почему машина SQL Server выполняет событие входа/выхода из системы практически для каждого запроса из Access? – AronVanAmmers

Смежные вопросы