Oracle ASM

 

ASM이란?

ASM은 데이터베이스 구성 시 기본이 되는 디스크를 효율적으로 관리하기 위하여 오라클 10g에서 새로 선보인 데이터베이스 서비스입니다. ASM은 하나의 SMP 장비뿐만 아니라 클러스터를 구성하는 모든 노드들에 대해서도 지원이 가능합니다. ASM이 관리하는 모든 디스크에 대한 업무 분산 작업을 자동적으로 처리해 줌으로써 특정 디스크에 로드가 집중되는 핫 스팟(hot spot)현상을 최소할 수 있으며 이로 인해 성능을 극대화할 수 있습니다. 또한, 데이터가 디스크에 균등한 크기로 저장 관리되어 fragmentation 현상이 발생하지 않습니다다. 그리고 ASM이 관리하는 영역에서 새로운 디스크가 추가되거나 삭제될 때마다, 기존 데이터들에 대해 재구성 작업이 자동적으로 일어납니다. 또, ASM은 특정 데이터에 대한 복사본을 자기 자신의 디스크에 유지할 수 있기 때문에 소프트웨어 미러링 효과를 볼 수 있습니다.

 

RAC 환경에서의 ASM 인스턴스

RAC 데이터베이스처럼 ASM 인스턴스들도 자체적으로 클러스터링을 할 수 있습니다. 이는 이미 셋업이 되어 있는 DLM 체계를 사용해서 가능한 것입니다. 일반적으로 클러스터를 이루는 하나의 노드에는 하나의 ASM 인스턴스가 뜨도록 구성합니다. 그리고 RAC 구성처럼 ASM 인스턴스가 관리하는 디스크는 모든 노드에서 인식 가능하도록 구성해야 합니다. 데이터베이스 인스턴스는 오직 동일 노드에 있는 ASM 인스턴스와 상호 통신하게 됩니다. 만약 동일 노드에 서로 다른 데이터베이스 인스턴스가 존재할 경우, 그들은 그 노드에 있는 하나의 ASM 인스턴스를 공유하게 되는 것입니다.

특정 디스크 그룹은 서로 다른 데이터베이스 파일을 저장할 수 있습니다. 이처럼 RAC 환경이 아닌 상태에서 서로 다른 데이터베이스가 동일한 디스크 그룹에 접근하는 것이 가능합니다. 또한, 하나의 데이터베이스는 동일한 ASM 인스턴스에 의해 관리되는 여러 개의 디스크 그룹에 그 데이터베이스 파일을 저장할 수도 있습니다.

Scalability

ASM imposes the following limits:

  • 63 disk groups in a storage system
  • 10,000 ASM disks in a storage system
  • 4 petabyte maximum storage for each ASM disk
  • 40 exabyte maximum storage for each storage system
  • 1 million files for each disk group
  • Maximum files sizes as shown in the following table:
Disk Group Type Maximum File Size
External redundancy 35 TB
Normal redundancy 5.8 TB
High redundancy 3.9 TB

 

ASM을 설치하기 위한 최소 설정

  • ASM에 사용할 디스크가 필요합니다.
  • 커널 버전에 맞는 ASMLib 파일이 필요합니다.
  • Initialization Parameters for ASM Instances
  • 수동으로 ASM을 구성을 위해 init파일을 작성을 합니다. 최소 다음의 내용을 작성해야 합니다.
Name Description
INSTANCE_TYPE Type은 반드시 ASM으로 구성해야 합니다.

Note: 반드시 포함되어야 하는 최소한의 옵션입니다.모든 변수에서 기본이 되는 값입니다.

ASM_POWER_LIMIT 디스크의 기본이 되는 power해당되는 값입니다.

Default: 1, Range: 0 – 11

See Also: “Tuning Rebalance Operations”

ASM_DISKSTRING ASM_DISKSTRING 디스크의 순서를 생각 할 수 있습니다. Diskstring을 아래와 같이 기재하면 자동으로 인식하게 됩니다.

