행 조각화는 테이블 열에 char/varchar2 데이터 형식을 선택할 때 항상 고려해야 할 사항이었습니다. 오라클이 열린 공간에 새로운 데이터를 넣으려고하고 조각화가 시작될 수 있기 때문에 테이블에서 일괄 삭제/삽입/업데이트를 실행해야했습니다. 성능을 약간 느려지 게합니다. 이제는 플래시 기술로 인해 데이터가 가능한 한 많이 파편화되기 때문에 플래시 스토리지 디스크로 모든 것이 바뀌 었습니다. 단편화에 신경 쓸 필요가 없다면 테이블 데이터 저장 문제와 데이터 단편화에 대한 전체적인 이해를 깨뜨릴 수 있습니다. 누구든지 플래시 스토리지 디스크에 데이터베이스 파일을 저장하는 경험이 있습니까? 단편화 문제가 ssd 디스크에서 사라 졌습니까?플래시 디스크 스토리지를 사용할 때 여전히 행 조각화에 대해 걱정할 필요가 있습니까?
답변
설명하는대로 "행 조각화"와 같은 것이없고 실제로는 char
또는 varchar2
데이터 유형 중에서 선택해서는 안됩니다. 선택한 데이터 유형은 데이터의 특성과 실제로 고정 너비인지 가변 폭인지에 따라 달라집니다. 시간의 99.9 %는 varchar2
을 선호합니다.
Oracle에서 입출력이 가능한 최소 단위는 읽거나 쓸 수있는 블록입니다. 블록은 일반적으로 8k입니다 (2k 또는 32k만큼 작을 수도 있음). 블록은 일반적으로 여러 행에 대한 데이터를 저장합니다. 오라클은 매번 전체 블록을 작성해야하므로 블록 내에서 데이터를 이동해야하는지 여부는 중요하지 않습니다.
블록 내에서 오라클은 향후 확장을 위해 일정한 공간을 확보합니다. 이 값은 테이블의 PCTFREE
설정에 의해 제어됩니다. 시간 경과에 따라 행 수가 크게 늘어날 것으로 예상되는 경우 큰 PCTFREE
을 사용하십시오. 시간 경과에 따라 행의 크기가 고정 될 것으로 예상되는 경우 작은 PCTFREE
을 사용하십시오. 행의 크기가 변경되지 않도록 데이터 유형을 조정하지 않으려는 경우 테이블의 PCTFREE
을 원하는대로 변경하여 조정할 수 있습니다.
특정 행에 대한 블록의 공간이 부족한 경우 (예 : 행을 확장해야하고 PCTFREE
을 너무 작게 설정 한 경우) Oracle은 행을 새 블록으로 마이그레이션해야합니다. 즉, 원래 블록에 새 블록을 가리키는 포인터를두고 실제 데이터를 새 블록으로 이동시킵니다. 이전 테이블과 새 블록을 방문하여 테이블의 일부 행이 마이그레이션되는 경우 인덱스를 읽는 경우 행을 읽어야하므로 성능 문제가 발생할 수 있습니다. 오라클이 추가 I/O를 수행하도록 강요하는 255 개 이상의 컬럼을 가진 블록 또는 로우보다 큰 행을 갖고 있지만 여기에 우려되는 것처럼 보이지 않는다면 체인화 된 행의 문제를 얻을 수도 있습니다 .
스토리지 시스템에 관계없이 테이블의 PCTFREE
을 적절하게 설정하여 시간이 지남에 따라 발생하는 행 마이그레이션 양을 최소화 할 수 있습니다 (일부 모서리의 경우 행 마이그레이션을 최소화하는 다른 방법이 있지만 99 % 당신이 정말로 단지 PCTFREE
을 정확하게 설정하고 싶을 때). 저장하려는 데이터에 적절한 데이터 유형을 사용하십시오. 행 마이그레이션이 데이터 유형 선택에 영향을 미치지 않도록하십시오.
- 1. jQuery의 $ Post를 사용할 때 캐싱에 대해 걱정할 필요가 있습니까?
- 2. 모바일 앱에서 스팸에 대해 걱정할 필요가 있습니까?
- 3. Node.js의 동시 수정에 대해 걱정할 필요가 있습니까?
- 4. 캔버스에서 최적의 드로잉에 대해 걱정할 필요가 있습니까?
- 5. String Constant Pool에 대해 걱정할 필요가 있습니까?
- 6. ASP.NET MVC 3. 컨테이너 폐기에 대해 걱정할 필요가 있습니까?
- 7. 내 Winforms 앱의 전세계 글꼴에 대해 걱정할 필요가 있습니까?
- 8. tomcat spring beans와의 동시성에 대해 걱정할 필요가 있습니까?
- 9. NSNotification Observer의 다른 컨텍스트에 대해 걱정할 필요가 있습니까?
- 10. Winforms 프로젝트에서 SQL 삽입에 대해 걱정할 필요가 있습니까?
- 11. Mac 앱 개발시 메모리 누수에 대해 걱정할 필요가 있습니까?
- 12. SQL 주입 보호에 대해 걱정할 때
- 13. Android : SQLite 데이터베이스 인스턴스를 닫을 때 걱정할 필요가 있습니까?
- 14. 동시성 제어에 대해 걱정할 때 PHP mysql
- 15. 웹 응용 프로그램을 개발할 때 IPV6 주소에 대해 걱정할 필요가 있습니까?
- 16. (메모리 누수와는 대조적으로) 메모리 조각화에 대해 이야기하십시오.
- 17. 은 여전히 EJB 세션 빈을 사용할 필요가 있습니까?
- 18. ASP.NET MVC jQuery :보기에서 많은 jQuery/javascript에 대해 걱정할 필요가 있습니까?
- 19. ActiveMQ가 큐의 디스크 스토리지를 비우지 않음
- 20. JOIN은 중복 된 결과를 반환합니다. 걱정할 필요가 있습니까?
- 21. 사이트에서 쿠키를 사용하지 않는 경우에도 CSRF 보호에 대해 걱정할 필요가 있습니까?
- 22. Phonegap apps - 서버 측 사용자 입력 유효성 검사에 대해 걱정할 필요가 있습니까?
- 23. 메모리에 대해 걱정할 시간이 없습니까?
- 24. opencl에서 원자 함수를 사용하지 않으면 메모리 손상에 대해 걱정할 필요가 있습니까?
- 25. SQL Server의 페이지 란 무엇입니까? 걱정할 필요가 있습니까?
- 26. MySQL 로그의 이상한 IP/도메인 - 걱정할 필요가 있습니까?
- 27. webView 메서드 인 "loadRequest"를 사용하면 스레딩에 대해 걱정할 필요가 있습니까? (iphone sdk 질문)
- 28. 개발자가 서버 구성에 대해 걱정할 필요가 없습니까? 우리가 이것에 대해 걱정해야합니까?
- 29. StyleSheet.create를 사용할 필요가 있습니까?
- 30. 레일즈에서 두 모델의 잡종이 같은 모델을 업데이트하면 실패한 트랜잭션에 대해 걱정할 필요가 있습니까?
ASSM (Automatic Segment Storage Management)이 자동으로 PCTFREE를 관리하므로 이전 유형의 MSSM 저장소 유형을 사용할 때 PCTFREE를 설정해야합니까? – Centurion
@Centurion - 아니요. ASSM은 수동 세그먼트 공간 관리에서 'PCTUSED'매개 변수에 의해 처리 된 것을 자동으로 처리합니다. 두 유형의 테이블 공간 모두 테이블의'PCTFREE' 설정에 의존합니다. 시스템이 행의 크기가 시간이 지남에 따라 어떻게 변할지를 알 수있는 방법이 없기 때문에 'PCTFREE'를 자동으로 관리하는 것은 매우 어려울 것입니다. 이것은 데이터 모델러 만 처음에 알고있는 것입니다. –