database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40830 게시물 읽기
No. 40830
sql문을 buffer에 오래 두기
작성자
이현정
작성일
2015-06-11 21:52
조회수
7,346

몇일전 질문하고 반대로 ^^

실행한 sql 결과가 버퍼에 오래동안 남게 하는 방법이 있을까요?

/*+ CACHE */ 이 힌트를 사용하면 오래 남나요?

뭐가 있을까요? ^^

이 글에 대한 댓글이 총 2건 있습니다.

 문서에도 그렇게 나와있구요

실제로 autotrace를 뜨면서 테스트해보면 그렇긴 합니다.

 

그런데 실전에서 제가 직접 체감해본적은 없습니다.(기대하고 적용한 적이 있지만 그렇게 마음먹은대로 되지는 않더라구요... 아마 다른 요인으로 db-buffer-cache가 자꾸 비워졌으리라 추측합니다.)

 

그래서 사실 저도 그 힌트가 실효성이 있는지 궁금합니다.

다른 분들 중에서 효과를 맛보신 적이 있으신지 궁금합니다...

 

그리고 혹시 님께서 하시려는 것이 자주 사용하는 쿼리의 성능 향상이면  result-cache도 검색해보십시오...

김흥수(protokhs)님이 2015-06-12 10:42에 작성한 댓글입니다.

 네 맞습니다. 그 힌트 사용하면 캐시에 더 오래 남죠.

보통 Full scan 하면 LRU의 끝에 위치하기 때문에 잠시 후 Buffer cache에서 밀려납니다. 

 

하지만 cache 힌트는 주의해서 사용하셔야 합니다. 잘못하면 버퍼캐시 효율에 엄청난 영향을 줄 수도 있어요. 예를 들어 대량의 블록을 액세스하는 쿼리에 cache 힌트를 쓰게 되면 버퍼 캐시에 캐싱된 블록 중에 엉뚱한 블록들이 피해를 입을 수 있습니다. 

요즘은 cache 힌트보다는 keep pool을 사용하는 추세인 것 같습니다.

 

오라클 매뉴얼에는 이렇게 나와있습니다.

CACHE 힌트를 쓰면 버퍼 캐시의 LRU 리스트의 핫 영역에 위치되도록 한다. (즉, 바로 버퍼캐시에서 밀려나는게 아니라 천천히 밀려납니다)

You can use the CACHE and NOCACHE hints to indicate where the retrieved blocks are placed in the buffer cache. The CACHE hint instructs the optimizer to place the retrieved blocks at the most recently used end of the LRU list in the buffer cache when the database performs a full table scan.

111님이 2015-06-25 15:02에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40835sql 조언 부탁드립니다. [1]
일쌍다반사
2015-06-17
7333
40833sql 하나 봐주세요. [2]
이현정
2015-06-16
7198
40831행님들 급합니다 제발좀 도와주세요
백광규
2015-06-14
7149
40830sql문을 buffer에 오래 두기 [2]
이현정
2015-06-11
7346
40829솔라리스 11에서 Pro*C 사용방법
김재명
2015-06-11
8371
40828이 쿼리실행시 접속된 유저 전체테이블이 삭제되는건가요? [1]
DBA희망자
2015-06-11
7194
40827안녕하세요 split 속도 문제 문의드립니다.. [2]
아벨의꿈
2015-06-10
8110
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다