생계/OS2024. 7. 6. 15:06

SWAP 은 리눅스 커널에서 나타나는 정상적인 메커니즘이다. 

DB 서버의 경우, 클라이언트의 요청으로 데이터를 찾을때, 캐시에서 못찾은애들 디스크에서 퍼오게 되는데
메모리에 공간이 없으면 기존 메모리에 오래 상주한 애들을 swap영역으로 flush 함으로써 메모리를 확보하게 된다. 

위의 사진을 보면 DBLoad 가 튀는 순간에 swapUsage 가 올라가는데 dbload 의 압박으로 스왑이 사용된것으로 해석된다.

스왑 사용으로 일시적으로 떨어진 freememory 가 다시 올라오는 모습이다. 

 스왑은 더 많은 메모리를 확보하기 위한 리눅스 커널의 정상적인 활동이지만 스왑 공간은 물리적 메모리가 아니기에 스와핑 작업이 계속해서 일어나면 성능적으로 불리해진다. 

메모리가 부족한건 아닌지 확인하거나 해당 workload 의 SQL 을 확인해본다. 

반응형
Posted by 돌고래트레이너
생계/Oracle2024. 6. 1. 13:57

실무에서 지금까지는 대부분 엔터프라이즈 버전(EE) 를 주로 사용해왔다. 

개인공부 용도로 사용하는 것도 무료이니 EE 만 써왔고, 기업에서도 메인서비스는 RAC 를 사용하기 때문에 그래왔다.

굳이 제약이 있는 Standard Edition 을 쓸 일이 없었는데..  클라우드가 대세가 되면서 이것에도 변화가 조금 생겼는데..

대부분 mysql 로 전환하지만, 기존시스템을 완전히 버리지 못해 오라클을 일부는 남기지만 EE 대신 SE 를 쓴다는 것이다. 

물론 비용적 이유인데... DBA 입장에서는 당연히 제약많은 SE 보다 EE 가 좋지만 고객사의 니즈와 의중을 안 이상 

적응해야지.. 어쩔도리가 없다. 

 

각설하고 오라클 SE, EE 의 큰 차이점과 그로인한 이슈를 어떻게 회피할수 있는지 알아보자

1. 파티션 테이블

월별테이블 생성 + 뷰 

2. AWR 

 statspact 사용

3. 인덱스 온라인 

 별도 테이블 생성 + 리네임 + 데이터 후보정 작업

 

여기까지는 그래도 대안이 있다. 반면 다음의 feature 들은 대안이 없기에 SE 로 넘어갈때 신중히 고려해야 한다. 

4. 압축
5.  SQL 병렬 작업 

 

https://docs.oracle.com/cd/E55822_01/DBLIC/editions.htm#DBLIC109

 

Oracle Database Editions

SQL Tuning Sets N N Y SQL Tuning Sets can also be accessed by way of database server APIs and command-line interfaces. The following subprograms, part of the DBMS_SQLTUNE package, provide an interface to manage SQL Tuning Sets and are part of Oracle Databa

docs.oracle.com

 

https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/evaluate-downgrading-oracle-edition/compare-features.html

 

Oracle Database EE와 SE2 기능 비교 - AWS 규범적 지침

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

# SE 버전에 따른 cpu 제한 

1) Standard Edition One (SE1):
     2 CPU까지 확장 가능한 서버에 설치 가능
2) Standard Edition (SE):
     4 CPU까지 확장 가능한 서버에 설치 가능
3) Standard Edition 2 (SE2):
    Oracle Database 12c Release 1 (12.1.0.2) 이상부터 도입됨.
    2 소켓까지 사용 가능하며, 최대 16 CPU 스레드로 제한됨.
   RAC(Real Application Cluster) 구성 시, 2개의 서버 각각 1 소켓 8 CPU 스레드만 사용 가능

반응형

'생계 > Oracle' 카테고리의 다른 글

oracle wallet 사용하기  (0) 2023.09.20
[oracle] 히든 파라미터 체크 hidden parameter  (0) 2023.07.03
oracle audit 파일 삭제  (0) 2023.05.29
대용량 컬럼 drop 하기 # set unused  (2) 2023.05.04
리눅스 오라클 hugepage 설정  (0) 2023.05.03
Posted by 돌고래트레이너
생계/AWS2024. 5. 9. 14:39

