'분류 전체보기'에 해당되는 글 684건

  1. TEST시 모든 변수 선언하지 말자. 상수값으로 대체 한다. 3
  2. XML execution plans out as SQLPlan files
  3. 053. sc 명령을 이용한 서비스 설정
  4. single page or multi page allocate
  5. sp_depends
  6. DMV
  7. AWE 설정
  8. 유용한 DMV
  9. 업데이트 비용에 대한 고찰
  10. SQL의 SHFT 비트 연산
2009.03.07 SQL Off-Study


USE AdventureWorks
GO
SELECT *
FROM HumanResources.EmployeePayHistory
WHERE EmployeeID = 24
GO
DECLARE @EmployeeID int
SET @EmployeeID = 24
SELECT *
FROM HumanResources.EmployeePayHistory
WHERE EmployeeID = @EmployeeID
GO

상수에 의한 실행계획을 확인한다.
왜냐, equal 검색은 변수로 받을 경우 10% data 가정으로 찾고, range seek는 15% 가정하고 진행한다.
그렇기 때문에 모든 테스트 및 실행계획 할 때에는 상수값을 이용하여 확인할 것..

2009.03.24

2009.04.07
위의 내용은 SQL2000/2005 튜닝 - 정원혁 저 P.288 참조
상수 폴딩(Constant folding) 이라고 한다.

쿼리 처리 과정
1. 구문 분석(parsing)
2. 표준화(Standardization)
3. 최적화(Optimization)
4. 컴파일(Compilation)
5. 실행(Execute)

최적화기는 통계 정보의 해당 행에 대한 빈도, 즉 분포도(Histogram)를 사용하여 해당 행이 몇%나 되는지 계산하고 각각 테이블 스캔, 인덱스 검색이라는 제대로된 플랜을 만들어 낸다.
하지만, 변수로 받아질 경우,,, 최적화기는 분포도(Histogram)을 사용하지 못하고, 단지 해당 테이블에서 임의의 값 하나를 가져올 경우에 해당하는 밀도를 판단 한다.  <<-- 아하,,,
그중,,,all density value를 확인하여 사용하게 되는데, 예 1.1392~


요건,,,, 내일 회사 가서 다시 테스트 해보자...

3월 7일 SQLER 스터디에 나온 이슈중에 하나이다.^^

USE AdventureWorks;
GO
SET SHOWPLAN_XML ON;
GO
-- Execute a query.
SELECT EmployeeID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
SET SHOWPLAN_XML OFF;

위의 결과를 다른 이름으로 파일 저장하기를 이용하여 저장한다. 저장할때, 파일 형식은 모든 파일 선택 (*.*) 한다. 
이름.sqlplan 저장한다. (예, test5.sqlplan )
저장된 파일을 더블 클릭한다. 그러면, SQL PLAN 정보를 확인할 수가 있다.  (SSMS 확인이 가능하다 )

실행계획의 정보를 텍스트 파일이 좋지만, XML 파일 형태로 공유하는게 더 확실하다. 왜냐, 모든 실행 계획을 보여주기 때문에 적절하다.

그래픽 형태가 보기도 좋구...

'SQL Server 2005' 카테고리의 다른 글

[SQL] Using 'GO 100' to execute a batch 100 times  (0) 2009.04.03
identity overflow 검사하기  (0) 2009.03.25
sp_depends  (0) 2009.03.13
DMV  (0) 2009.03.09
유용한 DMV  (0) 2009.03.04
Sc.exe를 사용하여 Windows 서비스를 만드는 방법 http://support.microsoft.com/kb/251192/ko

SC 명령을 통한 서비스 제어 sample http://cupid4u.cafe24.com/tater2/entry/Server-Default-Setting?TSSESSION=3c307d512925485740830c916016dbb5

http://ibecky.tistory.com/tag/SC



도대체 sc 명령어가 머냐??
command 명령어를 이용하여 서비스를 시작하고 종료할 수 잇는 명령어 이군

인스턴스로 설치를 하셨다면 net start mssql$<인스턴스명> 식으로 시작과 정지가 가능합니다


sc config mssqlserver start= auto
sc config sqlserveragent start= auto

net start mssqlserver
net start sqlserveragent



