오라클에서 타임스탬프 정밀도를 높게 선택할 경우의 단점은 무엇입니까?
은 Oracle의 할 수 .TIMESTAMP
- - 분부의자의 SECOND
날짜 시간 필드. 정밀도를 할 때 ?TIMESTAMP(9)
?
제가 생각할 수 있었던 한 가지 이유는 이 정보가 오라클 도구의 더 예쁜 출력에 사용될 수 있기 때문입니다.
최대 9자리는 필드가 4바이트 정수로 저장되므로 성능에 영향을 주지 않아야 한다는 것을 의미합니다. 여기서 제가 틀렸다면 수정해 주십시오.
단점은 없습니다. 의미가 있으면 타임스탬프(9)를 사용하십시오.
타임스탬프(9)와 타임스탬프(1)는 동일한 양의 공간을 사용하며 성능은 동일합니다.성능 차이가 있는 경우는 단 하나밖에 찾을 수 없었고, 그 경우 타임스탬프(9)가 실제로 타임스탬프(1)보다 빠릅니다.
(타임스탬프(1) 및 타임스탬프(9) 열에 삽입하고 그 열에 대한 다른 작업을 비교하는 많은 줄의 지루한 코드를 생략하겠습니다.
이는 이들이 동일한 양의 공간을 사용한다는 것을 보여줍니다(많은 값을 삽입하고 dba_segment를 비교).
--Create tables with timestamps and populate them with the same data (with different precision)
--Set initial and next to a low value so we can closely check the segment size)
create table timestamp1 (t1 timestamp(1), t2 timestamp(1), t3 timestamp(1), t4 timestamp(1), t5 timestamp(1))
storage(initial 65536 next 65536);
insert into timestamp1
select current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1)
from dual connect by level <= 100000;
create table timestamp9 (t1 timestamp(9), t2 timestamp(9), t3 timestamp(9), t4 timestamp(9), t5 timestamp(9))
storage(initial 65536 next 65536);
insert into timestamp9
select current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9)
from dual connect by level <= 100000;
--Segment size is identical
select segment_name, bytes from dba_segments where segment_name in ('TIMESTAMP1', 'TIMESTAMP9');
--SEGMENT_NAME BYTES
--TIMESTAMP1 8388608
--TIMESTAMP9 8388608
여기서 current_timestamp를 사용할 때 타임스탬프(9)가 더 빠릅니다. 데이터를 생성하려면 이를 사용해야 합니다.하지만 우리는 느린 데스크톱에서 10만 타임스탬프를 생성하는 데 약 0.175초와 0.25초의 차이에 대해서만 이야기하고 있습니다.타임스탬프(9)가 왜 더 빠른지 모르겠습니다. 타임스탬프는 항상 타임스탬프(9)로 생성된 다음 다른 정밀도로 반올림됩니까?
--current_timestamp(9) is slightly faster than current_timestamp(1)
select count(*) from
(
select *
from dual
--where current_timestamp(9) = current_timestamp(9)
where current_timestamp(1) = current_timestamp(1)
connect by level <= 100000
);
EDIT: 성능 차이는 10g이지만 11g은 아닙니다.
문제는 성능입니다.당신은 그것을 정확하게 거래해야 합니다.적은 수의 데이터를 읽고 적은 수의 CPU 명령으로 씁니다.CPU 명령은 1나노초 미만으로 걸리지만 서버가 수백만 개의 트랜잭션을 처리할 경우 성능이 다소 저하될 수 있으며, 이는 정밀도가 떨어지거나 정밀도가 떨어지는 것을 의미합니다(모든 타임스탬프를 초 단위로 반올림하는 것은 대부분의 시나리오에서 허용됩니다. 심지어 은행 업무에서도 마찬가지입니다.).
그러나 어떤 이유로 실시간 시스템 로깅과 같이 더 정확한 작업이 필요한 경우에는 더 높은 정밀도를 사용해야 하므로 성능이 저하됩니다.서버가 많은 tps를 처리하지 않으면 성능에 거의 영향을 미치지 않지만 정밀도가 필요하지 않으면 메모리가 낭비됩니다.
도움이 되었길 바랍니다.귀하의 DB 요구사항을 공유하고자 하는 경우 최상의 절충안을 선택할 수 있도록 도와드릴 수 있습니다.
타임스탬프 데이터 유형의 기술적 사용이 아니라 응용 프로그램에 차이가 있습니다.FERC 및 NERC는 레이블이 지정된 응용 프로그램에서 사용될 때 종종 특정 정밀도를 요구합니다.critical infrastructure
그리고 그들은 사용 가능한 최고의 정밀도를 사용할 것입니다.
물론, 그들의 일련의 사건 기록으로 정장을 행복하게 만드는 것은 종종 계획된 것 이상의 것을 요구합니다.CIP-002 through CIP-009
Oracle 내부와 중간 계층에서 항상 데이터를 "날짜/타임 스탬프" 데이터 유형으로 사용하는 경우에는 단점이 없지만 전체 애플리케이션/솔루션이 이 열을 어떻게 사용하는지 확인해야 합니다.
- 데이터를 표시하기 전에 데이터를 잘라내시겠습니까?
- 규정 준수 요건이며 주로 읽습니까?
- 해당 열을 다른 열과 비교하기 위해 문자열로 변환하는 것입니까?
- 감사 또는 주문 캡처를 위한 요구사항입니까?
읽기 및 쓰기 성능 차이에 대해 크게 걱정하지 마십시오. 무시할 수 있는 부분이 있으므로 스토리지에서 UI에 이르기까지 전체적인 요구사항을 평가하십시오.
언급URL : https://stackoverflow.com/questions/3900557/what-are-the-disadvantages-of-choosing-higher-timestamp-precision-in-oracle
'programing' 카테고리의 다른 글
HTML 문자열을 이미지로 변환 (0) | 2023.08.20 |
---|---|
SIGSEGV/SIGABRT 및 친구를 위한 Oracle Pro*C/OCI 설치 핸들러 - 사용하지 않는 이유 및 방법 (0) | 2023.08.20 |
마리아드브를 어떻게 삽입합니까? (0) | 2023.08.20 |
예외를 던지지 않고 문자열이 GUID인지 테스트하시겠습니까? (0) | 2023.08.20 |
WSL2에서 Windows 10 Home과 함께 Docker Desktop을 사용할 때 도커 이미지의 위치를 변경하려면 어떻게 해야 합니까? (0) | 2023.08.20 |