글
PGA / SGA
메모리는 PGA(사용자 메모리) , SGA(시스템 메모리) 로 나뉨
PGA
- 정렬 공간(Sort Area) or SQL 작업 공간(Work Area)
Order by, Group by
정렬공간만 사용 -메모리 정렬
메모리가 부족하면 디스크 이용
- 세션 정보(Session Information)
유저 프로세스의 세션 정보
- 커서 상태 정보(Cursor State)
Parsing(파싱) 정보 저장
파스 정보 저장되어 있는 공유풀의 물리적 위치 주소 저장
- 변수 저장 공간(Stack Space)
SQL에 Bind Variable(바인드 변수) 사용시 바인드 변수 저장
SGA
- 공유 풀(Shared Pool)
SGA 관리 매커니즘이 저장됨. 오라클 파라메터 정보 (session=100, process =150)
SGA를 관리하는 매커니즘, 파라메터 정보, 실행된 SQL, SQL 분석/실행 정보 및 오라클 오브젝트 정보 지정
라이브러리 캐쉬(Library Cache) | 고정 영역(Permanent Area) |
동적 영역(Dynamic Area) | |
데이터 딕셔너리 캐쉬(Data Dictionary Cache) |
- 라이브러리 캐쉬 : 유저가 생성한 SQL, 오라클 내부 SQL,(Recursive SQL), SQL에 대한 분석 정보(Parse Tree), 실행 계획(Execution Plan)
- 고정 영역 : 자동 할당 (지정 불가) / 공유 SQL 영역
- 동적 영역 : SHARED_POOL_SIZE 로 지정 / 공유 PL/SQL 영역
- 데이터 딕셔너리 캐쉬 ( = 로우 캐쉬 (row cache))
테이블, 인덱스, 함수 및 트리거 등 오라클 오브젝트 정보 및 권한
- 데이터 버퍼 캐쉬(Data buffer Cache)
가장 큰 사이즈
LRU로 관리됨
> 서버 프로세스
데이터 버퍼 캐쉬 ---------- 디스크
< DBWR
재활용<기본<고정
- 리두 로그 버퍼(Redo Log buffer)
서버 프로세스가 접근
리두 로그 버퍼 -----LGWR------>(리두 로그 파일) --> 디스크
- 대형 풀(Large Pool)
UGA
RMAN
병렬 프로세스
I/O 슬레이브 프로세스
- 자바 풀(Java Pool)
필요에 따라 지정해서 사용
자바 명령을 구문분석할 경우 사용하는 메모리 공간이므로 자바를 성치하고 사용할 경우 지정
'Database > Oracle' 카테고리의 다른 글
ETL (Extract, Transform, Load) (0) | 2020.05.15 |
---|
글
ETL (Extract, Transform, Load)
추출(Extract), 변환(Transform), 적재(Load)
가족 data ↘
ODS DB (가공) --------> 통계 (Tibero 5 (old) )
제적 data ↗ 커스터마이징 TAC
글
레플리케이션 (Replication)
레플리케이션 (Replication)
DB의 부하를 막기 위해 2개 이상의 DBMS 시스템을 Master / Slave로 나눠서 동일한 데이터를 저장(데이터 복제)하는 방식
Master DB는 데이터 변경, Slave DB는 데이터 검색
Query의 대부분을 차지하는 Select를 slave DB로 보냄으로써 Read 성능 향상이 된다
MySQL Replication과 Oracle RAC(Real Application Cluster)
MySQL Replication | Oracle RAC 스토리지 | |
개념 |
디스크를 독립적으로 분리하여 데이터를 유지 데이터를 이중화 |
고유 스토리지(SAN, iSCSI) 장비를 중간에 두고 DB를 이중화 DB를 이중화 |
부하 분산 | 디스크 읽기 부하 분산 | 쓰기 부하 일부 분산 |
장점 | 특정 노드 디스크 장애가 전체 데이터 유실로 이어지지 않음 (데이터가 복제되어있음) | 읽기, 쓰기 부하 분산이 모두 가능 |
단점 | 마스터 장애시 전체 노드에 데이터 쓰기 작업이 불가능 | 스토리지 장애에 취약 (공유 스토리지이므로) |
데이터 변경 작업 | 단일 마스터 | 여러 노드에서 가능 |
Log 기반 Data 복제 방법 (Binary Log)
1) Statement Based : SQL문을 그대로 Binary Log에 복사하여 기록
MySQL 3.23 이후 도입
Binary Log 사이즈는 작으나 SQL에 따라 결과가 달라질 수 있음 (Time Function(Timestamp), UUID, User Defined Function)
2) Row-Based : SQl로 인해 변경된 행을 BASE64로 인코딩하여 BInary Log에 기록
MySQL 5.1 이후 도입
변경된 행 수가 많을 경우 바이너리 로그 사이즈가 큼
3) Mixted : Statment + Row
기본적으로 Statement, 경우에 따라 Row base
데이터 복제 방법
1. Master에서 데이터 변경 > 자신의 Database에 반영
2. Master에서 변경된 이력을 Binary Log에 기록 후 관련 이벤트를 날림
3. Slave ID_THREAD에서 Master 이벤트를 감지
Master Binary Log를 Slave의 Relay Log에 기록
4. Slave SQL_THREAD는 Relay Log를 읽고 자신의 데이터베이스에 기록
마스터에서는 여러 세션을 통해 데이터 변경이 가능
슬레이브에서는 하나 SQL Thread에서만 데이터 변경 처리 가능
> 마스터에 데이터 변경 트래픽이 몰리면 마스터-슬레이브 간 동기화 시간이 걸림
활용
부하 분산 뿐 아니라 버전 테스트 등에 이용 가능
글
sp_helprotect (사용자 사용 권한)
1. sp_helprotect
sp_helprotect는 DB user의 사용 권한(SP 실행 권한, Select/Connect/Excute 권한, Role 등)을 반환하는 T-SQL문이다
2. 구문
sp_helprotect [ [ @name = ] 'object_statement' ] --개체(테이블, 뷰, sp, 확장 sp, 소유자.개체), 사용권한
[ , [ @username = ] 'security_account' ] --보안 주체의 이름. 현재 DB에 존재해야함
[ , [ @grantorname = ] 'grantor' ] --권한을 부여하는 주체의 이름. null이 반환된 경우 DB주체가 부여한 것
[ , [ @permissionarea = ] 'type' ]
* type의 종류: 개체 사용 권한 표시여부 (문자열 o)
문 사용 권한 (문자열 s)
둘 다 (os) --default
특정 매개 변수만 식별할때는 Null을 자리 표시자로 사용하여 빈칸을 채워둔다
예를 들어 @grantorname 에 dbo 라는 변수로만 식별하고자 한다면 앞에 2개의 조건에 null 을 입력한
exec sp_helprotect null, null, dbo;
또는 exec sp_helprotect @grantorname='dbo';
3. 예문
1) 테이블에 대한 사용 권한 나열
exec sp_helprotect 'titles';
titles 테이블에 대한 사용 권한을 나열한다.
>Error
Msg 15330, Level 11, State 1, Procedure sp_helprotect, Line 291
There are no matching rows on which to report.
>>먼저 sp_helprotect를 통해 나온 Object (ex. tables, columns, schemas, views 등) 만 인수로 줄 수 있다.
2) 사용자에 대한 사용 권한 나열
exec sp_helprotect NULL, 'character';
character 라는 user가 현재 DB에서 갖고 있는 모든 사용 권한 나열
3) 특정 사용자에 의해 부여된 사용 권한 나열
exec sp_helprotect NULL, NULL, 'dbo';
dbo에 의해 권한이 부여된 권한 정보 나열
4) 문 사용 권한 나열 or 개체 사용 권한 표시 여부
exec sp_helprotect NULL, NULL, NULL, 's';
개체 사용 권한 표시여부 (문자열 o)
문 사용 권한 (문자열 s)
default는 os (둘 다 표시)