You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by su...@apache.org on 2015/12/01 17:19:48 UTC

[1/2] incubator-trafodion git commit: fix JIRA 1654 for Trafodion

Repository: incubator-trafodion
Updated Branches:
  refs/heads/master 7072c24fa -> e3c7928af


fix JIRA 1654 for Trafodion


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/f8ff39c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/f8ff39c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/f8ff39c8

Branch: refs/heads/master
Commit: f8ff39c86fe95cd2889aab94aa513c46338d4517
Parents: 80d6cff
Author: Qifan Chen <qf...@dev02.trafodion.org>
Authored: Mon Nov 30 14:55:20 2015 +0000
Committer: Qifan Chen <qf...@dev02.trafodion.org>
Committed: Mon Nov 30 14:55:20 2015 +0000

----------------------------------------------------------------------
 core/sql/optimizer/ScanOptimizer.cpp | 63 ++++++++++++++++++++++++++++---
 core/sql/sqlcomp/DefaultConstants.h  | 14 ++++++-
 core/sql/sqlcomp/nadefaults.cpp      |  6 ++-
 3 files changed, 75 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f8ff39c8/core/sql/optimizer/ScanOptimizer.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ScanOptimizer.cpp b/core/sql/optimizer/ScanOptimizer.cpp
index 65ec12a..6e60dc8 100644
--- a/core/sql/optimizer/ScanOptimizer.cpp
+++ b/core/sql/optimizer/ScanOptimizer.cpp
@@ -317,7 +317,14 @@ void MdamTrace::setLevel(enum MdamTraceLevel l)
 #endif // if MDAM_TRACE
 // LCOV_EXCL_STOP
 
