handle

package
v3.1.0-fork Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2020 License: Apache-2.0 Imports: 37 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DumpAll indicates dump all the delta info in to kv.
	DumpAll dumpMode = true
	// DumpDelta indicates dump part of the delta info in to kv.
	DumpDelta dumpMode = false
)
View Source
const (
	// StatsOwnerKey is the stats owner path that is saved to etcd.
	StatsOwnerKey = "/tidb/stats/owner"
	// StatsPrompt is the prompt for stats owner manager.
	StatsPrompt = "stats"
)

Variables

View Source
var (
	// MinLogScanCount is the minimum scan count for a feedback to be logged.
	MinLogScanCount = int64(1000)
	// MinLogErrorRate is the minimum error rate for a feedback to be logged.
	MinLogErrorRate = 0.5
)
View Source
var AutoAnalyzeMinCnt int64 = 1000

AutoAnalyzeMinCnt means if the count of table is less than this value, we needn't do auto analyze.

View Source
var (
	// DumpStatsDeltaRatio is the lower bound of `Modify Count / Table Count` for stats delta to be dumped.
	DumpStatsDeltaRatio = 1 / 10000.0
)
View Source
var MaxQueryFeedbackCount = atomic2.NewInt64(1 << 10)

MaxQueryFeedbackCount is the max number of feedback that cache in memory.

Functions

func DurationToTS

func DurationToTS(d time.Duration) uint64

DurationToTS converts duration to timestamp.

func NeedAnalyzeTable

func NeedAnalyzeTable(tbl *statistics.Table, limit time.Duration, autoAnalyzeRatio float64, start, end, now time.Time) (bool, string)

NeedAnalyzeTable checks if we need to analyze the table:

  1. If the table has never been analyzed, we need to analyze it when it has not been modified for a while.
  2. If the table had been analyzed before, we need to analyze it when "tbl.ModifyCount/tbl.Count > autoAnalyzeRatio" and the current time is between `start` and `end`.

func TableAnalyzed

func TableAnalyzed(tbl *statistics.Table) bool

TableAnalyzed checks if the table is analyzed.

func TableStatsFromJSON

func TableStatsFromJSON(tableInfo *model.TableInfo, physicalID int64, jsonTbl *JSONTable) (*statistics.Table, error)

TableStatsFromJSON loads statistic from JSONTable and return the Table of statistic.

Types

type Handle

type Handle struct {
	// contains filtered or unexported fields
}

Handle can update stats info periodically.

func NewHandle

func NewHandle(ctx sessionctx.Context, lease time.Duration) *Handle

NewHandle creates a Handle for update stats.

func (*Handle) Clear

func (h *Handle) Clear()

Clear the statsCache, only for test.

func (*Handle) DDLEventCh

func (h *Handle) DDLEventCh() chan *util.Event

DDLEventCh returns ddl events channel in handle.

func (*Handle) DeleteTableStatsFromKV

func (h *Handle) DeleteTableStatsFromKV(physicalID int64) (err error)

DeleteTableStatsFromKV deletes table statistics from kv.

func (*Handle) DumpFeedbackForIndex

func (h *Handle) DumpFeedbackForIndex(q *statistics.QueryFeedback, t *statistics.Table) error

DumpFeedbackForIndex dumps the feedback for index. For queries that contains both equality and range query, we will split them and Update accordingly.

func (*Handle) DumpFeedbackToKV

func (h *Handle) DumpFeedbackToKV(fb *statistics.QueryFeedback) error

DumpFeedbackToKV dumps the given feedback to physical kv layer.

func (*Handle) DumpStatsDeltaToKV

func (h *Handle) DumpStatsDeltaToKV(mode dumpMode) error

DumpStatsDeltaToKV sweeps the whole list and updates the global map, then we dumps every table that held in map to KV. If the mode is `DumpDelta`, it will only dump that delta info that `Modify Count / Table Count` greater than a ratio.

func (*Handle) DumpStatsFeedbackToKV

func (h *Handle) DumpStatsFeedbackToKV() error

DumpStatsFeedbackToKV dumps the stats feedback to KV.

func (*Handle) DumpStatsToJSON

func (h *Handle) DumpStatsToJSON(dbName string, tableInfo *model.TableInfo, historyStatsExec sqlexec.RestrictedSQLExecutor) (*JSONTable, error)

DumpStatsToJSON dumps statistic to json.

func (*Handle) FlushStats

func (h *Handle) FlushStats()

FlushStats flushes the cached stats update into store.

func (*Handle) GCStats

func (h *Handle) GCStats(is infoschema.InfoSchema, ddlLease time.Duration) error

GCStats will garbage collect the useless stats info. For dropped tables, we will first update their version so that other tidb could know that table is deleted.

func (*Handle) GetPartitionStats

func (h *Handle) GetPartitionStats(tblInfo *model.TableInfo, pid int64) *statistics.Table

GetPartitionStats retrieves the partition stats from cache.

