나는 필요한 것보다 더 많은 공간을 차지하고있는 것처럼 보이는 테이블을 가지고 있습니다. 데이터를 새 테이블에 복사하고 새 테이블과 이전 테이블의 이름을 바꾸어 바꾼 것이 좋습니다. 현재 테이블이 실제로 조각화되어 있는지 어떻게 확인할 수 있습니까? 동일한 데이터가 포함 된 신선한 테이블의 새 크기를 계산하거나 계산하려면 어떻게합니까?Oracle의 테이블이 조각화되어 있는지 어떻게 알 수 있습니까?
답변
연결 svrmgrl를 사용하여이 스크립트를 실행 해보십시오 .
select table_name, round((num_rows * avg_row_len) /(8*1024)), blocks
from user_tables where ....
이 공간은 나중에 삽입 할 때 사용되므로 반드시 문제는 아닙니다. 대용량 아카이브 또는 데이터 삭제를 수행 한 경우 은 공간을 회수해야합니다 (특히 전체 테이블 스캔을 많이 수행하는 경우). [참고 : 기본값 인 8k 블록을 가정했습니다.]
CREATE/DROP/RENAME을 수행하면 인덱스, 제약 조건, 부여 (사용하는 경우 테이블 주석)가 손실됩니다.
당신은 현재 테이블 스페이스 (USER_SEGMENTS의 모습을) 확인하고 ALTER TABLE tablename MOVE current_tablespace;
당신은 aftwards 너무 인덱스를 다시 작성해야합니다 일을 더 낫다. USER_INDEXES에서 선택하여 수행하십시오 ALTER INDEX ... REBUILD;
- 행 데이터의 양이 시사하는 것보다 테이블이 많은 더 많은 블록이있는 경우 통계가 최신이 괜찮은 표시를 제공해야하는 경우 DBA로
set serveroutput on
DECLARE
libcac NUMBER (6, 2);
rowcac NUMBER (6, 2);
bufcac NUMBER (6, 2);
redlog NUMBER (6, 2);
spsize NUMBER;
blkbuf NUMBER;
logbuf NUMBER;
BEGIN
SELECT VALUE
INTO redlog
FROM v$sysstat
WHERE name = 'redo log space requests';
SELECT 100 * (SUM (pins) - SUM (reloads))/SUM (pins)
INTO libcac
FROM v$librarycache;
SELECT 100 * (SUM (gets) - SUM (getmisses))/SUM (gets)
INTO rowcac
FROM v$rowcache;
SELECT 100 * (cur.VALUE con.VALUE - phys.VALUE)/(cur.VALUE con.VALUE)
into bufcac
from v$sysstat cur,v$sysstat con,v$sysstat phys,
v$statname ncu,v$statname nco,v$statname nph
where cur.statistic# = ncu.statistic# and
ncu.name = 'db block gets' and
con.statistic# = nco.statistic# and
nco.name = 'consistent gets' and
phys.statistic# = nph.statistic# and
nph.name = 'physical reads';
select VALUE
into spsize
from v$parameter
where name = 'shared_pool_size';
select VALUE
into blkbuf
from v$parameter
where name = 'db_block_buffers';
select VALUE
into logbuf
from v$parameter
where name = 'log_buffer';
DBMS_OUTPUT.put_line('> SGA CACHE STATISTICS');
DBMS_OUTPUT.put_line('> ********************');
DBMS_OUTPUT.put_line('> SQL Cache Hit rate = '||libcac);
DBMS_OUTPUT.put_line('> Dict Cache Hit rate = '||rowcac);
DBMS_OUTPUT.put_line('> Buffer Cache Hit rate = '||bufcac);
DBMS_OUTPUT.put_line('> Redo Log space requests = '||redlog);
DBMS_OUTPUT.put_line('> ');
DBMS_OUTPUT.put_line('> INIT.ORA SETTING');
DBMS_OUTPUT.put_line('> ****************');
DBMS_OUTPUT.put_line('> Shared Pool Size = '||spsize||' Bytes');
DBMS_OUTPUT.put_line('> DB Block Buffer = '||blkbuf||' Blocks');
DBMS_OUTPUT.put_line('> Log Buffer = '||logbuf||' Bytes');
DBMS_OUTPUT.put_line('> ');
if libcac < 99
then
DBMS_OUTPUT.put_line('*** HINT: Library Cache too low! Increase the Shared Pool Size.');
end if;
if rowcac < 85
then
DBMS_OUTPUT.put_line('*** HINT: Row Cache too low! Increase the Shared Pool Size.');
end if;
if bufcac < 90
then
DBMS_OUTPUT.put_line('*** HINT: Buffer Cache too low! Increase the DB Block Buffer value.');
end if;
if redlog > 100
then
DBMS_OUTPUT.put_line('*** HINT: Log Buffer value is rather low!');
end if;
end;
/
svrmgrl? 오라클 8i입니다. – DCookie
미래의 파트 IV로 돌아 가기 :-) 실례지만, 생각없이 복사해서 붙여 넣었습니다 ;-) – UltraCommit
dbms_space
패키지의 dbms_space.space_usage
및 기타 절차를 사용하는 것이 좋습니다.
- 1. ScalaQuery에 데이터베이스 테이블이 있는지 어떻게 알 수 있습니까?
- 2. mysql 테이블이 업데이트되었는지 어떻게 알 수 있습니까?
- 3. 드라이브에 플로피가 있는지 어떻게 알 수 있습니까?
- 4. 개체가 비어 있는지 어떻게 알 수 있습니까?
- 5. 요소가 목록에 있는지 어떻게 알 수 있습니까?
- 6. 파이썬에 자식이 있는지 어떻게 알 수 있습니까?
- 7. QLineEdit에 포커스가 있는지 어떻게 알 수 있습니까?
- 8. Dispatcher.DisableProcessing이 활성화되어 있는지 어떻게 알 수 있습니까?
- 9. 오픈 릴레이가 있는지 어떻게 알 수 있습니까?
- 10. Java에서 누수가 있는지 어떻게 알 수 있습니까?
- 11. 컨트롤이 시각화되고 있는지 어떻게 알 수 있습니까?
- 12. 그런 가치가 데이터베이스에 있는지 어떻게 알 수 있습니까? (ADO.NET)
- 13. InnoDB 테이블이 마지막으로 변경된 시점을 어떻게 알 수 있습니까?
- 14. MySQL에서 특정 테이블이 어떤 문자 집합을 사용하고 있는지 어떻게 알 수 있습니까?
- 15. 클래스를 직렬화 할 수 있는지 어떻게 알 수 있습니까?
- 16. scp를 Perl에서 사용할 수 있는지 어떻게 알 수 있습니까?
- 17. PostgreSQL에서 트리거를 사용할 수 있는지 어떻게 알 수 있습니까?
- 18. 안드로이드에서 파일을 읽고 쓸 수 있는지 어떻게 알 수 있습니까?
- 19. 모바일 네트워크를 사용할 수 있는지 여부를 어떻게 알 수 있습니까?
- 20. iPhone 앱에서 외부에서 볼 수 있는지 어떻게 알 수 있습니까?
- 21. MFC에서 CComboBox를 사용할 수 있는지 어떻게 알 수 있습니까?
- 22. AUCTeX를 사용할 수 있는지 어떻게 알 수 있습니까?
- 23. 어떻게 알 수 있습니까?
- 24. Silverlight 컨트롤의 속성에 바인딩이 연결되어 있는지 어떻게 알 수 있습니까?
- 25. 시스템 트레이의 풍선 팁이 닫혀 있는지 어떻게 알 수 있습니까?
- 26. .NET 3.5 SP1이 설치되어 있는지 어떻게 알 수 있습니까?
- 27. 코드가 TransactionScope 안에 있는지 어떻게 알 수 있습니까?
- 28. Windows Installer가 설치되어 있는지 어떻게 알 수 있습니까?
- 29. 시스템의 전원이 켜져 있는지 어떻게 알 수 있습니까?
- 30. NSUserDefaults가 이미 저장되어 있는지 어떻게 알 수 있습니까?
모든 색인, 트리거, 제약 조건 등으로 복사하고 이름을 바꾸면 이전 버전과 계속 연결됩니다. – gpeche
@stuart 다른 사람이 대답을 얻은 경우 대답을 수락하십시오. – amod