반응형
MariaDB: 저장 프로시저 잠금 행에서 SELECT
저장 프로시저 SELECT에 문제가 있습니다.
분리 수준은 READ-COMMITED이고 엔진은 InnoDB이므로 모든 선택 항목은 잠금 일관성이 없는 읽기여야 합니다. https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html
데이터베이스는 MariaDB 버전 10.1입니다.
MariaDB [(none)]> select @@version;
+-----------------+
| @@version |
+-----------------+
| 10.1.24-MariaDB |
+-----------------+
1 row in set (0.02 sec)
저장 프로시저 잠금을 선택한 후 테이블에서 잠금을 획득합니다.agent
:
IF
v_pack_agent_id IS NULL OR
v_pack_agent_id not in
(
select ID from agent where LINKED_AGENTS_GUID = (select LINKED_AGENTS_GUID from agent where ID = a_agent_id) union all
select a_agent_id
)
THEN
SET a_sign = SIGN_NOT_OWN_BLOCK;
LEAVE l_proc;
END IF;
테이블agent
정의:
MariaDB [db_mercury]> show create table agent\G
*************************** 1. row ***************************
Table: agent
Create Table: CREATE TABLE `agent` (
`ID` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
...
`LINKED_AGENTS_GUID` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `UK$ORA_ID` (`ORA_ID`),
KEY `IDX_LINKED_AGENTS_GUID` (`LINKED_AGENTS_GUID`)
) ENGINE=InnoDB AUTO_INCREMENT=6198 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
문제는 nested in을 선택하기 때문입니다.IF
블록, 이동할 경우 외부를 선택합니다.IF
아래와 같이 잠금 장치가 확보되지 않습니다.
아무것도 잠기지 않습니다.
select ID
from agent
where LINKED_AGENTS_GUID = (select LINKED_AGENTS_GUID
from agent
where ID = a_agent_id)
union all
select a_agent_id
제가 보기엔 그것은 벌레 같습니다.
선택이 잠기는 이유가 무엇입니까?
MariaDB에 버그를 보고했더니 확인이 되더군요. https://jira.mariadb.org/browse/MDEV-18044
언급URL : https://stackoverflow.com/questions/53871298/mariadb-select-in-stored-procedure-locks-rows
반응형
'programing' 카테고리의 다른 글
커서 잡기(드래그 & 드롭)를 위한 CSS (0) | 2023.10.20 |
---|---|
바인딩되지 않은 메서드 f ()은(대신 classobj 인스턴스를 받았음) fibo_instance를 첫 번째 인수로 호출해야 합니다. (0) | 2023.10.20 |
스크립트를 사용하여 이미지 캐시하기 (0) | 2023.10.20 |
PANDS의 SQL-like window 함수: Python Pandas Dataframe의 Row Numbering (0) | 2023.10.20 |
XPath: 자식 노드에서 부모 노드 가져오기 (0) | 2023.10.20 |