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