2017-01-06 2 views
0

У меня есть приложение Access 2010. Доступ - это только Frontend. Бэкэнд - это SQL-сервер 2008. Связь между ними - ODBC. Драйвер ODBC - это «SQL Server» (версия 6.01.7601.17514).ODBC-Performance Access 2010 и SQL Server 2008 R2

I Access - это стол с более чем 500 000 строк. Каждая строка имеет 58 столбцов. Таким образом, производительность очень, очень медленно, в большинстве случаев. Поиск одного столбца невозможен, доступ замораживается.

Я знаю, что это не новая проблема ...

Теперь мои вопросы:

ли водитель нормально? Потому что, когда я создаю локальное ODBC-соединение (Windows 8), я могу выбрать также драйвер «SQL Server». Но вот версия 6.03.9600.17415.

Есть ли разница между скоростью? У меня такое чувство, что, когда я использую локальную локальную сеть под Win8 с более новым драйвером, она быстрее, чем Terminal Server и более старый драйвер.

Локальный под Win8 Я также могу выбрать драйвер «Собственный клиент SQL Server 10.0» (версия 2009.100.1600.01). В чем разница между этими «Win8-ODBC-драйверами»? Какой драйвер вы бы использовали и почему?

Что такое новый SQL Server? Например, 2014 год против 2008 года. Является ли 2014 быстрее, чем в 2008 году с ODBC?

Что такое серверное оборудование? Когда я использую SSD вместо HDD? Сделайте SSD ODBC-соединение быстрее?

Все пользователи работают на терминальных серверах. Главная с Office 2010, но также с proAlpha (ERP-System). А также с доступом. Теперь один пользователь сказал мне, что иногда, если не много пользователей в TS, доступ намного быстрее. Что вы имеете в виду? Когда вы берете один TS и работаете над ним, только с Access, а не с другим приложением. Является ли тогда ODBC быстрее?

Что я могу попробовать еще?

спасибо.

+0

Есть много вещей, которые вы можете попробовать/сделать но, в конечном счете, единственное, что даст вам значительное повышение производительности, - это перемещение большей части обработки с передней стороны и на задний план с использованием представлений, хранимых процедур и их функции. Существует целый мир различий в производительности при создании отчета о доступе или заполнении формы путем связывания с исходными таблицами и получения доступа ко всем вашим объединениям, группам и группам и выполнению всего этого в представлении SQL Server и привязке непосредственно к этому. Я взял процесс, который занял 3 минуты, и сделал это за 15 секунд. – SunKnight0

ответ

0

Я заметил некоторые улучшения производительности с SQL Server Native Client 10.0, также используя Sql Server 2008 с Access 2010, над оригинальным собственным клиентом.

Я бы спросил, зачем вам искать/загружать все 500 000 строк таблицы. Предполагая, что это в форме, это похоже на плохой дизайн формы. Все ваши формы должны загружать только записи, которые вас интересуют, а не все записи по умолчанию. На самом деле считается разумной практикой не загружать записи о загрузке формы, пока вы не узнаете, что ищет пользователь.

58 Столбцы также звучат немного чрезмерно - есть ли в этих столбцах поля memo (varchar (Max))? Вероятно, их следует переместить в отдельную таблицу. проверьте структуру данных и проверьте, правильно ли вы их нормализировали.

Правильно ли указаны ваши поля? Если вы ищете их, индекс значительно улучшит производительность.

Создание представлений на сервере sql, которые возвращают только подходящее подмножество записей, которые затем могут быть связаны как таблицы внутри Access, также могут иметь преимущества производительности.

0

Таблица с 500 000 строк небольшая - даже для доступа. Любой поиск, который вы делаете, должен давать результаты WELL UNDER 1 SECOND!

Лучший способ решения этой проблемы является просить 90 лет старушке на автобусной остановке следующий вопрос:

При использовании моментальную банкомат имеет смысл скачать каждую учетную запись, а затем попросить пользователя для номера счета? Даже 90-летние дамы на автобусных остановках скажут вам, что было бы лучше узнать номер счета, а затем загрузить 1 запись!

И когда вы используете Google, вы не загружаете ПОЛНЫЙ интернет, а THEN спрашиваете у пользователя, что искать. Или вы создаете одну огромную массивную веб-страницу, которую вы затем скажете, используя ctrl-f для поиска этой огромной страницы браузера.

Так что подумайте о том, как работает все программное обеспечение. Это программное обеспечение не загружает и не готовит все локальные данные, а THEN спрашивает вас, что вы хотите искать. Вы делаете обратное!

Таким образом, простое решение заключается в том, чтобы спросить пользователя перед тем, как вы начнете извлекать данные с сервера. Построить такую ​​форму, которая выглядит следующим образом:

enter image description here

Затем, в соответствии с поиском (скажем на LastName), вы используете этот код в после обновления текстового поля.

Dim strSQL  As String 

strSQL = "select * from tblCustomers where LastName like '" & Me.txtLastName & "*'" 

Me.RecordSource = strSQL 

