OS : Microsoft Windows 2000 Server / Advanced Server
SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition
어플리케이션과 Webr과 연동하는 ASP를 운영중인데요.
요즘 DB연동하는 부분이 속도가 느려져서, 개선을 할려고 합니다.
현재 구조는
어플리케이션 연동 중 임시 데이터를 저장하는 부분(worktemp),
완료되면 통계를 위한
데이터를 저장하는 부분(worklog)로 구성되어있습니다.
A.테이블 구성은
1.worktemp
- 어플리케이션과 연동 임시데이터, 지워도 관계없음
- 항상 guid로 검색함
guid varchar(50) pk, clustered index
status varchar(6)
.
.
2.worklog
- 통계 및 사후 조회필요
guid varchar(50) pk, clustered index
waitname varchar(50)
id varchar(2)
.
.
index는 mssql이 기본적으로 PK에 잡아주는 것만 잡혀있고 별도의
인덱스는 걸지 않았습니다.
3.report : 보고서
guid varchar(50) pk, clustered index
B.DB연동 절차는
1.어플리케이션이 구동되면서 worktemp에 insert
2.구동중 worktemp를 update(key=guid),
report insert
3.완료되면 worktemp-> worklog로 insert(key=guid)
---------------------------------------------------------
궁금한 점은 아래와 같습니다.
1.첫번째는 1번테이블을 어플리케이션이 종료되면 지울까 하다가, 매번
쓰고 지우고 하면 서버에 좋지 않을것 같아서,
일정기간에 한번씩 임의로 삭제할려고 지우지 않는 방법을 택했습니다.
궁금한 것은 저 테이블에 하루에 만건정도
데이터를 쓰고 지우고 해도 별 문제가 안되는 지요.
만약 문제가 되서 지금처럼 임시데이터를 지우지 않는 상태로 놔둔다면
개선할려면(인덱스튜닝) 어떤 식으로 해야할
지요.
2.두번째 통계및 사후관리를 위한 worklog에 대해서 입니다.
2번 테이블에서 guid가 index로 잡혀있는데, Clustered Index는
20byte를 초과하면
성능이 떨어진다고 들었는데, 이부분을 개선할려면, indentity field를
추가해서 이 idx에 index를 잡아주는 것이좋을지
요. 아니면 이대로 두고 추가로 waitname, id 등에 인덱스를 추가해도
될른지요
2번테이블은 3번테이블과 guid로 조인해서 검색하기도 하고,
startdate, enddate로 구간검색
유저아이디, 이름으로 검색을 주로 합니다.
----------------------------------------------
제가 생각하고 있는 문제 개선방법을 요약하면
1.worktemp
- 어플리케이션 시작시 생성된 row를 종료시 삭제한다.
2.worklog
- idx(identity)를 추가해서 guid 대신 PK, Clustered Index로
잡는다.
이렇게 하면 될지 싶습니다.
제가 뭔가 잘못생각하고 있다면 조언 부탁드립니다.
그럼 모두 부자되세요..
|