feat: remove seek when write to file and use a small write buf

This commit is contained in:
slzhou 2024-03-06 09:44:14 +08:00
parent b6095261f2
commit 4f8ff5b1a6
1 changed files with 3 additions and 9 deletions

View File

@ -1068,7 +1068,7 @@ static int32_t createSortMemFile(SSortHandle* pHandle) {
pMemFile->currRegionId = -1; pMemFile->currRegionId = -1;
pMemFile->currRegionOffset = -1; pMemFile->currRegionOffset = -1;
pMemFile->writeBufSize = 64 * 1024 * 1024; pMemFile->writeBufSize = 4 * 1024 * 1024;
pMemFile->writeBuf = taosMemoryMalloc(pMemFile->writeBufSize); pMemFile->writeBuf = taosMemoryMalloc(pMemFile->writeBufSize);
pMemFile->writeFileOffset = -1; pMemFile->writeFileOffset = -1;
pMemFile->bRegionDirty = false; pMemFile->bRegionDirty = false;
@ -1130,10 +1130,7 @@ static int32_t tsortCloseRegion(SSortHandle* pHandle) {
pRegion->regionSize = pMemFile->currRegionOffset; pRegion->regionSize = pMemFile->currRegionOffset;
int32_t writeBytes = pRegion->regionSize - (pMemFile->writeFileOffset - pRegion->fileOffset); int32_t writeBytes = pRegion->regionSize - (pMemFile->writeFileOffset - pRegion->fileOffset);
if (writeBytes > 0) { if (writeBytes > 0) {
int ret = tsortSeekFile(pMemFile->pTdFile, pMemFile->writeFileOffset, SEEK_SET); int ret = fwrite(pMemFile->writeBuf, writeBytes, 1, pMemFile->pTdFile);
if (ret == 0) {
ret = fwrite(pMemFile->writeBuf, writeBytes, 1, pMemFile->pTdFile);
}
if (ret != 1) { if (ret != 1) {
terrno = TAOS_SYSTEM_ERROR(errno); terrno = TAOS_SYSTEM_ERROR(errno);
return terrno; return terrno;
@ -1165,11 +1162,8 @@ static int32_t saveBlockRowToExtRowsMemFile(SSortHandle* pHandle, SSDataBlock* p
SSortMemFileRegion* pRegion = taosArrayGet(pMemFile->aFileRegions, pMemFile->currRegionId); SSortMemFileRegion* pRegion = taosArrayGet(pMemFile->aFileRegions, pMemFile->currRegionId);
{ {
if (pMemFile->currRegionOffset + pHandle->extRowBytes >= pMemFile->writeBufSize) { if (pMemFile->currRegionOffset + pHandle->extRowBytes >= pMemFile->writeBufSize) {
int ret = tsortSeekFile(pMemFile->pTdFile, pMemFile->writeFileOffset, SEEK_SET);
int32_t writeBytes = pMemFile->currRegionOffset - (pMemFile->writeFileOffset - pRegion->fileOffset); int32_t writeBytes = pMemFile->currRegionOffset - (pMemFile->writeFileOffset - pRegion->fileOffset);
if (ret == 0) { int ret = fwrite(pMemFile->writeBuf, writeBytes, 1, pMemFile->pTdFile);
ret = fwrite(pMemFile->writeBuf, writeBytes, 1, pMemFile->pTdFile);
}
if (ret != 1) { if (ret != 1) {
terrno = TAOS_SYSTEM_ERROR(errno); terrno = TAOS_SYSTEM_ERROR(errno);
return terrno; return terrno;