Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Genrihmgs
1 / 1 / 0
Регистрация: 25.12.2014
Сообщений: 16
1

Зависает Access 2010 на простых запросах

29.07.2015, 05:12. Просмотров 2444. Ответов 26
Метки нет (Все метки)

Здравствуйте.
В общем начну из далека.

Кем-то, давно, была написана программа на Access. работала долго но стабильно
почти два года назад поменяли старый компьютер на новый (Intel I5 ОЗУ 4 Гб 1 Тб ЖД ).

Перенесли программу и на новую машину и она стала в разы быстрей работать (это не удивительно).
Проработала программа почти два года, без глюком и проблем, но буквально месяц назад стала зависать.
Висит мин 20-30 и выдает сообщение "недостаточно системных ресурсов".
Переустановил Windows 7, переустановил Access 2010. все тоже самое, зависает на простых запросах и потом выдает сообщение.

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

Привожу пример запросов:

SQL
1
2
UPDATE ft INNER JOIN t_b_c ON ft.fl_c = d_b_c.chet SET d_b_c.vid = '*'
 WHERE (ft.fl_state='1') AND (NOT ft.T_Uved IS NULL)
или
SQL
1
2
3
4
5
6
INSERT INTO tmp_p_pt ( vid, sum1, gorod) SELECT d_b_c.vid,
 Round(SUM([pre_a_f_c]![C_T]+[pre_a_f_c]![R_T]+[pre_a_f_c]![A_T]+[pre_a_f_c]![L_T]+[pre_a_f_c]![S_T]
+[pre_a_f_c]![C_G]+[pre_a_f_c]![R_G]+[pre_a_f_c]![A_G]+[pre_a_f_c]![L_G]+[pre_a_f_c]![S_G]
+[pre_a_f_c]![ON])/1000,2) AS ca, d_b_c.t
  FROM ft INNER JOIN (d_b_c INNER JOIN pre_a_f_c ON d_b_c.c = pre_a_f_c.C) ON ft.C = d_b_c.c
  GROUP BY d_b_c.vid, d_b_c.t;
В общем в программе очень много запросов как простые так и сложные. Все запросы реализованы на VBA.
Количество записей разное, максимум 500 тыс.

Вопрос: что может быть с компом или системой или с Access , почему Access 2010 на этой машине зависает при простых запросах. Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2015, 05:12
Ответы с готовыми решениями:

Арифметика в запросах Access
Задача следующая: из двух запросов Access в третий подтягиваются определенные...

Access: порядок записей в запросах
Добрый день! Можно ли установить в запросе в ручную свой фильтр на текстовые...

MS Access БД вычисления в запросах и отчетах
Здравствуйте. Для оптимизации своего рабочего времени решил написать базу...

Access дублирует данные в запросах и отчетах
Случилась такая проблема: access дублирует данные, да еще и с другими именами....

Перенос старых данных в БД MS Access 2010 из MS Excel 2010
Здравствуйте ! Создаю БД да работы сотрудников. Вроде с основными вопросами...

26
snipe
2873 / 982 / 222
Регистрация: 07.08.2013
Сообщений: 2,461
29.07.2015, 05:35 2
а темпы чистить не пробывали
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.07.2015, 07:41 3
Много пропущено важных моментов в описании.

1) Вы файл базы данных просто скопировали на компьютер с Access 2010, или сконвертировали его в accdb? Или даже не переносили, открываете по сети?

2) Опишите, как организована работа с вашей базой. Сколько пользователей всего, сколько одновременно, где находятся таблицы с данными (в том же файле, что и front-end, или в отдельном файле, расположен на том же компьютере, или в сети), как front-end связан с таблицами, открывает ли каждый front-end только один пользователь или несколько (ага, я и такое видела)

3) Пожалуйста, приведите более длинный кусок кода. Как формируется запрос вы показали, а каким методом вы запускаете его выполнение - нет.

4) Контрольная проверка базовых моментов: пожалуйста, подтвердите, что:
- во всех ваших таблицах есть первичные ключи;
- по всем полям, используемым в запросах в операторах Where и Oredr By, есть индексы
- установлены и не разрушены связи между таблицами (смотреть не только в "схеме данных", но и в таблице MSysRelationships - для каждой связи в этой таблице должна быть строка)

пишите ответы, потом продолжим.

