[TRAFODION-2420] RMS enhancements Added four new counters to provide information about multiple executes of a prepared statement.
No. of times executed Min. Execute Time Max. Execute Time Avg. Execute Time Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/419c843a Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/419c843a Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/419c843a Branch: refs/heads/master Commit: 419c843aeb71b9912112067251b5574f1d6b05da Parents: a3e19b4 Author: selvaganesang <selva.govindara...@esgyn.com> Authored: Mon Jul 17 05:13:32 2017 +0000 Committer: selvaganesang <selva.govindara...@esgyn.com> Committed: Mon Jul 17 05:13:32 2017 +0000 ---------------------------------------------------------------------- core/sql/cli/sqlcli.h | 4 + core/sql/executor/ExExeUtilGetStats.cpp | 36 +- core/sql/executor/ExStats.cpp | 17 + core/sql/executor/ExStats.h | 4 +- core/sql/regress/core/EXPECTEDRTS | 1820 +++++++++++++++----------- core/sql/regress/core/FILTERRTS | 1 + 6 files changed, 1103 insertions(+), 779 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/419c843a/core/sql/cli/sqlcli.h ---------------------------------------------------------------------- diff --git a/core/sql/cli/sqlcli.h b/core/sql/cli/sqlcli.h index 19d2f1b..b0e68aa 100644 --- a/core/sql/cli/sqlcli.h +++ b/core/sql/cli/sqlcli.h @@ -1068,6 +1068,10 @@ enum SQLSTATS_ITEM_ID { SQLSTATS_RECLAIM_SPACE_COUNT = 201, SQLSTATS_SUBQUERY_TYPE = 202, SQLSTATS_PARENT_QUERY_SYSTEM = 203, + SQLSTATS_EXECUTE_COUNT = 204, + SQLSTATS_EXECUTE_TIME_MIN = 205, + SQLSTATS_EXECUTE_TIME_MAX = 206, + SQLSTATS_EXECUTE_TIME_AVG = 207, /* The following 3 enums are moved from operator level stats to here, however, the enum values are not changed to provide backward compatibility */ http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/419c843a/core/sql/executor/ExExeUtilGetStats.cpp ---------------------------------------------------------------------- diff --git a/core/sql/executor/ExExeUtilGetStats.cpp b/core/sql/executor/ExExeUtilGetStats.cpp index aee22dc..847985e 100644 --- a/core/sql/executor/ExExeUtilGetStats.cpp +++ b/core/sql/executor/ExExeUtilGetStats.cpp @@ -1781,6 +1781,7 @@ short ExExeUtilGetRTSStatisticsTcb::work() Lng32 intSize = 0; Lng32 valSize = 0; char timestampVal[50]; + Lng32 microSecs; // if no parent request, return if (qparent_.down->isEmpty()) @@ -1979,7 +1980,7 @@ short ExExeUtilGetRTSStatisticsTcb::work() { if (masterStatsItems_ == NULL) { - maxMasterStatsItems_ = 32; + maxMasterStatsItems_ = 36; masterStatsItems_ = new (getGlobals()->getDefaultHeap()) SQLSTATS_ITEM[maxMasterStatsItems_]; initSqlStatsItems(masterStatsItems_, maxMasterStatsItems_, FALSE); @@ -2015,7 +2016,11 @@ short ExExeUtilGetRTSStatisticsTcb::work() masterStatsItems_[29].statsItem_id = SQLSTATS_RECLAIM_SPACE_COUNT; masterStatsItems_[30].statsItem_id = SQLSTATS_CANCEL_TIME_ID; masterStatsItems_[31].statsItem_id = SQLSTATS_SUSPEND_TIME_ID; - // maxMasterStatsItems_ is set to 32 + masterStatsItems_[32].statsItem_id = SQLSTATS_EXECUTE_COUNT; + masterStatsItems_[33].statsItem_id = SQLSTATS_EXECUTE_TIME_MIN; + masterStatsItems_[34].statsItem_id = SQLSTATS_EXECUTE_TIME_MAX; + masterStatsItems_[35].statsItem_id = SQLSTATS_EXECUTE_TIME_AVG; + // maxMasterStatsItems_ is set to 36 masterStatsItems_[0].str_value = new (getGlobals()->getDefaultHeap()) char[ComSqlId::MAX_QUERY_ID_LEN+1]; masterStatsItems_[0].str_max_len = ComSqlId::MAX_QUERY_ID_LEN; @@ -2304,6 +2309,33 @@ short ExExeUtilGetRTSStatisticsTcb::work() str_sprintf(statsBuf_, "%25s%-d", "No. of times reclaimed", (Lng32)masterStatsItems_[i].int64_value); break; + case SQLSTATS_EXECUTE_COUNT: + str_sprintf(Int64Val, "%Ld", masterStatsItems_[i].int64_value); + intSize = str_len(Int64Val); + AddCommas(Int64Val,intSize); + str_sprintf(statsBuf_, "%25s%s", "No. of times executed", Int64Val); + break; + case SQLSTATS_EXECUTE_TIME_MIN: + microSecs = masterStatsItems_[i].int64_value % 1000000L; + str_sprintf(Int64Val, "%Ld", masterStatsItems_[i].int64_value/1000000); + intSize = str_len(Int64Val); + AddCommas(Int64Val,intSize); + str_sprintf(statsBuf_, "%25s%0s.%06d secs", "Min. Execute Time", Int64Val,microSecs); + break; + case SQLSTATS_EXECUTE_TIME_MAX: + microSecs = masterStatsItems_[i].int64_value % 1000000L; + str_sprintf(Int64Val, "%Ld", masterStatsItems_[i].int64_value/1000000); + intSize = str_len(Int64Val); + AddCommas(Int64Val,intSize); + str_sprintf(statsBuf_, "%25s%0s.%06d secs", "Max. Execute Time", Int64Val,microSecs); + break; + case SQLSTATS_EXECUTE_TIME_AVG: + microSecs = masterStatsItems_[i].int64_value % 1000000L; + str_sprintf(Int64Val, "%Ld", masterStatsItems_[i].int64_value/1000000); + intSize = str_len(Int64Val); + AddCommas(Int64Val,intSize); + str_sprintf(statsBuf_, "%25s%0s.%06d secs", "Avg. Execute Time", Int64Val,microSecs); + break; default: statsBuf_[0] = '\0'; break; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/419c843a/core/sql/executor/ExStats.cpp ---------------------------------------------------------------------- diff --git a/core/sql/executor/ExStats.cpp b/core/sql/executor/ExStats.cpp index e97e5ef..6aa02e0 100644 --- a/core/sql/executor/ExStats.cpp +++ b/core/sql/executor/ExStats.cpp @@ -8881,6 +8881,7 @@ void ExMasterStats::getVariableStatsInfo(char * dataBuffer, "exePriority: %d transId: %Ld suspended: %s lastSuspendTime: %Ld " "LastErrorBeforeAQR: %d AQRNumRetries: %d DelayBeforeAQR: %d reclaimSpaceCnt: %d " "blockedInSQL: %d blockedInClient: %d lastActivity: %d " + "exeCount: %Ld, exeTimeMin: %Ld exeTimeMax: %Ld exeTimeAvg: %Ld " "sqlSrcLen: %d sqlSrc: \"%s\"", statType(), ((queryId_ != NULL) ? queryId_ : "NULL"), @@ -8919,6 +8920,10 @@ void ExMasterStats::getVariableStatsInfo(char * dataBuffer, timeSinceBlocking(0), timeSinceUnblocking(0), lastActivity_, + exeTimes_.entryCnt(), + exeTimes_.min(), + exeTimes_.max(), + exeTimes_.mean(), originalSqlTextLen_, ((sourceStr_ != NULL) ? sourceStr_ : "")); } @@ -9263,6 +9268,18 @@ Lng32 ExMasterStats::getStatsItem(SQLSTATS_ITEM* sqlStats_item) case SQLSTATS_RECLAIM_SPACE_COUNT: sqlStats_item->int64_value = reclaimSpaceCount_; break; + case SQLSTATS_EXECUTE_COUNT: + sqlStats_item->int64_value = exeTimes_.entryCnt(); + break; + case SQLSTATS_EXECUTE_TIME_MIN: + sqlStats_item->int64_value = exeTimes_.min(); + break; + case SQLSTATS_EXECUTE_TIME_MAX: + sqlStats_item->int64_value = exeTimes_.max(); + break; + case SQLSTATS_EXECUTE_TIME_AVG: + sqlStats_item->int64_value = exeTimes_.mean(); + break; default: sqlStats_item->error_code = -EXE_STAT_NOT_FOUND; break; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/419c843a/core/sql/executor/ExStats.h ---------------------------------------------------------------------- diff --git a/core/sql/executor/ExStats.h b/core/sql/executor/ExStats.h index c437750..f2128f7 100644 --- a/core/sql/executor/ExStats.h +++ b/core/sql/executor/ExStats.h @@ -188,7 +188,7 @@ protected: // a generic counter used in ExOperStats (and deerived classes). // ExStatsCounter provides cnt, min, max, avg, sum, and var ////////////////////////////////////////////////////////////////// -class ExStatsCounter : public ExStatsBase { +class ExStatsCounter { public: NA_EIDPROC ExStatsCounter(); @@ -3622,6 +3622,7 @@ NA_EIDPROC void setExeEndTime(Int64 exeEndTime) { exeEndTime_ = exeEndTime; + exeTimes_.addEntry(exeEndTime_-exeStartTime_); } NA_EIDPROC @@ -3964,6 +3965,7 @@ private: Int32 numObjUIDs_; Int64 *objUIDs_; Int64 preallocdObjUIDs_[PreAllocatedObjUIDs]; + ExStatsCounter exeTimes_; };