database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 23825 게시물 읽기
No. 23825
Lock table size를 초과했다는데...
작성자
박상희
작성일
2005-05-27 14:13
조회수
6,064

Update SQL 실행중 다음과 같은 에러 메시지가 발생합니다.

ERROR 1206 (HY000) at line 3: The total number of locks exceeds the lock table size

어떻게 하면 원하는 Update 문장을 실행할 수 있나요?

 

애구~~ 도와주시면 감사하겠습니다요 *.~

 

------상세설명----------

 

Red Hat Enterprise 3.0 에 MySql 4.1.12-standard server를 이용하고 있습니다.

innodb type로 create 된 table에 현재 약 30,000,000건의 데이타가 들어있습니다. primary key나 index는 없습니다. update문장으로 약 5,000,000건의 row가 update되는 문장을 실행하는데 위와 같은 에러가 발생했습니다. 어떻게 하면 lock table size를 늘릴 수 있습니까?

 

참고로 lock과 관련된 시스템 변수는 다음과 같이 설정되어있습니다.

mysql> show variables like '%lock%';

+--------------------------------+------------+
| Variable_name | Value |
+--------------------------------+------------+
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_table_locks | ON |
| locked_in_memory | OFF |
| max_write_lock_count | 4294967295 |
| query_cache_wlock_invalidate | OFF |
| skip_external_locking | ON |
+--------------------------------+------------+


이 글에 대한 댓글이 총 4건 있습니다.

단순 update 인가요??  30,000,000건의 데이타를 키도 없이 어떻게 update 를 하나요??

이경환(babocom)님이 2005-05-27 14:43에 작성한 댓글입니다.

네, 단순 update입니다. table내의 칼럼 몇개를 조합해서 update합니다.  개략적인 update문은 예를 들면 다음과 같습니다. join이나 이런거 없습니다.

update table_name

set      col1 = concat(col2, col3, col4);

 

이 테이블은 conversion을 위한 임시table입니다. 최종 target table은 primary key나 index를 생성할 겁니다요..

박상희님이 2005-05-27 15:01에 작성한 댓글입니다.
이 댓글은 2005-05-27 15:04에 마지막으로 수정되었습니다. Edit

써버의 시스템 변수를 수정하였더니 5,000,000건 정도는 update가 되는군요.

 

하지만 이것이 정답인지 궁금합니다. 오라클처럼 rollback segment size를 조절한다든가 이런 방법은 없나요?

 

제가 수정한 변수는 다음과 같습니다.

innodb_buffer_pool_size=50000000    <-- 실제 메모리의 50%정도를 설정했습니다. 1G Memory라 500M정도로 설정했습니다. 너무 크게 설정하면 OS level단에서 경합이 일어난다고 합니다. max 80% 정도까지 설정하라고 하네요..

 

참조. http://netmirror.org/mirror/mysql.com/doc/mysql/en/innodb-start.html

박상희님이 2005-05-27 15:38에 작성한 댓글입니다.
이 댓글은 2005-05-27 15:45에 마지막으로 수정되었습니다. Edit

글에 대한 정확한 답은 아니지만, 혹시 rollback segment size 등이 문제라면...

 

autocommit을 1로 주면 어떨까요.

 

set autocommit=1

 

그럼 rollback segment에 저장이 안 될테니 말이죠.

 

근데 에러 메시지 상으로는 그게 문제가 아닌 듯 한데요.

 

그리고 MySQL 버전은 어떻게 되시는지요.

 

| innodb_table_locks | ON |

 

 

이걸 OFF로 만들면 어떨지 싶은데요.

 

 

허정수(wertyu)님이 2005-05-27 16:12에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
23828asp와 mysql 연결... [1]
na
2005-05-27
1724
23827정말 죄송합니다 질문 가지만 하겠습니다 꼭 좀 도와주세요 ㅠㅠ [1]
고경한
2005-05-27
4060
23826mysql 이중화 [1]
윤하리
2005-05-27
2215
23825Lock table size를 초과했다는데... [4]
박상희
2005-05-27
6064
23824[질문]group by로 최근글 뽑아올때 각 항목당 2개씩 가져오기 [4]
궁금
2005-05-27
2232
23823왜 data 폴더가 안생기는지...ㅠ [6]
송경선
2005-05-27
1538
23822waite timeout 값을 계정별로 다르게주는게 가능하나요? [1]
database
2005-05-27
1390
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다