2013-09-06 3 views
2

Я пытался загрузить файл а ~ 200G в кластер MySQL с 4 узлами данных, и мой 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 

и я нашел некоторые записи, загруженные в целевой стол. что я должен сделать, чтобы преодолеть эту проблему?

некоторые из значений переменных, которые могут быть полезны:

wait_timeout  : 28800 
ndb_wait_connected: 30 
ndb_wait_setup : 30 

ответ

0

Я видел вопрос как, что с таблицами с записями BLOB/TEXT + долго работает выбор. NDB использует скрытую таблицу для хранения фрагментов для более крупных объектов, а в качестве уникального ключа SELECT для побочных эффектов создает общую блокировку чтения для таблиц. См http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-limitations-transactions.html

Так на два узла кластера

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 

На втором узле обновлений для таблицы может потерпеть неудачу.

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

Аттилы, как вы настраиваете AutoCommit = 0 в узле данных? У меня есть четыре узла данных и 1 sql-узлы. – MikA

+0

@MikA: Термин autocommit применяется только к узлам sql. –

+1

'set @@ tx_isolation = 'READ-COMMITTED';' не имеет смысла, поскольку механизм хранения NDBCLUSTER поддерживает ** только ** уровень изоляции транзакции READ COMMITTED. [Документация] (http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-limitations-transactions.html). – 5lava

Смежные вопросы