You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
feat(): replace getMaxDataSize with getMaxDataSizeWithStrings to accurately account for mem
This commit is contained in:
@ -519,16 +519,18 @@ void DiskJoinStep::joinFcn(const uint32_t threadID)
|
|||||||
// cout << "inserting a full RG" << endl;
|
// cout << "inserting a full RG" << endl;
|
||||||
if (thjs)
|
if (thjs)
|
||||||
{
|
{
|
||||||
// FIXME: Possible false positive. Something wrong with this calculation, just put a warning
|
if (!thjs->getMemory(l_outputRG.getMaxDataSizeWithStrings()))
|
||||||
// until fixed.
|
|
||||||
if (!thjs->getMemory(l_outputRG.getMaxDataSize()))
|
|
||||||
{
|
{
|
||||||
// FIXME: This is also looks wrong.
|
// FIXME: This is also looks wrong.
|
||||||
// calculate guess of size required for error message
|
// calculate guess of size required for error message
|
||||||
uint64_t memReqd = (unmatched.size() * outputRG.getDataSize(1)) / 1048576;
|
uint64_t memReqd = (l_outputRG.getMaxDataSizeWithStrings()) / 1048576;
|
||||||
uint64_t memLimit = thjs->resourceManager->getConfiguredUMMemLimit() / 1048576;
|
Message::Args args;
|
||||||
std::cerr << "DiskJoin::joinFcn() possible OOM for the join result, mem required: "
|
args.add(memReqd);
|
||||||
<< memReqd << " mem limit: " << memLimit << std::endl;
|
args.add(thjs->resourceManager->getConfiguredUMMemLimit() / 1048576);
|
||||||
|
std::cerr << logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_JOIN_RESULT_TOO_BIG,
|
||||||
|
args)
|
||||||
|
<< " @" << __FILE__ << ":" << __LINE__;
|
||||||
|
throw logging::IDBExcept(logging::ERR_JOIN_RESULT_TOO_BIG, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,9 +275,10 @@ uint64_t TupleBPS::JoinLocalData::generateJoinResultSet(const uint32_t depth,
|
|||||||
uint64_t baseRid = local_outputRG.getBaseRid();
|
uint64_t baseRid = local_outputRG.getBaseRid();
|
||||||
outputData.push_back(joinedData);
|
outputData.push_back(joinedData);
|
||||||
// Don't let the join results buffer get out of control.
|
// Don't let the join results buffer get out of control.
|
||||||
if (tbps->resourceManager()->getMemory(local_outputRG.getMaxDataSize(), false))
|
auto outputDataSize = local_outputRG.getMaxDataSizeWithStrings();
|
||||||
|
if (tbps->resourceManager()->getMemory(outputDataSize, false))
|
||||||
{
|
{
|
||||||
memSizeForOutputRG += local_outputRG.getMaxDataSize();
|
memSizeForOutputRG += outputDataSize;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1361,7 +1361,7 @@ class RowGroupStorage
|
|||||||
{
|
{
|
||||||
messageqcpp::ByteStream bs;
|
messageqcpp::ByteStream bs;
|
||||||
fRowGroupOut->setData(rgdata);
|
fRowGroupOut->setData(rgdata);
|
||||||
rgdata->serialize(bs, fRowGroupOut->getDataSize());
|
rgdata->serialize(bs, fRowGroupOut->getSizeWithStrings());
|
||||||
|
|
||||||
int errNo;
|
int errNo;
|
||||||
if ((errNo = fDumper->write(makeRGFilename(rgid), (char*)bs.buf(), bs.length())) != 0)
|
if ((errNo = fDumper->write(makeRGFilename(rgid), (char*)bs.buf(), bs.length())) != 0)
|
||||||
|
Reference in New Issue
Block a user