You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/10/19 21:45:01 UTC
[2/3] incubator-trafodion git commit: [TRAFODION-2282][TRAFODION-882]
New scheme to invalidate histogram cache
[TRAFODION-2282][TRAFODION-882] New scheme to invalidate histogram cache
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/9a3cf2e5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/9a3cf2e5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/9a3cf2e5
Branch: refs/heads/master
Commit: 9a3cf2e53af6d9df7c8ec03665f5da5a0ebf8ab0
Parents: 196e6f4
Author: Dave Birdsall <db...@apache.org>
Authored: Wed Oct 19 16:49:51 2016 +0000
Committer: Dave Birdsall <db...@apache.org>
Committed: Wed Oct 19 16:49:51 2016 +0000
----------------------------------------------------------------------
core/sql/common/ComDistribution.cpp | 3 +-
core/sql/common/ComSecurityKey.cpp | 4 +-
core/sql/common/ComSecurityKey.h | 2 +-
core/sql/common/ComSmallDefs.h | 2 +
core/sql/optimizer/NATable.cpp | 230 ++++++------------
core/sql/optimizer/NATable.h | 175 +++++++-------
core/sql/optimizer/opt.cpp | 21 +-
core/sql/optimizer/opt.h | 16 +-
core/sql/regress/compGeneral/EXPECTED011.SB | 8 +-
core/sql/regress/compGeneral/EXPECTED015.SB | 292 ++++++++++++-----------
core/sql/regress/compGeneral/EXPECTED042 | 83 +++++--
core/sql/regress/core/EXPECTED005.SB | 4 +-
core/sql/regress/hive/EXPECTED018 | 228 ++++++++++--------
core/sql/regress/seabase/EXPECTED011 | 20 +-
core/sql/regress/seabase/EXPECTED013 | 144 +++++------
core/sql/runtimestats/SqlStats.cpp | 5 +-
core/sql/runtimestats/sscpipc.cpp | 7 +-
core/sql/runtimestats/ssmpipc.cpp | 3 +
core/sql/sqlcomp/CmpMain.cpp | 9 +
core/sql/sqlcomp/CmpMain.h | 2 +
core/sql/sqlcomp/CmpSeabaseDDL.h | 2 +
core/sql/sqlcomp/CmpSeabaseDDLtable.cpp | 9 +
core/sql/sqlcomp/DefaultConstants.h | 7 -
core/sql/sqlcomp/QCache.cpp | 24 +-
core/sql/sqlcomp/nadefaults.cpp | 18 --
core/sql/ustat/hs_globals.cpp | 6 +
core/sql/ustat/hs_read.cpp | 44 ----
core/sql/ustat/hs_read.h | 32 ---
28 files changed, 671 insertions(+), 729 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/common/ComDistribution.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/ComDistribution.cpp b/core/sql/common/ComDistribution.cpp
index 82fdb83..1fec747 100644
--- a/core/sql/common/ComDistribution.cpp
+++ b/core/sql/common/ComDistribution.cpp
@@ -314,8 +314,9 @@ const literalAndEnumStruct qiTypeConversionTable [] =
{COM_QI_SCHEMA_REFERENCES, COM_QI_SCHEMA_REFERENCES_LIT},
{COM_QI_OBJECT_EXECUTE, COM_QI_OBJECT_EXECUTE_LIT},
{COM_QI_SCHEMA_EXECUTE, COM_QI_SCHEMA_EXECUTE_LIT},
+ {COM_QI_USER_GRANT_SPECIAL_ROLE, COM_QI_USER_GRANT_SPECIAL_ROLE_LIT},
{COM_QI_OBJECT_REDEF, COM_QI_OBJECT_REDEF_LIT},
- {COM_QI_USER_GRANT_SPECIAL_ROLE, COM_QI_USER_GRANT_SPECIAL_ROLE_LIT}
+ {COM_QI_STATS_UPDATED, COM_QI_STATS_UPDATED_LIT}
};
//----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/common/ComSecurityKey.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/ComSecurityKey.cpp b/core/sql/common/ComSecurityKey.cpp
index 978a257..ae43920 100644
--- a/core/sql/common/ComSecurityKey.cpp
+++ b/core/sql/common/ComSecurityKey.cpp
@@ -49,7 +49,7 @@
NABoolean qiCheckForInvalidObject (const Int32 numInvalidationKeys,
const SQL_QIKEY* invalidationKeys,
const Int64 objectUID,
- const ComSecurityKeySet objectKeys)
+ const ComSecurityKeySet & objectKeys)
{
NABoolean found = FALSE;
ComQIActionType invalidationKeyType = COM_QI_INVALID_ACTIONTYPE;
@@ -65,6 +65,8 @@ NABoolean qiCheckForInvalidObject (const Int32 numInvalidationKeys,
{
// Indicates that the DDL of the object has changed.
case COM_QI_OBJECT_REDEF:
+ // Indicates that the histogram statistics of the object has changed.
+ case COM_QI_STATS_UPDATED:
{
if (invalidationKeys[i].ddlObjectUID == objectUID)
found = TRUE;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/common/ComSecurityKey.h
----------------------------------------------------------------------
diff --git a/core/sql/common/ComSecurityKey.h b/core/sql/common/ComSecurityKey.h
index fbf60f3..42a5d01 100644
--- a/core/sql/common/ComSecurityKey.h
+++ b/core/sql/common/ComSecurityKey.h
@@ -40,7 +40,7 @@ typedef NASet<ComSecurityKey> ComSecurityKeySet;
NABoolean qiCheckForInvalidObject (const Int32 numInvalidationKeys,
const SQL_QIKEY* invalidationKeys,
const Int64 objectUID,
- const ComSecurityKeySet objectKeys);
+ const ComSecurityKeySet & objectKeys);
bool buildSecurityKeys( const int32_t granteeID,
const int32_t roleID,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/common/ComSmallDefs.h
----------------------------------------------------------------------
diff --git a/core/sql/common/ComSmallDefs.h b/core/sql/common/ComSmallDefs.h
index 66420eb..981ee5e 100644
--- a/core/sql/common/ComSmallDefs.h
+++ b/core/sql/common/ComSmallDefs.h
@@ -1267,6 +1267,7 @@ enum ComQIActionType { COM_QI_INVALID_ACTIONTYPE = 0
, COM_QI_SCHEMA_EXECUTE
, COM_QI_USER_GRANT_SPECIAL_ROLE
, COM_QI_OBJECT_REDEF
+ , COM_QI_STATS_UPDATED
} ;
#define COM_QI_INVALID_ACTIONTYPE_LIT " "
@@ -1288,6 +1289,7 @@ enum ComQIActionType { COM_QI_INVALID_ACTIONTYPE = 0
#define COM_QI_SCHEMA_EXECUTE_LIT "SE"
#define COM_QI_USER_GRANT_SPECIAL_ROLE_LIT "UZ"
#define COM_QI_OBJECT_REDEF_LIT "OR"
+#define COM_QI_STATS_UPDATED_LIT "US"
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/optimizer/NATable.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NATable.cpp b/core/sql/optimizer/NATable.cpp
index 67ebadd..c03b4ae 100644
--- a/core/sql/optimizer/NATable.cpp
+++ b/core/sql/optimizer/NATable.cpp
@@ -197,6 +197,7 @@ ULng32 qualNameHashFunc(const QualifiedName& qualName)
//-------------------------------------------------------------------------
HistogramCache::HistogramCache(NAMemory * heap,Lng32 initSize)
: heap_(heap),
+ lastTouchTime_(getCurrentTime()),
hits_(0),
lookups_(0),
memoryLimit_(33554432),
@@ -231,6 +232,7 @@ void HistogramCache::invalidateCache()
}
histogramsCache_->clearAndDestroy();
lruQ_.clear();
+ lastTouchTime_ = getCurrentTime();
}
//--------------------------------------------------------------------------
@@ -250,6 +252,15 @@ void HistogramCache::getHistograms(NATable& table)
StatsList& colStatsList = *(table.getColStats());
const Int64& redefTime = table.getRedefTime();
Int64& statsTime = const_cast<Int64&>(table.getStatsTime());
+ Int64 tableUID = table.objectUid().castToInt64();
+ Int64 siKeyGCinterval = CURRSTMT_OPTDEFAULTS->siKeyGCinterval();
+
+ // Fail safe logic: Make sure that we haven't been idle longer than
+ // the RMS security invalidation garbage collection logic. If we have,
+ // it is possible that an invalidation key for stats has been missed.
+ // So to be safe, we invalidate the whole cache.
+ if (getCurrentTime() > lastTouchTime_ + siKeyGCinterval)
+ invalidateCache();
//1//
//This 'flag' is set to NULL if FetchHistogram has to be called to
@@ -260,10 +271,6 @@ void HistogramCache::getHistograms(NATable& table)
//Pointer to cache entry for histograms on this table
HistogramsCacheEntry * cachedHistograms = NULL;
- // skip reading the histograms if they have not been changed in last
- // CACHE_HISTOGRAMS_REFRESH_INTERVAL hours
- NABoolean skipRead = FALSE;
-
//Do we need to use the cache
//Depends on :
//1. If histogram caching is ON
@@ -275,75 +282,28 @@ void HistogramCache::getHistograms(NATable& table)
// look up the cache and get a reference to statistics for this table
cachedHistograms = lookUp(table);
- // first thing to check is, if the table to which the histograms are cached
- // has been updated
+ // (Possibly useless) sanity tests
+
+ // Check to see if the redefinition timestamp has changed. This seems
+ // to be always stubbed to zero today on Trafodion, so this check
+ // seems to never fail.
if (cachedHistograms && (cachedHistograms->getRedefTime() != redefTime))
{
deCache(&cachedHistograms);
}
- // If the histograms exist in the cache, then we want to avoid reading
- // timestamps, if the histograms have not been updated in last default
- // refresh time (CACHE_HISTOGRAMS_REFRESH_INTERVAL) or if the histograms in the cache
- // are less than CACHE_HISTOGRAMS_REFRESH_INTERVAL old.
- Int64 lastRefTimeDef, lastFakeRefTimeDef, currentTime;
- if (cachedHistograms)
- {
- lastRefTimeDef = uint32ToInt64(CURRSTMT_OPTDEFAULTS->defRefTime());
- lastFakeRefTimeDef = uint32ToInt64(CURRSTMT_OPTDEFAULTS->defFakeRefTime());
+ // Check to see if the table's objectUID has changed (indicating that
+ // it has been dropped and recreated). This test shouldn't fail, because
+ // a drop should have caused the NATable object to be invalidated via
+ // the query invalidation infrastructure which should have already caused
+ // the histograms to be decached.
- currentTime = getCurrentTime();
-
- Int64 histLastRefreshedTime = cachedHistograms->getRefreshTime();
-
- if (currentTime && cachedHistograms->isAllStatsFake())
- {
- // Check if it has been more than 'lastFakeRefTimeDef' secs
- // (equal to CQD HIST_NO_STATS_REFRESH_INTERVAL) since histograms have
- // been checked OR if update statistics automation is ON and it has
- // been more than 'lastFakeRefTimeDef'/360 (should = 10 by default).
- Int64 timeSinceLastHistRefresh = currentTime - histLastRefreshedTime;
- if(!CURRSTMT_OPTDEFAULTS->ustatAutomation() && timeSinceLastHistRefresh > lastFakeRefTimeDef ||
- CURRSTMT_OPTDEFAULTS->ustatAutomation() && timeSinceLastHistRefresh > lastFakeRefTimeDef/360)
- {
- //the histograms are in the cache but we need to re-read them because
- //their default values might have been re-estimated
- deCache(&cachedHistograms);
- }
- }
-
- // Histograms are not fake. Check to see if we need to do anymore timestamp checks
-
- if (currentTime && cachedHistograms && lastRefTimeDef > 0)
- {
- Int64 lastUpdateStatsTime = HistogramsCacheEntry::getLastUpdateStatsTime();
-
- if ((lastUpdateStatsTime != -1) &&
- ((currentTime - lastUpdateStatsTime) < lastRefTimeDef))
- {
- // Last known update stats time for this table occurred less than
- // CACHE_HISTOGRAMS_REFRESH_INTERVAL secs ago.
- if (lastUpdateStatsTime < histLastRefreshedTime)
- {
- // Last time the histograms cache was refreshed for this table is newer
- // than last known update stats time. Skip read of hists.
- skipRead = TRUE;
- }
- }
- else
- // No update stats time recorded OR last known update stats time occurred
- // more than CACHE_HISTOGRAMS_REFRESH_INTERVAL secs ago.
- if ((currentTime - histLastRefreshedTime) < lastRefTimeDef)
- // Histograms were refreshed less than CACHE_REFRESH_HISTOGRAMS_INTERVAL
- // secs ago. Skip read of hists.
- skipRead = TRUE;
- }
+ if (cachedHistograms && (cachedHistograms->getTableUID() != tableUID))
+ {
+ deCache(&cachedHistograms);
}
- //assumption:
- //if tempHist is not NULL then it should have a pointer to full Histograms
-
//check if histogram preFetching is on
if(CURRSTMT_OPTDEFAULTS->preFetchHistograms() && cachedHistograms)
{ //3//
@@ -354,77 +314,28 @@ void HistogramCache::getHistograms(NATable& table)
//were not preFetched so delete them and
//re-Read them
deCache(&cachedHistograms);
- } //4//
+ } //4//
} //3//
+ } //2//
- //Check if there is a timestamp mis-match
- if(cachedHistograms AND cachedHistograms->getRedefTime() != redefTime)
- { //5//
- //the histograms are in the cache but we need to re-read them because of
- //a time stamp mismatch
- deCache(&cachedHistograms);
- } //5//
- else if (!skipRead)
- { //6//
- //Do some more timestamp calculations and set re-Read flag if
- //there is a mis-match
- if(cachedHistograms)
- { //9 //
- // Check when the histogram table was last modified. If this time doesn't equal
- // the modification time of the cached histograms, OR this time is more than
- // lastRefTimeDef secs old, call FetchStatsTime to read STATS_TIME field of
- // the actual histogram. The last condition here is used to force a call of
- // FetchStatsTime() after awhile. This is for update stats automation:
- // FetchStatsTime() will update the READ_TIME field of the histogram.
- Int64 modifTime;
- Int64 currentJulianTime = NA_JulianTimestamp();
- GetHSModifyTime(qualifiedName, type, modifTime, FALSE);
- Int64 readCntInterval = (Int64)CmpCommon::getDefaultLong(USTAT_AUTO_READTIME_UPDATE_INTERVAL);
- if (modifTime != 0)
- // If the HISTOGRAMS table was modified since the last time FetchStatsTime()
- // called and the time is not the same as the cached histograms OR
- // if it was modified more than READTIME_UPDATE_INTERVAL secs ago and
- // ustat automation is ON:
- if (cachedHistograms->getModifTime() != modifTime ||
- (currentJulianTime - modifTime > readCntInterval*1000000 &&
- CmpCommon::getDefaultLong(USTAT_AUTOMATION_INTERVAL) > 0))
- { //10//
- FetchStatsTime(qualifiedName,type,colArray,statsTime,FALSE);
- cachedHistograms->updateRefreshTime();
- // If ustat automation is on, FetchStatsTime will modify the HISTOGRAMS table.
- // So, the new modification time of the HISTOGRAMS table must be saved to the
- // cached histograms when automation is on, so that only changes to HISTOGRAMS
- // by update stats cause the above 'if' to be TRUE.
- if (CmpCommon::getDefaultLong(USTAT_AUTOMATION_INTERVAL) > 0)
- {
- GetHSModifyTime(qualifiedName, type, modifTime, FALSE);
- cachedHistograms->setModifTime(modifTime);
- }
+ if( cachedHistograms )
+ {
+ hits_++;
+ }
+ else
+ {
+ lookups_++;
+ }
- if (cachedHistograms->getStatsTime() != statsTime)
- { //11//
- deCache(&cachedHistograms);
- } //11//
- } //10//
- } //9//
- } //6//
- } //2//
+ //retrieve the statistics for the table in colStatsList
+ createColStatsList(table, cachedHistograms);
- if( cachedHistograms )
- {
- hits_++;
- }
- else
- {
- lookups_++;
- }
+ //if not using histogram cache, then invalidate cache
+ if(!CURRSTMT_OPTDEFAULTS->cacheHistograms())
+ invalidateCache();
- //retrieve the statistics for the table in colStatsList
- createColStatsList(table, cachedHistograms);
+ lastTouchTime_ = getCurrentTime();
- //if not using histogram cache, then invalidate cache
- if(!CURRSTMT_OPTDEFAULTS->cacheHistograms())
- invalidateCache();
} //1//
#pragma warn(770) // warning elimination
@@ -523,8 +434,6 @@ void HistogramCache::createColStatsList
(colStatsList, colArray, cachedHistograms, singleColsFound);
}
- Int64 modifTime = 0;
-
// set to TRUE if all columns in the table have default statistics
NABoolean allFakeStats = TRUE;
@@ -586,7 +495,6 @@ void HistogramCache::createColStatsList
(*statsListForFetch),
FALSE,
CmpCommon::statementHeap(),
- modifTime,
statsTime,
allFakeStats,//set to TRUE if all columns have default stats
preFetch,
@@ -635,7 +543,8 @@ void HistogramCache::createColStatsList
// put the re-read histograms into cache
putStatsListIntoCache((*statsListForFetch), colArray, qualifiedName,
- modifTime, statsTime, redefTime, allFakeStats);
+ table.objectUid().castToInt64(),
+ statsTime, redefTime, allFakeStats);
// look up the cache and get a reference to statistics for this table
cachedHistograms = lookUp(table);
@@ -775,7 +684,7 @@ Int32 HistogramCache::getStatsListFromCache
void HistogramCache::putStatsListIntoCache(StatsList & colStatsList,
const NAColumnArray& colArray,
const QualifiedName & qualifiedName,
- Int64 modifTime,
+ Int64 tableUID,
Int64 statsTime,
const Int64 & redefTime,
NABoolean allFakeStats)
@@ -783,8 +692,8 @@ void HistogramCache::putStatsListIntoCache(StatsList & colStatsList,
ULng32 histCacheHeapSize = heap_->getAllocSize();
// create memory efficient representation of colStatsList
HistogramsCacheEntry * histogramsForCache = new (heap_)
- HistogramsCacheEntry(colStatsList, qualifiedName,
- modifTime, statsTime, redefTime, heap_);
+ HistogramsCacheEntry(colStatsList, qualifiedName, tableUID,
+ statsTime, redefTime, heap_);
ULng32 cacheEntrySize = heap_->getAllocSize() - histCacheHeapSize;
if(CmpCommon::getDefault(CACHE_HISTOGRAMS_CHECK_FOR_LEAKS) == DF_ON)
@@ -793,19 +702,12 @@ void HistogramCache::putStatsListIntoCache(StatsList & colStatsList,
ULng32 histCacheHeapSize2 = heap_->getAllocSize();
CMPASSERT( histCacheHeapSize == histCacheHeapSize2);
histogramsForCache = new (heap_)
- HistogramsCacheEntry(colStatsList, qualifiedName,
- modifTime, statsTime, redefTime, heap_);
+ HistogramsCacheEntry(colStatsList, qualifiedName, tableUID,
+ statsTime, redefTime, heap_);
cacheEntrySize = heap_->getAllocSize() - histCacheHeapSize2;
}
histogramsForCache->setSize(cacheEntrySize);
- if(FALSE)
- {
- delete histogramsForCache;
- histogramsForCache = new (heap_)
- HistogramsCacheEntry(colStatsList, qualifiedName,
- modifTime, statsTime, redefTime, heap_);
- }
// add it to the cache
QualifiedName* key = const_cast<QualifiedName*>
(histogramsForCache->getName());
@@ -971,22 +873,44 @@ void HistogramCache::monitor() const
}
}
+void HistogramCache::freeInvalidEntries(Int32 numKeys,
+ SQL_QIKEY * qiKeyArray)
+{
+ // an empty set for qiCheckForInvalidObject call
+ ComSecurityKeySet dummy(CmpCommon::statementHeap());
+ // create an iterator that will iterate over the whole cache
+ NAHashDictionaryIterator<QualifiedName, HistogramsCacheEntry> it(*histogramsCache_);
+ QualifiedName * qn = NULL;
+ HistogramsCacheEntry * entry = NULL;
+
+ for (int i = 0; i < it.entries(); i++)
+ {
+ it.getNext(qn,entry);
+ if (qiCheckForInvalidObject(numKeys, qiKeyArray,
+ entry->getTableUID(),
+ dummy))
+ deCache(&entry);
+ }
+
+ lastTouchTime_ = getCurrentTime();
+}
+
+
// constructor for memory efficient representation of colStats.
// colStats has both single-column & multi-column histograms.
HistogramsCacheEntry::HistogramsCacheEntry
(const StatsList & colStats,
const QualifiedName & qualifiedName,
- const Int64 & modifTime,
- const Int64 & statsTime,
- const Int64 & redefTime,
+ Int64 tableUID,
+ const Int64 & statsTime,
+ const Int64 & redefTime,
NAMemory * heap)
: full_(NULL), multiColumn_(NULL), name_(NULL), heap_(heap)
- , refreshTime_(0), singleColumnPositions_(heap)
+ , refreshTime_(0), singleColumnPositions_(heap), tableUID_(tableUID)
, accessedInCurrentStatement_(TRUE)
, size_(0)
{
- modifTime_ = modifTime;
- statsTime_ = statsTime;
+ statsTime_ = statsTime;
updateRefreshTime();
redefTime_ = redefTime;
preFetched_ = CURRSTMT_OPTDEFAULTS->preFetchHistograms();
@@ -1304,8 +1228,6 @@ void HistogramsCacheEntry::print
fprintf(ofd,"allFakeStats_:%d ", allFakeStats_);
fprintf(ofd,"preFetched_:%d \n", preFetched_);
char time[30];
- convertInt64ToAscii(modifTime_, time);
- fprintf(ofd,"modifTime_:%s ", time);
convertInt64ToAscii(redefTime_, time);
fprintf(ofd,"redefTime_:%s ", time);
convertInt64ToAscii(refreshTime_, time);
@@ -1314,6 +1236,8 @@ void HistogramsCacheEntry::print
fprintf(ofd,"statsTime_:%s ", time);
convertInt64ToAscii(getLastUpdateStatsTime(), time);
fprintf(ofd,"lastUpdateStatsTime:%s \n", time);
+ convertInt64ToAscii(tableUID_, time);
+ fprintf(ofd,"tableUID_:%s \n", time);
fprintf(ofd,"single-column histograms:%d ", singleColumnCount());
singleColumnPositions_.printColsFromTable(ofd,NULL);
if (full_)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/optimizer/NATable.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NATable.h b/core/sql/optimizer/NATable.h
index afe3f6d..5f8991b 100644
--- a/core/sql/optimizer/NATable.h
+++ b/core/sql/optimizer/NATable.h
@@ -89,139 +89,138 @@ class HistogramsCacheEntry : public NABasicObject
{
friend class HistogramCache;
- public:
- // constructor for creating memory efficient representation of colStats
- HistogramsCacheEntry
+ public:
+ // constructor for creating memory efficient representation of colStats
+ HistogramsCacheEntry
(const StatsList & colStats,
const QualifiedName & qualifiedName,
- const Int64 & modifTime,
- const Int64 & statsTime,
- const Int64 & redefTime,
+ Int64 tableUID,
+ const Int64 & statsTime,
+ const Int64 & redefTime,
NAMemory * heap);
- //destructor
- virtual ~HistogramsCacheEntry();
+ //destructor
+ virtual ~HistogramsCacheEntry();
- //setter methods
- //should be called to indicate that histograms for a given table
- //have been pre-fetched
- void setPreFetched(NABoolean preFetched = TRUE){preFetched_ = preFetched;};
+ //setter methods
+ //should be called to indicate that histograms for a given table
+ //have been pre-fetched
+ void setPreFetched(NABoolean preFetched = TRUE){preFetched_ = preFetched;};
- const ColStatsSharedPtr getStatsAt(CollIndex x) const;
+ const ColStatsSharedPtr getStatsAt(CollIndex x) const;
- const MultiColumnHistogram* getMultiColumnAt(CollIndex x) const;
+ const MultiColumnHistogram* getMultiColumnAt(CollIndex x) const;
- NABoolean contains(CollIndex colPos) const
+ NABoolean contains(CollIndex colPos) const
{ return singleColumnPositions_.contains(colPos); }
- // insert all multicolumns referencing col into list
- // use singleColsFound to avoid duplicates
- void getMCStatsForColFromCacheIntoList
+ // insert all multicolumns referencing col into list
+ // use singleColsFound to avoid duplicates
+ void getMCStatsForColFromCacheIntoList
(StatsList& list, NAColumn& col, ColumnSet& singleColsFound);
- // adds histograms to this cache entry
- void addToCachedEntry(NAColumnArray & columns, StatsList & list);
+ // adds histograms to this cache entry
+ void addToCachedEntry(NAColumnArray & columns, StatsList & list);
- // add multi-column histogram to this cache entry
- void addMultiColumnHistogram(const ColStats& mcStat,
- ColumnSet* singleColPositions=NULL);
+ // add multi-column histogram to this cache entry
+ void addMultiColumnHistogram(const ColStats& mcStat,
+ ColumnSet* singleColPositions=NULL);
- //accessor methods
- ColStatsSharedPtr const
- getHistForCol (NAColumn& col) const;
+ //accessor methods
+ ColStatsSharedPtr const getHistForCol (NAColumn& col) const;
- CollIndex singleColumnCount() const
+ CollIndex singleColumnCount() const
{ return full_ ? full_->entries() : 0; }
- CollIndex multiColumnCount() const
+ CollIndex multiColumnCount() const
{ return multiColumn_ ? multiColumn_->entries() : 0; }
- NABoolean preFetched() const {return preFetched_;};
- const QualifiedName* getName() const;
+ NABoolean preFetched() const {return preFetched_;};
+ const QualifiedName* getName() const;
- NABoolean accessedInCurrentStatement() const
+ NABoolean accessedInCurrentStatement() const
{ return accessedInCurrentStatement_; }
- void resetAfterStatement()
+ void resetAfterStatement()
{ accessedInCurrentStatement_ = FALSE; }
- //overloaded operator to satisfy hashdictionary
- inline NABoolean operator==(const HistogramsCacheEntry & other)
+ //overloaded operator to satisfy hashdictionary
+ inline NABoolean operator==(const HistogramsCacheEntry & other)
{return (this == &other);};
- Int64 getRefreshTime() const { return refreshTime_; };
+ Int64 getRefreshTime() const { return refreshTime_; };
- void setRefreshTime(Int64 refreshTime)
- { refreshTime_ = refreshTime ; };
+ void setRefreshTime(Int64 refreshTime) { refreshTime_ = refreshTime ; };
- void updateRefreshTime();
+ void updateRefreshTime();
- void setModifTime(Int64 modifTime) { modifTime_ = modifTime; };
- void setStatsTime(Int64 statsTime) { statsTime_ = statsTime; };
- void setRedefTime(Int64 redefTime) { redefTime_ = redefTime; };
+ void setRedefTime(Int64 redefTime) { redefTime_ = redefTime; };
- Int64 getRedefTime() const { return redefTime_; };
- Int64 getModifTime() const { return modifTime_; };
- Int64 getStatsTime() const { return statsTime_; };
+ Int64 getRedefTime() const { return redefTime_; };
- static Int64 getLastUpdateStatsTime();
+ Int64 getStatsTime() const { return statsTime_; };
- static void setUpdateStatsTime(Int64 updateTime);
+ static Int64 getLastUpdateStatsTime();
- inline NABoolean isAllStatsFake() { return allFakeStats_; };
+ static void setUpdateStatsTime(Int64 updateTime);
- inline void allStatsFake(NABoolean allFakeStats) { allFakeStats_ = allFakeStats; }
+ inline NABoolean isAllStatsFake() { return allFakeStats_; };
- inline ULng32 getSize() {return size_;}
+ inline void allStatsFake(NABoolean allFakeStats) { allFakeStats_ = allFakeStats; }
+
+ inline ULng32 getSize() {return size_;}
+
+ Int64 getTableUID() const { return tableUID_; };
- void display() const;
- void print( FILE* ofd = stdout,
- const char* indent = DEFAULT_INDENT,
- const char* title = "HistogramsCacheEntry") const;
- void monitor(FILE* ofd) const;
+ void display() const;
+ void print( FILE* ofd = stdout,
+ const char* indent = DEFAULT_INDENT,
+ const char* title = "HistogramsCacheEntry") const;
+ void monitor(FILE* ofd) const;
private:
- inline void setSize(ULng32 newSize){ size_ = newSize;}
+ inline void setSize(ULng32 newSize){ size_ = newSize;}
- NAMemory * heap_;
+ NAMemory * heap_;
- NABoolean preFetched_;
+ NABoolean preFetched_;
- // ---------------------------------------------------------------------
- // The time histograms for this table were last refreshed
- // ---------------------------------------------------------------------
- Int64 refreshTime_;
+ // ---------------------------------------------------------------------
+ // The time histograms for this table were last refreshed
+ // ---------------------------------------------------------------------
+ Int64 refreshTime_;
- // ---------------------------------------------------------------------
- // The time this table was last altered
- // ---------------------------------------------------------------------
- Int64 redefTime_;
- Int64 modifTime_;
- Int64 statsTime_;
+ // ---------------------------------------------------------------------
+ // The time this table was last altered
+ // ---------------------------------------------------------------------
+ Int64 redefTime_;
- // ----------------------------------------------------------------
- // Do all columns of this table consis of default statistics
- // ----------------------------------------------------------------
- NABoolean allFakeStats_;
+ Int64 statsTime_; // STATS_TIME value from SB_HISTOGRAMS table
- //The full histograms
- NAList<ColStatsSharedPtr> *full_;
- // is the memory-efficient contextheap representation
- // of a table's single-column histograms only
+ // ----------------------------------------------------------------
+ // Do all columns of this table consis of default statistics
+ // ----------------------------------------------------------------
+ NABoolean allFakeStats_;
- ColumnSet singleColumnPositions_;
- // tracks single-column histograms that are in cache
+ //The full histograms
+ NAList<ColStatsSharedPtr> *full_;
+ // is the memory-efficient contextheap representation
+ // of a table's single-column histograms only
- // multicolum histograms
- MultiColumnHistogramList *multiColumn_;
- // is the memory-efficient contextheap representation
- // of a table's multi-column histograms only
+ ColumnSet singleColumnPositions_;
+ // tracks single-column histograms that are in cache
- //pointer to qualified name of the table
- QualifiedName * name_;
- NABoolean accessedInCurrentStatement_;
- ULng32 size_;
+ // multicolum histograms
+ MultiColumnHistogramList *multiColumn_;
+ // is the memory-efficient contextheap representation
+ // of a table's multi-column histograms only
+
+ //pointer to qualified name of the table
+ QualifiedName * name_;
+ Int64 tableUID_;
+ NABoolean accessedInCurrentStatement_;
+ ULng32 size_;
};// class HistogramsCacheEntry
/****************************************************************************
@@ -276,6 +275,9 @@ public:
void traceTablesFinalize() const;
void monitor() const;
+ void freeInvalidEntries(Int32 returnedNumQiKeys,
+ SQL_QIKEY * qiKeyArray);
+
private:
DISALLOW_COPY_AND_ASSIGN(HistogramCache);
@@ -300,7 +302,7 @@ public:
void putStatsListIntoCache(StatsList & colStatsList,
const NAColumnArray& colArray,
const QualifiedName & qualifiedName,
- Int64 modifTime,
+ Int64 tableUID,
Int64 statsTime,
const Int64 & redefTime,
NABoolean allFakeStats);
@@ -335,6 +337,7 @@ public:
//The Cache
NAHashDictionary <QualifiedName, HistogramsCacheEntry> * histogramsCache_;
+ Int64 lastTouchTime_; // last time cache was touched
ULng32 hits_; // cache hit counter
ULng32 lookups_; // entries lookup counter
ULng32 size_;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/optimizer/opt.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/opt.cpp b/core/sql/optimizer/opt.cpp
index a417d63..02e7dc1 100644
--- a/core/sql/optimizer/opt.cpp
+++ b/core/sql/optimizer/opt.cpp
@@ -3893,6 +3893,7 @@ OptDefaults::OptDefaults(CollHeap* h) : heap_(h)
joinCardLowBound_ = 0.5;
ustatAutomation_ = FALSE;
preFetchHistograms_ = TRUE;
+ siKeyGCinterval_ = (Int64)24 * 60 * 60; // 24 hours
histMCStatsNeeded_ = TRUE;
histSkipMCUecForNonKeyCols_ = TRUE;
histMissingStatsWarningLevel_ = 4;
@@ -3907,9 +3908,6 @@ OptDefaults::OptDefaults(CollHeap* h) : heap_(h)
histTupleFreqValListThreshold_ = 40;
histNumOfAddDaysToExtrapolate_ = 4;
- defRefTime_ = 3600;
- defFakeRefTime_ = 3600;
-
defNoStatsUec_ = 2;
defNoStatsRowCount_ = 100;
@@ -4996,9 +4994,6 @@ void OptDefaults::initialize(RelExpr* rootExpr)
joinCardLowBound_ = (defs_->getAsDouble(HIST_JOIN_CARD_LOWBOUND));
ustatAutomation_ = (defs_->getAsLong(USTAT_AUTOMATION_INTERVAL) > 0);
- defRefTime_ = defs_->getAsLong(CACHE_HISTOGRAMS_REFRESH_INTERVAL);
- defFakeRefTime_ = defs_->getAsLong(HIST_NO_STATS_REFRESH_INTERVAL);
-
defNoStatsUec_ = defs_->getAsDouble(HIST_NO_STATS_UEC);
defNoStatsRowCount_ = defs_->getAsDouble(HIST_NO_STATS_ROWCOUNT);
@@ -5034,6 +5029,20 @@ void OptDefaults::initialize(RelExpr* rootExpr)
preFetchHistograms_ = FALSE;
}
+ // Find out what the RMS security key invalidation garbage collection
+ // interval is (this mirrors the logic in runtimestats/ssmpipc.cpp), so
+ // we can fail-safe the histogram cache.
+
+ char *sct = getenv("RMS_SIK_GC_INTERVAL_SECONDS"); // in seconds
+ if (sct)
+ {
+ siKeyGCinterval_ = ((Int64) str_atoi(sct, str_len(sct)));
+ if (siKeyGCinterval_ < 10)
+ siKeyGCinterval_ = 10;
+ }
+ else
+ siKeyGCinterval_ = (Int64)24 * 60 * 60; // 24 hours
+
// -----------------------------------------------------------------------
// Initialize recalibration constants:
// -----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/optimizer/opt.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/opt.h b/core/sql/optimizer/opt.h
index 3af2541..0675d2f 100644
--- a/core/sql/optimizer/opt.h
+++ b/core/sql/optimizer/opt.h
@@ -659,6 +659,10 @@ public:
{
return preFetchHistograms_;
};
+ inline Int64 siKeyGCinterval()
+ {
+ return siKeyGCinterval_;
+ };
static NABoolean cacheHistograms();
@@ -728,15 +732,6 @@ public:
histUseSampleForCardEst_ = v;
}
- inline Lng32 defRefTime()
- {
- return defRefTime_;
- };
- inline Lng32 defFakeRefTime()
- {
- return defFakeRefTime_;
- };
-
inline Lng32 partitioningSchemeSharing()
{
return partitioningSchemeSharing_;
@@ -1097,11 +1092,10 @@ private:
NABoolean reduceBaseHistograms_;
NABoolean reduceIntermediateHistograms_;
NABoolean preFetchHistograms_;
+ Int64 siKeyGCinterval_; // query/security invalidation key garbage collection interval, in seconds
NABoolean ustatAutomation_;
double histDefaultSampleSize_;
- Lng32 defRefTime_;
- Lng32 defFakeRefTime_;
double baseHistogramReductionFF_;
double intermediateHistogramReductionFF_;
double histogramReductionConstantAlpha_;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/regress/compGeneral/EXPECTED011.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED011.SB b/core/sql/regress/compGeneral/EXPECTED011.SB
index 77c9d8a..9b78022 100644
--- a/core/sql/regress/compGeneral/EXPECTED011.SB
+++ b/core/sql/regress/compGeneral/EXPECTED011.SB
@@ -1570,6 +1570,8 @@ A
*** WARNING[2997] (Attempting to unnest Subquery)
+*** WARNING[6007] Multi-column statistics for columns (C, D) from table TRAFODION.SCH.T40 were not available. The columns were being used by GroupBy operator. As a result, the access path chosen might not be the best possible.
+
--- SQL command prepared.
>>
>>execute explainIt;
@@ -1693,6 +1695,8 @@ A
*** WARNING[2997] (Attempting to unnest Subquery)
+*** WARNING[6007] Multi-column statistics for columns (C, D) from table TRAFODION.SCH.T40 were not available. The columns were being used by GroupBy operator. As a result, the access path chosen might not be the best possible.
+
--- SQL command prepared.
>>
>>execute explainIt;
@@ -1838,8 +1842,8 @@ ss ?
A (EXPR)
---------- ----------
-ss ?
xx ?
+ss ?
xx ?
--- 3 row(s) selected.
@@ -1853,9 +1857,9 @@ xx ?
A (EXPR)
---------- ----------
-xx ?
ss ?
xx ?
+xx ?
--- 3 row(s) selected.
>>
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/regress/compGeneral/EXPECTED015.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED015.SB b/core/sql/regress/compGeneral/EXPECTED015.SB
index 5065fd0..b5e11d4 100755
--- a/core/sql/regress/compGeneral/EXPECTED015.SB
+++ b/core/sql/regress/compGeneral/EXPECTED015.SB
@@ -465,8 +465,8 @@ z y 25
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T0 1.000E+002 100 fragment
+ROOT 1.000E+001 10 fragment_
+TRAFODION_SCAN T0 1.000E+001 10 fragment_
--- 2 row(s) selected.
>>
@@ -493,8 +493,8 @@ TRAFODION_SCAN T6 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T8 1.000E+002 100 fragment
+ROOT 1.000E+003 1000 fragmen
+TRAFODION_SCAN T8 1.000E+003 1000 fragmen
--- 2 row(s) selected.
>>
@@ -507,8 +507,8 @@ TRAFODION_SCAN T8 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T9 1.000E+002 100 fragment
+ROOT 1.000E+004 10000 fragme
+TRAFODION_SCAN T9 1.000E+004 10000 fragme
--- 2 row(s) selected.
>>
@@ -521,8 +521,8 @@ TRAFODION_SCAN T9 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 2 row(s) selected.
>>
@@ -535,8 +535,8 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.300E+001 100 fragment
-TRAFODION_SCAN T10 1.300E+001 100 fragment
+ROOT 1.250E+004 100000 fragm
+TRAFODION_SCAN T10 1.250E+004 100000 fragm
--- 2 row(s) selected.
>>select count(*) from (SELECT * FROM t10 WHERE d like 'one%') as t;
@@ -557,8 +557,8 @@ TRAFODION_SCAN T10 1.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 8.900E+001 100 fragment
-TRAFODION_SCAN T10 8.900E+001 100 fragment
+ROOT 8.750E+004 100000 fragm
+TRAFODION_SCAN T10 8.750E+004 100000 fragm
--- 2 row(s) selected.
>>select count(*) from (SELECT * FROM t10 WHERE d not like 'one%') as t;
@@ -618,8 +618,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+001 99 fragment_
-TRAFODION_SCAN T10 1.000E+001 99 fragment_
+ROOT 1.000E+004 10000 fragme
+TRAFODION_SCAN T10 1.000E+004 10000 fragme
--- 2 row(s) selected.
>>select count(*) from (SELECT * FROM t10 WHERE d = 'one') as t;
@@ -641,8 +641,8 @@ TRAFODION_SCAN T10 1.000E+001 99 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 5.000E+001 50 fragment_
-TRAFODION_SCAN T10 5.000E+001 50 fragment_
+ROOT 1.000E+004 10000 fragme
+TRAFODION_SCAN T10 1.000E+004 10000 fragme
--- 2 row(s) selected.
>>
@@ -656,8 +656,8 @@ TRAFODION_SCAN T10 5.000E+001 50 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 50 fragment_
-TRAFODION_SCAN T10 3.300E+001 50 fragment_
+ROOT 9.999E+004 99999 fragme
+TRAFODION_SCAN T10 9.999E+004 99999 fragme
--- 2 row(s) selected.
>>
@@ -670,8 +670,8 @@ TRAFODION_SCAN T10 3.300E+001 50 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.400E+001 50 fragment_
-TRAFODION_SCAN T10 3.300E+001 50 fragment_
+ROOT 9.999E+004 99999 fragme
+TRAFODION_SCAN T10 9.999E+004 99999 fragme
--- 2 row(s) selected.
>>
@@ -684,8 +684,8 @@ TRAFODION_SCAN T10 3.300E+001 50 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 50 fragment_
-TRAFODION_SCAN T10 3.300E+001 50 fragment_
+ROOT 1.000E+000 1 fragment_i
+TRAFODION_SCAN T10 1.000E+000 1 fragment_i
--- 2 row(s) selected.
>>
@@ -698,8 +698,8 @@ TRAFODION_SCAN T10 3.300E+001 50 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 51 fragment_
-TRAFODION_SCAN T10 3.300E+001 51 fragment_
+ROOT 2.000E+000 2 fragment_i
+TRAFODION_SCAN T10 2.000E+000 2 fragment_i
--- 2 row(s) selected.
>>
@@ -712,8 +712,8 @@ TRAFODION_SCAN T10 3.300E+001 51 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 6.700E+001 100 fragment
-TRAFODION_SCAN T10 6.700E+001 100 fragment
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 2 row(s) selected.
>>
@@ -727,8 +727,8 @@ TRAFODION_SCAN T10 6.700E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 56 fragment_
-TRAFODION_SCAN T10 3.300E+001 56 fragment_
+ROOT 5.000E+004 50000 fragme
+TRAFODION_SCAN T10 5.000E+004 50000 fragme
--- 2 row(s) selected.
>>
@@ -741,8 +741,8 @@ TRAFODION_SCAN T10 3.300E+001 56 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 78 fragment_
-TRAFODION_SCAN T10 3.300E+001 78 fragment_
+ROOT 6.000E+004 60000 fragme
+TRAFODION_SCAN T10 6.000E+004 60000 fragme
--- 2 row(s) selected.
>>
@@ -755,8 +755,8 @@ TRAFODION_SCAN T10 3.300E+001 78 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 44 fragment_
-TRAFODION_SCAN T10 3.300E+001 44 fragment_
+ROOT 4.000E+004 40000 fragme
+TRAFODION_SCAN T10 4.000E+004 40000 fragme
--- 2 row(s) selected.
>>
@@ -769,8 +769,8 @@ TRAFODION_SCAN T10 3.300E+001 44 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 72 fragment_
-TRAFODION_SCAN T10 3.300E+001 72 fragment_
+ROOT 5.000E+004 50000 fragme
+TRAFODION_SCAN T10 5.000E+004 50000 fragme
--- 2 row(s) selected.
>>
@@ -783,8 +783,8 @@ TRAFODION_SCAN T10 3.300E+001 72 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 6.700E+001 100 fragment
-TRAFODION_SCAN T10 6.700E+001 100 fragment
+ROOT 9.000E+004 90000 fragme
+TRAFODION_SCAN T10 9.000E+004 90000 fragme
--- 2 row(s) selected.
>>
@@ -797,8 +797,8 @@ TRAFODION_SCAN T10 6.700E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -811,8 +811,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -825,8 +825,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -839,8 +839,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -853,8 +853,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 5.000E+001 100 fragment
-TRAFODION_SCAN T10 5.000E+001 100 fragment
+ROOT 9.999E+004 100000 fragm
+TRAFODION_SCAN T10 9.999E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -867,8 +867,8 @@ TRAFODION_SCAN T10 5.000E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -881,8 +881,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -895,8 +895,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -909,8 +909,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -923,8 +923,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 5.000E+001 100 fragment
-TRAFODION_SCAN T10 5.000E+001 100 fragment
+ROOT 9.000E+004 100000 fragm
+TRAFODION_SCAN T10 9.000E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -951,8 +951,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 2 row(s) selected.
>>
@@ -979,8 +979,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 9.900E+001 100 fragment
-TRAFODION_SCAN T10 9.900E+001 100 fragment
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 2 row(s) selected.
>>
@@ -993,8 +993,8 @@ TRAFODION_SCAN T10 9.900E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 5.000E+001 100 fragment
-TRAFODION_SCAN T10 5.000E+001 100 fragment
+ROOT 5.000E+004 100000 fragm
+TRAFODION_SCAN T10 5.000E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1007,8 +1007,8 @@ TRAFODION_SCAN T10 5.000E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1021,8 +1021,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1035,8 +1035,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1049,8 +1049,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.300E+001 100 fragment
-TRAFODION_SCAN T10 3.300E+001 100 fragment
+ROOT 3.333E+004 100000 fragm
+TRAFODION_SCAN T10 3.333E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1063,8 +1063,8 @@ TRAFODION_SCAN T10 3.300E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 5.000E+001 100 fragment
-TRAFODION_SCAN T10 5.000E+001 100 fragment
+ROOT 5.000E+004 100000 fragm
+TRAFODION_SCAN T10 5.000E+004 100000 fragm
--- 2 row(s) selected.
>>
@@ -1077,8 +1077,8 @@ TRAFODION_SCAN T10 5.000E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.500E+001 15 fragment_
-TRAFODION_SCAN T10 1.100E+001 11 fragment_
+ROOT 3.000E+000 3 fragment_i
+TRAFODION_SCAN T10 3.000E+000 3 fragment_i
--- 2 row(s) selected.
>>
@@ -1091,8 +1091,8 @@ TRAFODION_SCAN T10 1.100E+001 11 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.100E+001 78 fragment_
-TRAFODION_SCAN T10 1.100E+001 78 fragment_
+ROOT 5.000E+004 50000 fragme
+TRAFODION_SCAN T10 5.000E+004 50000 fragme
--- 2 row(s) selected.
>>
@@ -1133,8 +1133,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.100E+001 51 fragment_
-TRAFODION_SCAN T10 1.100E+001 51 fragment_
+ROOT 1.000E+004 10001 fragme
+TRAFODION_SCAN T10 1.000E+004 10001 fragme
--- 2 row(s) selected.
>>
@@ -1147,8 +1147,8 @@ TRAFODION_SCAN T10 1.100E+001 51 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 7.500E+001 100 fragment
-TRAFODION_SCAN T10 7.500E+001 100 fragment
+ROOT 1.000E+004 10001 fragme
+TRAFODION_SCAN T10 1.000E+004 10001 fragme
--- 2 row(s) selected.
>>
@@ -1174,8 +1174,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.300E+001 50 fragment_
-TRAFODION_SCAN T10 1.300E+001 50 fragment_
+ROOT 1.250E+004 12500 fragme
+TRAFODION_SCAN T10 1.250E+004 12500 fragme
--- 2 row(s) selected.
>> -- min(1e5, 1e4) should = 1e4
@@ -1202,8 +1202,8 @@ TRAFODION_SCAN T10 1.000E+000 1 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+001 99 fragment_
-TRAFODION_SCAN T10 1.000E+001 99 fragment_
+ROOT 1.000E+000 10000 fragme
+TRAFODION_SCAN T10 1.000E+000 10000 fragme
--- 2 row(s) selected.
>> -- min(1e4, 1e5) should = 1e4
@@ -1220,8 +1220,8 @@ TRAFODION_SCAN T10 1.000E+001 99 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 2.000E+001 100 fragment
-TRAFODION_SCAN T10 2.000E+001 100 fragment
+ROOT 2.000E+002 200 fragment
+TRAFODION_SCAN T10 2.000E+002 200 fragment
--- 2 row(s) selected.
>>-- maxSel("b in (1,2)") is min(maxSel("b=1")+maxSel("b=2"),1.)
@@ -1234,8 +1234,8 @@ TRAFODION_SCAN T10 2.000E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 3.000E+000 3 fragment_i
-TRAFODION_SCAN T10 2.000E+000 2 fragment_i
+ROOT 2.000E+000 3 fragment_i
+TRAFODION_SCAN T10 2.000E+000 3 fragment_i
--- 2 row(s) selected.
>> -- maxSel(p1 and p2) is min(maxSel(p1), maxSel(p2))
@@ -1248,8 +1248,8 @@ TRAFODION_SCAN T10 2.000E+000 2 fragment_i
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 2.700E+001 100 fragment
-TRAFODION_SCAN T10 2.700E+001 100 fragment
+ROOT 2.030E+002 203 fragment
+TRAFODION_SCAN T10 2.030E+002 203 fragment
--- 2 row(s) selected.
>> -- maxSel(p1 or p2) is min(maxSel(p1)+maxSel(p2),1)
@@ -1265,10 +1265,10 @@ TRAFODION_SCAN T10 2.700E+001 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T1 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+NESTED_JOIN 1.000E+001 10 fragment_
+ROOT 1.000E+001 10 fragment_
+TRAFODION_SCAN T1 1.000E+001 10 fragment_
+TRAFODION_VSBB_S T10 1.000E+000 10 fragment_
--- 4 row(s) selected.
>>
@@ -1281,10 +1281,10 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T1 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+HYBRID_HASH_JOIN 1.000E+003 1000 fragmen
+ROOT 1.000E+003 1000 fragmen
+TRAFODION_SCAN T1 1.000E+001 10 fragment_
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 4 row(s) selected.
>>
@@ -1297,12 +1297,13 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T1 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+NESTED_JOIN 1.000E+001 10 fragment_
+PROBE_CACHE 1.000E+000 10 fragment_
+ROOT 1.000E+001 10 fragment_
+TRAFODION_SCAN T1 1.000E+001 10 fragment_
+TRAFODION_VSBB_S T10 1.000E+000 10 fragment_
---- 4 row(s) selected.
+--- 5 row(s) selected.
>>
>>-- test max cardinality for equi-joins where one side is complex
>>prepare xx from
@@ -1314,12 +1315,13 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
-TRAFODION_SCAN T8 1.000E+002 100 fragment
+NESTED_JOIN 1.000E+003 1000 fragmen
+PROBE_CACHE 1.000E+000 1000 fragmen
+ROOT 1.000E+003 1000 fragmen
+TRAFODION_SCAN T8 1.000E+003 1000 fragmen
+TRAFODION_VSBB_S T10 1.000E+000 1000 fragmen
---- 4 row(s) selected.
+--- 5 row(s) selected.
>>
>>prepare xx from
+>SELECT * FROM t9, t10 WHERE t9.a = t10.b-1;
@@ -1330,10 +1332,10 @@ TRAFODION_SCAN T8 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
-TRAFODION_SCAN T9 1.000E+002 100 fragment
+HYBRID_HASH_JOIN 1.000E+005 100000 fragm
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
+TRAFODION_SCAN T9 1.000E+004 10000 fragme
--- 4 row(s) selected.
>>
@@ -1346,10 +1348,10 @@ TRAFODION_SCAN T9 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 5.000E+003 5000 fragmen
-ROOT 5.000E+003 5000 fragmen
-TRAFODION_SCAN T10 1.000E+002 100 fragment
-TRAFODION_SCAN T9 1.000E+002 100 fragment
+HYBRID_HASH_JOIN 1.000E+006 1e+06 fragme
+ROOT 1.000E+006 1e+06 fragme
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
+TRAFODION_SCAN T9 1.000E+004 10000 fragme
--- 4 row(s) selected.
>>
@@ -1367,8 +1369,8 @@ TRAFODION_SCAN T9 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-ROOT 1.000E+002 100 fragment
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 2 row(s) selected.
>>select count(*) from (SELECT a,b,c,d FROM t10 GROUP BY a,b,c,d) as t;
@@ -1389,9 +1391,9 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HASH_GROUPBY 8.000E+000 8 fragment_i
-ROOT 8.000E+000 8 fragment_i
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+HASH_GROUPBY 1.000E+005 100000 fragm
+ROOT 1.000E+005 100000 fragm
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 3 row(s) selected.
>>select count(*) from (SELECT b,c,d FROM t10 GROUP BY b,c,d) as t;
@@ -1412,9 +1414,9 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HASH_GROUPBY 4.000E+000 4 fragment_i
-ROOT 4.000E+000 4 fragment_i
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+HASH_GROUPBY 1.000E+002 100 fragment
+ROOT 1.000E+002 100 fragment
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 3 row(s) selected.
>>select count(*) from (SELECT c,d FROM t10 GROUP BY c,d) as t;
@@ -1435,9 +1437,9 @@ TRAFODION_SCAN T10 1.000E+002 100 fragment
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HASH_GROUPBY 2.000E+000 2 fragment_i
-ROOT 2.000E+000 2 fragment_i
-TRAFODION_SCAN T10 1.000E+002 100 fragment
+HASH_GROUPBY 1.000E+001 10 fragment_
+ROOT 1.000E+001 10 fragment_
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
--- 3 row(s) selected.
>>select count(*) from (SELECT d FROM t10 GROUP BY d) as t;
@@ -1462,7 +1464,7 @@ OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 1.000E+001 99 fragment_
+TRAFODION_SCAN T10 1.000E+002 100 fragment
--- 3 row(s) selected.
>>prepare xx from SELECT count(*) FROM t10 where c = 1;
@@ -1475,7 +1477,7 @@ OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 1.000E+001 99 fragment_
+TRAFODION_SCAN T10 1.000E+003 1000 fragmen
--- 3 row(s) selected.
>>prepare xx from SELECT count(*) FROM t10 where b = 1 and c = 1;
@@ -1488,7 +1490,7 @@ OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 1.000E+000 99 fragment_
+TRAFODION_SCAN T10 1.000E+000 100 fragment
--- 3 row(s) selected.
>>
@@ -1504,7 +1506,7 @@ OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 3.300E+001 50 fragment_
+TRAFODION_SCAN T10 1.000E+003 1000 fragmen
--- 3 row(s) selected.
>>execute xx;
@@ -1526,7 +1528,7 @@ OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 3.300E+001 50 fragment_
+TRAFODION_SCAN T10 1.000E+003 1000 fragmen
--- 3 row(s) selected.
>>execute xx;
@@ -1582,11 +1584,11 @@ TRAFODION_SCAN T10 3.300E+001 50 fragment_
OPERATOR TAB_NAME CARDINALITY MAX_CARDINALITY
---------------- ---------- ----------- ---------------
-HYBRID_HASH_JOIN 1.000E+002 100 fragment
+HYBRID_HASH_JOIN 1.000E+004 10000 fragme
ROOT 1.000E+000 1 fragment_i
SORT_SCALAR_AGGR 1.000E+000 1 fragment_i
-TRAFODION_SCAN T10 1.000E+002 100 fragment
-TRAFODION_SCAN T9 1.000E+002 100 fragment
+TRAFODION_SCAN T10 1.000E+005 100000 fragm
+TRAFODION_SCAN T9 1.000E+004 10000 fragme
--- 5 row(s) selected.
>>execute xx;
@@ -2255,7 +2257,7 @@ OPERATOR
----------------
ROOT
-HYBRID_HASH_JOIN
+NESTED_JOIN
--- 2 row(s) selected.
>>
@@ -2268,7 +2270,7 @@ OPERATOR
----------------
ROOT
-HYBRID_HASH_JOIN
+NESTED_JOIN
--- 2 row(s) selected.
>>
@@ -2282,7 +2284,7 @@ OPERATOR
----------------
ROOT
-HYBRID_HASH_JOIN
+NESTED_JOIN
--- 2 row(s) selected.
>>
@@ -2686,7 +2688,12 @@ A B
--- SQL command prepared.
>>execute explainIt;
---- 0 row(s) selected.
+OPERATOR
+----------------
+
+TUPLELIST
+
+--- 1 row(s) selected.
>>execute XX;
A B C
@@ -2724,7 +2731,12 @@ A B C
--- SQL command prepared.
>>execute explainIt;
---- 0 row(s) selected.
+OPERATOR
+----------------
+
+TUPLELIST
+
+--- 1 row(s) selected.
>>execute XX;
A B C
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/regress/compGeneral/EXPECTED042
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED042 b/core/sql/regress/compGeneral/EXPECTED042
index a02e306..f6c7543 100644
--- a/core/sql/regress/compGeneral/EXPECTED042
+++ b/core/sql/regress/compGeneral/EXPECTED042
@@ -1,9 +1,9 @@
>>showstats for table t042_orderline on ol_o_id detail;
Detailed Histogram data for Table TRAFODION.ORDERENTRY.T042_ORDERLINE
-Table ID: 5468040854252687878
+Table ID: 4943375013317643387
-Hist ID: 540592453
+Hist ID: 796718003
Column(s): OL_O_ID
Total Rows: 10
Total UEC: 4
@@ -1789,21 +1789,18 @@ HQC key=SELECT T . VARCHAR0_UNIQ AS T_VARCHAR0_UNIQ , T . CHAR2_2 AS T_CHAR2_2 ,
>>-- test compile time
>>
>>sh more /proc/loadavg | cut -d' ' -f 1-3 | sed -e 's/^/System load: /' >> LOG042;
-System load: ::::::::::::::
-System load: /proc/loadavg
-System load: ::::::::::::::
-System load: 0.49 0.49 0.47
+System load: 2.85 3.75 3.68
>>sh grep "model name" /proc/cpuinfo | head -1 | cut -d '@' -f 2 | sed -e 's/^/CPU frequency: /' >> LOG042;
-CPU frequency: 2.40GHz
+CPU frequency: model name : Intel Core Processor (Haswell)
>>set statistics on;
>>prepare xx from select * from t042_orderline where ol_o_id = 1 ;
--- SQL command prepared.
-Start Time 2016/09/08 10:05:44.474034
-End Time 2016/09/08 10:05:44.474891
-Elapsed Time 00:00:00.000857
-Compile Time 00:00:00.000857
+Start Time 2016/10/19 02:41:10.451650
+End Time 2016/10/19 02:41:10.455362
+Elapsed Time 00:00:00.003712
+Compile Time 00:00:00.003712
Execution Time 00:00:00.000000
@@ -1834,10 +1831,10 @@ HQC key=SELECT * FROM T042_ORDERLINE WHERE OL_O_ID = #NP# ;
--- SQL command prepared.
-Start Time 2016/09/08 10:05:44.628323
-End Time 2016/09/08 10:05:44.628875
-Elapsed Time 00:00:00.000552
-Compile Time 00:00:00.000552
+Start Time 2016/10/19 02:41:10.663273
+End Time 2016/10/19 02:41:10.667240
+Elapsed Time 00:00:00.003967
+Compile Time 00:00:00.003967
Execution Time 00:00:00.000000
@@ -1878,7 +1875,7 @@ NUM_ENTRIES TEXT_ENTRIES NUM_PLANS
NUM_ENTRIES TEXT_ENTRIES NUM_PLANS
----------- ------------ ----------
- 22 0 22
+ 31 0 31
2 0 2
--- 2 row(s) selected.
@@ -1891,7 +1888,7 @@ NUM_ENTRIES TEXT_ENTRIES NUM_PLANS
----------- ------------ ----------
65 10 65
- 22 0 22
+ 31 0 31
2 0 2
--- 3 row(s) selected.
@@ -1987,6 +1984,10 @@ NUM_HITS NUM_PARAMS
0 1
0 1
0 1
+ 0 1
+ 0 1
+ 0 1
+ 0 1
0 2
0 2
0 2
@@ -1994,9 +1995,14 @@ NUM_HITS NUM_PARAMS
0 3
0 3
0 4
+ 0 4
0 5
1 1
1 1
+ 1 1
+ 1 1
+ 1 1
+ 1 1
1 2
1 2
1 3
@@ -2006,9 +2012,9 @@ NUM_HITS NUM_PARAMS
2 1
2 3
3 3
- 9 4
+ 12 4
---- 24 row(s) selected.
+--- 33 row(s) selected.
>>select num_hits, num_params from table(querycacheentries('ustats', 'local')) order by 1,2;
--- 0 row(s) selected.
@@ -2080,6 +2086,10 @@ NUM_HITS NUM_PARAMS
0 1
0 1
0 1
+ 0 1
+ 0 1
+ 0 1
+ 0 1
0 2
0 2
0 2
@@ -2088,6 +2098,7 @@ NUM_HITS NUM_PARAMS
0 3
0 3
0 4
+ 0 4
0 5
1 0
1 1
@@ -2102,6 +2113,10 @@ NUM_HITS NUM_PARAMS
1 1
1 1
1 1
+ 1 1
+ 1 1
+ 1 1
+ 1 1
1 2
1 2
1 2
@@ -2115,9 +2130,9 @@ NUM_HITS NUM_PARAMS
2 3
3 3
5 1
- 9 4
+ 12 4
---- 99 row(s) selected.
+--- 108 row(s) selected.
>>
>>
>>--Stats in Hybrid Query Cache
@@ -2134,7 +2149,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
---------- ---------- ---------------------- ----------------------
- 22 22 5 211
+ 29 31 5 211
2 2 5 211
--- 2 row(s) selected.
@@ -2147,7 +2162,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
---------- ---------- ---------------------- ----------------------
37 60 5 211
- 22 22 5 211
+ 29 31 5 211
2 2 5 211
--- 3 row(s) selected.
@@ -2228,6 +2243,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
134 1 1 0
142 0 1 0
142 1 1 0
+ 163 0 4 0
174 2 3 0
174 3 3 0
187 0 4 0
@@ -2238,6 +2254,14 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
208 0 5 0
222 0 3 1
222 1 3 1
+ 270 0 1 0
+ 270 1 1 0
+ 282 0 1 0
+ 282 1 1 0
+ 308 0 1 10
+ 308 0 1 10
+ 308 1 1 10
+ 308 1 1 10
314 0 3 1
314 0 3 1
314 2 1 0
@@ -2249,7 +2273,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
619 0 1 14
619 0 1 14
---- 24 row(s) selected.
+--- 33 row(s) selected.
>>select char_length(hkey), num_hits, num_PLiterals, num_NPLiterals from table(hybridquerycacheentries('ustats', 'local')) order by 1, 2, 3, 4;
--- 0 row(s) selected.
@@ -2322,6 +2346,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
134 1 1 0
142 0 1 0
142 1 1 0
+ 163 0 4 0
174 2 3 0
174 3 3 0
187 0 4 0
@@ -2332,6 +2357,14 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
208 0 5 0
222 0 3 1
222 1 3 1
+ 270 0 1 0
+ 270 1 1 0
+ 282 0 1 0
+ 282 1 1 0
+ 308 0 1 10
+ 308 0 1 10
+ 308 1 1 10
+ 308 1 1 10
314 0 3 1
314 0 3 1
314 2 1 0
@@ -2343,7 +2376,7 @@ NUM_HKEYS NUM_SKEYS NUM_MAX_VALUES_PER_KEY NUM_HASH_TABLE_BUCKETS
619 0 1 14
619 0 1 14
---- 84 row(s) selected.
+--- 93 row(s) selected.
>>
>>
>>-- virtual table ISP queries are not cacheable.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9a3cf2e5/core/sql/regress/core/EXPECTED005.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/core/EXPECTED005.SB b/core/sql/regress/core/EXPECTED005.SB
index 8b283d2..58987e7 100644
--- a/core/sql/regress/core/EXPECTED005.SB
+++ b/core/sql/regress/core/EXPECTED005.SB
@@ -1493,7 +1493,7 @@ S OPERATOR LC RC TAB_NAME
CONTEXT NUM_LOOKUPS NUM_CACHE_HITS NUM_ENTRIES MAX_CACHE_SIZE
-------- ----------- -------------- ----------- --------------
-NONE 165 135 16 20971520
+NONE 171 140 16 20971520
--- 1 row(s) selected.
>>
@@ -1568,7 +1568,7 @@ NONE 165 135 16 20971520
NUM_LOOKUPS NUM_CACHE_HITS NUM_ENTRIES MAX_CACHE_SIZE
----------- -------------- ----------- --------------
- 165 135 0 20971520
+ 171 140 0 20971520
--- 1 row(s) selected.
>>