http://www.mysqlkorea.co.kr
한글매뉴얼 5.0 , 한글매뉴얼 5.1 , MySQL 5.1 HA , 사용자매뉴얼
공지사항  
뉴스  
질문과 답변
DBA
Developer
Cluster
토크박스  
이벤트  
서포트 티켓  
최신글
mysql my파일과 …
mysql server 설…
Can't open and l…
듀얼마스터 구성 …
PREPARE 사용시 …
 
질문과 답변 (DBA) > 커뮤니티 존 > 질문과 답변 (DBA)
빠르게 UPDATE 처리 할 수 있는 방법이 궁금합니다.
글쓴이 : 필승불패   날짜 : 19-01-10 12:33   조회수 : 1048
하나의 테이블에 약 16억개의 데이터 행을 가지고 있고 각 행마다 10개 정도의 컬럼을 가지는 상태인데요.

테이블 하나의 크기가 300GB가 넘는 상황이라 3개의 컬럼을 각 각 별도의 테이블로 분산 처리를 하려고 합니다.

때문에 각 행당 3개의 컬럼에 대해 업데이트(UPDATE)처리가 필요한 상황인데 단순히 True/False의 값을 갖는게 아니라 char(20)의 값을 가지고 또 경우의 수가 400만가지쯤 되기 때문에 업데이트 처리를 어떻게 해야 가장 효율적일지 고민입니다.

우선 수행시간을 측정 해보기 위해 160만건을 별도의 테이블에 복사하고 콘솔이 아닌 별도의 프로그램을 만들어서 처리를 해봤는데 생각보다 오래 걸리네요. (16만건씩 처리하는 프로세스를 10개 동시에 구동하니 각 프로세스당 약 30분정도 소요)
> 이를 통해 추산해보면 16억건을 처리하기 위해서 10개의 프로그램을 동시에 구동하면 적어도 30분 * 1000의 시간이 필요로 할 것 같습니다.

이때 CPU Usage는 약 15%선이기에 프로그램을 동시에 60개쯤 구동하면 적어도 시간 단축은 되지 않을까 하는 막연한 생각도 들고요.

참고로 데이터베이스 저장매체는 960 Pro 2TB 모델로써 NVME 모델이기에 IOPS는 충분히 받쳐주지 않을까 추산만 하고 있고요.

전체적으로 이런 단순 무식한 방법 말고 효율적이면서도 빠른 처리 방법이 있을까 하여 질문 글 남겨 봅니다.

royster
해당 table이 Innodb 속성이라면,

오토커밋 보다는  트렉젝션을 사용하는것이 효율적입니다.

단 주의 할 점은 하드웨어 성능에 따라  트랜젝션 크기를  나눠서 실행하시면 되겠습니다.
이전글 sql 설치시 다음과 같은 에러가 뜹니다. 꼭좀 도와주세요 ㅠㅠㅠ 
다음글 mysql 관련해서 질문있습니다. 
MySQL Korea 사이트의 컨텐츠 소유권은 (주)상상이비즈에 있으므로 무단전재를 금합니다.
ⓒ 2010-2011 ssebiz All Rights Reserved.