Добавлено через 30 минут
Цитата Сообщение от texnik-san Посмотреть сообщение
4) Контрольная проверка базовых моментов: пожалуйста, подтвердите, что:
На всякий случай уточняю, что все это нужно проверять в файле с таблицами, а не front-end файле.
0
mobile
Эксперт MS Access
22935 / 13006 / 2694
Регистрация: 28.04.2012
Сообщений: 14,238
29.07.2015, 08:40 4
Цитата Сообщение от Genrihmgs Посмотреть сообщение
но буквально месяц назад стала зависать. Висит мин 20-30 и выдает сообщение "недостаточно системных ресурсов".
...
Переустановил Windows 7, переустановил Access 2010. все тоже самое, зависает на простых запросах и потом выдает сообщение
...
Переставил программу на другой старый компьютер, программа работает замечательно, не зависает.
...
Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
При таких вводных, имхо, грешить можно только на железо. Я бы в первую очередь проверил память.

Хотя конечно может быть установочная копия Access глючная. Но если исходник тот же, что пару лет назад, когда все работало, то остается только железо.
0
Genrihmgs
1 / 1 / 0
Регистрация: 25.12.2014
Сообщений: 16
29.07.2015, 08:44  [ТС] 5
1 Файл БД и все его прилегающие DBF файлы просто с копировал в формате accdb.
2 БД пользуется один человек который формирует кучу отчетов с DBF Файлов. DBF находятся на той же машине что и БД. только в разных папках. Результат формирования отчетов сохраняется в другой Access файл ежемесячно. Ежемесячно создается новый Access -кий файл. Длина имен DBF файлов не превышает 8 символов.
3
PureBasic
1
2
3
Dim curDB As DAO.Database
Set curDB = CurrentDb
curDB.Execute ("UPDATE d_b_c SET d_b_c.vid = 'no'")
4 Т.к. используется большое количества DBF файлов ключевых полей нет
индексные поля есть но не во всех таблицах
Связей между таблицами в "схеме данных" нет

все темпы после переустановки чистые

Добавлено через 2 минуты
Цитата Сообщение от mobile Посмотреть сообщение
При таких вводных, имхо, грешить можно только на железо.
Память тестировал программами RightMark Memory Analyzer и Mem test ошибок нет
0
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 09:07 6
А что происходит, если запускать на другом компьютере? Такой тест делали? Если нет, то с него нужно начинать. И еще полезно создать сохраненный запрос по SQL, выполнение которого приводит к зависанию, и посмотреть, как он себя поведет (UPDATE в режиме просмотра тех записей, которые он будет обновлять, интересен).
0
Genrihmgs
1 / 1 / 0
Регистрация: 25.12.2014
Сообщений: 16
29.07.2015, 09:14  [ТС] 7
Цитата Сообщение от ltv_1953 Посмотреть сообщение
А что происходит, если запускать на другом компьютере? Такой тест делали?
тест делал работает без проблем.
Зависает почти на всех запросах даже на самых простых, иногда, очень редко выполнит один на другом зависнет.
0
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 09:18 8
А второй пункт?
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.07.2015, 09:23 9
Цитата Сообщение от Genrihmgs Посмотреть сообщение
4 Т.к. используется большое количества DBF файлов ключевых полей нет
индексные поля есть но не во всех таблицах
Связей между таблицами в "схеме данных" нет
Ну и очень плохо. С этим нужно бороться. Сами же говорите, что "программа, медленно"

DBF файлы импортируются или присоединяются?
0
Genrihmgs
1 / 1 / 0
Регистрация: 25.12.2014
Сообщений: 16
29.07.2015, 09:28  [ТС] 10
Dbf присоединяются. и таблицы архивной БД тоже присоединены.
Да это плохо, что индексных полей нет, но это точно не причина зависания Access

Добавлено через 1 минуту
Цитата Сообщение от ltv_1953 Посмотреть сообщение
UPDATE в режиме просмотра тех записей, которые он будет обновлять,
тоже зависает
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.07.2015, 09:32 11
Цитата Сообщение от mobile Посмотреть сообщение
При таких вводных, имхо, грешить можно только на железо.
Неа. Если работа в принципе организована нехорошо, то время выполнения запроса и пожираемые ресурсы с ростом числа записей растут экспоненциально. Разные версии аксес по разному строят планы выполнения запроса. То, что одна версия "скушала", потому что выбрала один порядок выполнения, у другой может и в самом деле сожрать все ресурсы, потому что план выполнения другой.

