Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
Win 7- 64 office 32-2013
таблицы на сервере, формы на клиенте
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц
заполнение несколькими INSERTами их данными из таблиц на сервере
обработка данных несколькими UPDATEами
открытие на временной таблице рабочей формы
наблюдаю такой эффект:
первый раз процедура выполняется 4 сек
второй - 6 сек
четвертый - 25 сек
восьмой - больше минуты....
базу закрываю - открываю - снова первый - 4 сек и так далее....
с чем это может быть связано и можно ли это преодолеть?
accde пробовал - чуть лучше - но не существенно

Сообщение было отредактировано: 7 окт 21, 14:59
7 окт 21, 15:08    [22380727]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Serg197311
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц

Попробуй их (временные таблицы) вынести в отдельное хранилище...
Попробуй после очистки временных таблиц делать сжатие хранилища временных таблиц...
7 окт 21, 18:26    [22380868]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Eugene-LS
Member

Откуда: РФ
Сообщений: 63
Serg197311
accde пробовал - чуть лучше - но не существенно

Я создаю временную базу локально (на клиенте), проблем не замечал, примерно так (DAO):
+
Public Sub CreateTempDB_DAO(Optional TempFileName As String = "TempDB.accdb")
'es - 28.09.2012 - 29.01.2021 v004
'--------------------------------------------------------------------
'Создает временную базу данных (MSA-2000-2003) в тек. папке приложения ,
' копирует туда эталонные таблицы  и подключает эти таблицы
'ПАРАМЕТРЫ ВЕРСИИ БД:
'    dbVersion20  - MSA-2
'    dbVersion30  - MSA-97 (compatible with version 3.5).
'    dbVersion40  - MSA-2000-2003
'    dbVersion120 - MSA-2007-2010
'--------------------------------------------------------------------
Dim TempDBPath As String
Dim db As DAO.Database
Dim strDBaseLink As String
Dim l As Long
Dim sTableNameTempalete$, sTableNameLocal$

On Error GoTo CreateTempDB_DAO_Err
'Получаем путь к создаваемой базе
    TempDBPath = CurrentProject.Path & "\" & TempFileName
        
'Сначала удаляем старую (If present)
    If Dir(TempDBPath) <> "" Then
        'On Error Resume Next
        Kill TempDBPath
        DoEvents
        Err.Clear
    End If

'Создаем базу версии MSA-2007
    Set db = DBEngine.CreateDatabase(TempDBPath, dbLangCyrillic, dbVersion120)
    strDBaseLink = ";DATABASE=" & TempDBPath


' Создадим таблицу во временной базе путем копирования эталонной
'01 = 00tp_TabelFromExcel
    sTableNameTempalete = "00tp_TabelFromExcel"
        sTableNameLocal = Mid(sTableNameTempalete, 3)
        DoCmd.CopyObject TempDBPath, sTableNameLocal, acTable, sTableNameTempalete
    'Присоединим созданную таблицу к текущей базе
    l = AttachTableDAO(strDBaseLink, sTableNameLocal)


'--------------------------------------------------------------------------
'Готово!
    'Обновляем список таблиц тек. базы (не обязательно)
    Application.RefreshDatabaseWindow

CreateTempDB_DAO_Bye:
    On Error Resume Next
    db.Close
    Set db = Nothing
    Err.Clear
    Exit Sub

CreateTempDB_DAO_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure CreateTempDB_DAO", vbCritical, "Error!"
    Resume CreateTempDB_DAO_Bye
    
End Sub

Вспомогательная функция подключения ("линковки"):
Private Function AttachTableDAO(sConnectString As String, _
                sSrsTableName As String, _
                Optional sLocalTableName As String = "", _
                Optional bMakeTableHidden As Boolean = False) As Long
'----------------------------------------------------------------------------------------
' es 25.11.04 - 29.01.2021 v003
' Вспомогательная функция подключения конкрктной таблицы по аргументам::
'--------------------------------------------------------------------
'   sConnectString       = строка подключения вида: ";DATABASE=C:\DB.mdb"
'   sSrsTableName        = Исходное название таблицы в базе
'   bMakeTableHidden     = Сделать скрытой (по умолч. = нет)
'   sLocalTableName      = Новое имя таблицы (по умолч. = sSrsTableName)
'При ошибке возвращает ее код
'--------------------------------------------------------------------
Dim db As DAO.Database
Dim tdf As DAO.TableDef, sVal$
'--------------------------------------------------------------------
On Error GoTo AttachTableDAO_Err
    