Таким образом, форма ТОЛЬКО тянет данные вам требуется - это подход, даже с 10 миллионами строк будет работать МИГ на вашем компьютере. В приведенном выше примере используется «*», поэтому нужно вводить только первые несколько символов LastName. Результат - это форма «выбора». Затем вы можете перескакивать или редактировать одну запись, нажав на кнопку «очки» выше. Это просто запускает + открывает одну детальную форму. Кодекс является:

docmd.OpenForm "frmCustomer",,,"id = " & me!id 

Давайте обратимся еще несколько ваших вопросов:

Есть ли разница между скоростью? (Драйверы ODBC)

Нет, разница в производительности водителя невелика - все они работают примерно одинаково, и пользователи, вероятно, никогда не заметят разницу в производительности при использовании разных драйверов.

Например, 2014 год против 2008 года. Является ли 2014 быстрее, чем в 2008 году с ODBC?

Не обычно. Я имею в виду думать о любом опыте, который у вас есть с компьютерами (если только вы не знакомы с компьютерами?). Каждый раз, когда вы переходите на новое Word или новую учетную программу, эта программа больше, занимает больше времени для загрузки, использует больше памяти, использует больше дискового пространства и почти всегда использует больше обработки. Так что, учитывая последние 30 лет работы настольных компьютеров, почти в каждом случае, следующая более новая версия программного обеспечения требует больше бара, большего количества дисков, большей обработки и, следовательно, работает медленнее, чем предыдущая версия этого программного обеспечения (я хочу быть тем, что ВАШИ знания и опыт - так более новые версии, как правило, не работать быстрее. - есть несколько «редкое» исключения в компьютерной истории, но более поздние версии любого программного обеспечения, как правило, требуют больше ресурсов компьютера и не менее

Теперь один пользователь сказал меня, что иногда, если не много пользователей в TS, доступ намного быстрее. Что вы имеете в виду?

Вышеприведенное не имеет ничего общего с драйверами ODBC. В приведенном выше контексте, когда вы используете Terminal Server, приложение базы данных и внешний интерфейс (Access) работают на одном компьютере/сервере. Это означает, что передача данных с сервера на приложение быстро выполняется BLISTERING и происходит не на скорости сети, а на скорости компьютера (поскольку и база данных, и приложение работают на сервере SAME). Вы можете установить Access на каждом компьютере, а затем получить доступ к данным за пределами сети с сервера на клиентскую рабочую станцию ​​- это происходит медленно, так как есть сеть. С помощью TS тогда приложение и сервер выполняются очень быстро без межсетевого взаимодействия. Массивная обработка и скорость приложения и сервера могут работать вместе - как только данные будут вытащены, так и отображен экран, тогда ТОЛЬКО экранные данные поступают по сетевому проводу. Таким образом, результатом является FAR FASTER, чем запуск Access на каждой рабочей станции.

, что иногда, если не многие пользователи ТС «,

Правильные, так как приложение пользователи работает на сервере, то сеть не существует между приложением и сервером SQL. Однако, поскольку каждый пользователь имеет свое приложение, работающее на сервере (в отличие от каждого компьютера рабочей станции), на сервере требуется больше нагрузки и ресурсов. Если многие пользователи используют сервер, то сервер теперь имеет большую рабочую нагрузку, поскольку сервер должен запускать оба SQL-сервера, а также выделять память и обработку для каждой копии Access, выполняемой на этом сервере.

Традиционная настройка означает, что Access работает на каждом компьютере. Таким образом, память и процессор для запуска Access происходит на каждой рабочей станции - сервер не должен предоставлять Access с процессором и памятью, сервер ТОЛЬКО запускает SQL-сервер и запросы объектов для данных с каждой рабочей станции. Однако, поскольку сети FAR медленнее, чем обработка данных на одном компьютере, то ваша шея бутылки не обрабатывается, но ОЧЕНЬ ограниченная скорость сети. Поскольку на сервере происходят как Access, так и SQL, и вся обработка происходит, гораздо легче перегрузить ресурсы и емкость этого сервера. Однако скорость сети обычно является самой медленной ссылкой в ​​настройках компьютера. Поскольку вся обработка и хруст данных происходит на стороне сервера, только экраны RESULTING и дисплей отправляются по сетевому проводу. Если компьютерное программное обеспечение должно обработать 1 миллион строк данных, а затем отобразить ОДИН общий результат, то только 1 общий результат будет сбрасываться по сетевому проводу, который отображается. Если вы запускаете Access local на каждой рабочей станции и обрабатываете 1 миллион строк, тогда 1 миллион строк данных должны опускаться по его сетевому каналу (однако вы можете изменить свой проект Access, чтобы сервер SQL сначала обработал данные до того, как он сходит с сети чтобы избежать этой проблемы. Однако с TS, поскольку Access не запущен на вашем компьютере, вы не беспокоитесь о сетевом трафике, но вы НЕ ДОЛЖНЫ ОСТОРОЖНО беспокоиться о том, сколько данных Access захватывает с SQL-сервера - таким образом, приведенные выше советы о ТОЛЬКО загрузке данные, которые вам нужны, в форму. Поэтому не загружайте огромные наборы данных в форму Access, а просто спрашивайте пользователя перед тем, как вы начнете извлекать эти данные с SQL-сервера.

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