Что заставляет мою базу данных доступа быть настолько медленным? - PullRequest
1 голос
/ 15 сентября 2010

Просто чтобы уточнить, что это на самом деле не моя база данных, и я не выбрал доступ, я просто помогаю компании, разработав некоторые из уже реализованных баз данных доступа.

Во всяком случае, на некоторых из их форм формы открываются и текут очень медленно без видимой причины. Существует одна форма, которая требует много времени для открытия на всех компьютерах, но работает нормально, когда она там, и есть другая форма, которая отлично работает на компьютерах большинства людей и практически не работает на некоторых.

В формах есть несколько подчиненных форм, и в фоновом режиме не работает скрипт VBA, который может вызвать бесконечный цикл, и я зациклен на идеях

Я выключил автозамену, и один из них сказал: «Набор записей не может быть отредактирован» из-за некоторой группировки в одном из текстовых полей, но даже когда я работал, он все еще работал так же медленно

Ответы [ 3 ]

6 голосов
/ 16 сентября 2010

FAQ по производительности доступа Тони Тоевса - лучшее место для начала, на мой взгляд.

Тем не менее, описанные вами проблемы звучат так, как будто они подразделяются на два класса:

A. медленно открывающиеся формы.

B. медленные формы исполнения.

Есть две распространенные причины A:

  1. создание файла LDB / конфликт за него с существующими пользователями. Эта проблема обычно решается с помощью какой-либо формы решения из статьи о блокировке LDB Тони . Вы можете сказать, является ли это причиной проблемы, если открытие первой формы происходит медленно, а открытие последовательных форм не замедляется, если оставить исходную форму открытой. FWIW, я не использую этот метод, но использую постоянную переменную базы данных, которая выполняет то же самое (не самый последний раз, когда я разместил код на SO, но, возможно, тот, который имеет лучший контекст, здесь: Доступ MS: Существуют ли значительные издержки при использовании CurrentDB, в отличие от DBEngine (0) (0)? ).

  2. устаревшие метаданные в связанных таблицах. Это может произойти, если, например, вы работаете во внешнем интерфейсе на тестовом сервере, переместите его в производственную среду и обновите строки подключения, чтобы они указывали на производственный сервер. Обновление строки подключения не обновляет все метаданные, хранящиеся в определениях связанных таблиц, и фактически невозможно полностью обновить их. Таким образом, вы должны удалить и воссоздать связанные таблицы в производственной среде. Признак этого состоит в том, что в тестовой среде формы открываются немедленно или через секунду или две, а в производственной среде для открытия требуется минута или больше. После открытия они вообще работают просто отлично. FWIW, я действительно не видел эту проблему, кроме как в первые дни Access 2000, когда это была серьезная и ужасная проблема, которая почти стоила мне работы (мой первый проект A2000).

Медленно работающие формы сложнее исправить, но причина обычно довольно проста: формы загружают слишком много данных одновременно. Формы с большим количеством подчиненных форм (обычно на элементе управления вкладками) и большим количеством больших полей со списком являются обычным виновником. Решение состоит в том, чтобы не загружать подчиненные формы / поля со списком, пока они фактически не отображаются. В элементе управления вкладками это означает загрузку подчиненной формы для каждой вкладки в событии OnChange элемента управления вкладками. Для комбинированных окон их следует загружать, когда они отображаются, или если в них слишком много записей (я бы сказал, более 1000), не загружайте источник строк до тех пор, пока пользователь не введет 1 или 2 символа ( используя событие OnChange поля со списком).

Проблема в том, что вы торгуете одним крупным замедлением (загружая все эти вещи при первом открытии формы) для ряда гораздо меньших замедлений (загружая каждую подчиненную форму / источник строк по мере необходимости). Это компромисс, и вы должны решить, где вы хотите, чтобы ваша боль.

Есть много других вещей, которые нужно сделать, и одна вещь, которую нужно изучить на раннем этапе при устранении проблем с производительностью, - это источник записей каждой основной формы. Левые объединения могут стать очень дорогими с точки зрения производительности, и это хорошая идея, чтобы исключить любые из них, которые не являются абсолютно необходимыми. Я только недавно значительно ускорил форму, у которой было левое соединение с родительской таблицей из дочерней таблицы. Ребенок не мог существовать без parentID в поле PK в дочерней таблице, поэтому оставленное соединение было совершенно ненужным. Удаление действительно ускорило навигацию от записи к записи.

0 голосов
/ 15 сентября 2010
0 голосов
/ 15 сентября 2010

Определите источник записей из свойств формы (оператор table / query / sql) и запустите его непосредственно на соответствующих компьютерах.Это поможет сузить проблему до формы или источника данных.Например, вы можете обнаружить, что одна из форм ссылается на особенно медленный запрос (большие таблицы, множественные объединения, dlookups и т. Д.), И в этом случае вам необходимо сосредоточиться на оптимизации этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...