Documentation ¶
Index ¶
- Constants
- Variables
- func DurationToTS(d time.Duration) uint64
- func NeedAnalyzeTable(tbl *statistics.Table, limit time.Duration, autoAnalyzeRatio float64, ...) (bool, string)
- func TableAnalyzed(tbl *statistics.Table) bool
- func TableStatsFromJSON(tableInfo *model.TableInfo, physicalID int64, jsonTbl *JSONTable) (*statistics.Table, error)
- type Handle
- func (h *Handle) Clear()
- func (h *Handle) DDLEventCh() chan *util.Event
- func (h *Handle) DeleteTableStatsFromKV(physicalID int64) (err error)
- func (h *Handle) DumpFeedbackForIndex(q *statistics.QueryFeedback, t *statistics.Table) error
- func (h *Handle) DumpFeedbackToKV(fb *statistics.QueryFeedback) error
- func (h *Handle) DumpStatsDeltaToKV(dumpMode bool) error
- func (h *Handle) DumpStatsFeedbackToKV() error
- func (h *Handle) DumpStatsToJSON(dbName string, tableInfo *model.TableInfo, ...) (*JSONTable, error)
- func (h *Handle) FlushStats()
- func (h *Handle) GCStats(is infoschema.InfoSchema, ddlLease time.Duration) error
- func (h *Handle) GetPartitionStats(tblInfo *model.TableInfo, pid int64) *statistics.Table
- func (h *Handle) GetQueryFeedback() []*statistics.QueryFeedback
- func (h *Handle) GetTableStats(tblInfo *model.TableInfo) *statistics.Table
- func (h *Handle) HandleAutoAnalyze(is infoschema.InfoSchema)
- func (h *Handle) HandleDDLEvent(t *util.Event) error
- func (h *Handle) HandleUpdateStats(is infoschema.InfoSchema) error
- func (h *Handle) InitStats(is infoschema.InfoSchema) error
- func (h *Handle) LastUpdateVersion() uint64
- func (h *Handle) Lease() time.Duration
- func (h *Handle) LoadNeededHistograms() error
- func (h *Handle) LoadStatsFromJSON(is infoschema.InfoSchema, jsonTbl *JSONTable) error
- func (h *Handle) NewSessionStatsCollector() *SessionStatsCollector
- func (h *Handle) RecalculateExpectCount(q *statistics.QueryFeedback) error
- func (h *Handle) SaveMetaToStorage(tableID, count, modifyCount int64) (err error)
- func (h *Handle) SaveStatsToStorage(tableID int64, count int64, isIndex int, hg *statistics.Histogram, ...) (err error)
- func (h *Handle) SetLastUpdateVersion(version uint64)
- func (h *Handle) SetLease(lease time.Duration)
- func (h *Handle) Update(is infoschema.InfoSchema) error
- func (h *Handle) UpdateErrorRate(is infoschema.InfoSchema)
- func (h *Handle) UpdateStatsByLocalFeedback(is infoschema.InfoSchema)
- func (h *Handle) UpdateTableStats(tables []*statistics.Table, deletedIDs []int64)
- type JSONTable
- type SessionStatsCollector
- type StatsCache
Constants ¶
const ( // DumpAll indicates dump all the delta info in to kv DumpAll = true // DumpDelta indicates dump part of the delta info in to kv. DumpDelta = false )
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 ¶
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 )
var AutoAnalyzeMinCnt int64 = 1000
AutoAnalyzeMinCnt means if the count of table is less than this value, we needn't do auto analyze.
var (
// DumpStatsDeltaRatio is the lower bound of `Modify Count / Table Count` for stats delta to be dumped.
DumpStatsDeltaRatio = 1 / 10000.0
)
var MaxQueryFeedbackCount = atomic2.NewInt64(1 << 10)
MaxQueryFeedbackCount is the max number of feedback that cache in memory.
Functions ¶
func DurationToTS ¶
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:
- If the table has never been analyzed, we need to analyze it when it has not been modified for a while.
- 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 ¶
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) DDLEventCh ¶
DDLEventCh returns ddl events channel in handle.
func (*Handle) DeleteTableStatsFromKV ¶
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 ¶
DumpStatsDeltaToKV sweeps the whole list and updates the global map, then we dumps every table that held in map to KV. If the `dumpAll` is false, it will only dump that delta info that `Modify Count / Table Count` greater than a ratio.
func (*Handle) DumpStatsFeedbackToKV ¶
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 ¶
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 ¶
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) error
InitStats will init the stats cache using full load strategy.
func (*Handle) LastUpdateVersion ¶
LastUpdateVersion gets the last update version.
func (*Handle) LoadNeededHistograms ¶
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 ¶
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 ¶
SetLastUpdateVersion sets the last update version.
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.
func (*Handle) UpdateTableStats ¶
func (h *Handle) UpdateTableStats(tables []*statistics.Table, deletedIDs []int64)
UpdateTableStats updates the statistics table cache using copy on write.
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 ¶
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.
type StatsCache ¶
type StatsCache map[int64]*statistics.Table
StatsCache caches the tables in memory for Handle.