/dev/rdsk/*

/dev/rdsk/*s3,/dev/rdsk/*s4

위의 내용을 다음과 같이 간단히 할 수도 있습니다.:

/dev/rdsk/*s[34]

기본 값은 NULL이고 필수사항이 아닙니다. 기재하지 않으면 기본값으로 설정됩니다.

See Also: “Improving Disk Discovery Time”

ASM_DISKGROUPS ASM instance 시작 시에 자동으로 Mount할 디스크 그룹의 목록을 기재하는 항목입니다. 기본 값은 NULL입니다. 만일 설정값에 아무 값도 없다면 no disk 상태로 마운트됩니다. 설정 값이 static이 아닌 dynamic으로 되어 있기 때문에 spfile에 기록해서 자동으로 ASM에 추가할 수도 있습니다.

Note: Issuing the ALTER DISKGROUP…ALL MOUNT or ALTER DISKGROUP…ALL DISMOUNTcommand does not affect the value of this parameter.

 

ASM의 장점들

  1. 디스크 I/O의 효과적인 분산 – 스토리지를 추가하면 이전 스토리지안에 있던 자료들이 자동으로 rebalance되어서 자료들이 분산됩니다.
  2. VLDB지원(Very Large DB)

 

ASM의 Disk Group

ASM에서는 디스크를 여러개 묶어서 디스크 그룹으로 관리하는데, 1개의 그룹에는 최소 2개의 디스크가 있어야 합니다.

데이터가 들어올 때 AU라는 단위로 나누어서 각 디스크그룹별로 분산해서 저장하게 되는데,

AU(Allocation Unit)는

  1.  COARSE grained 방식 : 1MB단위로 기록되고, 주로 data, archivelog 파일에 사용
  2.  FINE grained 방식 : 128KB단위로 기록되고, 주로 redo, control, flashback log 파일에 사용

의 두가지 옵션을 가집니다.

(11g ASM부터는 AU의 종류가 1/2/4/8/16/32/64 MB로 다양하게 지원되어, DB운영계획에 따라 적절히 지정하여 성능개선을 할 수 있습니다.)

 

Rebalance

Filesystem을 사용하게 되면 디스크그룹 내에 새 디스크가 추가되거나 제거되면 성능개선을 하기 위해서는 DBA가 직접 기존 디스크의 내용을 분산하거나, 이동시켜야 합니다.

ASM을 이용하게 되면 이러한 rebalance작업은 자동으로 ASM에서 수행하게 되고, DB부하에 따라 rebalance에 얼마나 많은 CPU%를 배당할지도 지정할 수 있습니다.

SQL> alter diskgroup testdb_dg1 add disk '/dev/sdf1' rebalance power 11;

(1~11 : 1이 rebalance되는 속도가 가장느리고, 11이 가장 빠름. 11로 갈수록 rebalance하는데 더 많은 CPU부하를 일으킵니다.)

 

ASM에서의 Restrict 옵션

관리자가 disk group 유지보수를 하기 위해 restrict 옵션을 제공하고, 이 옵션으로 디스크그룹을 mount할 경우 일반사용자는 접속할 수 없게되어, 유지관리성능을 더 향상시킬 수 있습니다.

SQL> alter diskgroup data mount restrict;

유지보수종료 후 –> alter diskgroup data dismount; –> alter diskgroup data mount;

  • ASM Instance : 디스크그룹에 대한 정보를 수집해서 Database Instance에 제공, ASMB가 교두보역할. ORACLE_SID=+ASM 으로 해당 인스턴스에 접속해서 mount, shutdown 할 수 있음
  • RBAL process : 디스크추가 및 삭제 시 디스크그룹에 대한 Rebalance담당, ASM Instance의 요청이 있을 경우 디스크를 열고 닫는 프로세스
  • ARBn : RBAL의 명령을 받아 실질적으로 작업을 수행하는 process

 

ASM parameter

  • instacne_type: ASM (default: rdbms)
  • db_unique_name: +asm
  • asm_power+limit: 1(low)~11(high) 설정 가능. ASM 데이터 리밸런싱 속도 조정 레벨 값 (기본값 1)
  • asm_diskgroups: ASM 인스턴스 시작시 구동되는 디스크 그룹
  • asm_diskstring: ASM에 사용된 디스크가 포함된 물리적 경로
  • asm_preferred_read_failure_groups:I/O 실패가 발생한 그룹을 명시.

 

ASM SGA 및 주요 parameters

: ASM Instance 를 통해서 입 출력이 되기 때문에 관련 파일과 파라미터들이 있습니다.

 

주요파라미터

  • db_cache_size: ASM Instance 가 사용할 cache 크기 결정. 오라클권장값 64M
  • shared_pool: ASM Instance를 관리하는 용도로 사용. 오라클권장값 128M
  • Large_pool: Extent Maps 을 저장하는 용도. 오라클권장값 64M

※ 참고 – $ORACLE_HOME/dbs/init+ASM.ora

내용

*.asm_diskgroups=’DATA’,’FRA’

+ASM.asm_diskgroups=’DATA’,’FRA’,’NEW_ASM’#Manual Mount

*.background_dump_dest=’/home/oracle/admin/+ASM/bdump’ → alert log file 저장 경로 지정

*.core_dump_dest=’/home/oracle/admin/+ASM/cdump’ → core dump 를 저장할 경로 지정

*.instance_type=’asm’

*.large_pool_size=12M

*.remote_login_passwordfile=’SHARED’

*.user_dump_dest=’/home/oracle/admin/+ASM/udump’

▶ 위 파라미터 외 다른 파라미터를 잘못 지정 할 경우 ORA_15021 에러 발생 – ASM Instance 가 구동 되지 않습니다.

col "Parameter Name" for a40
col "Instance Value" for a20
select 
   a.ksppinm "Parameter Name", 
   c.ksppstvl "Instance Value"
from 
   x$ksppi a, 
   x$ksppcv b, 
   x$ksppsv c
where 
   a.indx = b.indx 
and 
   a.indx = c.indx
and 
   ksppinm like '%asm%'
order by 
   a.ksppinm;

Parameter Name Instance Value
---------------------------------------- --------------------
_asm_acd_chunks                          1
_asm_admin_with_sysdba                   FALSE
_asm_allow_appliance_dropdisk_noforce    FALSE
_asm_allow_lvm_resilvering               TRUE
_asm_allow_only_raw_disks                TRUE
_asm_allow_system_alias_rename           FALSE
_asm_appliance_config_file
_asm_ausize                              1048576
_asm_automatic_rezone                    TRUE
_asm_avoid_pst_scans                     TRUE
_asm_blksize                             4096
_asm_check_for_misbehaving_cf_clients    FALSE
_asm_compatibility                       10.1
_asm_dba_batch                           500000
_asm_dba_spcchk_thld                     20000
_asm_dba_threshold                       0
_asm_dbmsdg_nohdrchk                     FALSE
_asm_diag_dead_clients                   FALSE
_asm_direct_con_expire_time              120
_asm_disable_amdu_dump                   FALSE
_asm_disable_async_msgs                  FALSE
_asm_disable_multiple_instance_check     FALSE
_asm_disable_profilediscovery            FALSE
_asm_disable_smr_creation                FALSE
_asm_disable_ufg_dump                    FALSE
_asm_disk_repair_time                    14400
_asm_emulate_nfs_disk                    FALSE
_asm_emulmax                             10000
_asm_emultimeout                         0
_asm_evenread                            2
_asm_evenread_alpha                      0
_asm_evenread_alpha2                     0
_asm_evenread_faststart                  0
_asm_fail_random_rx                      FALSE
_asm_fd_cln_idle_sess_twait              10000000
_asm_fd_cln_on_fg                        TRUE
_asm_fob_tac_frequency                   9
_asm_force_quiesce                       FALSE
_asm_global_dump_level                   267
_asm_hbeatiowait                         15
_asm_hbeatwaitquantum                    2
_asm_imbalance_tolerance                 3
_asm_instlock_quota                      0
_asm_iostat_latch_count                  31
_asm_kfdpevent                           0
_asm_kfioevent                           0
_asm_kill_unresponsive_clients           TRUE
_asm_libraries                           ufs
_asm_log_scale_rebalance                 FALSE
_asm_lsod_bucket_size                    67
_asm_max_cod_strides                     5
_asm_max_redo_buffer_size                2097152
_asm_maxio                               1048576
_asm_partner_target_disk_part            8
_asm_partner_target_fg_rel               4
_asm_primary_load                        1
_asm_primary_load_cycles                 TRUE
_asm_random_zone                         FALSE
_asm_rebalance_plan_size                 120
_asm_rebalance_space_errors              4
_asm_repairquantum                       60
_asm_reserve_slaves                      TRUE
_asm_root_directory                      ASM
_asm_runtime_capability_volume_support   FALSE
_asm_secondary_load                      10000
_asm_secondary_load_cycles               FALSE
_asm_serialize_volume_rebalance          FALSE
_asm_shadow_cycle                        3
_asm_skip_rename_check                   FALSE
_asm_skip_resize_check                   FALSE
_asm_storagemaysplit                     FALSE
_asm_stripesize                          131072
_asm_stripewidth                         8
_asm_sync_rebalance                      FALSE
_asm_usd_batch                           64
_asm_wait_time                           18
_asmlib_test                             0
_asmsid                                  asm
_ges_diagnostics_asm_dump_level          11
_lm_asm_enq_hashing                      TRUE
asm_diskgroups                           DATA, ACFS
asm_diskstring                           /dev/asm*
asm_power_limit                          1
asm_preferred_read_failure_groups

 

ASM datafile name 변경

ASM에서 Datafile 이름은 랜덤숫자가 붙은 형식으로 끝나는데, 이것을 유저친화적 형식으로 알아보기 쉽게 바꾼다면, alias를 사용해야 합니다.

아래는 데이터 파일을 바로 생성하는 것이 아닌 기존 파일을 이용한 alias 생성방법입니다.

alter diskgroup disk_group_1 
   add alias 
 '+DISK_GROUP_1/oratst1/datafile/my_system_dbf'
   for 
 '+DISK_GROUP_1/oratst1/datafile/system.1122.764387443';

 

ASM datafile Copy

$ rman target /
Recovery Manager: Release 10.2.0.5.0 - Production on Tue Feb 28 17:50:37 2012
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
connected to target database: TESTDB (DBID=2559693415)

RMAN> copy datafile '+DATA/testdb/datafile/ts_new.266.776453331' to '+FRA';

Starting backup at 28-FEB-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=143 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00005 name=+DATA/testdb/datafile/ts_new.266.776453331
output filename=+FRA/testdb/datafile/ts_new.260.776454711 tag=TAG20120228T175149 recid=1 stamp=776454711
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 28-FEB-12

RMAN> copy datafile '+DATA/testdb/datafile/ts_new.267.776453579' to '+FRA';

Starting backup at 28-FEB-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile fno=00006 name=+DATA/testdb/datafile/ts_new.267.776453579
output filename=+FRA/testdb/datafile/ts_new.261.776454737 tag=TAG20120228T175217 recid=2 stamp=776454738
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 28-FEB-12

※ 참고 – 주의!!!!!  RMAN에서 복사해주면 경로만 바뀌는게아니라 파일이름도 함께 바뀝니다.

SQL> alter database rename file '+DATA/testdb/datafile/ts_new.266.776453331'
  2  to '+FRA/testdb/datafile/ts_new.266.776453331';
alter database rename file '+DATA/testdb/datafile/ts_new.266.776453331'
*
ERROR at line 1: ← 그런파일 없다고 에러난다.
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 5 - new file '+FRA/testdb/datafile/ts_new.266.776453331' not found
ORA-01110: data file 5: '+DATA/testdb/datafile/ts_new.266.776453331'
ORA-17503: ksfdopn:2 Failed to open file +FRA/testdb/datafile/ts_new.266.776453331
ORA-15173: entry 'ts_new.266.776453331' does not exist in directory 'datafile'

▶ 위의 copy과정을 보면 +FRA로 경로가 이동된 파일의 파일 이름도 달라 졌음을 확인할 수 있습니다.

 

ASM에서 pfile 수정

os filesystem 에다가 만든 pfile 을 수정하고 다시 asm 저장공간에 spfile로 만들려면

SQL> create spfile='+DATA' from pfile;
SQL> exit

$ asmcmd
asmcmd> ls parameterfile

spfile.260.672234945
spfile.267.776334921 <-- 요걸로 alias 만듬

asmcmd> rmalias spfileasmdb.ora
asmcmd> mkalias +DATA/TESTDB/PARAMETERFILE/spfile.267.776334921 spfiletestdb.ora

 

ASM 에서 디스크 추가 제거

$ export ORACLE_SID=+ASM1
$ sqlplus / as sysasm;

1. ASM Disk중 사용 안 하는 것 조회

+ASM1> 
set line 200
col path for a15
select group_number, mount_status, path, total_mb
from v$asm_disk where mount_status='CLOSED';

ex)
GROUP_NUMBER MOUNT_STATUS   PATH            TOTAL_MB
------------ -------------- --------------- ----------
           0         CLOSED            ASM1     102400
           0         CLOSED            ASM2     102400
           0         CLOSED            ASM3     102400

2. ASM Disk 추가

+ASM> alter diskgroup data add disk 'ORCL:ASM1' rebalance power 5;

3. ASM Disk 상태 조회

+ASM> select group_number, disk_number, name, mount_status, path, total_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME       MOUNT_STAT PATH              TOTAL_MB
------------ ----------- ---------- ---------- --------------- ----------
           0           4            CLOSED     /dev/raw/raw6           54
           0           5            CLOSED     /dev/raw/raw5          486
           0           6            CLOSED     /dev/raw/raw4          486
           0           7            CLOSED     /dev/raw/raw3          486
           0           8            CLOSED     /dev/raw/raw2          486
           0           9            CLOSED     /dev/raw/raw1          486
           1           0 DATA_0000  CACHED     /dev/raw/raw10      126849
           1           2 DATA_0002  CACHED     /dev/raw/raw8       126849
           1           3 DATA_0003  CACHED     /dev/raw/raw9       126849
           1           1 DATA_0001  CACHED     /dev/raw/raw7       126849
           1           1 ASM1       CACHED     /dev/asm/asm1       102400

4. ASM2,3 추가 (반복)

5. ASM 디스크 상태조회

 

ASM Disk Group에 디스크 추가

+ASM> alter diskgroup DATA add disk 'ASM1' rebalance power 10;
+ASM> alter diskgroup DATA add disk 'ASM2' rebalance power 10;
+ASM> alter diskgroup DATA add disk 'ASM3' rebalance power 10;

 

ASM 디스크 삭제 (구 스토리지의 디스크 삭제 후 rebalance)

+ASM> alter diskgroup data drop disk DATA_0000;
+ASM> alter diskgroup data drop disk DATA_0001;
+ASM> alter diskgroup data drop disk DATA_0002;
+ASM> alter diskgroup data drop disk DATA_0003;

명령실행후 diskgroup altered. 메시지가 보여지나 rebalancing 작업이 내부적으로 진행중이며 다음 v$asm_operation view를 통해 ACTIVE한 상태인지 확인할 수 있습니다.

+ASM> select name,header_status,state,free_mb from v$asm_disk;
NAME             HEADER_STATUS            STATE                FREE_MB 
---------------- ------------------------ -------------------- ------------ 
DATA_0000        MEMBER                   NORMAL               126849
DATA_0001        MEMBER                   NORMAL               126849
DATA_0002        MEMBER                   NORMAL               126849
DATA_0003        MEMBER                   DROPPING             126849     → DROP 진행중

내부적 rebalancing 작업이 완료되면 수행중인 OPERATION 이 없어지며 v$asm_disk view에DISK DATA_0003이 없어진 것을 확인할 수 있습니다.

소셜 미디어로 공유하기

You may also like...

1 Response

  1. 2022년 11월 25일

    […] + 더 읽기 […]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

 

새 블로그로 이사갑니다.

 

rastalion.dev

 

도메인 변경했어요. 현재 지속적으로 개선 중입니다.

 

This will close in 10 seconds