diff --git a/src/Conversion.ts b/src/Conversion.ts index 0487132..985665c 100644 --- a/src/Conversion.ts +++ b/src/Conversion.ts @@ -217,7 +217,7 @@ export default class Conversion { this._includeTables = this._config.include_tables === undefined ? [] : this._config.include_tables; this._timeBegin = new Date(); this._encoding = this._config.encoding === undefined ? 'utf8' : this._config.encoding; - this._dataChunkSize = this._config.data_chunk_size === undefined ? 1 : +this._config.data_chunk_size; + this._dataChunkSize = this._config.data_chunk_size === undefined ? 1 : Math.ceil(+this._config.data_chunk_size); this._dataChunkSize = this._dataChunkSize <= 0 ? 1 : this._dataChunkSize; this._0777 = '0777'; this._mysqlVersion = '5.6.21'; // Simply a default value. diff --git a/src/DataChunksProcessor.ts b/src/DataChunksProcessor.ts index c363dc3..90250f3 100644 --- a/src/DataChunksProcessor.ts +++ b/src/DataChunksProcessor.ts @@ -43,7 +43,7 @@ export default async (conversion: Conversion, tableName: string, haveDataChunksP const dbAccess: DBAccess = new DBAccess(conversion); const sizeQueryResult: DBAccessQueryResult = await dbAccess.query(logTitle, sql, DBVendors.MYSQL, true, true); - const tableSizeInMb: number = +sizeQueryResult.data[0].size_in_mb; + const tableSizeInMb: number = Math.ceil(+sizeQueryResult.data[0].size_in_mb); const strSelectFieldList: string = arrangeColumnsData(conversion._dicTables[tableName].arrTableColumns, conversion._mysqlVersion); sql = `SELECT COUNT(1) AS rows_count FROM \`${ originalTableName }\`;`; const countResult: DBAccessQueryResult = await dbAccess.query( @@ -56,8 +56,7 @@ export default async (conversion: Conversion, tableName: string, haveDataChunksP ); const rowsCnt: number = countResult.data[0].rows_count; - let chunksCnt: number = tableSizeInMb / conversion._dataChunkSize; - chunksCnt = chunksCnt < 1 ? 1 : chunksCnt; + const chunksCnt: number = Math.ceil(tableSizeInMb / conversion._dataChunkSize); const rowsInChunk: number = Math.ceil(rowsCnt / chunksCnt); const arrDataPoolPromises: Promise[] = []; const msg: string = `\t--[prepareDataChunks] Total rows to insert into "${ conversion._schema }"."${ tableName }": ${ rowsCnt }`; @@ -78,8 +77,8 @@ export default async (conversion: Conversion, tableName: string, haveDataChunksP if (chunksCnt === 1) { currentChunkSizeInMb = tableSizeInMb; } else if (offset + rowsInChunk >= rowsCnt) { - currentChunkSizeInMb = tableSizeInMb % chunksCnt; - currentChunkSizeInMb = currentChunkSizeInMb || conversion._dataChunkSize; + // !!!Note, it can happen only on the last iteration, when defining a size of the last chunk. + currentChunkSizeInMb = tableSizeInMb - conversion._dataChunkSize * (chunksCnt - 1); } else { currentChunkSizeInMb = conversion._dataChunkSize; }