Skip to content

Commit

Permalink
store/helper: fill data in the information.tidb_hot_table for partiti…
Browse files Browse the repository at this point in the history
…oned table (#14331)
  • Loading branch information
tiancaiamao committed Jan 10, 2020
1 parent 782de5d commit ad71a5a
Showing 1 changed file with 33 additions and 10 deletions.
43 changes: 33 additions & 10 deletions store/helper/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"context"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"math"
"net/http"
Expand Down Expand Up @@ -95,9 +96,9 @@ type HotRegionsStat struct {
// RegionStat records each hot region's statistics
// it's the response of PD.
type RegionStat struct {
RegionID uint64 `json:"region_id"`
FlowBytes uint64 `json:"flow_bytes"`
HotDegree int `json:"hot_degree"`
RegionID uint64 `json:"region_id"`
FlowBytes float64 `json:"flow_bytes"`
HotDegree int `json:"hot_degree"`
}

// RegionMetric presents the final metric output entry.
Expand Down Expand Up @@ -148,7 +149,7 @@ func (h *Helper) FetchHotRegion(rw string) (map[uint64]RegionMetric, error) {
metric := make(map[uint64]RegionMetric)
for _, hotRegions := range regionResp.AsLeader {
for _, region := range hotRegions.RegionsStat {
metric[region.RegionID] = RegionMetric{FlowBytes: region.FlowBytes, MaxHotDegree: region.HotDegree}
metric[region.RegionID] = RegionMetric{FlowBytes: uint64(region.FlowBytes), MaxHotDegree: region.HotDegree}
}
}
return metric, nil
Expand Down Expand Up @@ -226,14 +227,36 @@ func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, allSchem
func (h *Helper) FindTableIndexOfRegion(allSchemas []*model.DBInfo, hotRange *RegionFrameRange) *FrameItem {
for _, db := range allSchemas {
for _, tbl := range db.Tables {
if f := hotRange.GetRecordFrame(tbl.ID, db.Name.O, tbl.Name.O); f != nil {
if f := findRangeInTable(hotRange, db, tbl); f != nil {
return f
}
for _, idx := range tbl.Indices {
if f := hotRange.GetIndexFrame(tbl.ID, idx.ID, db.Name.O, tbl.Name.O, idx.Name.O); f != nil {
return f
}
}
}
}
return nil
}

func findRangeInTable(hotRange *RegionFrameRange, db *model.DBInfo, tbl *model.TableInfo) *FrameItem {
pi := tbl.GetPartitionInfo()
if pi == nil {
return findRangeInPhysicalTable(hotRange, tbl.ID, db.Name.O, tbl.Name.O, tbl.Indices)
}

for _, def := range pi.Definitions {
tablePartition := fmt.Sprintf("%s(%s)", tbl.Name.O, def.Name)
if f := findRangeInPhysicalTable(hotRange, def.ID, db.Name.O, tablePartition, tbl.Indices); f != nil {
return f
}
}
return nil
}

func findRangeInPhysicalTable(hotRange *RegionFrameRange, physicalID int64, dbName, tblName string, indices []*model.IndexInfo) *FrameItem {
if f := hotRange.GetRecordFrame(physicalID, dbName, tblName); f != nil {
return f
}
for _, idx := range indices {
if f := hotRange.GetIndexFrame(physicalID, idx.ID, dbName, tblName, idx.Name.O); f != nil {
return f
}
}
return nil
Expand Down

0 comments on commit ad71a5a

Please sign in to comment.