'Имя создаваемой таблицы
    If sLocalTableName = "" Then sLocalTableName = sSrsTableName
    Set db = CurrentDb()
    
'Удаление старой (если есть)
    If DCount("*", "MSysObjects", "[Name]='" & sLocalTableName & "' AND Type=6") > 0 Then
        'Db.TableDefs.Delete sLocalTableName
        DoCmd.SetWarnings False
        DoCmd.DeleteObject acTable, sLocalTableName
        DoCmd.SetWarnings True
    End If

'Создание и подключение
    Set tdf = db.CreateTableDef(sLocalTableName)
    tdf.Connect = sConnectString
    tdf.SourceTableName = sSrsTableName
    db.TableDefs.Append tdf

'если указано что должна быть скрытая
    If bMakeTableHidden = True Then
        Application.SetHiddenAttribute acTable, tdf.Name, True
    End If

AttachTableDAO_End:
    On Error Resume Next
    Set tdf = Nothing
    db.Close
    Set db = Nothing
    Err.Clear
    Exit Function

AttachTableDAO_Err:
    AttachTableDAO = Err.Number
    sVal = "Error " & Err.Number & " (" & Err.Description & ") in Function" & _
           "AttachTableDAO - modConnection_DAO."
    'MsgBox sVal, vbCritical, "Произошла ошибка!"
    Debug.Print sVal
    'Debug.Print "AttachTableDAO_Line: " & Erl & "."
    Err.Clear
    Resume AttachTableDAO_End

7 окт 21, 23:47    [22381001]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
vmag
Serg197311
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц

Попробуй их (временные таблицы) вынести в отдельное хранилище...
Попробуй после очистки временных таблиц делать сжатие хранилища временных таблиц...

Пытаюсь делать и вот проблемы
1)
DBEngine.CompactDatabase CompactingDBPathAndName, strTempFile, dbLangCyrillic
выдает ошибку 3170 "попытка открыть базу данных, приведенную пользователем таким-то в состояние препятствующее открытию"
2) если перед этим отключить таблицы , то такое же сообщение +
на последней строке - невозможно найти какой-то( то ли устанавливаемый то ли подключаемый) ISAM
    Set tdf = db.CreateTableDef(sLocalTableName)
    tdf.Connect = sConnectString
    tdf.SourceTableName = sSrsTableName
    db.TableDefs.Append tdf
8 окт 21, 09:03    [22381043]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
Все ясно....пока на табличке открыта форма - она не удаляется и поэтому сжатие не происходит
8 окт 21, 09:54    [22381059]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
ну вроде через отдельную базу для временных таблиц и ее удаление - создание получилось убрать этот эффект...
Спасибо всем кто помогалш!
8 окт 21, 15:25    [22381253]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Serg197311, до 1-го рантайма. Думаю лучше создать шаблон, да копировать его.
8 окт 21, 15:35    [22381264]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
alecko
Serg197311, до 1-го рантайма. Думаю лучше создать шаблон, да копировать его.

я не понял.... можно поподробнее?
8 окт 21, 15:43    [22381270]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Serg197311, из рантайма новый экземпляр Аксесс создать не получится, хоть createDatabase, хоть другим способом
+
Public Sub CreateNewBase(newDb$)
Dim oAccess  As Object
    Set oAccess = CreateObject("Access.Application")    'Create a new Access instance
    With oAccess
        .NewCurrentDatabase (newDb)
       .CloseCurrentDatabase
    End With
 DoCmd.CopyObject newDb, "Module1", acModule, "Integros" ' put the modul in new database
Set oAccess = Nothing
End Sub

поэтому думаю, что проще создавать шаблон, даже просто пример .accdb, да копировать его хоть через фсо, хоть черз syscmd (с компиляцией).
+
Public Function MakeACCDESysCmd(strAccdbPath$, strACCDEOutputPath$) As Boolean
On Error GoTo handle1
Dim app As New Access.Application, boolCompile As Boolean
boolCompile = True
app.AutomationSecurity = msoAutomationSecurityLow
app.SysCmd 603, strAccdbPath, strACCDEOutputPath
exithere:
MakeACCDESysCmd = boolCompile
Set app = Nothing
Exit Function
handle1:
boolCompile = False
GoTo exithere
End Function

