[ https://issues.apache.org/jira/browse/HIVE-22888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17061002#comment-17061002 ]
Denys Kuzmenko commented on HIVE-22888: --------------------------------------- MySql: v5.7.23, v5.1.46 Postgres: v9.3, Oracle: XE 11g MsSql: 2017-GA {code} (select EX.*, REQ.HL_LOCK_INT_ID AS REQ_LOCK_INT_ID FROM ( SELECT HL_LOCK_EXT_ID, HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_STATE, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID < 78588) EX INNER JOIN ( SELECT HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID = 78588) REQ ON EX.HL_DB = REQ.HL_DB AND (EX.HL_TABLE IS NULL OR REQ.HL_TABLE IS NULL OR EX.HL_TABLE = REQ.HL_TABLE AND (EX.HL_PARTITION IS NULL OR REQ.HL_PARTITION IS NULL OR EX.HL_PARTITION = REQ.HL_PARTITION)) WHERE (REQ.HL_TXNID = 0 OR EX.HL_TXNID != REQ.HL_TXNID) AND REQ.HL_LOCK_TYPE='e' AND NOT (EX.HL_TABLE IS NULL AND EX.HL_LOCK_TYPE='r' AND REQ.HL_TABLE IS NOT NULL) limit 1) UNION ALL (select EX.*, REQ.HL_LOCK_INT_ID AS REQ_LOCK_INT_ID FROM ( SELECT HL_LOCK_EXT_ID, HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_STATE, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID < 78588) EX INNER JOIN ( SELECT HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID = 78588) REQ ON EX.HL_DB = REQ.HL_DB AND (EX.HL_TABLE IS NULL OR REQ.HL_TABLE IS NULL OR EX.HL_TABLE = REQ.HL_TABLE AND (EX.HL_PARTITION IS NULL OR REQ.HL_PARTITION IS NULL OR EX.HL_PARTITION = REQ.HL_PARTITION)) WHERE (REQ.HL_TXNID = 0 OR EX.HL_TXNID != REQ.HL_TXNID) AND REQ.HL_LOCK_TYPE='w' AND EX.HL_LOCK_TYPE IN ('w','e') limit 1) UNION ALL (select EX.*, REQ.HL_LOCK_INT_ID AS REQ_LOCK_INT_ID FROM ( SELECT HL_LOCK_EXT_ID, HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_STATE, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID < 78588) EX INNER JOIN ( SELECT HL_LOCK_INT_ID, HL_TXNID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE HL_LOCK_EXT_ID = 78588) REQ ON EX.HL_DB = REQ.HL_DB AND (EX.HL_TABLE IS NULL OR REQ.HL_TABLE IS NULL OR EX.HL_TABLE = REQ.HL_TABLE AND (EX.HL_PARTITION IS NULL OR REQ.HL_PARTITION IS NULL OR EX.HL_PARTITION = REQ.HL_PARTITION)) WHERE (REQ.HL_TXNID = 0 OR EX.HL_TXNID != REQ.HL_TXNID) AND REQ.HL_LOCK_TYPE='r' AND EX.HL_LOCK_TYPE='e' AND NOT (EX.HL_TABLE IS NOT NULL AND REQ.HL_TABLE IS NULL) limit 1) {code} > Rewrite checkLock inner select with JOIN operator > ------------------------------------------------- > > Key: HIVE-22888 > URL: https://issues.apache.org/jira/browse/HIVE-22888 > Project: Hive > Issue Type: Improvement > Components: Locking > Reporter: Denys Kuzmenko > Assignee: Denys Kuzmenko > Priority: Major > Attachments: HIVE-22888.1.patch, HIVE-22888.10.patch, > HIVE-22888.11.patch, HIVE-22888.2.patch, HIVE-22888.3.patch, > HIVE-22888.4.patch, HIVE-22888.5.patch, HIVE-22888.6.patch, > HIVE-22888.8.patch, HIVE-22888.9.patch, acid-lock-perf-test.pdf > > > - Created extra (db, tbl, part) index on HIVE_LOCKS table; > - Replaced inner select under checkLocks using multiple IN statements with > JOIN operator; > generated query looks like : > {code} > SELECT LS.* FROM ( > SELECT HL_LOCK_EXT_ID, HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_STATE, > HL_LOCK_TYPE FROM HIVE_LOCKS > WHERE HL_LOCK_EXT_ID < 333) LS > INNER JOIN ( > SELECT HL_DB, HL_TABLE, HL_PARTITION, HL_LOCK_TYPE FROM HIVE_LOCKS WHERE > HL_LOCK_EXT_ID = 333) LBC > ON LS.HL_DB = LBC.HL_DB > AND (LS.HL_TABLE IS NULL OR LBC.HL_TABLE IS NULL OR LS.HL_TABLE = > LBC.HL_TABLE > AND (LS.HL_PARTITION IS NULL OR LBC.HL_PARTITION IS NULL OR > LS.HL_PARTITION = LBC.HL_PARTITION)) > WHERE (LBC.HL_TXNID = 0 OR LS.HL_TXNID != LBC.HL_TXNID) > AND (LBC.HL_LOCK_TYPE='e' > AND !(LS.HL_TABLE IS NULL AND LS.HL_LOCK_TYPE='r' AND LBC.HL_TABLE > IS NOT NULL ) > OR LBC.HL_LOCK_TYPE='w' AND LS.HL_LOCK_TYPE IN ('w','e') > OR LBC.HL_LOCK_TYPE='r' AND LS.HL_LOCK_TYPE='e' > AND !(LS.HL_TABLE IS NOT NULL AND LBC.HL_TABLE IS NULL)) > LIMIT 1; > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)