Есть ли способ повысить производительность при вставке строк в БД Oracle? - PullRequest
2 голосов
/ 06 марта 2012

Мне нужно вставлять более тысячи строк в таблицу базы данных Oracle каждые 6 часов, используя модуль VBA.Во время каждого прогона в VBA выполняется сложный прогнозный расчет, и полученные значения должны быть вставлены в базу данных.

Типичный выходной диапазон состоит из более 1000 строк и 13 столбцов.

В настоящее время я вставляю строку за строкой, более того, после каждой вставки выполняется автоматическая фиксация (ADO DB по умолчанию ).Есть ли лучший способ или процесс для повышения производительности?

В настоящее время это занимает около 20 - 40 минут в зависимости от нагрузки на сервер.Любые улучшения производительности Предложения.

Ответы [ 3 ]

3 голосов
/ 06 марта 2012
  1. Не делать коммит после каждой вставки (если это соответствует вашим требованиям)

  2. Подумайте, помогает ли использование подсказки добавления

  3. Не знаю VBA (больше), но ищите пакетные вставки, то есть то, что вставляет несколько операторов за один раз вместо каждого отдельного оператора вставки

  4. Используйте подготовительные операторы

  5. Рассмотрите возможность отключения ограничений во время вставки

0 голосов
/ 14 ноября 2013

У меня была эта проблема, я сам.Моя проблема заключалась в том, что я открывал и закрывал соединения для каждой вставки.Это означало, что для импорта около 1000 строк потребовалось 15 минут.

Я решил эту проблему, оставив соединение открытым и отправив новые операторы исполнения в БД с циклом перед повторным закрытием соединения.

Этомой VBA:

' Setup the connection to the DB
Set conn = New ADODB.Connection
strConnection = "Provider=OraOLEDB.oracle;Data Source=connectionstring;User Id=username;Password=yourpasswrod;"

' Open DB connection
conn.ConnectionString = strConnection
conn.Open

Do Until IsEmpty(ActiveCell)
    conn.Execute ("insert into my_table ( user, user_info) values ('1', '" & ActiveCell.value &"')")
Loop

conn.Close
Set conn = Nothing

Это сократило время ввода до 30 секунд.:)

0 голосов
/ 06 марта 2012

Может быть неприемлемо для вас, но сброс любых индексов в таблице и последующее воссоздание помогут. (Экономит накладные расходы на обновление индекса для каждой INSERT)

...