[
https://issues.apache.org/jira/browse/HIVE-22888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17061002#comment-17061002
]
Denys Kuzmenko edited comment on HIVE-22888 at 3/17/20, 3:35 PM:
-----------------------------------------------------------------
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}
was (Author: dkuzmenko):
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)