티스토리 뷰

반응형




그 동안


잘 사용해 오던


SQL서버인데...


언젠가서 부터


특정 시간대에 프로그램이


많이 느려진다는 이야기를


사용자들에게 들었다.


느려진다고 이야기하는 타이밍에


서버의 CPU, 메모리 사용량 등을


체크해 보았으나 CPU나 메모리의 문제가 아닌 다른 부분이 시스템을 느려지게 하고 있는 것 같았다.


그러다가 체크 해 본 부분이 디스크 IO인데... tempDB의 mdf, ldf 파일의 용량이 적절하지 않게 컸으며


읽고 쓰기 속도가 다른 프로세스들과 비교했을 때 이 역시 적절치 못하게 상위에 랭크되어 있음을 발견했다.


tempDB라는 놈은 이름에서 알 수 있듯이 임시 DB의 역할을 한다.


예를들어 임시테이블에 데이터를 저장한다든지... 쿼리의 중간결과를 저장하거나, 소팅, 해쉬테이블을 만드는 그런 쪽


임무를 담당하고 있다. 따라서 이름은 temp일지라도 SQL서버에서는 굉장히 중요한 역할을 하고 있다고 할 수 있다.


우선 프로그램에서 사용하는 쿼리 중에서 tempDB를 사용할 만한 부분이 있는지를 파악해 보았다.


역시나 사용자들이 빈번하게 사용하는 프로시져에서 임시 테이블을 join하는 부분이 있었다.


프로그램적으로는 이 부분을 수정하기로 하고.... 결과를 보니 tempDB의 ldf가 줄어든 것을 확인 할 수 있었다.


이건 나름대로 성공적인 것 같고.... 다음으로는 SQL 서버에서도 tempDB의 손을 좀 봐야 할 거 같은데...





생각 해 보니 레이드 구성에서 운영체제 드라이브를 미러링으로 구성해 놨었는데...


설정을 찾아보니 tempDB의 디폴트 경로가 운영체제에 SQL 서버가 설치된 경로로 되어 있음을 발견했다.


레이드 구성을 약간만 알더라도 미러링 구성의 읽기 쓰기 속도는 그리 좋은 편이 아니라는 것을 알 수 있을 것이다.


왜냐면 두개의 디스크에 완전히 똑같은 복사본을 보관하는 거니까...


이 부분은 또 다른 얘기라서 삼천포로 빠져 나가버리니... 여기서는 언급하지 않기로 하고....


본론으로 들어가서 물리적으로 다른 디스크로 tempDB의 mdf와 ldf를 변경하는 절차를 보도록 하겠다.


1. 먼저 tempDB의 mdf, ldf가 어디에 위치하는지를 파악한다.


SQL서버를 디폴트로 설치 했다면 SQL 2008서버라고 가정 했을 경우


mdf

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\tempdb.mdf

ldf

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\templog.ldf


경로는 대부분 위 처럼 될 것이다.

쿼리로 확인 하는 방법이 있는데 sys.master_files 테이블에서 검색할 수 있다.

이 방법이 궁금하다면 검색해 보도록... 귀찮아서 그런게 아님...

(귀찮아서 안 찾아보려고 했으나...

SELECT name, physical_name AS Current_Location, state_desc                
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

이렇게 하면 된다... 
)

2. 옮기고자 하는 디스크에 경로를 만들어 준다.

이동 할 드라이브에 폴더라도 하나 만들어 줘야 하지 않겠음?

그래야 관리하기도 편하니까... 가급적 mdf폴더, ldf폴더 다시 만들어 주는 것도 괜찮다...

3. alter문을 사용해서 tempDB를 옮기자.

ALTER DATABASE tempdb
MODIFY FILE
(NAME = tempdev,
FILENAME = 'D:\'이동 할 폴더 이름'\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE
(NAME = templog,
FILENAME = 'E:\'이동 할 폴더 이름'\templog.ldf');
GO

4. 위 쿼리가 제대로 돌게 되면 성공 메시지가 뜰 것이다.

하지만 tempDB를 옮길 폴더에 가 보면 아직 mdf, ldf는 생성되지 않은 것을 볼 수 있다.

이건 왜냐...

답은 성공 메세지를 잘 읽어보면 알 수 있다.(뭐든지 문제에 답이 있느니...) 아무튼 잘 읽어봐야 한다.

메세지에 따라서 SQL Server를 재시작 해 준다.

당연히! 재시작 해야 하기 때문에 서비스는 모두 종료를 한 상태에서~~ 안그러면 클릭 한번에 아차함과 동시에 갈굼 당합니다~~ ㅎㅎ 

5. SQL Server가 재시작되는 인고의 시간을 견디게 되면...(서비스 종료, 시작되는 순간이 왜 이렇게나 길게 느껴지는지... ㄷㄷㄷ)

새로 만든 폴더에서 나를 반기고 있는 tempDB의 mdf, ldf를 만나 보고 인사를 나누면 된다. 앞으로 잘 부탁 한다며 ㅋ

6. 이건 해도되고 안해도 되는 옵션인데... 찬밥신세가 되어 버린 구 mdf와 ldf를 어떻게 할 것인가의 문제이다.

사실.. 이제는 더 이상 안 쓰니까 삭제!... 가 답이긴 한데...

왠지 이때까지 혹사시켜놓고 필요없으니 지워버리는 게 서글퍼서... 나 같은 경우에는 당분간 그냥 놔두기로 했다....

이제는 파일에게도 감정이입을.... ㅠㅠ 너도 언젠간 삭제 당하겠지... ㅠㅠ 힘내라 (구)tempDB!!



이렇게 하면 된다. ㅋㅋ


그리 오래 걸리지 않는다. 해 봐야 안다.











반응형
댓글
반응형
12-01 06:46
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함