[RDBMS] Cluster AUTO_INCREMENT Multiple Increase
데이터 베이스 클러스터링
INSERT 작업하면 AUTO_INCREMENT가 3,6,9 이상하게 증가하는 경우가 있는데
클러스터의 모든 노드가 동시에 같은 테이블에 행을 삽입하려고하는 상황을 방지하기 위함이라고 한다
(이러한 충돌을 피하기 위해 Galera는 클러스터의 노드 수를 기반으로 열 값을 증가한다 의도적으로 설계된 것)
SHOW VARIABLES LIKE '%auto_inc%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| wsrep_cluster_size | 3 |
+-------------------------+-------+
[첫번째 노드]
SHOW VARIABLES LIKE '%auto_inc%'
+-----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 1 |
| wsrep_auto_increment_control | ON |
+-----------------------------------+-------+
[두번째 노드]
SHOW VARIABLES LIKE '%auto_inc%'
+-----------------------------------+-------+
| Variable_name | Value |
+-----------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 2 |
| wsrep_auto_increment_control | ON |
+-----------------------------------+-------+
[세번째 노드]
SHOW VARIABLES LIKE '%auto_inc%'
+-----------------------------------+-------+
| Variable_name | Value |
+-----------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 3 |
| wsrep_auto_increment_control | ON |
+-----------------------------------+-------+
INSERT 결과
+----+----------+
| id | string |
+----+----------+
| 1 | test |
| 3 | test |
| 6 | test |
| 9 | test |
| 12 | test |
+----+----------+
wsrep_auto_increment_control 옵션을 종료하고
> set global wsrep_auto_increment_control=off
INSERT 결과
+----+----------+
| id | string |
+----+----------+
| 1 | test |
| 2 | test |
| 3 | test |
| 4 | test |
| 5 | test |
+----+----------+
그러나 클러스터링 된 3개의 노드에서 동시에 INSERT 작업을 하게되면 데드락 오류가 발생한다
ERROR 1213 (40001) at line 2: WSREP detected deadlock/conflict and aborted the transaction. Try restarting the transaction