반응형
  1. /**********************************************************************************************
    -- Title : [2k5] 정합성 관련한 재컴파일 발생원인 데모
    -- Reference : mcpworld.com
    -- Key word : recompile 재컴파일
    **********************************************************************************************/
    ------------------------------------------
    --DB Detach로 인한 재컴파일 발생
    ------------------------------------------
    USE AdventureWorks;
    GO

    --기존 실행 계획 및 실행 버퍼 풀 초기화
    DBCC FREEPROCCACHE;
    DBCC DROPCLEANBUFFERS;
    GO

    --실행 계획이 없음 확인
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --임의 AD-Hoc 쿼리를 실행 시켜 실행 계획을 캐싱
    SELECT ProductID, SalesOrderID, LineTotal FROM Sales.SalesOrderDetail WHERE ProductID = 984;
    GO

    --AD-Hoc 실행 계획이 생성되었음을 확인
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --임의 DB 생성
    CREATE DATABASE test_db;
    GO

    SP_HELPDB test_db;
    /*
    test_db 1 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test_db.mdf
    test_db_log 2 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test_db_log.LDF
    */

    SP_DETACH_DB test_db;
    GO

    --전체 실행 계획이 삭제되었음
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --ATTACH 하는 경우에는 실행 계획이 지워지지 않음.
    SP_ATTACH_DB 'test_db', @filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test_db.mdf',
     @filename2='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test_db_log.LDF'
    GO

    --CLEAN UP
    /*
    DROP DATABASE test_db;
    */

    ------------------------------------------
    --Reconfigure로 인한 재컴파일 발생
    ------------------------------------------
    USE AdventureWorks;
    GO

    --기존 실행 계획 및 실행 버퍼 풀 초기화
    DBCC FREEPROCCACHE;
    DBCC DROPCLEANBUFFERS;
    GO

    --실행 계획이 없음 확인
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --임의 AD-Hoc 쿼리를 실행 시켜 실행 계획을 캐싱
    SELECT ProductID, SalesOrderID, LineTotal FROM Sales.SalesOrderDetail
    WHERE ProductID = 966 ORDER BY ProductID;
    GO

    --adhoc 실행 계획이 생성되었음을 확인
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --Configure 변경 : 실행 계획 Clear 하지 않음
    SP_CONFIGURE 'show advanced options', 1;
    RECONFIGURE WITH OVERRIDE;
    GO

    --실행 계획이 여전히 존재
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --Configure 변경 : 실행 계획 Clear
    SP_CONFIGURE 'max degree of parallelism', 1;
    RECONFIGURE WITH OVERRIDE;
    GO

    --실행 계획 제거되었음.
    SELECT bucketid, cacheobjtype, objtype, objid, usecounts, sql FROM sys.syscacheobjects;
    GO

    --CLEAN UP
    /*
    SP_CONFIGURE 'max degree of parallelism', 0;
    RECONFIGURE WITH OVERRIDE;
    GO

    SP_CONFIGURE 'show advanced options', 0;
    RECONFIGURE WITH OVERRIDE
    GO
    */
반응형

+ Recent posts