영어의 압박이 좀 있긴 하지만.
그래도 Parallelism, Workers, Threads 등을 이해하는 데 도움이 될 것 같네요.
http://www.simple-talk.com/content/article.aspx?article=1250
영어의 압박이 좀 있긴 하지만.
그래도 Parallelism, Workers, Threads 등을 이해하는 데 도움이 될 것 같네요.
http://www.simple-talk.com/content/article.aspx?article=1250
안녕하세요? 쓸만한게없네 윤선식입니다.
이전 아티클에서 “Database Engine Tuning Advisor”에 대한 소개를 했는데요, 이후 작업에 대해 설명하려고 합니다.
이 DTA 참 좋긴 한데, 한 가지 문제가 있습니다. 바로 MSDB에 모든 기록이 남는다는 것이죠.
1. 다음과 같은 후유증이 있습니다.
가. MSDB에 DTA 관련 테이블이 그대로 존재합니다. 특히 DTA_tuninglog 테이블등의 Row수는 튜닝대상 쿼리가 많으면 많을수록 사이즈가 클 수밖에 없습니다.
나. 백업파일의 사이즈가 커집니다. 그림과 같이 갑자기 사이즈가 커진 것을 알 수 있습니다.
다. 그렇다면 MSDB의 사이즈는??? 사실 Job을 그리 많이 돌리는 Database가 아니기 때문에 이렇게까지 클 이유가 없죠.
2. 굳이 이를 보관할 필요가 있다면 별도의 DB에 보관하시고, 만약 보관의 필요가 없다면 다음 링크에 있는 명령어를 실행해 봅니다.
http://support.microsoft.com/kb/899634
/* Purpose of the Script This script cleans up objects created by DTA client on the target server (server being tuned). DTA creates support tables and stored procedures on the target server. The schema of the DTA tables and the DTA SP interfaces changed from Beta 2. When to use it If a Beta 2 DTA client was used to tune/evaluate against the target server then this script needs to be executed (against the target server) for later versions of DTA to function properly. Impact Previous session details are lost. */ go use msdb go -- Drop DTA msdb Tables if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_indexcolumn') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_indexcolumn if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_querycolumn') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_querycolumn if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_querytable') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_querytable if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_tableview') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_tableview if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_querydatabase') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_querydatabase if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_queryindex') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_queryindex if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_column') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_column if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_index') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_index if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_table') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_table if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_query') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_query if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_partitionscheme') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_partitionscheme if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_partitionfunction') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_partitionfunction if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_tuninglog') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_tuninglog if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_reports_database') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_reports_database if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_progress') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_progress if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_output')and (type = 'U')and (uid = user_id('dbo')))) drop table dbo.DTA_output if (exists (select * from msdb.dbo.sysobjects where (name = N'DTA_input') and (type = 'U') and (uid = user_id('dbo')))) drop table dbo.DTA_input -- Drop DTA msdb SP's if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_check_permission' and type = 'P') drop procedure dbo.sp_DTA_check_permission if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_add_session' and type = 'P') drop procedure dbo.sp_DTA_add_session if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_delete_session' and type = 'P') drop procedure dbo.sp_DTA_delete_session if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_session_tuning_results' and type = 'P') drop procedure dbo.sp_DTA_get_session_tuning_results if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_set_interactivestatus' and type = 'P') drop procedure dbo.sp_DTA_set_interactivestatus if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_help_session' and type = 'P') drop procedure dbo.sp_DTA_help_session if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_update_session' and type = 'P') drop procedure dbo.sp_DTA_update_session if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_tuninglog' and type = 'P') drop procedure dbo.sp_DTA_get_tuninglog if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_usage_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_index_usage_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_usage_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_index_usage_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_database_access_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_database_access_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_database_access_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_database_access_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_table_access_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_table_access_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_table_access_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_table_access_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_column_access_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_column_access_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_column_access_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_column_access_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_costrange_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_query_costrange_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_costrange_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_query_costrange_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_cost_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_query_cost_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_cost_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_query_cost_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_event_weight_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_event_weight_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_event_weight_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_event_weight_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_detail_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_query_detail_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_detail_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_query_detail_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_indexrelations_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_query_indexrelations_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_query_indexrelations_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_query_indexrelations_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_current_detail_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_index_current_detail_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_recommended_detail_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_index_recommended_detail_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_detail_current_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_index_detail_current_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_index_detail_recommended_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_index_detail_recommended_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_view_table_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_view_table_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_view_table_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_view_table_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_wkld_analysis_helper_xml' and type = 'P') drop procedure dbo.sp_DTA_wkld_analysis_helper_xml if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_wkld_analysis_helper_relational' and type = 'P') drop procedure dbo.sp_DTA_wkld_analysis_helper_relational if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_session_report' and type = 'P') drop procedure dbo.sp_DTA_get_session_report if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_set_tuninglogtablename' and type = 'P') drop procedure dbo.sp_DTA_set_tuninglogtablename if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_tuningoptions' and type = 'P') drop procedure dbo.sp_DTA_get_tuningoptions if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_interactivestatus' and type = 'P') drop procedure dbo.sp_DTA_get_interactivestatus if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_progressinformation' and type = 'P') drop procedure dbo.sp_DTA_insert_progressinformation if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_set_progressinformation' and type = 'P') drop procedure dbo.sp_DTA_set_progressinformation if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_set_outputinformation' and type = 'P') drop procedure dbo.sp_DTA_set_outputinformation if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_database' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_database if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_partitionscheme' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_partitionscheme if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_partitionfunction' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_partitionfunction if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_column' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_column if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_tableview' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_tableview if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_query' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_query if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_index' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_index if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_table' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_table if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_queryindex' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_queryindex if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_indexcolumn' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_indexcolumn if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_querytable' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_querytable if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_querydatabase' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_querydatabase if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_reports_querycolumn' and type = 'P') drop procedure dbo.sp_DTA_insert_reports_querycolumn if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_insert_DTA_tuninglog' and type = 'P') drop procedure dbo.sp_DTA_insert_DTA_tuninglog if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_databasetableids' and type = 'P') drop procedure dbo.sp_DTA_get_databasetableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_pftableids' and type = 'P') drop procedure dbo.sp_DTA_get_pftableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_pstableids' and type = 'P') drop procedure dbo.sp_DTA_get_pstableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_tableids' and type = 'P') drop procedure dbo.sp_DTA_get_tableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_columntableids' and type = 'P') drop procedure dbo.sp_DTA_get_columntableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_get_indexableids' and type = 'P') drop procedure dbo.sp_DTA_get_indexableids if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_update_tuninglog_errorfrequency' and type = 'P') drop procedure dbo.sp_DTA_update_tuninglog_errorfrequency -- Drop unused SP's if they exist. if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_columnaccesshelper' and type = 'P') drop procedure dbo.sp_DTA_columnaccesshelper if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_databaseaccesshelper' and type = 'P') drop procedure dbo.sp_DTA_databaseaccesshelper if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_indexusagehelper' and type = 'P') drop procedure dbo.sp_DTA_indexusagehelper if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_queryCRhelper' and type = 'P') drop procedure dbo.sp_DTA_queryCRhelper if exists (select name from msdb.dbo.sysobjects where name = 'sp_DTA_tableaccesshelper' and type = 'P') drop procedure dbo.sp_DTA_tableaccesshelper |
3. 실행 후엔 어떤 변화가 있을까요?
가. 구문을 보면 아시겠지만, DTA 관련 테이블을 모두 DROP합니다. 하여 아무런 User Table도 남아있지 않게 됩니다.
나. MSDB 사이즈는 어떻게 될까요? 사용 가능한 공간이 924MB 중 892MB나 되네요.
다. 이제 Database Shrink(축소)를 해 보도록 합니다.
라. 짜잔… 다음과 같이 22.5MB로 사이즈가 줄게 됩니다.
DTA를 사용할 때 반드시 알아두어야 할 것 같네요.
오늘은 “데이터베이스 엔진 튜닝 관리자(Database Engine Tuning Advisor) 의 간단한 사용법에 대해 소개하고자 합니다.
데이터베이스 엔진 튜닝 관리자는 사용하는 쿼리와 테이블 등을 분석해서 통계 데이터와 인덱스 작성을 권장하도록 해 주는 아주아주 훌륭한 툴입니다.
데이터베이스 엔진 튜닝관리자를 사용하시려면 먼저 프로파일러 추적 파일 또는 Table을 만들어야 합니다.
이에 대해선, 강성욱님께서 작성하신 아티클을 참고해 주세요. ^^.
전, 추적파일이 있다는 가정 하에 진행하고, 2005와 2008의 기능이 비슷하므로 2005 위주로 작성했습니다.
1. 프로그램 à Microsoft SQL Server 2005 à 성능 도구à 데이터베이스 엔진 튜닝 관리자
2. 추적파일을 실행하고 튜닝을 할 DB를 선택합니다.
3. 튜닝 관리자가 열리면 “돋보기 버튼”을 눌러서 위에서 만들어 둔 파일을 선택합니다.
4. 파일을 지정하고, 튜닝할 DB 또는 개체를 선택합니다.
5. 튜닝옵션은 필요한 경우에 조합이 가능하지만, 여기서는 특별히 다루지 않을 예정입니다. 준비가 되면 “분석 시작” 버튼을 누릅니다.
l 참고로 이 작업은 시간도 많이 걸리고 부하도 많이 주기 때문에 업무시간에 실서버에 진행하는 것은 별로 권장하지 않아요. ^^.
6. 진행이 완료되면, 예상향상률과 통계, 인덱스 등의 내용이 표시됩니다.
l 참고로, 예상향상률이 낮은 경우 굳이 인덱스 튜닝 관리자를 실행하지 않는 것이 낫다고 하는 의견이 많습니다. 아주 안 좋은 환경에서 튜닝 관리자로 분석하면 예상향상률이 200% 이상도 나온다고 하는군요. ^^
l 보고서를 먼저 한 번 검토해 보시는 것도 중요합니다. 보고서 내용에 따라 작업순서를 정하시는 것도 좋습니다.
7. 해당 내용을 바로 적용하지 말고 “권장 구성 저장”을 통해 SQL Script 파일로 만들어서 검토합니다.
8. 권장구성 Script에서 이름은 임의대로 지정되고, Index Include 의 경우 다소 중복되는 부분들도 있을 수 있으므로 이름을 고쳐서 보기 좋게 해 두시는 것이 관리에 좋습니다.
1) 원본
CREATE NONCLUSTEREDINDEX [_dta_index_ESMINV2T_8_245575913__K17_3_4_20] ON [dbo].[ESMINV2T] ( [BARCODE] ASC ) INCLUDE ( [OUT_QTY], [OUT_WT], [WH_CODE]) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY] go |
2) 수정본 샘플
CREATE NONCLUSTEREDINDEX IX_ESMINV2T_04 ON[dbo].[ESMINV2T] ( [BARCODE] ASC ) INCLUDE ( [OUT_QTY], [OUT_WT], [WH_CODE]) go |
l 인덱스와 통계 적용 전의 실행계획과 이후의 실행계획을 비교해 보는 것도 흥미로운 일이 될 듯 합니다.
안녕하세요? 쓸만한게 없네 윤선식입니다.
일전에 Q&A 게시판에 이러한 문의가 있었는데요.
막상 제가 필요한 상황에 되어 구현을 해 보았습니다.
보통 도메인이 변경되거나, 통합도메인을 사용할 경우 해당 서버의 루트로 보내버리는 경우가 있는데요,
저는 ASPX 파일과 404 Error(Page 없음 오류)를 이용해 Sub Path와 QueryString 모두를 보내볼까 합니다.
참고로 Windows 2003 (IIS 6.0) 기준입니다. IIS 7.0 도 대동소이합니다.
# 사전정의
1. URL("도메인)
가. Old URL : www.test.com
나. New URL : www.test.co.kr
2. Old URL 페이지 설정
가. Main Page : Default.aspx
나. 404 Error 처리 Page : 404Error.aspx
# Old Url에 사용할 ASPX소스
1. Default.aspx : IIS에서 해당 페이지를 메인 페이지로 잡습니다.
<%@ PageLanguage="C#"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <% String sServerUrl = "http://www.test.co.kr/"; Response.Redirect(sServerUrl); %> |
2. 404Error.aspx : 404 에러 시 사용할 페이지입니다.
<%@ PageLanguage="C#"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <% //String sFilePath = (Request.FilePath); String sServerUrl = "www.test.co.kr"; // 보낼 URL String sQueryString = Server.UrlDecode(Request.QueryString.ToString().ToLower()); // 에러를 포함한 페이지 정보를 쿼리스트링으로 받아서 소문자로 변환, 디코딩을 안해도 동작은 하지만, 주소표시를 알흠답게 하기 위해. //Response.Write(sQueryString); //Response.End(); String sServerName = Request.ServerVariables["server_name"].ToLower(); // 서버명 받아오기. String sServerPort = Request.ServerVariables["server_port"]; // 서버포트를 받음. [ssl일 수도 있으므로] String sHttp = "http"; if (sServerPort == "443") // ssl일 경우 https로 변환 sHttp = "https"; String sRedirectUrl = sQueryString.Replace("404;" + sHttp + "://" + sServerName + ":" + sServerPort, ""); // 에러메시지에서 URL Path 부분만 뽑아냄. Response.Redirect(sHttp + "://" + sServerUrl + sRedirectUrl); // 해당 서버로 Redirection(Path Info 및 QueryString 포함) %> |
# IIS 설정
1. 위에서 설정한 Default.aspx를 기본문서로 설정합니다.
2. 등록정보에서 “사용자 지정오류” 탭을 선택하고, HTTP 404 오류를 선택합니다.
3. 사용자 지정 오류 편집 속성에서 메시지 유형을 “URL”로, URL은 위에서 지정한 “/404Error.aspx”로 합니다.
4. 등록정보가 변경된 것을 확인 가능합니다.
이제는 http://www.test.com/sub/DetailPage.aspx?Goods=12546페이지는 자동적으로
http://www.test.co.kr/sub/DetailPage.aspx?Goods=12546으로 Redirect됩니다. ^^
ClearTrace 소개입니다.
예전에 김종균님께서 소개하신 글(http://www.sqler.com/105021)을 좀 보강했습니다.
ClearTrace 는 특별한 기능이 많이 있는 것은 아니지만, 간단하고 빠르게 확인하기엔 좋은 툴입니다.
ClearTrace는 SQL 2005, SQL 2008, SQL 2008 R2 버전에 대해 지원이 가능하며 Express버전은 지원이 안됩니다.
기준은 SQL Server 2008로 설명하려고 합니다.
1. 다운로드 및 설치
가. http://www.scalesql.com/cleartrace/download.aspx
위 사이트에서 다운로드하면 됩니다.
나. 다운로드받은 파일의 압축을 해제하면, ClearTrace.exe과 ClearTraceCmd.exe 두 개의 파일이 생성되는데, GUI 환경인 ClearTrace.exe에서 확인해 보도록 하겠습니다.
다. 도메인 환경일 경우엔 원격장소에 설치해도 무관할 듯 하지만, 그렇지 않을 경우 SQL Server가 설치된 서버에 설치하셔야 합니다.
2. 최초 실행 및 환경설정
처음 실행하면DataBase를 만들어달라는 내용이 나옵니다.
3. Tools > Options를 클릭합니다.
4. Server명과 DataBase명을 기재합니다.
이 때, Database Name은 기존에 없는 것을 새로 만드는 것을 권장합니다. (분리를 위해)
5. 만약 서버명을 잘 못 기재하면 다음과 같은 메시지를 보게 됩니다.
6. 4.번 과정에서 새로 만들기 위해 새로운 이름을 주게 되면 다음과 같이 새로 만들겠냐는 문구가 뜹니다.
** 보시면 알겠지만, 로그인한 계정이 시스템 권한이 있어야 하고 DataBase Create 권한도 있어야 하네요.
7. ClearTrace 초기화면입니다. 중요한 항목만 간단하게 설명해 보겠습니다.
가. Trace Group : Group을 지정함으로써 용도에 따라 분류가 가능합니다. 이름만 적으시면 됩니다.
나. Trace Files
1) First File : 최초 작성할 파일명을 기재합니다.
2) Work Directory : 작업 디렉터리입니다.
3) Archive Directory : 작업 완료 후 trc 파일을 보관(이동)할 디렉터리입니다.
다. 기본지정이 완료되면 “Import Files” 버튼을 누릅니다.
8. Trace File Import가 진행되면 진행사항이“Import Status” 탭에 표시됩니다.
9. Import가 완료되면 자동으로 “Query the Imported Files” 탭으로 이동합니다. 중요한 항목만 간단하게 설명해 보겠습니다.
가. Trace Group To Query : 앞에서 지정한 그룹에 따라 추적그룹을 나눠서 처리할 수 있습니다.
나. Date To Query : 추적파일에 지정된 날짜에 따라 필터링이 가능합니다.
다. Rows : 표시할 줄 수입니다.
라. Group By : 집계할 항목(Item)의 컬럼을 지정합니다.
- SQL Text, Application Name, Login Name, Host Name, Date 등의 지정이 가능합니다.
마. Order By : 정렬순서입니다.
- CPU, Reads, Writes, Duration 등등 의 지정이 가능합니다.
바. Keyword Filter : 항목 Filtering입니다.
- Profiler에서 Ctrl+F 눌러서 나오는 값들로 Filtering했다고 보시면 됩니다.
사. Application Filter : 응용 프로그램에 따른 Filtering입니다.
- 예를 들어 .Net Application이 있다면.Net SqlClient Data Provider 항목이 존재합니다.
아. Login Filter : SQL Login Name에 따른 Filtering입니다.
자. Host Filter : Login Host Name에 따른 Filtering입니다.
차. Events : Profiler에서 설정한 Events에 따른 Filtering입니다.
- Batches, Statements 등등의 항목이 존재합니다.
카. Display Averages : Group By 값에 대한 평균값들을 보여줍니다.
- 이것을 클릭하면 AvgCPU, AvgReads, AvgWrites 등의 항목들이 늘어납니다.
타. Reset : 너무나도 당연한 이야기이지만, 조건을 초기화합니다.
파. Display : 위에서 설정한 조건대로 Filtering 및 Soring한 결과를 표시합니다.