|
|
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийdevartНет, данные в PutColumnData вы заполняете одинаково в обоих режимах. В режиме lmDML компонент TOraLoader сам преобразует их в DML Array и в виде массива отправит на сервер. Тогда тоска... Миллион записей 10 минут гонял. За это же время SQLLoader загнал 20 лямов Дык, режь данные на куски в виде файлов и запускай с ними SQLLoader-ы в отдельных потоках. Проведенные эксперименты показали, что быстрее все равно ничего не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2019, 15:54 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийdevartНет, данные в PutColumnData вы заполняете одинаково в обоих режимах. В режиме lmDML компонент TOraLoader сам преобразует их в DML Array и в виде массива отправит на сервер. Тогда тоска... Миллион записей 10 минут гонял. За это же время SQLLoader загнал 20 лямов Мы исследовали описанное вами поведение. Такая разница в скорости вставки обусловленна тем, что в режиме lmDML вставка производится блоками по 100 записей. К сожалению опции, которая повлияла бы на данное поведение в настоящий момент нет. Поэтому для ускорения вставки мы можем вам порекомендовать два решенеия: Первое, если у вас ODAC с исходным кодом, то вы можете отрыть файл OraClasses.pas и найти там строчку (в методе TOCILoader.Prepare): Код: pascal 1. и попробовать заменить значение 100 на значение 1000 или на 10000. скорость вставки должна значительно увеличится. Второй способ - это самостоятельно реализовать вставку через DML arrays, как описано здесь https://www.devart.com/odac/docs/batchops.htm В этом случае также необходимо подобрать оптимальное значение для количества строк вставляемых за раз. При самостоятельной реализации вставки через DML array следует избегать использования метода ParamByName() и обращаться к параметрам по индексу, иначе вызов метода ParamByName() миллион раз для каждого араметра может очень сильно снизить производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2019, 17:13 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
devartМы исследовали описанное вами поведение. Такая разница в скорости вставки обусловлена тем, что в режиме lmDML вставка производится блоками по 100 записей. К сожалению опции, которая повлияла бы на данное поведение в настоящий момент нет. Поэтому для ускорения вставки мы можем вам порекомендовать два решения: Первое, если у вас ODAC с исходным кодом, то вы можете отрыть файл OraClasses.pas и найти там строчку (в методе TOCILoader.Prepare): Код: pascal 1. и попробовать заменить значение 100 на значение 1000 или на 10000. скорость вставки должна значительно увеличится. Второй способ - это самостоятельно реализовать вставку через DML arrays, как описано здесь https://www.devart.com/odac/docs/batchops.htm В этом случае также необходимо подобрать оптимальное значение для количества строк вставляемых за раз. При самостоятельной реализации вставки через DML array следует избегать использования метода ParamByName() и обращаться к параметрам по индексу, иначе вызов метода ParamByName() миллион раз для каждого араметра может очень сильно снизить производительность. Попробовал оба варианта. Немного причесал код (были проблемы со значениями, может поэтому грузило очень долго). Теперь миллионник залетает за 2 минуты)) Это через TOraLoader. Практически тот же код, но через TOraSQL и DML Array зашел за 4 минуты. Блоки по 65000 записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2019, 17:48 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2039211]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 534ms |

| 0 / 0 |