스태츠팩 리포트를 생성하고, 이를 로컬에 다운받는 방법을 알아보자.

1. 스태츠팩 리포트 생성 

select snap_id, snap_time
  from stats$snapshot
 where snap_time > trunc(sysdate) -6
order by 1
;

begin rdsadmin.rds_run_spreport('start snapshot number', 'end snapshot number');
end;

2. AWS 콘솔에서 다운받기

- 콘솔에 로긴후  "로그 및 이벤트" 탭

아래 로그쪽에 'spreport' 를 입력..

이름이 일치하는 파일이 나오면 클릭하여 오른쪽 다운로드 버튼 클릭

* 보안 등의 이유로 다운이 되지 않는 다면 아래 유틸로 툴에서 확인가능하다. 

select text
  from table(rdsadmin.rds_file_util.read_text_file('DIR_NAME','FILE_NAME'))
;
  
 

반응형
Posted by 돌고래트레이너
생계/AWS2024. 3. 3. 12:48

아마존 AWS 프리티어 계정으로 EC2 생성하기
EC2 는 Elastic Compute Cloud 의 약자이며, RDS 는 DBaas 로 DB만 서비스로 제공해주는데 EC2 는
OS만 깔린 서버를 제공해준다. 
 

사진출처 :  https://www.whatap.io/ko/blog/9/

 
정확하게는 저장된 AMI (amazon machine image)  이미지를 사용하여 서버를 제공해주기에 매우 빠른시간에(수초) 서버 사용이 가능해진다. 
 

1. AWS 프리티어 계정에 로긴

프리티어 계정으로 로긴하자
서비스옆에 네모박스 클릭해서 자주가는 서비스를 별표 클릭하여 즐겨찾기 해놓자

 

2. EC2 인스턴스 시작 

상단의 EC2 를 클릭한 후 '인스턴스 시작' 을 클릭 

 
AWS 에서는 생성된 가상머신 하나 하나를 인스턴스라고 부르는데, EC2 인스턴스를 생성하자.
이름은 적당히 하나 정해서 만들자. 
이미 저장된 AMI 로 인스턴스를 생성할건데 나는 우분투 를 선택했다. 

 
인스턴스 유형은 디폴트를 선택했다. 

"새 키 페어 생성" 을 눌러 새로 키 페어를 생성한다.
팝업창에서 이름만 새로 지정해주고 생성한다.

 네트웍설정은 vpc 랑 서브넷은 기존에 있는거 잡아주고 퍼블릭 ip 만 활성화로 설정하자

소스유형은 내 ip를 알면 내IP 로 잡는게 좋다. 
 
스토리지는 프리티어는 최대 30까지 사용가능하다. 

 
인스턴스 시작을 눌러 ec2인스턴스를 시작하자.

 
3. EC2 에 연결하기 
AMI 로 인스턴스를 시작하는 것은 순식간이다. 
이제 생성된 인스턴스에 연결하자. 

 
 - EC2 instance connect 

콘솔에서 바로 연결하는 방법도 있다. 우측 하단의 연결 버튼을 클릭하자.

정상적으로 접속이 된 화면이다. 
 
- SSH 클라이언트
SSH 클라이언트로 연결하자. 

아까 키페어를 생성한게 있는데 그걸로 접속을 할것이다.
MobaXterm 이라는 툴로 ec2 에 연결하자. 없으면 설치하자. 무료다 

 
아까 생성한 키페어를 터미널 폴더에 카피한다.  

콘솔에 나온 명령어 ssh -i "ec2-xxxx" 카피해서 실행하면 접속이 된다. 

반응형
Posted by 돌고래트레이너
생계/AWS2024. 2. 17. 18:09

무과금으로 AWS RDS mysql 생성하기

본 포스팅의 목적은 무과금으로 AWS RDS db인스턴스를 생성함에 있다. 

실제 DB를 테스트 용도로 사용하려면 세부 옵션들의 변경이 필요함을 숙지하자. 

 

- 프리티어 가입

- RDS 생성

로그인 후 '서비스 옆 네모박스' -> 데이터베이스 -> RDS 클릭  

 

* RDS 옆에 별표시를 클릭해서 즐겨찾기 등록을 하자

 '데이터베이스 생성' 버튼을 누르자

