Autoscaling Aurora Serverless

 Aurora 서버리스는 애플리케이션에서 발생된 부하를 기반으로 확장하도록 되어 있습니다. 다음 조건 중 하나가 충족되면 클러스터가 자동으로 ACU를 확장합니다.

  • CPU 사용률이 70%를 초과하거나
  • DB max connection의 90% 이상 사용

다음 조건이 모두 충족되면 클러스터가 자동으로 축소됩니다.

  • CPU 사용률이 30% 미만으로 떨어지고
  • DB max connection 의 40% 미만이 사용

 

 

'AWS > RDS' 카테고리의 다른 글

AWS RDS Proxy란  (0) 2023.08.01
AWS RDS - Restore to point in time  (0) 2023.07.21
AWS Oracle RDS hidden parameter 조회  (0) 2021.12.30
 

 

 

 

 

서버 설정에서 RDS DB(Aurora) 인스턴스에 연결을 유지하고 캐시되는 커넥션 풀이 있습니다.

람다에는 세션이 없고 연결이 캐시되지 않습니다.

Why RDS Proxy?

Lambda 함수는 마이크로 VM에서 실행됩니다. Lambda는 호출 간에 마이크로 VM을 재사용합니다. 이러한 이유로 핸들러 외부(init 코드에서) 데이터베이스에 대한 연결을 생성하고 열어 두는 것이 좋습니다. 마이크로 VM이 완전히 격리되어 있으므로 서버에서와 같이 연결 풀을 사용할 수 없습니다. 이러한 이유로 우리는 RDS 프록시를 만들었습니다 . RDS 프록시는 데이터베이스에 대한 연결 풀을 유지합니다. Lambda 함수는 데이터베이스에 직접 연결하는 대신 프록시에 연결합니다.

 

 

'AWS > RDS' 카테고리의 다른 글

AWS aurora Serverless ACU Scaling  (0) 2023.10.06
AWS RDS - Restore to point in time  (0) 2023.07.21
AWS Oracle RDS hidden parameter 조회  (0) 2021.12.30

 

Amazon RDS 서비스 중 하나인 Restore to point in time 를 수행해 본다.

 

데이터가 어느정도 복구가 되는지 확인하기 위해 아래의 순서로 테스트를 진행했다.

 

1. Aurora (MySQL Compatible) RDS 생성

2. 생성된 DB에 3천만건을 입력하는 프로시저를 수행(매 건마다 commit 수행)

3. 데이터 입력 중 DB 중지

4. 중지 중 "Restore to point in time" 수행하여 새로운 DB로 복구

5. 소스 DB의 데이터 입력 건수와 복구한 DB에 입력된 데이터 건수 비교

 

* 두 DB간의 데이터가 상당한 차이가 있었다.

"Restore to point in time" 수행 시 Restore time 을 선택 또는 입력하도록 되어 있는데 

Lastest restorable time 시간을 보면 DB가 내려가는 시간과 약 2분여 정도의 차이가 있었다. 그래서

Custom date and time으로 DB가 내려간 시간을 선택하니 아래와 같은 메시지가 출력되었다.즉 Latest Restorable Time 보다 더 최신 시간을 지정하여 복구할 수 없다는 얘기다.

"Please specify RestoreToTime between Earliest Restorable Time and Latest Restorable Time of source cluster."

결론은 완전 복구를 할 수 없다?

 

 

 

'AWS > RDS' 카테고리의 다른 글

AWS aurora Serverless ACU Scaling  (0) 2023.10.06
AWS RDS Proxy란  (0) 2023.08.01
AWS Oracle RDS hidden parameter 조회  (0) 2021.12.30

일반 DB인 경우

AWS Oracle RDS 에서는 X$ 테이블에 접근할 수 있는 권한이 없어, 기존에 hidden parameter 를 조회했던 아래 SQL 이 수행되지 않습니다. sys 계정으로 조회해야 하나, AWS Oracle RDS DB로 sys 계정 접근이 불가합니다.

AWS RDS가 아닌 일반 DB인 경우 아래 query를 수행하여 hidden parameter 를 조회합니다. hidden_parameter_name 부분에 조회를 원하는 파라미터명을 입력하면 됩니다.

SELECT KSPPINM
     , KSPPSTVL
  FROM X$KSPPI X, X$KSPPCV Y
 WHERE X.INDX = Y.INDX
   AND X.KSPPINM LIKE '%hidden_parameter_name%'
   AND SUBSTR(X.KSPPINM, 1, 1) = '_'

 

AWS Oracle RDS hidden parameter 조회

dbms_utility.get_parameter_value function을 이용해서 AWS Oracle RDS hidden parameter를 조회하는 프로시저입니다. 프로시저를 실행하면 hidden 파라미터 입력 프롬프트가 나타나고 원하는 hidden 파라미터명을 입력하면 hidden 파라미터값(value)이 출력됩니다.

  • 파라메터 값(Value) 이 숫자형 또는 Boolean형 이면 intval 에 출력, 문자형이면 strval 에 출력 또는 String인 경우에는 파라미터값의 길이(Boolean형 일경우 intval 이 1이면 True, 0이면 False )
  • RETURN ( INTEGER/BOOLEAN 파라미터면 0, string/file 파라미터면 1 )
set serveroutput on 
set lines 200

prompt Enter a value for parameter
DECLARE
	intval BINARY_INTEGER;
	strval VARCHAR2(256);
	partyp BINARY_INTEGER;
	intval2 VARCHAR2(12);

BEGIN
	dbms_output.put_line(chr(13));
	dbms_output.put_line('+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-');

	partyp := dbms_utility.get_parameter_value('&1',intval, strval);
	
	IF partyp = 1 THEN
		dbms_output.put('parameter value is: ');
		dbms_output.put_line(strval);
		dbms_output.put_line('parameter type is: STRING/FILE parameter');
		dbms_output.put('parameter value length is: ');
		dbms_output.put_line(intval);
	ELSE
		dbms_output.put('parameter value is: ');

		IF intval=0 THEN intval2:='FALSE';
			dbms_output.put_line(intval||'/'||intval2);
			dbms_output.put_line('parameter type is: INTEGER/BOOLEAN parameter');
		ELSIF intval=1 THEN intval2:='TRUE';
			dbms_output.put_line(intval||'/'||intval2);
			dbms_output.put_line('parameter type is: INTEGER/BOOLEAN parameter');
		ELSE 
			dbms_output.put_line(intval);
			dbms_output.put_line('parameter type is: INTEGER/BOOLEAN parameter');
		END IF;

	END IF;
	dbms_output.put_line('+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-');
	END;
/

 

간단한 프로시져로 v_parnam 에 조회하고자 하는 파라미터명을 입력한다.

아래 프로시저는 hidden 파라미터인 _cursor_obsolete_threshold  를 조회하는 예제이다.

declare

v_parnam varchar2(100) := '_cursor_obsolete_threshold' ;
v_intval binary_integer ;
v_strval varchar2(100) ;
v_ret varchar2(1000);

begin

v_ret := dbms_utility.get_parameter_value (
parnam => v_parnam,
intval => v_intval,
strval => v_strval
);

dbms_output.put_line(v_parnam||' : ');
dbms_output.put_line('  Type     : '||v_ret);
dbms_output.put_line('  INT Val  : '||v_intval);
dbms_output.put_line('  STR Val  : '||v_strval);

end;
/

'AWS > RDS' 카테고리의 다른 글

AWS aurora Serverless ACU Scaling  (0) 2023.10.06
AWS RDS Proxy란  (0) 2023.08.01
AWS RDS - Restore to point in time  (0) 2023.07.21

+ Recent posts