SC 명령어

sc stop mssql$mssql2008
sc start mssql$mssql2008




sc는 서비스 관련 API를 실행할 수 있도록 만들어진 윈도우즈 내장 프로그램이다. 가능한 OS는 아래에 나열했다.

  • Microsoft Windows NT Server 4.0, Terminal Server Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows NT Server 4.0 Standard Edition


    XP가 언급되지 않았는데 확인해 본 결과 XP에도 포함되어 있다. 아마 내가 XP 이전에 작성된 문서를 본 것 같다. 아쉽게도 VISTA에서는 정말로 빠진 듯 하다. WDF로 넘어오면서 철저한 보안검사 때문에 빠진듯 하다. 아무튼 서비스가 정상적으로 등록되어 있다면

    sc start 서비스이름

    또는

    net start 서비스이름

    을 이용해서 구동할 수가 있다. 난 습관적으로 net start를 이용하곤 하는데 타이핑면에서 sc가 효율적이므로 슬슬 케케묵은 습관은 버릴때가 되었다. 자, 이제 오늘의 핵심인 서비스를 등록하는 부분을 살펴보자. 일단 사용법을 살펴보기 위해서 sc create 라고 타이핑해봤다.

    Creates a service entry in the registry and Service Database.
    SYNTAX:
    sc create [service name] [binPath= ] <option1> <option2>...
    CREATE OPTIONS:
    NOTE: The option name includes the equal sign.
     type= <own|share|interact|kernel|filesys|rec>
           (default = own)
     start= <boot|system|auto|demand|disabled>
           (default = demand)
     error= <normal|severe|critical|ignore>
           (default = normal)
     binPath= <BinaryPathName>
     group= <LoadOrderGroup>
     tag= <yes|no>
     depend= <Dependencies(separated by / (forward slash))>
     obj= <AccountName|ObjectName>
           (default = LocalSystem)
     DisplayName= <display name>
     password= <password>

    이 보다 깔끔하게 잘 정리된 사용법도 없을 것이다. 실제 드라이버를 만들어서 등록하기 위해서 아래와 같이 타이핑했다.

    sc create Handle binPath="C:\Handle.sys" displayName="+_+ Win32 handle viewer" type=Kernle

    사용법대로 철자하나 틀리지 않게 잘 썼다고 생각하고 엔터를 눌렀지만 돌아오는것은 사용법에 관한 Echo뿐 ㅠ ㅠ
    무엇이 잘못 된 것일까? 난 sc 명령을 사용하는 사용자 권한 문제로 파악하고 administrator 권한으로 로그인하고 별의별 짓을
    다 했지만 결국 해결할 수가 없었다. 30분 정도의 웹 검색으로 알게 된 사.실!!!

    사용법을 잘 보시라! 옵션의 이퀄(=) 다음에 분명히!!!! 공백이 하나 존재한다!!!!!

    도움말과 사용법은 글자 하나 빠뜨리지 말고 꼼꼼하게! 세심하게 살핍시다. :(



  • showlogs , showenvironment, showlocator, showfru, consolehistory H/W 장애시 다섯개만 보내주면 썬이 해결해 주지여.. ㅋㅋㅋㅋ



    sc 명령어 = 하드웨어 관련

    2008/01/14 11:37

    복사 http://blog.naver.com/formidori/130026708927

    @ sc platfomr shell commands

     

    sc> help - 도움말

     

    ---------------------------------@정보확인--------------------------------

     

    history - 날짜 시간 커멘트히스토리 확인
    showrc - sc의 업타임 버전확인
    showdate - sc,도메인 time,date 확인
    showlogs - 현재 로깅 설정 확인
    showplatform - 플렛폼 환경설정 확인

    showboards - 각보드의 status와 assign 정보확인
    showcomponent - 컴퍼넌트리스트 확인
    showenvironment - status, temperature,voltage,fanspeed 등 환경확인
    showkeyswitch - keyswitch setting 확인

    showcodlicense - cod license 확인
    showcodlog - cod 로그 히스토리
    showcodusage - usage current cod license 확인


    [출처] sc 명령어|작성자



    ------------@ 시스템컨트롤러 셋업 ( 스페어 sc도 같은방식으로 구성해준다)----------

    sc> setupplatform - sc세업
    sc> reboot - 셋업후 재부팅 (꼭 실행할필욘없음)
    sc> showplatform - 셋업이 재대로 되었는지 확인한다
    sc> showboards - 보드의 상태를 확인
    sc> poweron all - 모든 보드를 파워온한다
    sc> showsc -v
    sc> showboards -p prom  - 모든 보드의 PROM 정보확인후
    sc> flashupdate -y -f ftp://root:passwd@108.2.1.187/112883-06 all rtos
    - PROM 이 낮다면 업데이트해준다
    sc> showdate  - 날짜를 확인후
    sc> setdate -t JST 011309002008.30 - 시간을 맞추어준다(예:2003년1월13일9시0분30초)

     

    ----------------------------------@ 도메인구성--------------------------------------

    sc> addboard -d a SB0 IB6 - 도메인A에 SB0 IB6 을 추가
    sc> console a - 도메인A로 접속
    A> setupdomain - 도메인셋업
    A> showdomain  - 셋업확인
    A> setdate -t GMT+9 011309002008.30 - 시간을 맞추어준다(예:2003년1월13일9시0분30초)
    A> setkeyswitch on - 도메인 on
    ok> boot cdrom - os설치 시작

    [출처] sc 셋팅|작성자



    은행 사이트 들어갔다가 나오면 어쩔수 없이 npkc*** 프로세스가 작동되었는데

    작업 관리자에 보면 이게 계속 서비스에서 활성화 되어있는게 소스만 차지하고 있습니다.

    이걸 없앨수는 없더군요. 그래서 찾아보다가 SC 명령어란게 있더군요. 제어하는 명령어 인데 정말 유용합니다.

    관련내용 링크입니다. http://ibecky.tistory.com/tag/SC

     

     

    이걸 활용하여 간단히 배치 파일 만들어 시작프로그램에 넣었어요.

    ------------------------------------------------------------------------------ 

    sc config npkcmsvc start= auto  -- 서비스 설정 (이건 이 서비스가 늦게 뜰 경우를 생각해서 )
    sc stop npkcmsvc   --- 서비스 중지
    sc config npkcmsvc start= disabled   ---- 서비스 사용안함

    ------------------------------------------------------------------------------ 

     

    위에 처럼 하면 윈도우 시작시 도스창이 보이게 되는데 이걸 안보이게 할수 있습니다.

     

    가령 npkcmsvc제한.vbs 라는 파일을 메모장으로 만들고

    ------------------------------------------------------------------------------
    Dim Shell

    Set Shell = WScript.CreateObject("WScript.Shell")

    Shell.run "sc config npkcmsvc start= auto", 0 ,true
    Shell.run "sc stop npkcmsvc", 0 ,true
    Shell.run "sc config npkcmsvc start= disabled", 0 ,true
    ------------------------------------------------------------------------------

    이렇게 만들어서 시작프로그램에 넣으면 끝.

     

    이렇게 하면 윈도우시작시 서비스가 자동으로 실행되고 정지한다음 사용안함 상태로 만듭니다.

     

    출처:http://blog.daum.net/toupto/6649817

     

    첨부파일 nprotect제한.vbs

    ↑ 시작프로그램에 넣어주고 윈도우 다시시작 합니다.

     

    첨부파일 sc_5893.pdf




     

    두개의 차이는 테이블의 사이즈에 따라서 다르다 또는 옵션 설정에 따라 다르다...


    FIX: tempdb 데이터베이스에 대한 동시성 강화
    http://support.microsoft.com/kb/328551/ko

    ----------------------------------------------------------------------------------------

    개체를 생성하는 동안 혼합 익스텐트 및 새 개체에 두(2) 페이지를 할당해야 합니다. 한 페이지는 IAM(Index Allocation Map)을 위한 것이고 두 번째 페이지는 개체의 첫 페이지를 위한 것입니다. SQL Server는 SGAM(Shared Global Allocation Map) 페이지를 사용하여 혼합 익스텐트를 추적합니다. 각 SGAM 페이지는 약 4GB의 데이터를 추적합니다.

    혼합 익스텐트에서 페이지 할당의 일환으로 SQL Server는 PFS(Page Free Space) 페이지를 검색하여 어떤 혼합 페이지를 할당할 수 있는지 확인해야 합니다. PFS 페이지는 모든 페이지에서 사용할 수 있는 여유 공간을 추적하고 각 PFS 페이지는 약 8000 페이지를 추적합니다. PFS 및 SGAM 페이지를 변경하기 위해 적절한 동기화가 유지되며 이를 통해 잠시 동안 다른 수정 작업을 막을 수 있습니다.

    SQL Server가 할당할 혼합 페이지를 검색할 때는 항상 동일한 파일과 SGAM 페이지에서 검색을 시작합니다. 따라서 여러 혼합 페이지 할당이 진행되는 경우 SGAM 페이지에서 상당한 경합이 발생하여 본 문서의 "현상" 절에서 설명하는 문제가 초래될 수 있습니다.

    참고 할당 취소 작업도 페이지를 수정해야 하므로 경합이 한층 더 증가할 수 있습니다.

    SQL Server에서 사용하는 여러 가지 할당 메커니즘(SGAM, GAM, PFS, IAM)에 대해 자세히 알아보려면 본 문서의 "참조" 절을 참조하십시오.

    ----------------------------------------------------------------------------------------


    추적 플래그 -T1118에서 경합을 줄이는 방식

    다음은 -T1118에서 경합을 줄이는 방식을 나열한 것입니다.
    • -T1118은 서버 범위 설정입니다.
    • SQL Server의 시작 매개 변수에 -T1118 추적 플래그를 포함하여 SQL Server가 재활용된 후에도 추적 플래그가 유효한 상태를 유지합니다.
    • -T1118은 서버에서 단일 페이지 할당을 거의 모두 제거합니다.
    • 대부분의 단일 페이지 할당을 해제함으로써 SGAM 페이지에서 경합을 줄입니다.
    • -T1118을 설정하면 추적 플래그 없이 개체의 첫 8 페이지에 대한 익스텐트에서 수행되는 단일 페이지 할당과 반대로 개체에 대해 한 번에 8 페이지(1 익스텐트)를 할당하는 GAM 페이지(예: 2:1:2)에서 거의 모든 새 할당이 수행됩니다.
    • IAM 페이지는 -T1118이 설정된 상태에서도 여전히 SGAM 페이지에서 단일 페이지 할당을 사용합니다. 그러나 핫픽스 8.00.0702와 결합하고 tempdb 데이터 파일을 늘리면 SGAM 페이지에서 경합이 줄어드는 효과가 있습니다. 공간 문제에 대해서는 본 문서의 "단점" 절을 참조하십시오

    ----------------------------------------------------------------------------------------

    1. SQL Server 2000 서비스 팩 3(SP3)을 실행하는 서버의 경우 핫픽스 8.00.0765 또는 최신 보안 수정 프로그램 8.00.0818을 적용합니다. SQL Server SP2를 실행하는 서버의 경우 핫픽스 8.00.0702를 적용합니다.

      이들 수정 프로그램은 다음 위치에서 확인할 수 있습니다.

      8.00.0765

      814916  (http://support.microsoft.com/kb/814916/ ) FIX: 필터링된 게시에 대한 병합 에이전트가 실패할 수 있다
      8.00.0818
      http://www.microsoft.com/korea/technet/security/bulletin/MS03-031.asp (http://www.microsoft.com/korea/technet/security/bulletin/MS03-031.asp)
      8.00.0702
      328551  (http://support.microsoft.com/kb/328551/ ) FIX: tempdb 데이터베이스에 대한 동시성 강화
    2. 추적 플래그 -T1118을 구현합니다.
    3. 프로세서 수와 동일하게 tempdb 데이터 파일 수를 늘리고 동일한 크기로 파일을 만듭니다. 자세한 내용은 "추가 정보" 절을 참조하십시오.

     

    sp_depends

    그동안 어떤 테이블의 참조 개체를 찾아내는데 아래와 같이 사용하였으나,

    ----------------------------------------------------------------------------------- 이전
    SELECT A.name ProcedureName
    FROM sys.objects A, sys.syscomments B
    WHERE A.object_id = B.ID
     -- AND A.name LIKE @SP_NAME + '%'
     AND B.text LIKE '%' + @DS_TEXT + '%'

    >> 가끔, 다른 용도로도 사용 가능.

    ----------------------------------------------------------------------------------- 이후
    sp_depends '테이블명'

    'SQL Server 2005' 카테고리의 다른 글

    identity overflow 검사하기  (0) 2009.03.25
    XML execution plans out as SQLPlan files  (0) 2009.03.24
    DMV  (0) 2009.03.09
    유용한 DMV  (0) 2009.03.04
    업데이트 비용에 대한 고찰  (0) 2009.02.04

    DMV

    --> 정리하자..

    응용 프로그램 성능 최적화를 위한 숨겨진 데이터 찾기
    http://msdn.microsoft.com/ko-kr/magazine/cc135978.aspx#S1

    4.0 Useful Queries on DMV’s to understand Plan Cache Behavior

    http://blogs.msdn.com/sqlprogrammability/archive/2007/01/23/4-0-useful-queries-on-dmv-s-to-understand-plan-cache-behavior.aspx


    1. Top SPs By Execution Count 
       얼마나 자주 sp를 호출하고,,,,, 평균 실행시간 및 캐쉬에 존재하였던 시간까지 모두 체크 가능하다..

    -- Ver SQL2005
    SELECT
    TOP (100) qt.text AS 'SP Name', qs.execution_count AS 'Execution Count', 

    qs.execution_count/DATEDIFF(Second, qs.creation_time, GetDate()) AS 'Calls/Second',

    qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime',

    qs.total_worker_time AS 'TotalWorkerTime',

    qs.total_elapsed_time/qs.execution_count AS 'AvgElapsedTime',

    qs.max_logical_reads, qs.max_logical_writes, qs.total_physical_reads,

    DATEDIFF(Minute, qs.creation_time, GetDate()) AS 'Age in Cache'

    FROM sys.dm_exec_query_stats AS qs

    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
    WHERE qt.dbid = db_id() -- Filter by current database

    ORDER BY qs.execution_count DESC
    GO

    -- Ver SQL2008

    SELECT TOP (100) p.name AS 'SP Name', qs.execution_count,

    ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GetDate()), 0) AS 'Calls/Second',

    qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime', qs.total_worker_time AS 'TotalWorkerTime', 

    qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count AS 'avg_elapsed_time', qs.last_elapsed_time,

    qs.cached_time, qs.last_execution_time

    FROM sys.procedures AS p

    INNER JOIN sys.dm_exec_procedure_stats AS qs

    ON p.object_id = qs.object_id

    ORDER BY qs.execution_count DESC;




    'SQL Server 2005' 카테고리의 다른 글

    XML execution plans out as SQLPlan files  (0) 2009.03.24
    sp_depends  (0) 2009.03.13
    유용한 DMV  (0) 2009.03.04
    업데이트 비용에 대한 고찰  (0) 2009.02.04
    SQL의 SHFT 비트 연산  (0) 2009.01.13

    AWE 설정

    AWE는 액세스 가능한 프로세스 주소 공간이 4GB로 제한되는 32비트 응용 프로그램의 한계를 해결합니다. 32비트 포인터는 4GB를 초과하는 메모리 주소를 가리킬 수 없습니다.

    BOL : http://msdn.microsoft.com/ko-kr/library/ms191481.aspx

    Windows Server 2003에서 AWE로 매핑된 메모리 사용

    SQL Server는 Windows Server 2003에서 AWE 메모리의 동적 할당을 지원합니다. SQL Server는 시작 과정에서 AWE로 매핑된 메모리의 일부만 예약합니다. AWE로 매핑된 추가 메모리가 필요한 경우 운영 체제에서 동적으로 메모리를 SQL Server에 할당합니다. 마찬가지로 적은 리소스만 필요한 경우 SQL Server에서는 다른 프로세스나 응용 프로그램에서 사용할 수 있도록 AWE 매핑된 메모리를 운영 체제로 반환합니다. awe enabled 구성 옵션에 대한 자세한 내용은 awe enabled 옵션을 참조하십시오.

    Windows Server 2003 제품군부터 지원하는 실제 메모리 양이 증가했습니다. 따라서 AWE에서 액세스할 수 있는 실제 메모리 양은 사용 중인 운영 체제에 따라 달라집니다. 다음 목록에서는 작성 시점을 기준으로 각각의 Windows Server 2003 운영 체제가 액세스할 수 있는 최대 실제 메모리를 보여 줍니다.

    • Windows Server 2003 Standard Edition에서는 실제 메모리를 4GB까지 지원합니다.
    • Windows Server 2003 Enterprise Edition에서는 실제 메모리를 32GB까지 지원합니다.
    • Windows Server 2003 Datacenter Edition에서는 실제 메모리를 64GB까지 지원합니다.

    메모리 옵션 구성

    SQL Server는 Windows Server 2003 운영 체제의 모든 버전에서 실행할 때 AWE로 매핑된 메모리를 동적으로 할당합니다. 따라서 버퍼 풀이 AWE로 매핑된 메모리를 동적으로 관리하여(min server memorymax server memory 옵션의 제약을 받음) 전체 시스템 요구 사항에 따라 SQL Server 메모리 사용량을 조절할 수 있습니다.

    AWE가 설정되면 SQL Server는 항상 AWE로 매핑된 메모리를 사용하려고 시도합니다. 이는 응용 프로그램에 3GB 미만의 사용자 모드 주소 공간을 제공하도록 구성된 컴퓨터를 포함하여 모든 메모리 구성에 적용됩니다.

    • Windows Server 2003에서 실행하는 SQL Server의 기본 메모리 모드로 AWE를 설정하는 것이 좋습니다. Hot Add 메모리 기능을 사용하려면 SQL Server 시작 과정에서 AWE를 설정해야 합니다. 자세한 내용은 Hot Add 메모리를 참조하십시오.
    ms190673.note(ko-kr,SQL.100).gif참고:
    AWE는 필요하지 않으며 64비트 운영 체제에서 구성할 수 없습니다.

    • AWE로 매핑된 메모리는 3GB 미만까지만 지원되므로 min server memorymax server memory 값을 실제 메모리 범위 내에서 정의하거나 두 옵션의 기본값을 사용하십시오.
    • 컴퓨터에서 실행되는 다른 응용 프로그램에 대한 추가 메모리를 보장하기 위해 SQL Server에 대한 max server memory를 설정할 수도 있습니다. SQL Server는 AWE로 매핑된 메모리를 동적으로 해제할 수 있지만 현재 할당된 AWE로 매핑된 메모리 양을 페이징 파일로 스와핑할 수는 없습니다.

    SQL Server 인스턴스에서 AWE를 사용하려면 sp_configure를 사용하여 awe enabled 옵션을 1로 설정한 다음 SQL Server를 다시 시작하십시오.

    min server memorymax server memory에 대한 자세한 내용은 서버 메모리 옵션을 참조하십시오.

    AWE를 설정하기 전에 Lock Pages in Memory 정책을 구성해야 합니다. 자세한 내용은 방법: Lock Pages in Memory 옵션 설정(Windows)을 참조하십시오.

    다음 예에서는 AWE를 활성화하고 min server memory 제한을 1GB로, max server memory 제한을 6GB로 구성하는 방법을 보여 줍니다.

    먼저 AWE를 구성합니다.

    sp_configure 'show advanced options', 1
    RECONFIGURE
    GO
    
    sp_configure 'awe enabled', 1
    RECONFIGURE
    GO

    SQL Server를 다시 시작한 후 SQL Server 오류 로그에 다음 메시지가 기록됩니다. "Address Windowing Extensions이 설정되어 있습니다."

    다음으로 메모리를 구성합니다.

    sp_configure 'min server memory', 1024
    RECONFIGURE
    GO
    
    sp_configure 'max server memory', 6144
    RECONFIGURE
    GO

    이 예에서는 버퍼 풀이 AWE로 매핑된 메모리를 1GB에서 6GB 사이에서 동적으로 할당하도록 메모리를 설정합니다. 다른 응용 프로그램에 추가 메모리가 필요한 경우 SQL Server에서 필요하지 않은 AWE로 매핑된 할당 메모리를 해제할 수 있습니다. 이 예에서는 AWE로 매핑된 메모리를 최대 1GB까지만 해제할 수 있습니다.

    Hot Add 메모리를 지원하는 컴퓨터에 메모리가 추가된 경우 SQL Server에서 동적 AWE 메모리를 통해 메모리를 늘릴 수도 있습니다. Windows Server 2003 Enterprise 및 Datacenter Edition에서 사용 가능한 Hot Add 메모리를 통해 컴퓨터를 실행하는 동안 메모리를 추가할 수 있습니다. 예를 들어 Windows Server 2003 Enterprise Edition에서 실행되는 SQL Server를 실제 메모리가 16GB인 컴퓨터에서 시작한다고 가정합니다. 운영 체제는 응용 프로그램의 가상 메모리 주소 공간을 2GB로 제한하도록 구성되고 SQL Server에서 AWE가 활성화됩니다. 이후 시스템 관리자가 컴퓨터를 실행하는 동안 16GB의 메모리를 추가하면 SQL Server는 즉시 추가 메모리를 인식하고 필요한 경우 이를 활용합니다.

    AWE를 사용하는 방법은 Windows Server 2003 설명서를 참조하십시오.

    'SQL Server 2008' 카테고리의 다른 글

    트랜잭션 로그 파일 없이 복구하기  (0) 2009.12.18
    DATABASE 생선 옵션  (0) 2009.12.18
    Analyze and Fix Index Fragmentation in SQL Server 2008  (0) 2008.12.02
    GROUPING SETS  (0) 2008.11.05
    SQL2008 설치하기  (0) 2008.10.07

    유용한 DMV


    으앙 ㅜ...ㅜ.
    많이 달라졌다...

    http://glennberrysqlperformance.spaces.live.com/blog/cns!45041418ECCAA960!1129.entry?wa=wsignin1.0&sa=974308588


    응용 프로그램 성능 최적화를 위한 숨겨진 데이터 찾기
    http://msdn.microsoft.com/ko-kr/magazine/cc135978.aspx#S1



    SQL2008
    sys.dm_exec_procedure_stats DMV that was added in SQL Server 2008

        -- Top SPs By Execution Count (SQL 2008)
        SELECT TOP (100) p.name AS 'SP Name', qs.execution_count,
        ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GetDate()), 0) AS 'Calls/Second',
        qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime', qs.total_worker_time AS 'TotalWorkerTime',  
        qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count AS 'avg_elapsed_time', qs.last_elapsed_time,
        qs.cached_time, qs.last_execution_time
        FROM sys.procedures AS p
        INNER JOIN sys.dm_exec_procedure_stats AS qs
        ON p.object_id = qs.object_id
        ORDER BY qs.execution_count DESC;
        
        -- Top SPs By Execution Count (SQL 2005)
        SELECT TOP (100) qt.text AS 'SP Name', qs.execution_count AS 'Execution Count',  
        qs.execution_count/DATEDIFF(Second, qs.creation_time, GetDate()) AS 'Calls/Second',
        qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime',
        qs.total_worker_time AS 'TotalWorkerTime',
        qs.total_elapsed_time/qs.execution_count AS 'AvgElapsedTime',
        qs.max_logical_reads, qs.max_logical_writes, qs.total_physical_reads, 
        DATEDIFF(Minute, qs.creation_time, GetDate()) AS 'Age in Cache'
        FROM sys.dm_exec_query_stats AS qs
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
        WHERE qt.dbid = db_id() -- Filter by current database
        ORDER BY qs.execution_count DESC
    Technorati Tags:


    'SQL Server 2005' 카테고리의 다른 글

    sp_depends  (0) 2009.03.13
    DMV  (0) 2009.03.09
    업데이트 비용에 대한 고찰  (0) 2009.02.04
    SQL의 SHFT 비트 연산  (0) 2009.01.13
    SQL Server, SANs and Virtualisation  (0) 2009.01.09
    http://kuaaan.tistory.com/29
    http://support.microsoft.com/kb/832524


    우리가 프로시져를 쓸 때 다음과 같은 구문을 자주 사용한다.

    IF ((SELECT COUNT(*) FROM TEST_TAB WHERE STATUS = 'S') > 0)
         UPDATE TEST_TAB      SET STATUS = 'R'     WHERE STATUS = 'S'

    위의 구분은 업데이트 대상이 존재하는지 먼저 SELECT해 보고,
    대상이 있을 경우에만 UPDATE 한다는 뜻이다.
    그렇다면, 왜 SELECT 테스트를 먼저 수행하는 것이 바로 UPDATE부터 수행하는 것보다 비용이 적을까?

    (위의 예에서 테스트 대상 테이블은 26,000개의 레코드가 들어있었다.)
    업데이트 대상이 존재할 경우, SELECT와 UPDATE를 둘 다 해야 하기 때문에
    무조건 UPDATE부터 하는 것보다 분명히 더 비용이 비쌀 것으로 예상된다.

    그렇다면... 업데이트 대상이 존재하지 않을 경우는 어떨까?
    SELECT를 함으로서 UPDATE를 해보지 않아도 되기 때문에 더 적은 비용이 드는 걸까?

    SELECT COUNT(*) FROM IP_TEST_TAB    WHERE STATUS = 'S' -- 1
    UPDATE TEST_TAB   SET STATUS = 'R'     WHERE STATUS = 'S' -- 2

    STATUS 컬럼이 'S'인 레코드가 한개도 없는 (즉, 업데이트 대상이 0개인) 상황을 만들어 놓고 위의 두가지 해 보았다. 프로필러에 나타난 결과는 다음과 같다.

    1번 SELECT 문 : CPU(235), READ(1761), WRITE(0), DURATION(236)
    2번 UPDATE 문 : CPU(0), READ(1186), WRITE(0), DURATION(16)

    즉, 대상 데이터가 한개도 없는 경우에도 바로 UPDATE부터 실행시키는 것이 훨씬 비용이 적다는 것이다.

    그렇다면, SELECT를 해서 UPDATE할 데이터가 있는지 체크해보지 않고 직접 UPDATE부터 하는 것이 더 좋은 방법일까??
    아래의 테스트를 해 보자.
    -- 세션 1, 2에서 아래의 SQL을 순서대로 실행
    BEGIN TRAN
    UPDATE TEST_TAB  SET STATUS = 'R' WHERE STATUS = 'S'
    STATUS 컬럼을 모두 'R'로 변경한 상태에서 위의 SQL을 두 세션에서 순차적으로 실행시켜보자. 나중에 실행된 세션에서 LOCK이 걸리는가? 테스트해보면 LOCK이 걸리지는 않는 것을 알 수 있다.

    UPDATE문을 실행시킬 때는 EXCLUSIVE LOCK이 걸린다. 즉, UPDATE문은 동시에 두개가 실행될 수 없다는 뜻이다. 그런데, 위의 테스트를 통해 LOCK 이 걸리는 것은 실제 변경되는 RECORD가 발생할 때 부터라는 것을 알 수 있었다. 요약하면, "UPDATE문을 실행했더라도 WHERE에 의해 영향을 받는 ROWS가 없는 경우는 LOCK이 걸리지 않는다."

    상기 테스트를 종합해 볼 때... 아래와 같은 결론을 내릴 수 있다.

    1. 어떤 경우에도  업데이트 전에 SELECT 테스트를 수행하는 것이 비용이 더 비싸다.
    2. SELECT 테스트 없이 직접 UPDATE를 날리더라도 변경 대상 레코드가 없는 경우에는 EXCLUSIVE LOCK이 걸리지 않는다.
    ※ 따라서 SELECT 테스트 없이 직접 UPDATE부터 날리는 것이 더 낫다.

    'SQL Server 2005' 카테고리의 다른 글

    DMV  (0) 2009.03.09
    유용한 DMV  (0) 2009.03.04
    SQL의 SHFT 비트 연산  (0) 2009.01.13
    SQL Server, SANs and Virtualisation  (0) 2009.01.09
    The sqlcmd utility in SQL Server  (0) 2009.01.08

    SQL의 SHFT 비트 연산

    'SQL Server 2005' 카테고리의 다른 글

    유용한 DMV  (0) 2009.03.04
    업데이트 비용에 대한 고찰  (0) 2009.02.04
    SQL Server, SANs and Virtualisation  (0) 2009.01.09
    The sqlcmd utility in SQL Server  (0) 2009.01.08
    DB의 Collation  (0) 2009.01.07