아직 생성된 인스턴스가 없어서 0 개로 표시된다. 

 

표준생성 선택후  DBMS 는 mysql 로 선택을 하자 

 

엔진버전은 뭘 해도 상관없지만 나는 8.0.33 을 선택했다. 

샘플템플릿은 '프리티어'를 선택했다. 

 

DB 인스턴스 식별자를 적어준다. 

master 사용자 이름은 dbadm 으로 넣어줬다. root 를 사용하던 편한대로 넣어준다. 

 

프리티어에서 버스터블 클래스 만 선택이 가능하다. 

디폴트인 db.t3.micro 를 선택했다.  

과금이 무서우니까 스토리지 자동조정은 꺼놓자. 

아마존은 무서운 놈들이다. 

 

연결설정은 로컬pc에서 붙을수 있게 퍼블릭액세스에 '예' 를 선택한다.

 

 

 

데이터베이스를 생성 하자. 

추가 기능에 대한 팝업창이 뜬다. 

ElastiCache , RDS 프록시를 사용할것을 추천해준다. 

지금은 필요가 없으니 '닫기' 버튼을 누른다. 

화면으로 돌아오면 상태가 '생성중' -> '백업중' -> '사용가능'  으로 최종 완료된다. 

 

 

- client tool 로 접속하기 

위의 화면에서 db식별자를 클릭하면 아래 화면으로 이동한다. 

엔드포인트와 포트정보를 확인한다. 

 

 

반응형
Posted by 돌고래트레이너
생계/MySQL2024. 1. 16. 15:20

DBeaver 에서 information_schema, performance_schema 보이게 하기. 

디비버 설치 직후 디폴트 상태에서는 information/performance schema 가 아래처럼 보이지 않습니다. 

 

그것을 보려면 아래처럼 따라하면 됩니다. 

커넥션에서 우클릭 -> Connection view -> show system objects 선택

 

선택후 재접속하면 Databases 아래에 information/performance schema 가 보이게 됩니다. 

 

이상 끗

반응형
Posted by 돌고래트레이너
생계/MySQL2024. 1. 15. 14:36

 

mysql 접속시 유저/패스워드 입력안하고 로긴하는 방법을 알아보자 

 

lee@mysql-m:~$ 
lee@mysql-m:~$ mysql_config_editor print --all
lee@mysql-m:~$ 
lee@mysql-m:~$ mysql_config_editor set --login-path=rootconn --host=localhost --user=root --password
Enter password: 
lee@mysql-m:~$ 
lee@mysql-m:~$ 
lee@mysql-m:~$ ls -al
합계 48
drwxr-xr-x  6 lee  lee  4096  1월 16 21:43 .
drwxr-xr-x  3 root root 4096  1월 13 01:00 ..
-rw-------  1 lee  lee   106  1월 14 19:46 .Xauthority
-rw-------  1 lee  lee  1416  1월 16 17:57 .bash_history
-rw-r--r--  1 lee  lee   220  1월 13 01:00 .bash_logout
-rw-r--r--  1 lee  lee  3771  1월 13 01:00 .bashrc
drwx------ 11 lee  lee  4096  1월 13 01:29 .cache
drwx------ 11 lee  lee  4096  1월 14 18:21 .config
drwx------  3 lee  lee  4096  1월 13 01:14 .gnupg
drwxr-xr-x  3 lee  lee  4096  1월 13 01:14 .local
-rw-------  1 lee  lee   136  1월 16 21:44 .mylogin.cnf
lee@mysql-m:~$ mysql_config_editor print --all
[rootconn]
user = "root"
password = *****
host = "localhost"
lee@mysql-m:~$ 

mysql_config_editor 명령으로 credential 을 생성하면 유저 홈 디렉토리에 ".mylogin.cnf" 파일이 생성이 된다.

이후부터는 mysql 로긴시 패스워드를 입력할 필요없이 login-path 옵션을 붙여주면 된다.  

 

반응형
Posted by 돌고래트레이너
생계/MySQL2024. 1. 15. 00:30

virtual box 에 mysql master-slave replication 을 구성해보자  

가상머신은 oracle virtual box 을 사용하고 VM 에는 우분투를 설치하자. 

해당 작업은 이전에 작성한 내용을 참고하자

버추얼박스에 우분투 설치하기

1) 서버구성 

- mysql 설치 (master 역할) 

이것도 이전에 작성한 글을 참고해서 mysql 설치하자. 

버추얼박스에 mysql 설치하기

- vm 복제 (slave 역할)

vm 이 내려간 상태에서 vm 관리자 메뉴에서 대상vm을 복제하자

 

이름과 경로를 설정해준다.

 

같은 네트워크 대역을 사용하여 slave 에서 master 로 통신이 가능하게 설정해야한다. 
 vm 시작전 설정 -> 네트워크 -> 호스트전용어댑터


- hostname 변경 

복제한 vm의 hostname 이 그대로 사용중이니 mysql-s 로 변경해준다. 

@slave 

hostname
sudo hostnamectl set-hostname mysql-s

sudo reboot


2) Replication 설정
 2-1) 설정파일

@master
cd /etc/mysql
sudo vi my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

sudo service mysql restart

*선택적 설정 고려 
max_binlog_size
expire_log_days
binlog_format=statement|mixed|row


@slave
cd /etc/mysql
sudo vi my.cnf

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only

sudo service mysql restart


 2-2) Replication 유저 생성
@master
sudo mysql -u root -p1111

-- slave ip 로 생성한다. 
CREATE USER 'REP_ADM'@'192.168.56.102' IDENTIFIED WITH mysql_native_password BY '1111';
GRANT REPLICATION SLAVE ON *.* TO 'REP_ADM'@' 192.168.56.102';
   
SHOW MASTER STATUS;  

File, Position 값을 확인 

@slave 
sudo mysql -u root -p1111

-- master IP 를 넣는다 
CHANGE MASTER TO
MASTER_HOST='192.168.56.101',  
MASTER_USER='REP_ADM',
MASTER_PASSWORD='1111',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=2391;

START SLAVE;

SHOW SLAVE STATUS \G
=> [ERROR] : equal MySQL server UUIDs

sudo rm -rf /var/lib/mysql/auto.cnf
sudo service mysql restart


START SLAVE;


3) Replicatin 연결 확인 

-- 복제확인
sudo mysql --login-path=rootconn -e 'show slave status \G'|egrep "Master_Host|Master_User|Master_Log_File|Master_Log_Pos|ReplicateIgnore_DB|Running|IO_Err|SQL_Err|Seconds_Behind_Master|SQL_Delay"

** 아래 메세지가 보여야 정상 복제중
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates


-- 에러확인
show variables like '%log_error%';
=> tail -100f  /var/log/mysql/error.log



4) Replication 에러 메시지별 대응

[ERROR] [MY-013117] [Repl] Replica I/O for channel '': Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: MY-013117
=> VM 을 복제하면서 동일 uuid 문제 => auto.cnf 삭제 

[ERROR] [MY-013124] [Repl] Replica SQL for channel '': Replica failed to initialize applier metadata structure from the repository, Error_code: MY-013124
=> slave 를 리셋해준다. 
  stop slave; 
  reset slave;
  stop slave;
   
[ERROR] [MY-010584] [Repl] Replica I/O for channel '': Error connecting to source 'REP_ADM@192.17.7.5:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
=> rep user error : Authentication 확인 => mysql.user 의 plugin 확인 후 변경 => WITH mysql_native_password

[ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000003, end_log_pos 342; Error 'Can't create database 'test'; database exists' on query. Default database: 'test'. Query: 'create database test', Error_code: MY-001007
=> 트랜잭션 실패 : 대상 object 가 존재하지 않거나 실행할수 없어서 발생. skip 또는 object 동일하게 만들고 slave 재시작

** 트랜잭션 실패로 인한 에러메세지가 아는 내용이고 굳이 적용할 필요 없으면 아래명령으로 skip 한다. 
stop slave;
set global sql_slave_skip_counter=1;  -- skip 할 error 갯수
start slave;
show slave status\G

 

이상 끗.

도움되었다면 따봉줘!

반응형
Posted by 돌고래트레이너
생계/MySQL2024. 1. 13. 02:33

vm 재설치한 mysql 에 workbench 로 재접속시 에러 발생 

server public key 를 삭제

해당 파일을 날려준다. 

 

반응형

'생계 > MySQL' 카테고리의 다른 글

mysql login-path 로 로그인하기  (0) 2024.01.15
가상머신 virtualbox mysql replication 구성하기  (0) 2024.01.15
mysql 자주쓰는 함수  (0) 2023.11.06
mysql show 명령어 db정보 확인  (0) 2023.10.23
mysql select lock  (0) 2021.08.02
Posted by 돌고래트레이너
생계/DA2023. 12. 27. 17:49

그간 여러 사이트를 다니고 나서 느낀 모델링에 대한 개인적인 소회, 생각들 한번 정리해보자.

 

- 튜닝에 비해 바로 효과 나타나지 않아 중요해 보이지 않는다. 

한때 좋은 모델과 데이터의 품질에 대해서 신경을 쓰려던 트렌드가 잠깐 생겼었는데 조금은 뜸해진 느낌

튜닝은 바로 효과가 나타나고 비용과 즉시 연결이 된다. 클라우드의 시대가 오면서 더 확고해졌다. 

온프레미스에선 성능 개선으로 자원사용륭이 낮아졌다고 해서 서버를 낮은 스펙으로 바꾸지 않는다. 

이미 구매를 한 서버니 그럴일이 없다. 어느 정도 이상의 튜닝은 굳이 할 필요가 없다. 

하지만 클라우드에서는 서버의 스펙다운이 자유롭다. 튜너를 투입해서 얻은 성능개선이 운영비 절감을 가시적으로 할수있게 되었다. 

 

- 통합 관점의 표준은 개별적이고 독립적으로 개발하는 MSA 트렌드와 상충

물론 완전히 하나를 버리고 하나를 택하는 극단적인 상황까지 가는 것은 아니지만 통합 관점의 표준과 데이터의 중복도 허용하지 않는 기존의 방식을 계속 고수하려면 갈등이 발생한다. 

 

- 잘못된 모델은 시간이 한참 지나고 나서야 비싼 청구서를 부과한다. 

물리모델은 dbms 의 특성을 반영할수 밖에 없는데 최근에 mysql 로 환경이 많이 바뀌면서 이 특성을 잘 고려해야한다. 

오라클은 인덱스를 통해 데이터를 찾아갈때 인덱스의 리프노드에서 데이터의 rowid 를 찍어서 바로 원하는 데이터를 찾아갈수 있지만 mysql 은 조금 방식이 다르다.

mysql 의 innodb 테이블에서는 pk 가 클러스터링 되어 저장이 되는데, 세컨더리 인덱스에서 rowid 를 찍는것이 아니라 pk 를 찍어준다. 그래서 pk 가 여러 칼럼으로 구성되면 인덱스의 크기가 커지고 성능상 불리함이 있다. 

그래서 mysql 은 단순하게 일련번호로 pk 를 만드는 오라클의 모델링에서는 참을수 없는 방식으로 가이드를 한다.

다만 이때도 업무식별자를 도출해 유니크 인덱스를 만들 필요가 있다.

일련번호로 식별자를 만들때의 단점은 어떤 규칙으로 데이터가 만들어지는지 파악하기 힘들다는 것에 있다. 

심한경우 운영환경에서 여러사람을 거친 경우 나중에는 특정 테이블을 잘못 사용하고 있거나 무슨 테이블인지 모르겠다고 해서 비슷한 새로운 테이블을 또 만드는 경우가 생기게 된다. 



- 틀린 모델로 운영이 가능하다 .


안타까운 사실은 모델이 틀려도 어떻게든 운영을 한다는 것이다. 물론 내눈에 보이지 않는 누군가의 노력이 있었겠지만. 

좋은 모델을 만들고 유지하려면 비용을 지불해야 하지만 당장의 우선순위에서 밀리다 보니 고객은 이쪽에 더 돈을 지불할 의사를 보이지 않는듯한 느낌이다. 

반응형

'생계 > DA' 카테고리의 다른 글

데이터 모델링 식별자 선정  (0) 2024.10.09
RDBMS 에서의 관계 라는 것  (0) 2023.12.12
이력 모델  (0) 2023.12.09
엔터티 통합과 분리  (0) 2023.12.09
엔터티 유형 분류  (0) 2023.11.29
Posted by 돌고래트레이너