Skip to content

Commit

Permalink
planner: judge nil pointer before call MemoryUsage (#38764)
Browse files Browse the repository at this point in the history
ref #37632
  • Loading branch information
fzzf678 authored Nov 2, 2022
1 parent ef95612 commit 30f3130
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 18 deletions.
9 changes: 7 additions & 2 deletions expression/builtin.go
Original file line number Diff line number Diff line change
Expand Up @@ -988,8 +988,13 @@ func (b *baseBuiltinFunc) MemoryUsage() (sum int64) {
return
}

sum = emptyBaseBuiltinFunc + b.bufAllocator.MemoryUsage() +
b.tp.MemoryUsage() + int64(len(b.charset)+len(b.collation))
sum = emptyBaseBuiltinFunc + int64(len(b.charset)+len(b.collation))
if b.bufAllocator != nil {
sum += b.bufAllocator.MemoryUsage()
}
if b.tp != nil {
sum += b.tp.MemoryUsage()
}
if b.childrenVectorizedOnce != nil {
sum += onceSize
}
Expand Down
6 changes: 4 additions & 2 deletions expression/column.go
Original file line number Diff line number Diff line change
Expand Up @@ -767,9 +767,11 @@ func (col *Column) MemoryUsage() (sum int64) {
return
}

sum = emptyColumnSize + col.RetType.MemoryUsage() + int64(cap(col.hashcode)) +
int64(len(col.OrigName)+len(col.charset)+len(col.collation))
sum = emptyColumnSize + int64(cap(col.hashcode)) + int64(len(col.OrigName)+len(col.charset)+len(col.collation))

if col.RetType != nil {
sum += col.RetType.MemoryUsage()
}
if col.VirtualExpr != nil {
sum += col.VirtualExpr.MemoryUsage()
}
Expand Down
5 changes: 4 additions & 1 deletion expression/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,9 @@ func (c *Constant) MemoryUsage() (sum int64) {
return
}

sum = emptyConstantSize + c.RetType.MemoryUsage() + c.Value.MemUsage() + int64(cap(c.hashcode))
sum = emptyConstantSize + c.Value.MemUsage() + int64(cap(c.hashcode))
if c.RetType != nil {
sum += c.RetType.MemoryUsage()
}
return
}
9 changes: 7 additions & 2 deletions expression/scalar_function.go
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,12 @@ func (sf *ScalarFunction) MemoryUsage() (sum int64) {
return
}

sum = emptyScalarFunctionSize + int64(len(sf.FuncName.L)+len(sf.FuncName.O)) + sf.RetType.MemoryUsage() +
int64(cap(sf.hashcode)) + sf.Function.MemoryUsage()
sum = emptyScalarFunctionSize + int64(len(sf.FuncName.L)+len(sf.FuncName.O)) + int64(cap(sf.hashcode))
if sf.RetType != nil {
sum += sf.RetType.MemoryUsage()
}
if sf.Function != nil {
sum += sf.Function.MemoryUsage()
}
return sum
}
5 changes: 2 additions & 3 deletions parser/types/field_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -632,12 +632,11 @@ func (ft *FieldType) MemoryUsage() (sum int64) {
if ft == nil {
return
}
sum = emptyFieldTypeSize + int64(len(ft.charset)+len(ft.collate))
sum = emptyFieldTypeSize + int64(len(ft.charset)+len(ft.collate)) + int64(cap(ft.elems))*int64(unsafe.Sizeof(*new(string))) +
int64(cap(ft.elemsIsBinaryLit))*int64(unsafe.Sizeof(*new(bool)))

for _, s := range ft.elems {
sum += int64(len(s))
}
sum += int64(cap(ft.elems)) * int64(unsafe.Sizeof(*new(string)))
sum += int64(cap(ft.elemsIsBinaryLit)) * int64(unsafe.Sizeof(*new(bool)))
return
}
32 changes: 24 additions & 8 deletions planner/core/physical_plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,19 @@ type tableScanAndPartitionInfo struct {
partitionInfo PartitionInfo
}

// MemoryUsage return the memory usage of tableScanAndPartitionInfo
func (t *tableScanAndPartitionInfo) MemoryUsage() (sum int64) {
if t == nil {
return
}

sum += t.partitionInfo.MemoryUsage()
if t.tableScan != nil {
sum += t.tableScan.MemoryUsage()
}
return
}

// ReadReqType is the read request type of the operator. Currently, only PhysicalTableReader uses this.
type ReadReqType uint8

Expand Down Expand Up @@ -200,8 +213,8 @@ func (p *PhysicalTableReader) MemoryUsage() (sum int64) {
for _, plan := range p.TablePlans {
sum += plan.MemoryUsage()
}
for _, pInfos := range p.PartitionInfos {
sum += pInfos.tableScan.MemoryUsage() + pInfos.partitionInfo.MemoryUsage()
for _, pInfo := range p.PartitionInfos {
sum += pInfo.MemoryUsage()
}
return
}
Expand Down Expand Up @@ -941,7 +954,7 @@ func (ts *PhysicalTableScan) MemoryUsage() (sum int64) {
}

sum = emptyPhysicalTableScanSize + ts.physicalSchemaProducer.MemoryUsage() + ts.DBName.MemoryUsage() +
int64(cap(ts.HandleIdx))*size.SizeOfInt + ts.PartitionInfo.MemoryUsage()
int64(cap(ts.HandleIdx))*size.SizeOfInt + ts.PartitionInfo.MemoryUsage() + int64(len(ts.rangeInfo))
if ts.TableAsName != nil {
sum += ts.TableAsName.MemoryUsage()
}
Expand All @@ -961,7 +974,6 @@ func (ts *PhysicalTableScan) MemoryUsage() (sum int64) {
for _, rang := range ts.Ranges {
sum += rang.MemUsage()
}
sum += int64(len(ts.rangeInfo))
for _, col := range ts.tblCols {
sum += col.MemoryUsage()
}
Expand Down Expand Up @@ -1458,8 +1470,6 @@ func (p *PhysicalExchangeReceiver) GetExchangeSender() *PhysicalExchangeSender {
return p.children[0].(*PhysicalExchangeSender)
}

const emptyMPPTaskSize = int64(unsafe.Sizeof(mppTask{}))

// MemoryUsage return the memory usage of PhysicalExchangeReceiver
func (p *PhysicalExchangeReceiver) MemoryUsage() (sum int64) {
if p == nil {
Expand Down Expand Up @@ -1885,7 +1895,10 @@ func (p *PhysicalUnionScan) MemoryUsage() (sum int64) {
return
}

sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice + p.HandleCols.MemoryUsage()
sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice
if p.HandleCols != nil {
sum += p.HandleCols.MemoryUsage()
}
for _, cond := range p.Conditions {
sum += cond.MemoryUsage()
}
Expand Down Expand Up @@ -2168,7 +2181,10 @@ func (p *PhysicalShuffleReceiverStub) MemoryUsage() (sum int64) {
return
}

sum = p.physicalSchemaProducer.MemoryUsage() + size.SizeOfPointer + size.SizeOfInterface + p.DataSource.MemoryUsage()
sum = p.physicalSchemaProducer.MemoryUsage() + size.SizeOfPointer + size.SizeOfInterface
if p.DataSource != nil {
sum += p.DataSource.MemoryUsage()
}
return
}

Expand Down

0 comments on commit 30f3130

Please sign in to comment.