[ 
https://issues.apache.org/jira/browse/PHOENIX-3516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15771007#comment-15771007
 ] 

Hudson commented on PHOENIX-3516:
---------------------------------

SUCCESS: Integrated in Jenkins build Phoenix-master #1522 (See 
[https://builds.apache.org/job/Phoenix-master/1522/])
PHOENIX-3516 Performance Issues with queries that have compound filters 
(tdsilva: rev c5046047a78e0365d75bc696dff4870304c2b5b2)
* (edit) phoenix-core/src/main/java/org/apache/phoenix/util/ExpressionUtil.java
* (edit) 
phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java
* (edit) 
phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeIntersectTest.java
* (edit) 
phoenix-core/src/main/java/org/apache/phoenix/compile/WhereCompiler.java


> Performance Issues with queries that have compound filters and specify 
> phoenix.query.force.rowkeyorder=true
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-3516
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3516
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.9.0
>            Reporter: Jan Fernando
>            Assignee: Thomas D'Silva
>             Fix For: 4.9.1, 4.10.0
>
>         Attachments: PHOENIX-3516.patch
>
>
> On all our connections we specify the phoenix.query.force.rowkeyorder=true 
> property to force serial scans so that we only support queries that will 
> scale horizontally with data size. 
> In running performance tests, we found that queries with multiple AND'ed 
> range filters were slow and not performing not as expected. We looked at the 
> query plan and noticed that, in the slow query case, the query plan is doing 
> a PARALLEL 1-WAY SCAN and doing a SERVER FILTER BY whereas the fast query is 
> simply doing a SERIAL 1-WAY RANGE SCAN.
> We expect these queries to both have the same plan as we are specifying 
> phoenix.query.force.rowkeyorder=true.
> You can repro as follows:
> 1. Use non-tenant specific connection to create the table:
> CREATE TABLE IF NOT EXISTS MY_MT_TABLE.TEST_TABLE (
>     ORGANIZATION_ID CHAR(15) NOT NULL,
>     PARENT_TYPE CHAR(3) NOT NULL,
>     PARENT_ID CHAR(15) NOT NULL,
>     CREATED_DATE DATE NOT NULL
>     CONSTRAINT PK PRIMARY KEY 
>     (
>         ORGANIZATION_ID, 
>         PARENT_TYPE,
>         PARENT_ID,
>         CREATED_DATE DESC
>     )
> ) VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1;
> 2. Use non-tenant specific connection to execute index:
> CREATE INDEX IF NOT EXISTS MY_TEST_TABLE_INDEX 
> ON MY_MT_TABLE.TEST_TABLE (PARENT_TYPE, CREATED_DATE, PARENT_ID);
> 3. Use a tenant-specific connection to create the View:
> CREATE VIEW IF NOT EXISTS MY_TEST_TABLE_VIEW AS SELECT * FROM 
> MY_MT_TABLE.TEST_TABLE;
> 4. Run queries below with tenant-specific connection:
> Query with expected plan:
> EXPLAIN SELECT PARENT_ID
> FROM MY_TEST_TABLE_VIEW
> WHERE PARENT_TYPE='001'
> AND (CREATED_DATE > to_date('2012-10-21') AND CREATED_DATE < 
> to_date('2016-10-31'))
> ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501;
> +------------------------------------------+
> |                   PLAN                   |
> +------------------------------------------+
> | CLIENT 1-CHUNK SERIAL 1-WAY RANGE SCAN OVER MY_MT_TABLE.MY_TEST_TABLE_INDEX 
> ['00Dxx0000001gFA','001','2012-10-21 00:00:00.001'] - 
> ['00Dxx0000001gFA','001',' |
> |     SERVER FILTER BY FIRST KEY ONLY      |
> |     SERVER 501 ROW LIMIT                 |
> | CLIENT 501 ROW LIMIT                     |
> +------------------------------------------+
> Slow query with unexpected plan. Since the date range are overlapping we 
> expected Phoenix to consolidate this into a the smallest matching range and 
> do a range scan. It does seem to do the consolidation but then do a parallel 
> and not a range scan.
> EXPLAIN SELECT PARENT_ID
> FROM MY_TEST_TABLE_VIEW
> WHERE PARENT_TYPE='001'
> AND (CREATED_DATE >= to_date('2011-01-01') AND CREATED_DATE <= 
> to_date('2016-01-01'))
> AND (CREATED_DATE > to_date('2012-10-21') AND CREATED_DATE < 
> to_date('2016-10-31'))
> ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501;
> +------------------------------------------+
> |                   PLAN                   |
> +------------------------------------------+
> | CLIENT 1-CHUNK PARALLEL 1-WAY RANGE SCAN OVER 
> MY_MT_TABLE.MY_TEST_TABLE_INDEX ['00Dxx0000001gFA','001','2012-10-21 
> 00:00:00.001'] - ['00Dxx0000001gFA','001' |
> |     SERVER FILTER BY FIRST KEY ONLY AND (true AND true) |
> |     SERVER 501 ROW LIMIT                 |
> | CLIENT 501 ROW LIMIT                     |
> +------------------------------------------+



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to