func (*Handle) GetQueryFeedback

func (h *Handle) GetQueryFeedback() []*statistics.QueryFeedback

GetQueryFeedback gets the query feedback. It is only use in test.

func (*Handle) GetTableStats

func (h *Handle) GetTableStats(tblInfo *model.TableInfo) *statistics.Table

GetTableStats retrieves the statistics table from cache, and the cache will be updated by a goroutine.

func (*Handle) HandleAutoAnalyze

func (h *Handle) HandleAutoAnalyze(is infoschema.InfoSchema)

HandleAutoAnalyze analyzes the newly created table or index.

func (*Handle) HandleDDLEvent

func (h *Handle) HandleDDLEvent(t *util.Event) error

HandleDDLEvent begins to process a ddl task.

func (*Handle) HandleUpdateStats

func (h *Handle) HandleUpdateStats(is infoschema.InfoSchema) error

HandleUpdateStats update the stats using feedback.

func (*Handle) InitStats

func (h *Handle) InitStats(is infoschema.InfoSchema) (err error)

InitStats will init the stats cache using full load strategy.

func (*Handle) LastUpdateVersion

func (h *Handle) LastUpdateVersion() uint64

LastUpdateVersion gets the last update version.

func (*Handle) Lease

func (h *Handle) Lease() time.Duration

Lease returns the stats lease.

func (*Handle) LoadNeededHistograms

func (h *Handle) LoadNeededHistograms() (err error)

LoadNeededHistograms will load histograms for those needed columns.

func (*Handle) LoadStatsFromJSON

func (h *Handle) LoadStatsFromJSON(is infoschema.InfoSchema, jsonTbl *JSONTable) error

LoadStatsFromJSON will load statistic from JSONTable, and save it to the storage.

func (*Handle) NewSessionStatsCollector

func (h *Handle) NewSessionStatsCollector() *SessionStatsCollector

NewSessionStatsCollector allocates a stats collector for a session.

func (*Handle) RecalculateExpectCount

func (h *Handle) RecalculateExpectCount(q *statistics.QueryFeedback) error

RecalculateExpectCount recalculates the expect row count if the origin row count is estimated by pseudo.

func (*Handle) SaveMetaToStorage

func (h *Handle) SaveMetaToStorage(tableID, count, modifyCount int64) (err error)

SaveMetaToStorage will save stats_meta to storage.

func (*Handle) SaveStatsToStorage

func (h *Handle) SaveStatsToStorage(tableID int64, count int64, isIndex int, hg *statistics.Histogram, cms *statistics.CMSketch, isAnalyzed int64) (err error)

SaveStatsToStorage saves the stats to storage.

func (*Handle) SetLastUpdateVersion

func (h *Handle) SetLastUpdateVersion(version uint64)

SetLastUpdateVersion sets the last update version.

func (*Handle) SetLease

func (h *Handle) SetLease(lease time.Duration)

SetLease sets the stats lease.

func (*Handle) Update

func (h *Handle) Update(is infoschema.InfoSchema) error

Update reads stats meta from store and updates the stats map.

func (*Handle) UpdateErrorRate

func (h *Handle) UpdateErrorRate(is infoschema.InfoSchema)

UpdateErrorRate updates the error rate of columns from h.rateMap to cache.

func (*Handle) UpdateStatsByLocalFeedback

func (h *Handle) UpdateStatsByLocalFeedback(is infoschema.InfoSchema)

UpdateStatsByLocalFeedback will update statistics by the local feedback. Currently, we dump the feedback with the period of 10 minutes, which means it takes 10 minutes for a feedback to take effect. However, we can use the feedback locally on this tidb-server, so it could be used more timely.

type JSONTable

type JSONTable struct {
	DatabaseName string                 `json:"database_name"`
	TableName    string                 `json:"table_name"`
	Columns      map[string]*jsonColumn `json:"columns"`
	Indices      map[string]*jsonColumn `json:"indices"`
	Count        int64                  `json:"count"`
	ModifyCount  int64                  `json:"modify_count"`
	Partitions   map[string]*JSONTable  `json:"partitions"`
}

JSONTable is used for dumping statistics.

type SessionStatsCollector

type SessionStatsCollector struct {
	sync.Mutex
	// contains filtered or unexported fields
}

SessionStatsCollector is a list item that holds the delta mapper. If you want to write or read mapper, you must lock it.

func (*SessionStatsCollector) Delete

func (s *SessionStatsCollector) Delete()

Delete only sets the deleted flag true, it will be deleted from list when DumpStatsDeltaToKV is called.

func (*SessionStatsCollector) StoreQueryFeedback

func (s *SessionStatsCollector) StoreQueryFeedback(feedback interface{}, h *Handle) error

StoreQueryFeedback will merges the feedback into stats collector.

func (*SessionStatsCollector) Update

func (s *SessionStatsCollector) Update(id int64, delta int64, count int64, colSize *map[int64]int64)

Update will updates the delta and count for one table id.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL