powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как ускорить добавление в таблицу?
17 сообщений из 17, страница 1 из 1
Как ускорить добавление в таблицу?
    #32241223
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите pls как собственно %subj%
Я добавляю записи из одной БД в другую.
Объем записей порядка 2-3Mb
Обе БД лежат на серваке, оболочка на клиенте (таблицы прилинкованы).
Ас97.
Добавление происходит в цикле while по rs.AddNew ... rs.Update
Странность в том, что первые ~60% добавляются гораздо дольше, чем
последние ~40% (в 7-8 раз).
Нагрузка на сервак более менее одинаковая.
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241236
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) а запросами никак нельзя обойтись?
2) попробуй раздробить на порции


а сколько времени у тебя выполняется сейчас это?
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241287
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>1) а запросами никак нельзя обойтись?
пока нет :)

>2) попробуй раздробить на порции
это одна транзакция

>а сколько времени у тебя выполняется сейчас это?
сервер дохленький, поэтому время долгое (минут 30).
однако интересно не собственно время, а его существенная разница разница
в разные моменты.
причем опробовано много раз и все время одна и таже картина.
может чего с кэшированием связано?
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241383
Nick987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Странность в том, что первые ~60% добавляются гораздо дольше, чем
последние ~40% (в 7-8 раз). (это одна транзакция)"

А как ты это выяснил?
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241421
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повесил на форму отображение количества обработанных записей.
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241450
Nick987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поиграйся с параметрами раздела Jet в реестре.
MaxBuferSize - Размер кэша в кб
MaxLocksPerFile - Транзакция, пытаясь превыситьэто значение, будет разделена и выполнена частично.
и др.
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241754
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, если тот recordset, который для чтения, открыт с тип =dbOpenForwardOnly, а который на запись — с параметры =dbAppendOnly.
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32241772
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, тот, который для чтения, неплохо бы ReadOnly.
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242314
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй метод Execute и соответсвенно Insert into ..... Читай Help!!!
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242459
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и еще можно использовать пакетное обновление, правда, пытался вспомнить есть ли оно в DAO - не вспомнил - в ADO - есть.
Так же (если верить справке) - использование транзакций так же увеличивает производительность (но не всегда)
Но самое лучшее использовать SQL-язык (INSERT...)
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242469
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если убрать транзакцию нафик - скорость по идее должна более равномерной стать.
Общая скорость от транзакций далеко не всегда увеличивается. Чаще наоборот. А в хелпе я такие фразы ("использование транзакций так же увеличивает производительность") встречал только по отношению к аксесу 2.0
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242471
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП
>А в хелпе я такие фразы ("использование транзакций так же увеличивает производительность") встречал только по отношению к аксесу 2.0

Я на 2.0 не работал - поэтому и хелпов не читал :)
Найду...
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242475
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Л.П
Отрывок из MSDN

HOWTO: Speed Up Data Access by Using BeginTrans & CommitTrans
Article ID: Q146908

The information in this article applies to:
Microsoft Visual Basic for Windows Learning, Professional, and Enterprise Editions, versions 5.0, 6.0
Professional and Enterprise Editions of Microsoft Visual Basic, 16-bit, for Windows, version 4.0


SUMMARY
You can speed up database operations in a Microsoft Access database by using transactions. A transaction starts with a BeginTrans statement and ends with a CommitTrans or Rollback statement. However, for reasons relating to stack usage it is recommended that these code regions are kept as small as possible. This ensures optimal performance and reliability." For more information as to when to use transactions, please see the following article in the Microsoft Knowledge Base:


ARTICLE-ID: Q145757
TITLE : Ideas to Consider When Using Transactions


The sample program below is over 17 times faster when using BeginTrans/CommitTrans. Performance may vary on different computers.


MORE INFORMATION
You can tune the performance of Visual Basic by using transactions for operations that update data. A transaction is a series of operations that must execute as a whole or not at all. You mark the beginning of a transaction with the BeginTrans statement. You use the Rollback or CommitTrans statement to end a transaction.

