You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Ankit Singhal (JIRA)" <ji...@apache.org> on 2016/08/02 07:45:20 UTC
[jira] [Assigned] (PHOENIX-3133) Investigate why offset queries
with reverse scan take a long time
[ https://issues.apache.org/jira/browse/PHOENIX-3133?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ankit Singhal reassigned PHOENIX-3133:
--------------------------------------
Assignee: Ankit Singhal
> Investigate why offset queries with reverse scan take a long time
> -----------------------------------------------------------------
>
> Key: PHOENIX-3133
> URL: https://issues.apache.org/jira/browse/PHOENIX-3133
> Project: Phoenix
> Issue Type: Bug
> Reporter: Samarth Jain
> Assignee: Ankit Singhal
> Fix For: 4.8.1
>
>
> We need to workaround HBASE-16296 because users of Phoenix won't see the fix until at least the fix makes it into a release version of HBase. Unfortunately, often times users are forced to stick to earlier version of HBase, even after a release. PHOENIX-3121 works around the issue when there's only a LIMIT clause. However, if there's a LIMIT and an OFFSET, the issue still occurs.
> Repro code courtesy, [~mujtabachohan]
> {code}
> DDL:
> CREATE TABLE IF NOT EXISTS XYZ.T (
> TENANT_ID CHAR(15) NOT NULL,
> KEY_PREFIX CHAR(3) NOT NULL,
> CREATED_DATE DATE,
> CREATED_BY CHAR(15),
> LAST_UPDATE DATE,
> LAST_UPDATE_BY CHAR(15),
> SYSTEM_MODSTAMP DATE
> CONSTRAINT PK PRIMARY KEY (
> TENANT_ID,
> KEY_PREFIX
> )
> ) VERSIONS=1, IMMUTABLE_ROWS=true, MULTI_TENANT=true, REPLICATION_SCOPE=1
>
> CREATE VIEW IF NOT EXISTS XYZ.ABC_VIEW (
> ACTIVITY_DATE DATE NOT NULL,
> WHO_ID CHAR(15) NOT NULL,
> WHAT_ID CHAR(15) NOT NULL,
> CHANNEL_TYPE VARCHAR NOT NULL,
> CHANNEL_ACTION_TYPE VARCHAR NOT NULL,
> ENGAGEMENT_HISTORY_POC_ID CHAR(15) ,
> CHANNEL_CONTEXT VARCHAR
> CONSTRAINT PKVIEW PRIMARY KEY
> (
> ACTIVITY_DATE, WHO_ID, WHAT_ID, CHANNEL_TYPE, CHANNEL_ACTION_TYPE
> )
> )
> AS SELECT * FROM XYZ.T WHERE KEY_PREFIX = '08m'
> UPSERT records using this:
> Connection con = DriverManager.getConnection("jdbc:phoenix:samarthjai-ltm3.internal.salesforce.com", new Properties());
> PreparedStatement pStatement;
> pStatement = con.prepareStatement("upsert into XYZ.ABC_VIEW (ACTIVITY_DATE,CHANNEL_ACTION_TYPE,CHANNEL_TYPE,TENANT_ID,WHAT_ID,WHO_ID) values (TO_DATE('2010-11-11 00:00:00.000'),?,'ABC','00Dx0000000GyYS','701x00000000dzp','00Qx0000001S2qa')");
> for (int i=0; i<10000000;i++) {
> pStatement.setString(1, UUID.randomUUID().toString());
> pStatement.execute();
>
> if (i % 10000 == 0) {
> con.commit();
> System.out.println(i);
> }
> }
> Sample query:
> @Test
> public void testLimitCacheQuery() throws Exception {
> String url = "jdbc:phoenix:localhost:2181";
> try (Connection conn = DriverManager.getConnection(url)) {
> PreparedStatement stmt = conn.prepareStatement("select * from XYZ.ABC_VIEW where who_id = '00Qx0000001S2qa' and TENANT_ID='00Dx0000000GyYS' order by activity_date desc LIMIT 18 OFFSET 2");
> stmt.setFetchSize(10);
> try (ResultSet rs = stmt.executeQuery()) {
> long startTime = System.currentTimeMillis();
> int record = 0;
> while (rs.next()) {
> System.out.println("Record "+ (++record) + " Time: " + (System.currentTimeMillis() - startTime));
> startTime = System.currentTimeMillis();
> }
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)