Потребовалось 4 дня, чтобы передать 20 миллионов строк таблицы sqlserver на сервер redhat linux 7.7 Mariadb и выбросить `` клиент Mysql исчерпал память ''

У меня есть одна таблица (имеет pk col) с 20 миллионами строк на SQL-сервере в Windows. Я хочу передать эти данные в таблицу MariaDB(10.4) (без pk col) на сервере RedHat Linux через сервер, связанный с SQL-сервером (DRIVER=(MySql ODBC 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. Всего для передачи 19 миллионов строк потребовалось 3 или 4 дня, а затем возникла ошибка " Клиент 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
.......

Пожалуйста, просмотрите мою проблему и предложите мне.

0 ответов

Другие вопросы по тегам