Наличие ключей и индексков бы подсказало более оптимальный план, но ключей и индексов нет.

Я ставлю на то, что программа таки на самом деле выжирает ресурсы.

Добавлено через 2 минуты
Цитата Сообщение от Genrihmgs Посмотреть сообщение
Dbf присоединяются
А попробуйте несколько, используемых в одном запросе, импортировать. Создать ключи, индексы и связи. Затем сохранить запрос. Открыть в режиме конструктора, снова сохранить. И выполнить.

Если разницы не будет - я не права.
0
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 09:32 12
Цитата Сообщение от Genrihmgs Посмотреть сообщение
тоже зависает
Открывать начинает или нет? Какое сообщение об ошибке (оно может быть другим)? Если запустить обновление, выполнение запроса показывается (прогресс снизу ... ) или нет?

Не по теме:

Ну почему любую конкретику нужно клещами вытаскивать, это может и надоесть ...

1
mobile
Эксперт MS Access
22935 / 13006 / 2694
Регистрация: 28.04.2012
Сообщений: 14,238
29.07.2015, 09:50 13
Цитата Сообщение от texnik-san Посмотреть сообщение
Цитата Сообщение от mobile Посмотреть сообщение
При таких вводных, имхо, грешить можно только на железо.
Неа. Если работа в принципе организована нехорошо, то время выполнения запроса и пожираемые ресурсы с ростом числа записей растут экспоненциально.
Вы не обратили внимание на сообщение ТС:
Цитата Сообщение от Genrihmgs Посмотреть сообщение
Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
Как видите не только эта программа. И ничего не сказано о числе записей. Просто новая БД и сразу зависает. Если ТС говорит о БД не связанной с конфликтной, то ничего не остается кроме железа и/или глюка Access.

И насчет "экспоненциального роста". Откуда такие сведения? Можете показать вариант запроса, сложность которого e^N, где N количество записей. Я таких не видел. Максимальную сложность, что я видел, пропорциональна N^k, но никак не экспоненте.
1
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 09:58 14
Цитата Сообщение от mobile Посмотреть сообщение
пропорциональна N^k
Угу - декартово произведение. Остается еще вариант с железом - на винте места мало, но это-то ТС должен был в первую очередь посмотреть.
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.07.2015, 10:02 15
Цитата Сообщение от mobile Посмотреть сообщение
И насчет "экспоненциального роста". Откуда такие сведения? Можете показать вариант запроса, сложность которого e^N, где N количество записей. Я таких не видел. Максимальную сложность, что я видел, пропорциональна N^k, но никак не экспоненте.
Упс. Я не математическую экспоненту имела в виду, а использовала фигуру речи ))

Цитата Сообщение от mobile Посмотреть сообщение
Вы не обратили внимание на сообщение ТС:
Поскольку в сообщении ничего не сказано о том, какую "просто новую базу" он создает и как - это сообщение не говорит ни о чем вообще. Может он берет новый файл, но присоединяет к нему те же самые DBF с 500 тысяч записей без ключей и индексов.

Сам же пишет потом:
Цитата Сообщение от Genrihmgs Посмотреть сообщение
иногда, очень редко выполнит один на другом зависнет.
Добавлено через 1 минуту
Цитата Сообщение от mobile Посмотреть сообщение
Можете показать вариант запроса, сложность которого e^N, где N количество записей.
Надо будет попробовать на досуге. Какое-нибудь картезианское объединение с подзапросами с картезианским объединением ))

Добавлено через 1 минуту
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Остается еще вариант с железом - на винте места мало, но это-то ТС должен был в первую очередь посмотреть.
В моем понимании, место на диске как раз ресурс. "Железо" было бы, если бы речь шла о физических сбоях диска.
0
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 10:10 16
Цитата Сообщение от texnik-san Посмотреть сообщение
Надо будет попробовать на досуге.
Это вряд ли. Реляционные базы "наследники" теории множеств, а там операций, могущих приводить к таким результатам, что-то вспомнить не могу.
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.07.2015, 10:12 17
Ну как же. А множество всех подмножеств данного множества?
0
Genrihmgs
1 / 1 / 0
Регистрация: 25.12.2014
Сообщений: 16
29.07.2015, 10:15  [ТС] 18
Цитата Сообщение от mobile Посмотреть сообщение
Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
Создаю новую БД импортирую туда две таблицы из БД которая зависает. число записей около 500 тыс в одной таблице и в другой около 100 тыс делаю запрос на обновление

