|
|
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Подскажите pls как собственно %subj% Я добавляю записи из одной БД в другую. Объем записей порядка 2-3Mb Обе БД лежат на серваке, оболочка на клиенте (таблицы прилинкованы). Ас97. Добавление происходит в цикле while по rs.AddNew ... rs.Update Странность в том, что первые ~60% добавляются гораздо дольше, чем последние ~40% (в 7-8 раз). Нагрузка на сервак более менее одинаковая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:12 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
1) а запросами никак нельзя обойтись? 2) попробуй раздробить на порции а сколько времени у тебя выполняется сейчас это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:16 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
>1) а запросами никак нельзя обойтись? пока нет :) >2) попробуй раздробить на порции это одна транзакция >а сколько времени у тебя выполняется сейчас это? сервер дохленький, поэтому время долгое (минут 30). однако интересно не собственно время, а его существенная разница разница в разные моменты. причем опробовано много раз и все время одна и таже картина. может чего с кэшированием связано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:33 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
"Странность в том, что первые ~60% добавляются гораздо дольше, чем последние ~40% (в 7-8 раз). (это одна транзакция)" А как ты это выяснил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:03 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
повесил на форму отображение количества обработанных записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:14 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Поиграйся с параметрами раздела Jet в реестре. MaxBuferSize - Размер кэша в кб MaxLocksPerFile - Транзакция, пытаясь превыситьэто значение, будет разделена и выполнена частично. и др. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:21 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Хорошо, если тот recordset, который для чтения, открыт с тип =dbOpenForwardOnly, а который на запись — с параметры =dbAppendOnly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 13:35 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Кстати, тот, который для чтения, неплохо бы ReadOnly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 13:42 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Используй метод Execute и соответсвенно Insert into ..... Читай Help!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 18:13 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Ну и еще можно использовать пакетное обновление, правда, пытался вспомнить есть ли оно в DAO - не вспомнил - в ADO - есть. Так же (если верить справке) - использование транзакций так же увеличивает производительность (но не всегда) Но самое лучшее использовать SQL-язык (INSERT...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 22:46 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Если убрать транзакцию нафик - скорость по идее должна более равномерной стать. Общая скорость от транзакций далеко не всегда увеличивается. Чаще наоборот. А в хелпе я такие фразы ("использование транзакций так же увеличивает производительность") встречал только по отношению к аксесу 2.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 23:09 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
2ЛП >А в хелпе я такие фразы ("использование транзакций так же увеличивает производительность") встречал только по отношению к аксесу 2.0 Я на 2.0 не работал - поэтому и хелпов не читал :) Найду... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 23:11 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
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... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 23:26 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
ну и я свой отрывок дам :) 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. для акес 2000 (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbacc2000kb/acc2000kb/208858.htm) Код: plaintext 1. 2. 3. 4. 5. 6. 7. А вот почему ЛП меня одернул :) (ms-help://MS.MSDNQTR.2003APR.1033/bapp2000/html/acbachap06.htm) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 23:36 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
Кстати о запросах на добавление. Аналогичная задача - из одной базы в другую. Со стороны источника - запрос (участвует 21 таблица), получатель - таблица на 56 полей. Число записей ~1000 Одним запросом - Access виснет (опробовано на разных машинах, A97 и А2000), из VBA или обычным хранимым запросом - не играет роли, если проделывать эту вставку в одной и той же базе - аналогично. Кидаем тем же запросом, но в цикле по 50 записей - без проблем, секунд 10-15, так и живем уже два года. А есть ли уважаемого собрания мысли о причинах этого гнусного явления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 06:22 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
2 Alexander: >Кидаем тем же запросом, но в цикле по 50 записей - без проблем запрос имеется ввиду SQL? тогда как по кускам? если ВБА, то чего делается между кусками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 09:30 |
|
||
|
Как ускорить добавление в таблицу?
|
|||
|---|---|---|---|
|
#18+
2 sasha_1 так, наверно проще, тут ничего особенного Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 09:41 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32241450&tid=1679801]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 191ms |
| total: | 350ms |

| 0 / 0 |
