블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.3
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

공지사항

최근에 올라온 글

SQL Server 의 경우 Cache시스템을 자체적으로 사용 합니다. OS 에서 파일 시스템 메모리 캐시 영역을 많이 가져가는 상황에서 SQL Server 메모리 동작을 동적 메모리 제어로 된다면, 상대적으로 어플리케이션이나 서비스는 메모리 사용을 더 많이 하지 못하게 됩니다.

LargeSystemCache [ http://technet.microsoft.com/en-us/library/cc784562(WS.10).aspx ]설명에도 있듯이 일반적으로 System Cache 가 크면 일반적으로 서버의 성능이 증가합니다. 그러나, 어플리케이션이나 서비스에서 사용할 물리 메모리 사용량은 상대적으로 줄어들게 됩니다. 그 아래 설명은 해당 값이 1 이면, 시스템 데이터를 디스크 서브시스템으로 늦게 반영 시키고 다르게 말해 해당 셋팅을 끄면 어플리케이션에서 물리 메모리를 더 사용 할 수 있다는 이야기입니다. 그래서, Large system cache 옵션을 쓰지 말라는 것입니다. 자 이제 개념을 이해 했으면, SQL Server 전용 서버에서의 메모리 사용계획 옵션을 프로그램으로 설정하는게 바른 설정 이겠지요?


시스템 등록 정보 > 고급 > 성능 옵션 > 메모리 사용 계획
이 옵션은 Windows Kernel에서 System Cache를 Large System Cache로 설정 할지를 선택하는 옵션입니다. 해당 설정은 Registry HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\LargeSystemCache에서 수동으로 설정이 가능합니다.
해당 옵션은Windows Vista와 Windows 2008에서 없어졌습니다(GUI로 설정할 수 있는 방법은 없습니다), 설정을 원하시면 해당 Registry 값에서 LargeSystemCache 값을 0 or 1로 변경합니다.

http://blogs.technet.com/b/sankim/archive/2008/05/19/largesystemcache.aspx


위와 같은 Large system cache 라는 옵션은 OS 에서 파일 데이터를 자동으로 캐시에 넣어 두겠다. 라는 옵션입니다. SQL Server 의 경우 고정메모리 할당에서(MAX MIN 메모리 고정으로 사용의 경우)는 퍼포먼스의 차이가 거의 없습니다. (그래서 GUI 설정에서 빼버렸는지도 모르겠습니다. -_-개인 사견.....)


이걸 SQL Server 가 어플리케이션이니 어플리케이션으로 설정하라고 하면 서운 하겠죠 또한 SQL Server 외 다른 서비스가 있다면, 적절히 옵션을 조정하도록 하는것이 성능에 좋습니다.

Posted by 보미아빠
, |

현재까지 no_merge, no_push_pred 라는 힌트는 sql 에서 지원되지 않는다.
아직 멀었다. 아직 어린이 티가 팍팍 나지 않는가?
착한 어린이 mssql 2011 denali 이렇게 선전하면 좋을듯..........

개인적으로 mssql query hint 는 정말 꼬질 꼬질하고 다른 DBMS와 비교해 아주 신생아 수준인거 같음......
force seek force scan 나오지만 이런 기본적인게 안된다.......-_- 생각을 바꾸어 봐야 하나....
바꾸어도 용서가 안되는데.........바봉~ 이렇게 멍청하고 한 우물만 파는 바보들이 있으니 내가 밥 먹고 살겠지......
감사합니다. mssql 님....^-----^;


if object_id('ttt') is not null
drop table ttt
go

;with test
as (
select '19800101' birth,'20110101' today union all
select 'asdf' birth ,'20110101' today
)
select *
into ttt
from test
go

select * 
  from (select birth , today
    from ttt
   where isdate(birth)=1
     and isdate(today)=1 )a
 where datediff(yy,cast(birth as datetime),cast(today as datetime)) > 30
go

-- 위 쿼리는 당연히 돌아야 할 것 같은 쿼리이지만 돌아가지 않는다.
-- view predicate merge issue 를 모르면 당연한 이야기 이다.
-- 이것만 책으로 100장이 넘게 설명한 책도 있다.

--단순하게 아래와 같이 수정해 보자

select birth, today  
  from (select top 100000000000 birth, today
    from ttt
   where isdate(birth)=1
     and isdate(today)=1 )a
 where datediff(yy,cast(birth as datetime),cast(today as datetime)) > 30 
 


 -- 잘 돌아가지요? 해당 이슈에 대해서는 스터디때 설명해 드리겠습니다. 
 
스터디 모집 광고는 다음을 참고 하세요~
어디 성욱이가 잘 정리해 둔게 있었는데....어디쥐......

http://cafe.naver.com/sqlmvp/1148 일단 이거 참고요~

Posted by 보미아빠
, |
Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함