Потребовалось 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
.......
Пожалуйста, просмотрите мою проблему и предложите мне.