2013-09-06 4 views
2

은 내가 ~ 200G 4 개 데이터 노드를 가진 MySQL의 클러스터에 파일을로드하려고했다 초과, 목표 테이블에 대한 내 DDL은 다음과 같이이다 : 몇 분MySQL 클러스터 오류 : 잠금 대기 제한 시간은

CREATE TABLE XXXXXX 
(
    ID BIGINT AUTO_INCREMENT PRIMARY KEY, 
    COL1..., 
    COL2..., 
    ....... 
) 
ENGINE = NDB PARTITION BY KEY(); 

로드 중 다음 오류가 발생했습니다 :

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 

및 대상 테이블에로드 된 일부 레코드가 있습니다. 이 문제를 극복하기 위해 무엇을해야합니까?

도움이 될 수있는 변수 값의 일부

: 나는 긴 선택 실행 BLOB/TEXT 항목 +와 테이블과 같은 문제를 보았다

wait_timeout  : 28800 
ndb_wait_connected: 30 
ndb_wait_setup : 30 

답변

0

. NDB는 숨겨진 테이블을 사용하여 큰 개체에 대한 청크를 저장하고 부작용으로 고유 키 SELECT가 테이블에 대한 공유 읽기 잠금을 생성합니다. 두 번째 노드에서 두 개의 노드 클러스터

node2> show create table test; 

| test | CREATE TABLE `test` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `i` int(11) DEFAULT NULL, 
    `v1` text, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `i` (`i`) 
) ENGINE=ndbcluster AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 | 

node2> set @@autocommit=0; 
Query OK, 0 rows affected (0.00 sec) 

node2> set @@tx_isolation='READ-COMMITTED'; 
Query OK, 0 rows affected (0.00 sec) 

node2> start transaction; 
node2> select v1 from test where i=2; #shared lock is created 

에 따라서 http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-limitations-transactions.html

참조 테이블에 대한 업데이트가 실패 할 수 있습니다. 당신은 데이터 노드에 자동 커밋 = 0을 설정하는 방법

node1> set @@autocommit=0; 
Query OK, 0 rows affected (0.00 sec) 

node1> set @@tx_isolation='READ-COMMITTED'; 
Query OK, 0 rows affected (0.00 sec) 

node1> update test set v1='a' where i=2; 
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 
node1> load data infile '/tmp/data' replace into table test; 
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 

버전에 따라,

mysql> load data infile '/tmp/data' replace into table test; 
ERROR 1296 (HY000): Got error 4350 'Transaction already aborted' from NDBCLUSTER 
+0

아틸라처럼 다른 오류가 표시 될 수 있습니다? 4 개의 데이터 노드와 1 개의 SQL 노드가 있습니다. – MikA

+0

@MikA : 자동 커미트라는 용어는 SQL 노드에만 적용됩니다. –

+1

'set @@ tx_isolation = 'READ-COMMITTED'; 'NDBCLUSTER 스토리지 엔진은 ** READ COMMITTED 트랜잭션 격리 수준 **만을 지원하므로 의미가 없습니다. [Documentation] (http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-limitations-transactions.html). – 5lava