Сжатие и архивирование баз данных - MS Access Backend - PullRequest
3 голосов
/ 15 октября 2010

Сценарий : Существует устаревшая программа (не знаю, на каком языке), и меня попросили «Сжать и архивировать формы в базе данных».В тот момент, когда пользователь открывает приложение, для загрузки около 27000 записей требуется около 2-5 минут !!!Моя теория состоит в том, что он загружает все записи при запуске, но это может быть не единственной причиной.После некоторого поиска и нахождения бэкенда доступа, который выглядит правильно, я также нашел те же файлы доступа на 15+ других общих ресурсах компании.Теперь это приложение было создано где-то в 1997 году, когда я предположил, что Access был нормой, но действительно ли они собирали данные из 15+ баз данных Access?То, что кажется нормой для ускорения этой программы, - это архивирование старых записей в другой базе данных доступа (вот почему я думаю, что она загружает все при запуске.

Вопрос : У меня встреча в понедельник, чтобы обсудить программу, и мне было интересно, если кто-нибудь может предложить некоторые полезные вопросы, теории, решения и т. Д. Не то, чтобы я не мог сделать это самостоятельно, я просто думаю, что другая точка зрения не можетЕще один забавный факт заключается в том, что я могу или не могу получить исходный код, потому что он, возможно, был создан подрядчиком, а код утерян давно.

Примечание на стороне : Возможно ли получить доступ к автоматическому архивированию старых записей? Это означало бы перенос их в другую базу данных с именем XXXArch.

Заранее спасибо. Я постараюсь ответить на любые ваши вопросы.

РЕДАКТИРОВАТЬ :

Вот обновление ситуации.

Похоже, что он использует только одну базу данных в качестве основной и одну для архивации. Я до сих порМне еще не нужно иметь собственную учетную запись пользователя, чтобы открыть приложение, но при просмотре базы данных появляется таблица пользователей с идентификатором входа и тем же паролем (ПАРОЛЬ), поэтому я попытался войти в систему как один из этих пользователей и просто выбрал некоторые данные, но немодифицируя что угодно.При выборе я был в состоянии получить данные почти мгновенно и не видел никакого замедления, которое получали другие пользователи.Я до сих пор не видел исходный код, но из того, что я могу сказать (взяв exe и поместив его в блокнот), похоже, что он был закодирован в VBA и, вероятно, создан с использованием MS Access.Также кажется, что приложение создает temp.mdb в папке данных.В настоящее время в нем ничего нет.Нет таблиц, ничего.Я предполагаю / надеюсь, что это замедляет работу пользователей и может быть просто удалено для повышения производительности.Я опубликую еще одно обновление, как только получу исходный код и пойму, что замедляет его.

Ответы [ 3 ]

5 голосов
/ 15 октября 2010

Несколько вещей, которые следует учитывать:

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

Кто-то собирается предложить перейти на «Большой»БД вроде SQL-сервера, либо в вашей компании, либо на этом форуме.Не делайте этого до тех пор, пока вы не изолируете проблему или не найдете причину, отличную от производительности.Есть вероятность, что проблемы вызваны плохим дизайном приложения или архитектурой БД.Бросок более мощного инструмента в проблему без изменения подхода вряд ли поможет.

БД Access будет работать с максимальным количеством одновременных пользователей задолго до того, как будет работать с максимальными данными.Многие пользователи (30+) только начали использовать систему?Это может быть частью проблемы.

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

Доступ к 15+ базам данных: вы уверены, что интерфейсный интерфейс не написан в Access.Это обычная архитектура с доступом для загрузки внешнего интерфейса MDB на компьютер конечного пользователя (скопированного везде), подключенного к центральному файлу данных MDB в сети.Лучший способ определить это - открыть базы данных и посмотреть, содержат ли они только таблицы или таблицы + формы / отчеты.

4 голосов
/ 15 октября 2010

Мне кажется, ваш первый заказ должен решить эту проблему:

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

В нынешнем виде вы просите нас порассуждать о причинах и способах устранения медлительности ... без каких-либо знаний о том, что на самом деле происходит.

3 голосов
/ 16 октября 2010

Если у вас нет исходного кода, вы не можете изменить внутреннюю базу данных на SQL Server или что-либо еще.

Однако, если вы действительно имеете доступ к файлам данных и можете их редактировать, почему бы не проверить индексацию? 27K записей - это тривиально для любой базы данных, включая Access, и медлительность загрузки данных позволяет предположить, что таблицы просто не проиндексированы должным образом. Если вы изучите таблицы и не увидите индексов в очевидных полях, попробуйте добавить их и посмотреть, не ускоряет ли это процесс.

Если этого не произойдет, то это означает, что приложение плохо спроектировано, а поскольку у вас нет исходного кода, с этим ничего не поделаешь.

Все вышеизложенное предполагает, конечно, что сетевая среда подходит для Access / Jet / ACE. То есть, если доступ к этим файлам базы данных осуществляется через что-либо, кроме проводной локальной сети, то с этим ничего не поделаешь (WAN и WiFi полностью недоступны для Jet / ACE).

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

...