SQL
1
2
UPDATE ft INNER JOIN t_b_c ON ft.fl_c = d_b_c.c SET d_b_c.vid = '*'
 WHERE (ft.fl_state='1')
первые секунд 20-30 процессор загружается на 20-40 %, т.е. идет выполнение запроса, потом спускается до 0% и все Access весит. Оперативки жрет не больше 2 Г.б.
Тот же самый запрос с теми же таблицами на другой машине (Pentium D 2 Гб ОЗУ ) выполняется за 1-2 мин. без зависаний процессор стабильно загружен 20-40 %. Установочный Access 2010 на двух машинах одинаковый (лицензионный).
Добавление ключевых полей, индексов и прочей ерунды не помогает.
Грешить на количество записей не вижу смысла, да при 100 записях Access работает. сидеть проводить эксперименты на скольких записях он повиснет нет времени.
Покупать новый системник тоже не вижу смысла, т.к. все на нем работает очень быстро и довольно хорошо.

Добавлено через 14 секунд
Цитата Сообщение от mobile Посмотреть сообщение
Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
Создаю новую БД импортирую туда две таблицы из БД которая зависает. число записей около 500 тыс в одной таблице и в другой около 100 тыс делаю запрос на обновление

SQL
1
2
UPDATE ft INNER JOIN t_b_c ON ft.fl_c = d_b_c.c SET d_b_c.vid = '*'
 WHERE (ft.fl_state='1')
первые секунд 20-30 процессор загружается на 20-40 %, т.е. идет выполнение запроса, потом спускается до 0% и все Access весит. Оперативки жрет не больше 2 Г.б.
Тот же самый запрос с теми же таблицами на другой машине (Pentium D 2 Гб ОЗУ ) выполняется за 1-2 мин. без зависаний процессор стабильно загружен 20-40 %. Установочный Access 2010 на двух машинах одинаковый (лицензионный).
Добавление ключевых полей, индексов и прочей ерунды не помогает.
Грешить на количество записей не вижу смысла, да при 100 записях Access работает. сидеть проводить эксперименты на скольких записях он повиснет нет времени.
Покупать новый системник тоже не вижу смысла, т.к. все на нем работает очень быстро и довольно хорошо.
0
mobile
Эксперт MS Access
22935 / 13006 / 2694
Регистрация: 28.04.2012
Сообщений: 14,238
29.07.2015, 10:16 19
Цитата Сообщение от texnik-san Посмотреть сообщение
место на диске как раз ресурс.
Нехватку места на диске диагностирует винда в специальном сообщении. И это не касается Access. Только сама винда.

Ключи и индексы не влияют на "нехватку системных ресурсов". Даже прямое сканирование огромной таблицы винда позволяет делать только кластерами. В худшем случае может выйти сообщении о превышении максимально допустимого число блокировок набора записей MaxLocksPerFile. Но не нехватке ресурсов.

Наиболее часто ошибка неватки ресурсов возникает при работе с рекордсетами, когда обходя большую таблицу, на каждой записи создается новый рекордсет. Если не утилизировать рекордсеты, то может переполнится кэш и выйдет сообщение о нехватке ресурсов. Но компилятор запросов строит план иначе и следит за кэшем, так что ждать от него подлянки не стоит.
0
ltv_1953
Эксперт MS Access
12850 / 5828 / 1117
Регистрация: 21.06.2012
Сообщений: 10,495
29.07.2015, 10:29 20
Цитата Сообщение от texnik-san Посмотреть сообщение
А множество всех подмножеств данного множества?
Такой операции ТМ нет.
Есть, конечно, теорема Кантора: никакое множество X не равномощно множеству своих подмножеств. Но это же не операция.
1
29.07.2015, 10:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2015, 10:29

Формат даты в запросах MS Access к БД Informix через ODBC
Имеется БД Informix и ODBC-драйвер к ней. MS Access успешно подключается к БД,...

Экспорт данных из Access 2010 в Excel 2010
Добрый день, уважаемые форумчане. Пытаюсь допилить свою базу для работы в...

Какие типы данных можно использовать в SQL запросах в ACCESS
Доброго всем дня! Я пишу свою программу где использую БД ACCESS *.mdb То...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru