2016-09-26 8 views
-1

Существует требование, чтобы мой проект вставлял 15 миллионов записей в таблицу после выполнения некоторых проверок, и это должно быть сделано за 20 минут.Обновление/Вставка 15 миллионов записей в базе данных оракулов

Таблица источников представляет собой промежуточную таблицу, которая получает данные из других приложений. Теперь из этой промежуточной таблицы мы должны вставлять данные в одну из базовых таблиц после валидации. И когда этот процесс заканчивается, мы должны вставить записи из промежуточной таблицы в две отдельные таблицы истории.

Время первой вставки должно составлять 20 минут. И для следующих двух вставок комбинированное время должно быть 20 минут.

Все четыре таблицы в одном и том же блоке, в той же схеме. Я использую Pro * C для проверки в случае 1, но во вторых вставках есть пакет plsql.

Может ли кто-нибудь помочь мне с любыми предложениями, база данных - это оракул 9i. Также каково максимальное количество записей, которые могут быть обработаны за 20 минут?

+1

Откуда берутся строки? Вы действительно используете Oracle 9i, версию, которая по крайней мере имеет 5 основных изменений, и которые не поддерживались годами? Как, собственно, вы сегодня делаете нагрузку? Здесь есть много возможных архитектур, которые кажутся более чем достаточными. Oracle регулярно проводит демонстрацию, где загружает ТБ данных в хранилище данных, работающем на машине Exadata, в течение 1 часа презентации. –

+0

Привет, Джастин. Эти строки поступают из другого приложения через инструмент ETL. Да, мы используем 9i, потому что вся система слишком стар. Для моей цели тестирования я просто вставляю любую запись вручную с помощью собственных сценариев подготовки тестовых данных. Пожалуйста, дайте мне знать, если требуется дополнительная информация. –

+0

FYI Сегодня я пробовал с DOP 10 на столах, только вставка в одну таблицу заняла 19 минут. Но из-за большого количества партий, которые работают ночью, мы не можем делать много параллелизма. –

ответ

2

Это зависит от типа данных, с которыми вам нужно работать. Я не знаю, сколько времени это займет в 9i, я использую 11g (бесплатная версия на дешевом ноутбуке), вставка ниже (из 15 000 000 очень простых строк, одна числовая колонка) занимает менее 20 секунд:

SQL> create table a (col number); 

Table created. 
Elapsed: 00:00:00.02 

SQL> insert into a 
    2 select u.x + v.y 
    3 from   (select level x from dual connect by level <= 15000) u 
    4  cross join (select level y from dual connect by level <= 1000) v; 

15000000 rows created.  
Elapsed: 00:00:19.46 

SQL> commit; 

Commit complete. 

SQL> select count(*) from a; 

    COUNT(*) 
---------- 
    15000000 

1 row selected.  
Elapsed: 00:00:01.36 
+0

Спасибо, парень из maths, но я должен взять данные из одной таблицы в другую –

+0

@SinghGaurav - именно поэтому вам нужно поделиться более подробной информацией. Одно дело вставить «числа», а другое - вставить 3000 символов. Одно дело - генерировать записи «на лету», а другое - получать их из объединения восьми таблиц. И т.д. Я вижу, вы добавили еще несколько деталей, но я боюсь, что этого еще недостаточно. – mathguy

+0

Дайте мне знать, какие детали требуются. Я постараюсь поделиться ими. –

1

Наконец, мы решили параллельно вставить две таблицы истории, используя многопоточность, это простой запрос INSERT. Для второго сценария Pro * C обрабатывает каждую запись по одному, поэтому она не может быть завершена в заданное время. Тем не менее мы реализовали максимальные потоки, которые не могут препятствовать другим процессам и некоторой степени параллельности в нашей части PL/SQL.

Благодарим вас за предложения.

 Смежные вопросы

  • Нет связанных вопросов^_^