운영체제 : Windows 2003
SQL Server : 2000
유저가 어떤 행위를 할 때마다 로그를 남기고 있습니다.
예를 들어서 로그인했다. 어떤 물건을 얼마에 샀다.
어떤 물건을 팔았다. 등등
이렇게 매번 이벤트에 대해서 로그를 남기다 보니. 데이타 양이 어마 어마 하게 많아요..
특히 테이블 5개의 데이타를 합해서 1억 건이 넘는데요...
event
event1
event2
event4
event5
이렇게 5개의 테이블의 경우 각각의 테이블들은
date, userid 라는 두개의 필드가 클러스트 인덱스로 잡혀 잇습니다.
date 는 정렬을 내림차순으로 했구요..
문제는 유저가 행위를 할때마다 각각의 조건에 따라서 데이타에 그 로그가 insert 되고요
로그인은 event 테이블에
물건을 살 때는 event1 테이블에 insert
물건 팔 때는 event2 테이블에 insert
이런식으로..
이렇게 테이블에 insert 만 되면 되는데..
이 데이타를 자주 조회하게 되요..
select 할 때 with (readuncommitted) 옵션을 주고 조회하긴 하는데요.
위의 5개의 테이블의 한꺼번에 조회할 필요가 있어서 view 로 연결해 놓았습니다.
그런데..
eventview 라는 테이블을
select * from eventview 라고 해서 조회하면
date 에 의해 내림차순으로 정렬이 되지 않습니다.
order by 구문을 써주면 되긴 하지만.
데이타가 너무 많아서 order by 절을 쓰면 쿼리 속도가 많이 느려 지거든요..
문제는 조회를 할 때 lock 이 걸려요..
그래서 유저가 액션을 취할 때.. 물건을 살때도 처리가 느려지게 되고..
그러다 보면... 그때 프로필러를 돌려보면.. duration 이 엄청나요...
그래서 가끔 데이타가 꼬이기도 하는거 같고...
view 에 있는 데이타가 날짜에 의해 내림차순으로 정리되게 할 수는 없을까요?
order by 구문을 안쓰고요.
--> 이 질문 하나랑요.
혹시 위와 같이 데이타가 많고 그 데이타를 자주 조회할 경우
더 효율적인 구조가 있을까요???
event 테이블에 트리거를 걸어서 event 테이블에 insert 될때마다
event_bak 테이블에 insert 되게 하고
조회는 event_bak 테이블을 통해서 하게 된다면..
유저가 행위할 때 lock 에 의해서 처리가 늦어 지는 일이 발생 안할까요???
|