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


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

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

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

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

Я на 2.0 не работал - поэтому и хелпов не читал :)
Найду...
...
Рейтинг: 0 / 0
20.08.2003, 23:26
    #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
20.08.2003, 23:36
    #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
21.08.2003, 06:22
    #32242516
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить добавление в таблицу?
Кстати о запросах на добавление.
Аналогичная задача - из одной базы в другую.
Со стороны источника - запрос (участвует 21 таблица), получатель - таблица на 56 полей. Число записей ~1000
Одним запросом - Access виснет (опробовано на разных машинах, A97 и А2000), из VBA или обычным хранимым запросом - не играет роли, если проделывать эту вставку в одной и той же базе - аналогично.
Кидаем тем же запросом, но в цикле по 50 записей - без проблем, секунд 10-15, так и живем уже два года.
А есть ли уважаемого собрания мысли о причинах этого гнусного явления?
...
Рейтинг: 0 / 0
21.08.2003, 09:30
    #32242617
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить добавление в таблицу?
2 Alexander:
>Кидаем тем же запросом, но в цикле по 50 записей - без проблем
запрос имеется ввиду SQL? тогда как по кускам?
если ВБА, то чего делается между кусками?
...
Рейтинг: 0 / 0
21.08.2003, 09:41
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как ускорить добавление в таблицу? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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