9 окт 21, 11:13    [22381546]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5361
alecko
из рантайма новый экземпляр Аксесс создать не получится, хоть createDatabase, хоть другим способом
для каких целей применительно к данному топику нужно создавать новый экземпляр Аксесс?
9 окт 21, 14:59    [22381615]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Панург, через CreateDatabase способ описан, показан альтернативный, учитывая что про рантайм только я заикнулся - тоже в тему.
9 окт 21, 15:23    [22381621]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
пересмотрел код Eugene-LS, смутило createdatabase, помню, была проблема, но тогда нужно было редактировать код в модуле, поэтому без создания экземпляра было не обойтись вот и осталось в памяти, что в рантайме ничего создать нельзя, ан нет. можно.
9 окт 21, 16:13    [22381633]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5361
alecko
помню, была проблема, но тогда нужно было редактировать код в модуле
9 окт 21, 16:23    [22381637]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Панург,

сейчас нужно делать скидки на ковид...

переболели уже все, причем многие по нескольку раз, причем многие даже не знают об этом...
и только память... память теперь самый конкретный индикатор при отсутствии возрастной деменции...
Вчера знакомого встретил, месяца два его не видел, обычно на день раза три на глаза попадался,
Гена говорю - как дела, куда пропал?
Ковид был, говорит, три недели то ивл, то реанимация чередовались...
Сейчас как говорю?
Да всё ничо, с памятью проблемы говорит, кто я, что я помню, где родился, как женился тоже помню...
Но вот утром не могу вспомнить какой фильм вчера вечером смотрел, с кем и о чем по телефону разговаривал...
9 окт 21, 20:58    [22381755]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Serg197311
с чем это может быть связано

скорее всего с большими объемами записываемого, удаляемого и изменяемого в одном сеансе (экземпляре)...
когда идет массовое удаление, акцесс чаще всего это делает молча, при этом пишет себе в душу (тэмпы) протоколы типа журналов, а сами записи физически не удаляет а помечает как удаленные (будущий мусор)
Иногда он не в состоянии это сделать (слишком много изменений) и тогда мы получаем запрос на подтверждение типа:
Эту операцию невозможно будет отменить, данные будут удалены безвозвратно, подтвердите... бла... бла...
Ну и естественно он помечая, ещё и что-то куда-то пишет в свой журнал и база тоже пухнет...
Если всё это происходит в одном сеансе, то идут накладки по времени, нужно отслюнявить журнал, продолжить его и т.д.
При закрытии приложения и открытии нового экземляра, всё что было до этого считается мусором, журнал начинается с нуля и первые массовые изменения опять идут быстро...
Сжатие БД или её подмена на пустую (в одном экземпляре) приводит к сбросу журналов изменений для данного экземпляра...
Это трудно объяснить, но можно понять на пальцах как это работает на любом из офисных пакетов:
Мы можем после правок в ворде, экселе или акцессе увидеть стрелки туда - сюда, это и есть откаты по журналу...
При перезапуске экземпляра стрелки становятся не активными до первых изменений в предыдущем документе...
Правда мне до сих пор не понятно, зачем в эти журналы писать массовые изменения записей в акцессе...
Всё, что выше сказано, прикинуто лично мною чисто эмпирическим путём очень давно и отнюдь не претендует на истину, но лично меня вполне устраивает...
Если у кого есть другие мысли по поводу выше описанного полтергейста - было бы интересно выслушать

К сообщению приложен файл. Размер - 25Kb
9 окт 21, 23:50    [22381790]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
vmag
Serg197311
с чем это может быть связано

скорее всего с большими объемами записываемого, удаляемого и изменяемого в одном сеансе (экземпляре)...

Там используется 2 временные таблицы
в первую из основной базы грузится до 300 записей. во вторую - 100 - 200 ...Может это и много....
11 окт 21, 06:56    [22382004]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Serg197311
Там используется 2 временные таблицы
в первую из основной базы грузится до 300 записей. во вторую - 100 - 200 ...Может это и много....

нет, это не много... это вообще ни о чем...
по идее должно было хватить одного переноса временных таблиц в отдельное хранилище без сжатий и танцев с бубном (на пол года - год как минимум)...
А так получается что все туды-сюды были на фоне общей БД
Ну и выше уже говорили, что если времянка у каждого своя, то лучше её хранить на клиенте (так быстрее)

