Comment 3
-
무념
2015.11.12 13:47
-
루디먼트
2015.11.12 16:24
읽기가 주 기능을 하는 프로시저 상단에 set transaction isolation level read uncommitted 을 명시해 주시면, 대부분 문제는 없습니다.
committed 된 데이터를 읽어야 한다면, 사용하지 않거나 updlock 힌트를 넣어서 조절할 수 있습니다.
업데이트 문에 조인이 있다면 비 업데이트 대상이 아닌 테이블에 updlock 힌트를 추가해 줄수 있습니다.
그리고 읽기에 해당하는 인덱스가 반드시 있어야 하겠네요.
-
쵸보
2015.11.18 17:58
현재 소스가 자바로 처리 되있어서 아래와 같이 처리되어있는상황입니다.
헌데 아래와 같이 처리되 있어도 동시에 조회시 select값이 update가 커밋된 값이 조회가 되지 않는 듯합니다.
이 경우 프로시져에서만 처리가 가능한건지 아니면 자바내에서도 처리방법이 있는지 궁금합니다.
프로시져에서 처리되야 되는 사항이면 위 말씀대로 set transaction isolation level read uncommitted 만 명시해주면되는건지
커밋된 데이터를 읽어야 하는 사항입니다. select문에는 인덱스 처리가 돼있습니다. update문에는 조인이없습니다.
try{
db = DBTool.newInstanceFromParam(DBFunctions.dbCon_Point);
db.setAutoCommit(false);
select문
insert문
update문
db.commit();
return ;
}catch(Exception e){
if(db!=null)
db.rollback();
throw e;
}finally{
if(db!=null){
db.setAutoCommit(true);
db.close();
}
}
1. 데이터량에 따라 다르겠지요. 얼마나 빈번하게 조회 하느냐?
2. Insert/Update 수행 시간이 길고 해당 테이블에 대한 동시 조회가 많다면 락이 걸려 있을테니..
문제가 될 수도 있다고 생각합니다.
3. 트랜잭션 구간의 수행 시간이 짧고 락이 걸린 테이블의 동시 조회자 수가 많지 않다면 문제가 되지 않을 것 같고요.
4. 데이터량도 많고 업데이트 시간이 길고 동시 조회자 수가 빈번하다면..
추가 IO가 발생하더라도 Temp table을 활용하여 작업 후에 업데이트 시에만 락을 걸 수도 있고
업데이트 데이터에 대해 여러명이 관여하고 있다면 힘들겠지만요.
5. 조회 횟수가 빈번하다면 정보와 자료 테이블을 따로 구성하여 분산 시킬 수도 있을테고요.
질문한 내용가지고는 경우수가 많아서 알 수가 없네요.
데이터 량은 얼마나 되는지?
업데이트 빈도는 어떤지?
데이터 증가량은 얼마나 되는지?
트랜잭션 구간의 수행시간은 얼마나 되는지?
등등등 디테일하게 하시면 댓글이 많이 달릴 것 같네요.
이상 허접 답변이었어요. 돌만 던지지 마세요.