-static NABoolean checkMDAMadditionalRestriction(const ColumnOrderList& keyPredsByCol,const CollIndex&  lastColumnPosition, CollIndex&  noOfmissingKeyColumns, CollIndex&  presentKeyColumns)
+enum restrictCheckStrategy { MAJORITY_WITH_PREDICATES=1, TOTAL_UECS=2, BOTH=3 };
+
+static NABoolean checkMDAMadditionalRestriction(
+    const ColumnOrderList& keyPredsByCol,
+    const CollIndex& lastColumnPosition, 
+    const Histograms& hist,
+    restrictCheckStrategy strategy,
+    CollIndex&  noOfmissingKeyColumns, CollIndex&  presentKeyColumns)
 {
    KeyColumns::KeyColumn::KeyColumnType typeOfRange = KeyColumns::KeyColumn::EMPTY;
    CollIndex index = 0;
@@ -331,9 +338,22 @@ static NABoolean checkMDAMadditionalRestriction(const ColumnOrderList& keyPredsB
    if ( mtd_mdam_uec_threshold < 0 )
      checkLeadingDivColumns = FALSE;
 
+   CostScalar totalRC = hist.getRowCount().getCeiling();
+
+   float totalUEC_threshold = 1;
+
+   Lng32 minRC = (ActiveSchemaDB()->getDefaults()).getAsLong(MDAM_TOTAL_UEC_CHECK_MIN_RC_THRESHOLD);
+
+   if ( totalRC > minRC )
+     (ActiveSchemaDB()->getDefaults()).getFloat(MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD, totalUEC_threshold);
+
+   totalUEC_threshold *= totalRC.getValue();
+
    NABoolean isLeadingDivisionColumn = FALSE;
    NABoolean isLeadingSaltColumn = FALSE;
 
+   CostScalar totalUecsForKeylessKeyColumns = 1;
+
    for (index = 0; index < lastColumnPosition; index++)
    {
      if (keyPredsByCol.getPredicateExpressionPtr(index) != NULL)
@@ -367,6 +387,11 @@ static NABoolean checkMDAMadditionalRestriction(const ColumnOrderList& keyPredsB
            )
            noOfmissingKeyColumns++;
 
+        // accumulate the product of uecs for columns without predicates
+                   
+        totalUecsForKeylessKeyColumns *= hist.getColStatsForColumn(
+                   keyPredsByCol.getKeyColumnId(index)).getTotalUec().getCeiling();
+
      } else {
 
         checkLeadingDivColumns = FALSE;
@@ -374,8 +399,21 @@ static NABoolean checkMDAMadditionalRestriction(const ColumnOrderList& keyPredsB
 
      }
    }     
-   if(presentKeyColumns > noOfmissingKeyColumns) return TRUE;
-   return FALSE;
+   switch ( strategy ) {
+     case MAJORITY_WITH_PREDICATES:
+        return (presentKeyColumns > noOfmissingKeyColumns);
+
+     case TOTAL_UECS:
+        return ( totalUecsForKeylessKeyColumns < totalUEC_threshold );
+
+     case BOTH:
+        return ( presentKeyColumns > noOfmissingKeyColumns &&
+                 totalUecsForKeylessKeyColumns < totalUEC_threshold );
+
+     default:
+       return FALSE;
+  }
+  return FALSE;
 }
 
 // stack allocated only
@@ -8710,12 +8748,25 @@ void MDAMCostWA::computeDisjunct()
 
   CollIndex noOfmissingKeyColumnsTot = 0;
   CollIndex presentKeyColumnsTot = 0;
+
+
+  const IndexDesc *idesc = optimizer_.getFileScan().getIndexDesc();
+  const ColStatDescList& csdl = idesc->getPrimaryTableDesc()->getTableColStats();
+  Histograms hist(csdl);
+	 
+  Lng32 checkOption = (ActiveSchemaDB()->getDefaults()).getAsLong(MDAM_APPLY_RESTRICTION_CHECK);
+
   if(CURRSTMT_OPTDEFAULTS->indexEliminationLevel() != OptDefaults::MINIMUM
      && (!mdamForced_)
 	 && (CmpCommon::getDefault(RANGESPEC_TRANSFORMATION) == DF_ON )
-	 && (CmpCommon::getDefault(MDAM_APPLY_RESTRICTION_CHECK) == DF_ON )
-	 &&
-   (!checkMDAMadditionalRestriction(keyPredsByCol,optimizer_.computeLastKeyColumnOfDisjunct(keyPredsByCol),noOfmissingKeyColumnsTot,presentKeyColumnsTot))
+	 && checkOption >= 1 
+	 && (!checkMDAMadditionalRestriction(
+                                    keyPredsByCol,
+                                    optimizer_.computeLastKeyColumnOfDisjunct(keyPredsByCol),
+                                    hist,
+                                    (restrictCheckStrategy)checkOption,
+                                    noOfmissingKeyColumnsTot,
+                                    presentKeyColumnsTot))
    )
   {
         

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f8ff39c8/core/sql/sqlcomp/DefaultConstants.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/DefaultConstants.h b/core/sql/sqlcomp/DefaultConstants.h
index 07f58d0..1a988b4 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -3768,9 +3768,21 @@ enum DefaultConstants
   HBASE_UPDATE_COSTING,
   TRAF_LOAD_FLUSH_SIZE_IN_KB,
 
-  // decide if to apply the additional restriction check (majority of keys with predicates)
+  // Specify whic additional restriction check to apply
+  //  0: no check
+  //  1: apply majority of keys with predicates check
+  //  2: apply total UECs on keyless key columns check
+  //  3: apply both 1) and 2)
   MDAM_APPLY_RESTRICTION_CHECK,
 
+  // A threshold of total UECs on keyless key columns above which MDAM will not be considered.
+  // The threshold is expressed as a percentage of the total RC.
+  MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD,
+
+  // A threshold of minitmal RC above which the above total UEC check will be applied.
+  MDAM_TOTAL_UEC_CHECK_MIN_RC_THRESHOLD,
+
+
   // This enum constant must be the LAST one in the list; it's a count,
   // not an Attribute (it's not IN DefaultDefaults; it's the SIZE of it)!
   __NUM_DEFAULT_ATTRIBUTES

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f8ff39c8/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 4e11bf9..e63b685 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -2160,7 +2160,7 @@ SDDkwd__(ISO_MAPPING,           (char *)SQLCHARSETSTRING_ISO88591),
   XDDflt__(MC_SKEW_SENSITIVITY_THRESHOLD,        "0.1"),
 
 
-  DDkwd__(MDAM_APPLY_RESTRICTION_CHECK,	"OFF"),
+  DDui___(MDAM_APPLY_RESTRICTION_CHECK,	            "2"),
   DDflt0_(MDAM_CPUCOST_NET_OVH,			"2000."),
 
 
@@ -2180,6 +2180,10 @@ SDDkwd__(ISO_MAPPING,           (char *)SQLCHARSETSTRING_ISO88591),
   XDDkwd__(MDAM_SCAN_METHOD,			"ON"),
 
   DDflt0_(MDAM_SELECTION_DEFAULT,		"0.5"),
+
+  DDflt0_(MDAM_TOTAL_UEC_CHECK_MIN_RC_THRESHOLD, "10000"),
+  DDflt0_(MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD,	 "0.01"),
+
   DDkwd__(MDAM_TRACING,			        "OFF"),
 
   // controls the max. number of probes at which MDAM under NJ plan will be


[2/2] incubator-trafodion git commit: Merge remote branch 'origin/pr/195/head' into mrg_87

Posted by su...@apache.org.
Merge remote branch 'origin/pr/195/head' into mrg_87


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/e3c7928a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/e3c7928a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/e3c7928a

Branch: refs/heads/master
Commit: e3c7928afd331d085b98c230cd1512edb42c2427
Parents: 7072c24 f8ff39c
Author: Suresh Subbiah <su...@apache.org>
Authored: Tue Dec 1 16:19:24 2015 +0000
Committer: Suresh Subbiah <su...@apache.org>
Committed: Tue Dec 1 16:19:24 2015 +0000

----------------------------------------------------------------------
 core/sql/optimizer/ScanOptimizer.cpp | 63 ++++++++++++++++++++++++++++---
 core/sql/sqlcomp/DefaultConstants.h  | 14 ++++++-
 core/sql/sqlcomp/nadefaults.cpp      |  6 ++-
 3 files changed, 75 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e3c7928a/core/sql/optimizer/ScanOptimizer.cpp
----------------------------------------------------------------------