You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2016/02/13 03:43:26 UTC

phoenix git commit: PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available

Repository: phoenix
Updated Branches:
  refs/heads/calcite 8b68b1c4e -> 52ba5d24d


PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/52ba5d24
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/52ba5d24
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/52ba5d24

Branch: refs/heads/calcite
Commit: 52ba5d24d6217b0f619f3dd143142ef86cbab02e
Parents: 8b68b1c
Author: maryannxue <ma...@gmail.com>
Authored: Fri Feb 12 21:43:12 2016 -0500
Committer: maryannxue <ma...@gmail.com>
Committed: Fri Feb 12 21:43:12 2016 -0500

----------------------------------------------------------------------
 .../it/java/org/apache/phoenix/calcite/CalciteIndexIT.java  | 2 +-
 .../main/java/org/apache/phoenix/calcite/PhoenixTable.java  | 5 +----
 .../phoenix/calcite/rel/PhoenixAbstractAggregate.java       | 3 ++-
 .../java/org/apache/phoenix/calcite/rel/PhoenixRel.java     | 2 +-
 .../org/apache/phoenix/calcite/rel/PhoenixTableScan.java    | 9 +++++++--
 5 files changed, 12 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java
index 3f0f754..d1aea74 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java
@@ -93,7 +93,7 @@ public class CalciteIndexIT extends BaseCalciteIT {
                        "  PhoenixServerProject(A_STRING=[$0])\n" +
                        "    PhoenixTableScan(table=[[phoenix, IDX1]], scanOrder=[FORWARD])\n")
             .close();
-        start(true, 1000f).sql("select a_string from aTable order by organization_id")
+        start(true, 1000000f).sql("select a_string from aTable order by organization_id")
             .explainIs("PhoenixToEnumerableConverter\n" +
                        "  PhoenixServerProject(A_STRING=[$2], ORGANIZATION_ID=[$0])\n" +
                        "    PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n")

http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
index 1539dcd..fea4c8a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
@@ -21,7 +21,6 @@ import org.apache.calcite.schema.impl.AbstractTable;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.phoenix.calcite.rel.PhoenixRel;
 import org.apache.phoenix.calcite.rel.PhoenixTableScan;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.query.QueryServices;
@@ -185,9 +184,7 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable {
         return new Statistic() {
             @Override
             public Double getRowCount() {
-                float f = pc.getQueryServices().getProps().getFloat(
-                        PhoenixRel.ROW_COUNT_FACTOR, 1f);
-                return (double) (rowCount * f);
+                return (double) rowCount;
             }
 
             @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
index 9d76f59..de9f0c2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
@@ -105,6 +105,7 @@ abstract public class PhoenixAbstractAggregate extends Aggregate implements Phoe
             return planner.getCostFactory().makeInfiniteCost();
         
         double rowCount = mq.getRowCount(this);
+        double bytesPerRow = mq.getAverageRowSize(this);
         if (isOrderedGroupBy) {
             rowCount = (rowCount * rowCount) / Util.nLogN(rowCount);
         }
@@ -117,7 +118,7 @@ abstract public class PhoenixAbstractAggregate extends Aggregate implements Phoe
             multiplier += 0.0125f;
           }
         }
-        return planner.getCostFactory().makeCost(rowCount * multiplier, 0, 0);
+        return planner.getCostFactory().makeCost(rowCount * multiplier * bytesPerRow, 0, 0);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
index 501060e..f6b0e97 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
@@ -46,7 +46,7 @@ public interface PhoenixRel extends RelNode {
    * <p>Multiply by the value (which is less than unity), and you will get a cheaper cost.
    * Server is cheaper.
    */
-  double SERVER_FACTOR = 0.1;
+  double SERVER_FACTOR = 0.2;
 
   QueryPlan implement(Implementor implementor);
   

http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
index d9fa23f..0841006 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
@@ -73,6 +73,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
     public final ScanRanges scanRanges;
     
     protected final GuidePostsInfo filteredGuideposts;
+    protected final float rowCountFactor;
     
     public static PhoenixTableScan create(RelOptCluster cluster, final RelOptTable table) {
         return create(cluster, table, null,
@@ -100,6 +101,9 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
         super(cluster, traits, table);
         this.filter = filter;
         this.scanOrder = scanOrder;
+        final PhoenixTable phoenixTable = table.unwrap(PhoenixTable.class);
+        this.rowCountFactor = phoenixTable.pc.getQueryServices()
+                .getProps().getFloat(PhoenixRel.ROW_COUNT_FACTOR, 1f);
         
         ScanRanges scanRanges = null;
         GuidePostsInfo info = null;
@@ -107,7 +111,6 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
         if (filter != null) {
             try {
                 // TODO simplify this code
-                final PhoenixTable phoenixTable = table.unwrap(PhoenixTable.class);
                 PTable pTable = phoenixTable.getTable();
                 TableRef tableRef = new TableRef(CalciteUtils.createTempAlias(), pTable, HConstants.LATEST_TIMESTAMP, false);
                 // We use a implementor with a special implementation for field access
@@ -239,6 +242,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
         } else {
             byteCount = phoenixTable.byteCount;
         }
+        byteCount *= rowCountFactor;
         if (scanOrder != ScanOrder.NONE) {
             // We don't want to make a big difference here. The idea is to avoid
             // forcing row key order whenever the order is absolutely useless.
@@ -257,6 +261,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
         }
         return planner.getCostFactory()
                 .makeCost(byteCount, byteCount + 1, 0)
+                .multiplyBy(SERVER_FACTOR)
                 .multiplyBy(PHOENIX_FACTOR);
     }
     
@@ -267,7 +272,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
             rows = rows * mq.getSelectivity(this, filter);
         }
         
-        return rows;
+        return rows * rowCountFactor;
     }
     
     @Override