You can usually increase the record updates per second (throughput) of an application by placing operations that update data within an Access Basic transaction.

Because Visual Basic locks data pages used in a transaction until the transaction ends, using transactions prevents access to those data pages by other users while the transaction is pending. If you use transactions in a multi-user environment, try to find a balance between data throughput and data access.

If database operations are not within a transaction, every Update method causes a disk write.

Transactions are very fast because they are written to a buffer in memory instead of to disk. CommitTrans writes the changes in the transaction buffer to disk.

Robust error trapping is important when using transactions to avoid losing writes if the program gets an error in the middle of a transaction...
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242477
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и я свой отрывок дам :)


Optimizing for Client/Server Performance (2.0, 95,97 Access)

(ms-help://MS.MSDNQTR.2003APR.1033/enu_kbaccesskb/accesskb/128808.htm)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Transactions
Using transactions when you update or insert records on attached tables in Access Basic can improve 
performance. Transactions enable the Jet database engine to accumulate multiple updates and write them as a 
single batch. With Microsoft SQL Server, keep transactions short because they generate locks that prevent 
other users from reading data affected by the current transaction. Although you can nest transactions using 
Visual Basic, most servers do not support nested transactions. Microsoft Access sends only the first-level 
transaction to the server. 


для акес 2000 (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbacc2000kb/acc2000kb/208858.htm)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Transactions
Using transactions in Visual Basic for Applications (VBA) when you update or insert records on linked tables 
can improve performance. Transactions enable the Jet database engine to accumulate multiple updates and write 
them as a single batch. With Microsoft SQL Server, keep transactions short because they generate locks that 
prevent other users from reading data affected by the current transaction. Although you can nest transactions 
with VBA, most servers do not support nested transactions. Microsoft Access sends only the first-level 
transaction to the server. 


А вот почему ЛП меня одернул :) (ms-help://MS.MSDNQTR.2003APR.1033/bapp2000/html/acbachap06.htm)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Transactions and Performance
In previous versions of Access, it was generally recommended that you use transactions as a performance 
enhancement. Now all transactions for DAO add, update, and delete operations are performed internally and 
automatically. In most situations, this automatic support provides your application with the best possible 
performance. However, there may be situations where you want to fine-tune transaction behavior. You can do 
this by creating and modifying various settings in the Microsoft® Windows® Registry.

See Also   For information about tuning Registry settings used by Microsoft Jet, see  "Adjusting Windows 
Registry Settings to Improve Performance"  in Chapter  7 ,  "Optimizing Your Application." 
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242516
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати о запросах на добавление.
Аналогичная задача - из одной базы в другую.
Со стороны источника - запрос (участвует 21 таблица), получатель - таблица на 56 полей. Число записей ~1000
Одним запросом - Access виснет (опробовано на разных машинах, A97 и А2000), из VBA или обычным хранимым запросом - не играет роли, если проделывать эту вставку в одной и той же базе - аналогично.
Кидаем тем же запросом, но в цикле по 50 записей - без проблем, секунд 10-15, так и живем уже два года.
А есть ли уважаемого собрания мысли о причинах этого гнусного явления?
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242617
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander:
>Кидаем тем же запросом, но в цикле по 50 записей - без проблем
запрос имеется ввиду SQL? тогда как по кускам?
если ВБА, то чего делается между кусками?
...
Рейтинг: 0 / 0
Как ускорить добавление в таблицу?
    #32242635
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sasha_1
так, наверно проще, тут ничего особенного
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
'номер последней записи
    cnt = rst![kod_obj]
    ...........
    j =  0 
    While j <= cnt
    strSQL =  "INSERT.....тут очень и очень нудно ...WHERE OBJECT.kod_obj>="  & j &  " And OBJECT.kod_obj<"  & j +  50  &  "));" 
 
    j = j +  50 
    dbsC.Execute strSQL
    Wend
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как ускорить добавление в таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]