Сообщение было отредактировано: 11 окт 21, 13:25
11 окт 21, 13:34    [22382222]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
Продолжу здесь.... О быстродействии
Добился я быстрого выполнения нужной процедуры, но... Как только в основной базе происходят изменения данных - вставка-удаление, изменения.... то выполнение снова замедляется в несколько раз....
С этим что-нибудь сделать можно? Или вперед на SQL-server?
Разнести по времени процессы изменения и считывания данных невозможно,это будет происходить в одно время...
13 окт 21, 15:18    [22383183]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5361
Serg197311, посмотри что у тебя происходит с памятью в результате твоих действий
13 окт 21, 16:39    [22383229]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Serg197311
Как только в основной базе происходят изменения данных - вставка-удаление, изменения...


- размер базы?
- размер базы после сжатия и восстановления ?
- количество таблиц?
- порядок количества записей (тыщи, 100 тыщ, больше) ?
- сразу началось или через год-два ?
- сколько таблиц в схеме данных (например 35 из 50 ти) ?
- комп норм или так себе ?
- hdd тестировал ?
- без касперского пробовал работать (влияет только на mdb и accdb) ?
14 окт 21, 01:33    [22383399]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
vmag
Serg197311
Как только в основной базе происходят изменения данных - вставка-удаление, изменения...


- размер базы? до 100 мб
- размер базы после сжатия и восстановления ? 65 Мб
- количество таблиц? 100
- порядок количества записей (тыщи, 100 тыщ, больше) ? 10 рабочих таблиц, макс 100000 записей, остальные маленькие справочные, в схеме - 70
- сразу началось или через год-два ? через год-два
- сколько таблиц в схеме данных (например 35 из 50 ти) ? все основные таблицы в схеме, связь ко ключевому полю
- комп норм или так себе ? Win 7-64, Office 13-32, 3,4 Ггц, 20 Гб оперативка
- hdd тестировал ? не, но у нескольких человек эффект одинаковый
- без касперского пробовал работать (влияет только на mdb и accdb) ? попробовал - одинаково

14 окт 21, 07:40    [22383432]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
Панург
Serg197311, посмотри что у тебя происходит с памятью в результате твоих действий

Два параллельно запущенных процесса - один вносит изменения в основную базу, другой выполняет нужную мне процедуру( что тут выше писал) - оба жрут примерно по 50 Мб оперативки , свободной памяти - вагон, загрузка процессора - процесс в основной базе - % 6-9, выполнение процедуры + 4-6%
Эффект наблюдается не только когда я выполняю эти процессы с одного компа - если с другого кто-то меняет данные в основной базе - у меня сразу тормоза. Ну и у всех остальных
Скорость выполнения процедуры падает с 3-х до 20-30 секунд

На моем компе это бы и не критично,но там где эта процедура должна выполнять получается 2-3 минуты.....

Наблюдение - после остановки процесса в основной базе скорость выполнения процедуры возрастает только если закрыть базу с процедурой и открыть ее заново( сжать-восстановить)

Сообщение было отредактировано: 14 окт 21, 07:42
14 окт 21, 07:49    [22383434]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Serg197311,

выходов несколько:
1. очистка 10-ти рабочих таблиц от отработанной информации:
- например удаляем всё, что не относится к 2021 году.
- можно удалить всё, что было, например до 1. сентября...
- жмем бД
(Перед этим делаем копию того что было с возможностью подключения для анализа истории).
2. Разделяем БД на части, разводим в стороны Медведей и Быков:
Например, 70 справочников это будет одно хранилище.
То, что относится к приходу, это будет второе хранилище
То, что относится к расходу, это будет третье хранилище
Очистка мусора и сжатие тоже актуальны, но делать это придется реже примерно в три раза...

3. переход на другое хранилище типа MS SQL (крайний случай), не желательный,
равносилен покупке мусорного ведра большего размера...
14 окт 21, 09:54    [22383475]     Ответить | Цитировать Сообщить модератору
 Re: накопительный эффект  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 1105
Спасибо....
Начну сейчас с первых 2-х пунктов
п3 то же несомненно наступит, но позже...
14 окт 21, 10:43    [22383505]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить