mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-19 10:34:01 +00:00
PMM-9288 Changes.
This commit is contained in:
@@ -13,7 +13,6 @@ type SystemProfile struct {
|
||||
AllUsers []interface{} `bson:"allUsers"`
|
||||
Client string `bson:"client"`
|
||||
CursorExhausted bool `bson:"cursorExhausted"`
|
||||
NscannedObjects int `bson:"nscannedObjects"`
|
||||
ExecStats struct {
|
||||
Advanced int `bson:"advanced"`
|
||||
ExecutionTimeMillisEstimate int `bson:"executionTimeMillisEstimate"`
|
||||
@@ -54,30 +53,30 @@ type SystemProfile struct {
|
||||
Locks struct {
|
||||
Collection struct {
|
||||
AcquireCount struct {
|
||||
R int `bson:"R"`
|
||||
RShared int `bson:"r"`
|
||||
Read int `bson:"R"`
|
||||
ReadShared int `bson:"r"`
|
||||
} `bson:"acquireCount"`
|
||||
} `bson:"Collection"`
|
||||
Database struct {
|
||||
AcquireCount struct {
|
||||
RShared int `bson:"r"`
|
||||
ReadShared int `bson:"r"`
|
||||
} `bson:"acquireCount"`
|
||||
AcquireWaitCount struct {
|
||||
RShared int `bson:"r"`
|
||||
ReadShared int `bson:"r"`
|
||||
} `bson:"acquireWaitCount"`
|
||||
TimeAcquiringMicros struct {
|
||||
RShared int64 `bson:"r"`
|
||||
ReadShared int64 `bson:"r"`
|
||||
} `bson:"timeAcquiringMicros"`
|
||||
} `bson:"Database"`
|
||||
Global struct {
|
||||
AcquireCount struct {
|
||||
RShared int `bson:"r"`
|
||||
WShared int `bson:"w"`
|
||||
ReadShared int `bson:"r"`
|
||||
WriteShared int `bson:"w"`
|
||||
} `bson:"acquireCount"`
|
||||
} `bson:"Global"`
|
||||
MMAPV1Journal struct {
|
||||
AcquireCount struct {
|
||||
RShared int `bson:"r"`
|
||||
ReadShared int `bson:"r"`
|
||||
} `bson:"acquireCount"`
|
||||
} `bson:"MMAPV1Journal"`
|
||||
} `bson:"locks"`
|
||||
|
@@ -98,7 +98,6 @@ func (s *Stats) Add(doc proto.SystemProfile) error {
|
||||
Client: doc.Client,
|
||||
User: doc.User,
|
||||
Comments: doc.Comments,
|
||||
TimeStamp: doc.Ts,
|
||||
}
|
||||
s.setQueryInfoAndCounters(key, qiac)
|
||||
}
|
||||
@@ -106,13 +105,11 @@ func (s *Stats) Add(doc proto.SystemProfile) error {
|
||||
s.Lock()
|
||||
if qiac.PlanSummary == planSummaryCollScan {
|
||||
qiac.CollScanCount++
|
||||
qiac.CollScanSum += int64(doc.Millis)
|
||||
}
|
||||
if strings.HasPrefix(qiac.PlanSummary, planSummaryIXScan) {
|
||||
qiac.PlanSummary = planSummaryIXScan
|
||||
}
|
||||
|
||||
qiac.NScanned = append(qiac.NScanned, float64(doc.NscannedObjects))
|
||||
qiac.NReturned = append(qiac.NReturned, float64(doc.Nreturned))
|
||||
qiac.QueryTime = append(qiac.QueryTime, float64(doc.Millis))
|
||||
qiac.ResponseLength = append(qiac.ResponseLength, float64(doc.ResponseLength))
|
||||
@@ -123,18 +120,28 @@ func (s *Stats) Add(doc proto.SystemProfile) error {
|
||||
qiac.LastSeen = doc.Ts
|
||||
}
|
||||
|
||||
qiac.StorageBytesRead += doc.Storage.Data.BytesRead
|
||||
qiac.StorageTimeReadingMicros += doc.Storage.Data.TimeReadingMicros
|
||||
if doc.Storage.Data.BytesRead > 0 {
|
||||
qiac.StorageBytesRead = append(qiac.StorageBytesRead, float64(doc.Storage.Data.BytesRead))
|
||||
}
|
||||
if doc.Storage.Data.TimeReadingMicros > 0 {
|
||||
qiac.StorageTimeReadingMicros = append(qiac.StorageTimeReadingMicros, float64(doc.Storage.Data.TimeReadingMicros))
|
||||
}
|
||||
|
||||
qiac.LGlobalAcquireCountRShared += doc.Locks.Global.AcquireCount.RShared
|
||||
qiac.LGlobalAcquireCountWShared += doc.Locks.Global.AcquireCount.WShared
|
||||
qiac.LDatabaseAcquireCountRShared += doc.Locks.Database.AcquireCount.RShared
|
||||
qiac.LDatabaseAcquireWaitCountRShared += doc.Locks.Database.AcquireWaitCount.RShared
|
||||
qiac.LDatabaseTimeAcquiringMicrosRShared += doc.Locks.Database.TimeAcquiringMicros.RShared
|
||||
qiac.LCollectionAcquireCountRShared += doc.Locks.Collection.AcquireCount.RShared
|
||||
qiac.LocksGlobalAcquireCountReadShared += doc.Locks.Global.AcquireCount.ReadShared
|
||||
qiac.LocksGlobalAcquireCountWriteShared += doc.Locks.Global.AcquireCount.WriteShared
|
||||
qiac.LocksDatabaseAcquireCountReadShared += doc.Locks.Database.AcquireCount.ReadShared
|
||||
qiac.LocksDatabaseAcquireWaitCountReadShared += doc.Locks.Database.AcquireWaitCount.ReadShared
|
||||
if doc.Locks.Database.TimeAcquiringMicros.ReadShared > 0 {
|
||||
qiac.LocksDatabaseTimeAcquiringMicrosReadShared = append(qiac.LocksDatabaseTimeAcquiringMicrosReadShared, float64(doc.Locks.Database.TimeAcquiringMicros.ReadShared))
|
||||
}
|
||||
qiac.LocksCollectionAcquireCountReadShared += doc.Locks.Collection.AcquireCount.ReadShared
|
||||
|
||||
if doc.DocsExamined > 0 {
|
||||
qiac.DocsExamined = append(qiac.DocsExamined, float64(doc.DocsExamined))
|
||||
}
|
||||
if doc.KeysExamined > 0 {
|
||||
qiac.KeysExamined = append(qiac.KeysExamined, float64(doc.KeysExamined))
|
||||
}
|
||||
s.Unlock()
|
||||
|
||||
return nil
|
||||
@@ -213,32 +220,29 @@ type QueryInfoAndCounters struct {
|
||||
BlockedTime Times
|
||||
LockTime Times
|
||||
NReturned []float64
|
||||
NScanned []float64
|
||||
QueryTime []float64 // in milliseconds
|
||||
ResponseLength []float64
|
||||
|
||||
PlanSummary string
|
||||
CollScanCount int
|
||||
CollScanSum int64 // in milliseconds
|
||||
|
||||
DocsExamined []float64
|
||||
KeysExamined []float64
|
||||
TimeStamp time.Time
|
||||
QueryHash string
|
||||
AppName string
|
||||
Client string
|
||||
User string
|
||||
Comments string
|
||||
|
||||
LGlobalAcquireCountRShared int
|
||||
LGlobalAcquireCountWShared int
|
||||
LDatabaseAcquireCountRShared int
|
||||
LDatabaseAcquireWaitCountRShared int
|
||||
LDatabaseTimeAcquiringMicrosRShared int64 // in microseconds
|
||||
LCollectionAcquireCountRShared int
|
||||
LocksGlobalAcquireCountReadShared int
|
||||
LocksGlobalAcquireCountWriteShared int
|
||||
LocksDatabaseAcquireCountReadShared int
|
||||
LocksDatabaseAcquireWaitCountReadShared int
|
||||
LocksDatabaseTimeAcquiringMicrosReadShared []float64 // in microseconds
|
||||
LocksCollectionAcquireCountReadShared int
|
||||
|
||||
StorageBytesRead int64
|
||||
StorageTimeReadingMicros int64 // in microseconds
|
||||
StorageBytesRead []float64
|
||||
StorageTimeReadingMicros []float64 // in microseconds
|
||||
}
|
||||
|
||||
// times is an array of time.Time that implements the Sorter interface
|
||||
@@ -294,26 +298,28 @@ type QueryStats struct {
|
||||
|
||||
PlanSummary string
|
||||
CollScanCount int
|
||||
CollScanSum int64 // in milliseconds
|
||||
|
||||
DocsExaminedCount int
|
||||
DocsExamined Statistics
|
||||
KeysExaminedCount int
|
||||
KeysExamined Statistics
|
||||
TimeStamp time.Time
|
||||
QueryHash string
|
||||
AppName string
|
||||
Client string
|
||||
User string
|
||||
Comments string
|
||||
|
||||
LGlobalAcquireCountRShared int
|
||||
LGlobalAcquireCountWShared int
|
||||
LDatabaseAcquireCountRShared int
|
||||
LDatabaseAcquireWaitCountRShared int
|
||||
LDatabaseTimeAcquiringMicrosRShared int64 // in microseconds
|
||||
LCollectionAcquireCountRShared int
|
||||
LocksGlobalAcquireCountReadShared int
|
||||
LocksGlobalAcquireCountWriteShared int
|
||||
LocksDatabaseAcquireCountReadShared int
|
||||
LocksDatabaseAcquireWaitCountReadShared int
|
||||
LocksDatabaseTimeAcquiringMicrosReadSharedCount int
|
||||
LocksDatabaseTimeAcquiringMicrosReadShared Statistics // in microseconds
|
||||
LocksCollectionAcquireCountReadShared int
|
||||
|
||||
StorageBytesRead int64
|
||||
StorageTimeReadingMicros int64 // in microseconds
|
||||
StorageBytesReadCount int
|
||||
StorageBytesRead Statistics
|
||||
StorageTimeReadingMicrosCount int
|
||||
StorageTimeReadingMicros Statistics // in microseconds
|
||||
}
|
||||
|
||||
type Statistics struct {
|
||||
@@ -335,7 +341,6 @@ func countersToStats(query QueryInfoAndCounters, uptime int64, tc totalCounters)
|
||||
Operation: query.Operation,
|
||||
Query: query.Query,
|
||||
Fingerprint: query.Fingerprint,
|
||||
Scanned: calcStats(query.NScanned),
|
||||
Returned: calcStats(query.NReturned),
|
||||
QueryTime: calcStats(query.QueryTime),
|
||||
ResponseLength: calcStats(query.ResponseLength),
|
||||
@@ -345,23 +350,26 @@ func countersToStats(query QueryInfoAndCounters, uptime int64, tc totalCounters)
|
||||
QPS: float64(query.Count) / float64(uptime),
|
||||
PlanSummary: query.PlanSummary,
|
||||
CollScanCount: query.CollScanCount,
|
||||
CollScanSum: query.CollScanSum,
|
||||
DocsExaminedCount: len(query.DocsExamined),
|
||||
DocsExamined: calcStats(query.DocsExamined),
|
||||
KeysExaminedCount: len(query.KeysExamined),
|
||||
KeysExamined: calcStats(query.KeysExamined),
|
||||
TimeStamp: query.TimeStamp,
|
||||
QueryHash: query.QueryHash,
|
||||
AppName: query.AppName,
|
||||
Client: query.Client,
|
||||
User: query.User,
|
||||
Comments: query.Comments,
|
||||
LGlobalAcquireCountRShared: query.LGlobalAcquireCountRShared,
|
||||
LGlobalAcquireCountWShared: query.LGlobalAcquireCountWShared,
|
||||
LDatabaseAcquireCountRShared: query.LDatabaseAcquireCountRShared,
|
||||
LDatabaseAcquireWaitCountRShared: query.LDatabaseAcquireWaitCountRShared,
|
||||
LDatabaseTimeAcquiringMicrosRShared: query.LDatabaseTimeAcquiringMicrosRShared,
|
||||
LCollectionAcquireCountRShared: query.LCollectionAcquireCountRShared,
|
||||
StorageBytesRead: query.StorageBytesRead,
|
||||
StorageTimeReadingMicros: query.StorageTimeReadingMicros,
|
||||
LocksGlobalAcquireCountReadShared: query.LocksGlobalAcquireCountReadShared,
|
||||
LocksGlobalAcquireCountWriteShared: query.LocksGlobalAcquireCountWriteShared,
|
||||
LocksDatabaseAcquireCountReadShared: query.LocksDatabaseAcquireCountReadShared,
|
||||
LocksDatabaseAcquireWaitCountReadShared: query.LocksDatabaseAcquireWaitCountReadShared,
|
||||
LocksDatabaseTimeAcquiringMicrosReadSharedCount: len(query.LocksDatabaseTimeAcquiringMicrosReadShared),
|
||||
LocksDatabaseTimeAcquiringMicrosReadShared: calcStats(query.LocksDatabaseTimeAcquiringMicrosReadShared),
|
||||
LocksCollectionAcquireCountReadShared: query.LocksCollectionAcquireCountReadShared,
|
||||
StorageBytesReadCount: len(query.StorageBytesRead),
|
||||
StorageBytesRead: calcStats(query.StorageBytesRead),
|
||||
StorageTimeReadingMicrosCount: len(query.StorageTimeReadingMicros),
|
||||
StorageTimeReadingMicros: calcStats(query.StorageTimeReadingMicros),
|
||||
}
|
||||
if tc.Scanned > 0 {
|
||||
queryStats.Scanned.Pct = queryStats.Scanned.Total * 100 / tc.Scanned
|
||||
@@ -378,10 +386,10 @@ func countersToStats(query QueryInfoAndCounters, uptime int64, tc totalCounters)
|
||||
if queryStats.Returned.Total > 0 {
|
||||
queryStats.Ratio = queryStats.Scanned.Total / queryStats.Returned.Total
|
||||
}
|
||||
if queryStats.DocsExamined.Total > 0 {
|
||||
if tc.DocsExamined > 0 {
|
||||
queryStats.DocsExamined.Pct = queryStats.DocsExamined.Total / tc.DocsExamined
|
||||
}
|
||||
if queryStats.KeysExamined.Total > 0 {
|
||||
if tc.KeysExamined > 0 {
|
||||
queryStats.KeysExamined.Pct = queryStats.KeysExamined.Total / tc.KeysExamined
|
||||
}
|
||||
|
||||
@@ -392,7 +400,6 @@ func aggregateCounters(queries []QueryInfoAndCounters) QueryInfoAndCounters {
|
||||
qt := QueryInfoAndCounters{}
|
||||
for _, query := range queries {
|
||||
qt.Count += query.Count
|
||||
qt.NScanned = append(qt.NScanned, query.NScanned...)
|
||||
qt.NReturned = append(qt.NReturned, query.NReturned...)
|
||||
qt.QueryTime = append(qt.QueryTime, query.QueryTime...)
|
||||
qt.ResponseLength = append(qt.ResponseLength, query.ResponseLength...)
|
||||
@@ -408,9 +415,6 @@ func calcTotalCounters(queries []QueryInfoAndCounters) totalCounters {
|
||||
for _, query := range queries {
|
||||
tc.Count += query.Count
|
||||
|
||||
scanned, _ := stats.Sum(query.NScanned)
|
||||
tc.Scanned += scanned
|
||||
|
||||
returned, _ := stats.Sum(query.NReturned)
|
||||
tc.Returned += returned
|
||||
|
||||
|
@@ -159,9 +159,9 @@ func TestStats(t *testing.T) {
|
||||
BlockedTime: nil,
|
||||
LockTime: nil,
|
||||
NReturned: []float64{0},
|
||||
NScanned: []float64{10000},
|
||||
QueryTime: []float64{7},
|
||||
ResponseLength: []float64{215},
|
||||
DocsExamined: []float64{10000},
|
||||
}
|
||||
|
||||
want := Queries{
|
||||
|
Reference in New Issue
Block a user