У меня есть одна таблица (содержит pk col) с 20 миллионами строк на сервере SQL на windows. Я хочу перенести эти данные в таблицу MariaDB (10.4) (без шт.) На сервере RedHat Linux через SQL связанный сервер (DRIVER = (MySql ODB C 8.0 ANSI Driver)). Поэтому я создаю на скрипте курсор для вставки каждых 10000 строк по фильтру номеров строк.
declare @starttime datetime,@endtime datetime,@startNum int,@endnum int,@recordcount int,@rowsToCommit int;
declare @TimeinSecond int,@effectedcount int,@logText varchar(2000),@i int;
select @recordcount=count(*) from sqldb..transfer_table
set @rowsToCommit =10000;
set @startNum=1; set @endnum=@rowsToCommit;
while @endnum <= (@recordcount+@rowsToCommit)
set @i = 1;
begin
set @starttime = GETDATE();
INSERT INTO linkedlinuxmaria...transfer_table(col1,col2,col3,col4,col5)
SELECT col1,col2,col3,col4,col5 FROM (
SELECT ROW_NUMBER()OVER(ORDER BY pk1,pk2) AS ROW_NUM,col1,col2,col3,pk1 as col4,pk2 as col5 FROM sqldb..transfer_table
) TAB where ROW_NUM between @startNum and @endnum;
set @effectedcount = @@ROWCOUNT;
set @endtime = GETDATE();
set @TimeinSecond = DATEDIFF(SECOND, @StartTime , @EndTime);
set @logText = CAST(@i as varchar(35)) + ','+CAST(@effectedcount as varchar(35)) + ','+ RIGHT('0' + CAST(@TimeinSecond / 3600 AS VARCHAR),2) + ':'
+ RIGHT('0' + CAST((@TimeinSecond / 60) % 60 AS VARCHAR),2) + ':' +RIGHT('0' + CAST(@TimeinSecond % 60 AS VARCHAR),2);
set @i =@i +1;
RAISERROR (@logText, 10, 1) WITH NOWAIT;
set @startNum = @endnum + 1;
set @endnum = @endnum + @rowsToCommit;
end;
Первоначально для 10000 строк передается его взятое 8 до 10 секунд позже после 4 миллионов строк передано это заняло от 3 до 5 минут времени для следующих каждых 10000 строк для вставки в RedHat Linux MariaDB. Итого потребовалось 3 или 4 дня времени для передачи 19 миллионов строк, а затем было выдано 'Mysql клиенту не хватило памяти '.
log details
........
1 10000 00:00:07
2 10000 00:00:08
3 10000 00:00:08
...........
117 10000 00:00:54
118 10000 00:00:53
119 10000 00:00:56
.........
255 10000 00:01:47
256 10000 00:01:47
257 10000 00:01:49
..........
314 10000 00:02:09
315 10000 00:02:10
316 10000 00:02:11
.........
482 10000 00:03:22
483 10000 00:03:21
484 10000 00:03:26
.......
Пожалуйста рассмотрите мою проблему и предложите мне.