반응형

지난 목요일에 아래와 같은 메시지가 뜨면서 접속이 되지 않았다.


[지난 포워딩 미리 확인]

ORA-12516: TNS:listener could not find available handler with matching protocol stack

http://hyunki1019.tistory.com/39


하지만 초당 몇 십MB ~ 몇 백MB 까지 끝임없이 리스너 로그에 14-JAN-2016 13:45:03 * nsevwait_error * 0와 같은 로그가 생기는 것에 대해서 확인이 되지 않아 결국 SR 를 오픈 하였다.


SR에서는 또 똑같은 답변만 왔다...


Process 를 증가 시키라는 내용...

Intermittent TNS-12516 or TNS-12519 or TNS-12520 errors when connecting via Oracle Net (Listener) ( Doc ID 240710.1 ) 

--------------------------------------------------------------------------------------------------------------------------------------------------- 

CAUSE 


By way of instance registration, PMON is responsible for updating the listener 

with information about a particular instance such as load and dispatcher 

information. Maximum load for dedicated connections is determined by the 

PROCESSES parameter. The frequency at which PMON provides SERVICE_UPDATE 

information varies according to the workload of the instance. The maximum 

interval between these service updates is 10 minutes. 


The listener counts the number of connections it has established to the instance 

but does not immediately get information about connections that have terminated. 

Only when PMON updates the listener via SERVICE_UPDATE is the listener 

informed of current load. Since this can take as long as 10 minutes, there can be 

a difference between the current instance load according to the listener 

and the actual instance load. 


When the listener believes the current number of connections has reached maximum 

load, it may set the state of the service handler for an instance to "blocked" 

and begin refusing incoming client connections with either of the following 

errors: 


TNS-12516 TNS:listener could not find instance with matching protocol stack 

TNS-12519 TNS:no appropriate service handler found 


Additionally, an ORA-12520 error may appear in the listener log. 


The output of the LSNRCTL services command will likely show that the service handler is "blocked". 


e.g. '"DEDICATED" established:1 refused:0 state:blocked' 


SOLUTION 


Increase the pfile or spfile setting for PROCESSES. 


그래서 다시 확인을 resource_limit 에는 process 수가 limit 까지 차지 않았다고 확인을 줬다..




SR의 마지막 답변이다.

일반적으로 PROCESSES 설정에 하나의 User Process 에서 파생되는 Parallel 작업이나, 

Recursive SQL을 수행하기 위한 session fork 는 감안되어 있지 않습니다. 


따라서, 숫자상으로 정확히 맞아 떨어 지지는 않습니다. 



http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams169.htm#REFRN10175 

PROCESSES 


http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2050.htm#REFRN30206 

V$RESOURCE_LIMIT 


관련 문서 및 노트를 확인해 보았을때, 현재로써는 PROCESSES를 증가를 검토 하여 주시기 바랍니다. 


흠...이대로 종결을 낼 수 밖에 없을 듯 보인다.


일단 내가 조치할 수 있는 방도는 job 에서도 Local DB를 바라보는 Link 들이 있는데 이 것들을 수정 하라고 권고 하는 것 뿐이다.

또한 확인해야 할 사항은 이렇게 Link 를 이용하게 되면 process 수가 증가 여부가 궁금하다.


어떻게 하면 확인이 가능할 지 테스트도 찾아봐야 겠다.


[종결]

반응형
반응형

쿼리를 조회하다 보면

자주 사용하는 테이블 및 컬럼이 있다.

이 부분은 자주 사용하다 보니 자연스럽게 해당 컬럼들이 어떠한 값을 가지는지 확인이 가능하다


하지만 그 외의 컬럼에 대해서는 잘 알지 못하는 경우가 있다.


아래는 그루비에서 퍼온 참고할만한 내용이다.


V$SESSION

  • 세션에 대한 전반적인 내용을 보여줌
    ColumnValueDescription
    SADDR070000050F9798E0오라클 메모리의 세션 주소
    SID9542세션 식별자 ( 세션 관련 뷰는 SID컬럼과 조인이 가능 )
    SERIAL#5865세션 시리얼 번호
    AUDSID86855884감사 세션 아이디( AUD$의 SESSIONID 컬럼과 조인 가능)
    PADDR07000004FD0771A8이 세션을 소유한 프로세스의 메모리 주소( V$PROCESS의 ADDR 컬럼과 조인 가능)
    USER#361오라클 사용자 식별자( DBA_USERS의 USER_ID 컬럼과 조인 가능)
    USERNAMERAXSOFT오라클 사용자 이름
    COMMAND3현재 수행되고 있는 명령문의 타입이 기록된다( AUDIT_ACTIONS의 ACTION 컬럼과 조인 가능)
    OWNERID2147483644Migratable session을 소유한 사용자의 식별자를 포함. 병렬 실행의 경우, 상위 2바이트는 Query Coordinator의 인스턴스의 ID, 하위 2바이트는 세션 번호를 포함. 그러나, 이 값이 2147483644의 값을 가진다면 의미 없다.
    TADDR07000004B519BE58트랜잭션 상태 객체의 주소( V$TRANSACTION의 ADDR컬럼과 조인 가능)
    LOCKWAIT Lock의 주소( V$LOCK의 ADDR컬럼과 조인 가능)
    STATUSACTIVE세션의 상태
    SERVERDEDICATED서버의 타입
    SCHEMA#361스키마 사용자 아이디
    SCHEMANAMERAXSOFT스키마 사용자 이름
    OSUSERhopefullyOS 클라이언트 사용자 이름
    PROCESS1436:648OS 클라이언트 프로세스 ID
    MACHINEHQ10-NE2256OS Machine 이름
    TERMINALHQ10-NE2256OS 터미널 이름
    PROGRAMSQL*PLUSOS 프로그램 이름
    TYPEUSER세션 타입
    SQL_ADDRESS0700000502F77800현재 수행되고 있는 SQL문의 구별을 위한 주소 ( V$SQLAREA의 ADDRESS컬럼과 조인 가능)
    SQL_HASH_VALUE156003993현재 수행되고 있는 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능)
    SQL_IDgdwxvqw4nsvnt 
    SQL_CHILD_NUMBER0 
    PREV_SQL_ADDR070000043907DF38가장 최근에 수행되었던 SQL문의 구별을 위한 주소( V$SQLAREA의 ADDRESS컬럼과 조인 가능)
    PREV_HASH_VALUE3851972948가장 최근에 수행되었던 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능)
    PREV_SQL_IDcg9wzx3kthwan 
    PREV_CHILD_NUMBER0 
    PLSQL_ENTRY_OBJECT_ID  
    PLSQL_ENTRY_SUBPROGRAM_ID  
    PLSQL_OBJECT_ID  
    PLSQL_SUBPROGRAM_ID  
    MODULESQL*PLUS현재 실행되고 있는 모듈의 이름
    MODULE_HASH2468076772모듈의 Hash 값
    ACTION3.1.5 (Build:5)현재 실행되고 있는 Action의 이름
    ACTION_HASH775161987Action의 Hash 값
    CLIENT_INFO 클라이언트의 정보 값
    FIXED_TABLE_SEQUENCE429762060데이터베이스에 콜을 하고, 다이나믹 퍼포먼스 테이블(Dynamic Perfomance Table)을 조회할 때마다 값이 증가된다.
    ROW_WAIT_OBJ#341579락으로 인해 기다리고 있는 로우가 속한 오브젝트 번호를 보여준다.( DBA_OBJECTS뷰의 OBJECT_ID 컬럼과 조인 가능)
    ROW_WAIT_FILE#329락으로 인해 기다리고 있는 로우가 속한 파일의 번호를 보여준다.( DBA_DATA_FILES의 FILE_ID, V$DATAFILE의 FILE# 컬럼들과 조인 가능)
    ROW_WAIT_BLOCK#335700락으로 인해 기다리고 있는 로우가 속한 블락 번호를 보여준다.
    ROW_WAIT_ROW#0락으로 인해 기다리고 있는 블락내의 로우 번호를 보여준다.
    LOGON_TIME2008-03-06 오후 2:39:34세션이 로그온한 시간을 나타낸다.
    LAST_CALL_ET409세션의 가장 최근의 DB Call이후 지난 시간을 보여준다.
    PDML_ENABLEDNO이 컬럼은 PDML_STATUS로 바뀌었음.
    FAILOVER_TYPENONE 
    FAILOVER_METHODNONE 
    FAILED_OVERNO 
    RESOURCE_CONSUMER_GROUP 세션의 현재 Resource Consumer Group을 보여준다.( DBA_RSRC_CONSUMER_GROUPS뷰의 CONSUMER_GROUP컬럼과 조인 가능 )
    PDML_STATUSDISABLED세션의 현재 Parallel DML의 상태를 보여준다.
    PDDL_STATUSENABLED세션의 현재 Parallel DDL의 상태를 보여준다.
    PQ_STATUSENABLED세션의 현재 Parallel Query의 상태를 보여준다.
    CURRENT_QUEUE_DURATION0 
    CLIENT_IDENTIFIER Global Application Context에서 이용한다.
    BLOCKING_SESSION_STATUSUNKNOWN 
    BLOCKING_INSTANCE  
    BLOCKING_SESSION  
    SEQ#19373 
    EVENT#116 
    EVENTdb file sequential read 
    P1TEXTfile# 
    P1329 
    P1RAW149 
    P2TEXTblock# 
    P2335700 
    P2RAW0000000000051F54 
    P3TEXTblocks 
    P31 
    P3RAW1 
    WAIT_CLASS_ID1740759767 
    WAIT_CLASS#8 
    WAIT_CLASSUser I/O 
    WAIT_TIME0 
    SECONDS_IN_WAIT0 
    STATEWAITING 
    SERVICE_NAMESYS$USERS 
    SQL_TRACEDISABLED 
    SQL_TRACE_WAITSFALSE 
    SQL_TRACE_BINDSFALSE 

V$PROCESS

  • 기술 예정
    ColumnValueDescription
    ADDR07000001D6C79EB8프로세스의 메모리 주소
    PID2프로세스 ID
    SPID3064180OS 프로세스 ID
    USERNAMERAXSOFTOS 유저 이름
    SERIAL#1세션 시리얼 번호
    TERMINALUNKNOWNOS 터미널 이름
    PROGRAMoracle@ (PMON)OS 프로그램 이름
    TRACEID Trace ID
    BACKGROUND1Background일 때 1
    LATCHWAIT Latch Wait 일때 메모리 주소
    LATCHSPIN Latch Spinning 일때 메모리 주소
    PGA_USED_MEM329394 
    PGA_ALLOC_MEM580290 
    PGA_FREEABLE_MEM0 
    PGA_MAX_MEM580290 

V$SQL 11g

  • V$SQL에 대해 10g와 11g 비교함
CNT10g V$SQL11g V$SQLDATA TYPEDESCRIPTION
1SQL_TEXTSQL_TEXTVARCHAR2(1000)First thousand characters of the SQL text for the current cursor
2SQL_FULLTEXTSQL_FULLTEXTCLOBFull text for the SQL statement exposed as a?CLOB?column. The full text of a SQL statement can be retrieved using this column instead of joining with the?V$SQL_TEXT?dynamic performance view.
3SQL_IDSQL_IDVARCHAR2(13)SQL identifier of the parent cursor in the library cache
4SHARABLE_MEMSHARABLE_MEMNUMBERAmount of shared memory used by the child cursor (in bytes)
5PERSISTENT_MEMPERSISTENT_MEMNUMBERFixed amount of memory used for the lifetime of the child cursor (in bytes)
6RUNTIME_MEMRUNTIME_MEMNUMBERFixed amount of memory required during the execution of the child cursor
7SORTSSORTSNUMBERNumber of sorts that were done for the child cursor
8LOADED_VERSIONSLOADED_VERSIONSNUMBERIndicates whether the context heap is loaded (1) or not (0)
9OPEN_VERSIONSOPEN_VERSIONSNUMBERIndicates whether the child cursor is locked (1) or not (0)
10USERS_OPENINGUSERS_OPENINGNUMBERNumber of users executing the statement
11FETCHESFETCHESNUMBERNumber of fetches associated with the SQL statement
12EXECUTIONSEXECUTIONSNUMBERNumber of executions that took place on this object since it was brought into the library cache
13PX_SERVERS_EXECUTIONSPX_SERVERS_EXECUTIONSNUMBERTotal number of executions performed by Parallel eXecution Servers. The value is 0 when the statement has never been executed in parallel.
14END_OF_FETCH_COUNTEND_OF_FETCH_COUNTNUMBERNumber of times this cursor was fully executed since the cursor was brought into the library cache. The value of this statistic is not incremented when the cursor is partially executed, either because it failed during the execution or because only the first few rows produced by this cursor are fetched before the cursor is closed or re-executed. By definition, the value of the?END_OF_FETCH_COUNT?column should be less or equal to the value of the?EXECUTIONS?column.
15USERS_EXECUTINGUSERS_EXECUTINGNUMBERNumber of users executing the statement
16LOADSLOADSNUMBERNumber of times the object was either loaded or reloaded
17FIRST_LOAD_TIMEFIRST_LOAD_TIMEVARCHAR2(76)Timestamp of the parent creation time
18INVALIDATIONSINVALIDATIONSNUMBERNumber of times this child cursor has been invalidated
19PARSE_CALLSPARSE_CALLSNUMBERNumber of parse calls for this child cursor
20DISK_READSDISK_READSNUMBERNumber of disk reads for this child cursor
21DIRECT_WRITESDIRECT_WRITESNUMBERNumber of direct writes for this child cursor
22BUFFER_GETSBUFFER_GETSNUMBERNumber of buffer gets for this child cursor
23APPLICATION_WAIT_TIMEAPPLICATION_WAIT_TIMENUMBERApplication wait time (in microseconds)
24CONCURRENCY_WAIT_TIMECONCURRENCY_WAIT_TIMENUMBERConcurrency wait time (in microseconds)
25CLUSTER_WAIT_TIMECLUSTER_WAIT_TIMENUMBERCluster wait time (in microseconds)
26USER_IO_WAIT_TIMEUSER_IO_WAIT_TIMENUMBERUser I/O Wait Time (in microseconds)
27PLSQL_EXEC_TIMEPLSQL_EXEC_TIMENUMBERPL/SQL execution time (in microseconds)
28JAVA_EXEC_TIMEJAVA_EXEC_TIMENUMBERJava execution time (in microseconds)
29ROWS_PROCESSEDROWS_PROCESSEDNUMBERTotal number of rows the parsed SQL statement returns
30COMMAND_TYPECOMMAND_TYPENUMBEROracle command type definition
31OPTIMIZER_MODEOPTIMIZER_MODEVARCHAR2(10)Mode under which the SQL statement is executed
32OPTIMIZER_COSTOPTIMIZER_COSTNUMBERCost of this query given by the optimizer
33OPTIMIZER_ENVOPTIMIZER_ENVRAW(2000)Optimizer environment
34OPTIMIZER_ENV_HASH_VALUEOPTIMIZER_ENV_HASH_VALUENUMBERHash value for the optimizer environment
35PARSING_USER_IDPARSING_USER_IDNUMBERUser ID of the user who originally built this child cursor
36PARSING_SCHEMA_IDPARSING_SCHEMA_IDNUMBERSchema ID that was used to originally build this child cursor
37PARSING_SCHEMA_NAMEPARSING_SCHEMA_NAMEVARCHAR2(30)Schema name that was used to originally build this child cursor
38KEPT_VERSIONSKEPT_VERSIONSNUMBERIndicates whether this child cursor has been marked to be kept pinned in the cache using the?DBMS_SHARED_POOL?package
39ADDRESSADDRESSRAW(8)Address of the handle to the parent for this cursor
40TYPE_CHK_HEAPTYPE_CHK_HEAPRAW(8)Descriptor of the type check heap for this child cursor
41HASH_VALUEHASH_VALUENUMBERHash value of the parent statement in the library cache
42OLD_HASH_VALUEOLD_HASH_VALUENUMBEROld SQL hash value
43PLAN_HASH_VALUEPLAN_HASH_VALUENUMBERNumerical representation of the SQL plan for this cursor. Comparing one?PLAN_HASH_VALUE?to another easily identifies whether or not two plans are the same (rather than comparing the two plans line by line).
44CHILD_NUMBERCHILD_NUMBERNUMBERNumber of this child cursor
45SERVICESERVICEVARCHAR2(64)Service name
46SERVICE_HASHSERVICE_HASHNUMBERHash value for the name listed in?SERVICE
47MODULEMODULEVARCHAR2(64)Contains the name of the module that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_MODULE
48MODULE_HASHMODULE_HASHNUMBERHash value of the module listed in the?MODULE?column
49ACTIONACTIONVARCHAR2(64)Contains the name of the action that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_ACTION
50ACTION_HASHACTION_HASHNUMBERHash value of the action listed in the?ACTION?column
51SERIALIZABLE_ABORTSSERIALIZABLE_ABORTSNUMBERNumber of times the transaction fails to serialize, producing?ORA-08177?errors, per cursor
52OUTLINE_CATEGORYOUTLINE_CATEGORYVARCHAR2(64)If an outline was applied during construction of the cursor, then this column displays the category of that outline. Otherwise the column is left blank.
53CPU_TIMECPU_TIMENUMBERCPU time (in microseconds) used by this cursor for parsing, executing, and fetching
54ELAPSED_TIMEELAPSED_TIMENUMBERElapsed time (in microseconds) used by this cursor for parsing, executing, and fetching
55OUTLINE_SIDOUTLINE_SIDNUMBEROutline session identifier
56CHILD_ADDRESSCHILD_ADDRESSRAW(8)Address of the child cursor
57SQLTYPESQLTYPENUMBERDenotes the version of the SQL language used for this statement
58REMOTEREMOTEVARCHAR2(1)Indicates whether the cursor is remote mapped (Y) or not (N)
59OBJECT_STATUSOBJECT_STATUSVARCHAR2(19)Status of the cursor: 
VALID - Valid, authorized without errors
VALID_AUTH_ERROR - Valid, authorized with authorization errors
VALID_COMPILE_ERROR - Valid, authorized with compilation errors
VALID_UNAUTH - Valid, unauthorized
INVALID_UNAUTH - Invalid, unauthorized
INVALID - Invalid, unauthorized but keep the timestamp
60LITERAL_HASH_VALUELITERAL_HASH_VALUENUMBERHash value of the literals which are replaced with system-generated bind variables and are to be matched, whenCURSOR_SHARING?is used. This is not the hash value for the SQL statement. If?CURSOR_SHARING?is not used, then the value is 0.
61LAST_LOAD_TIMELAST_LOAD_TIMEVARCHAR2(76)Time at which the query plan (heap 6) was loaded into the library cache
62IS_OBSOLETEIS_OBSOLETEVARCHAR2(1)Indicates whether the cursor has become obsolete (Y) or not (N). This can happen if the number of child cursors is too large.
63 IS_BIND_SENSITIVEVARCHAR2(1)  
64 IS_BIND_AWAREVARCHAR2(1)  
65 IS_SHAREABLEVARCHAR2(1)  
66CHILD_LATCHCHILD_LATCHNUMBERChild latch number that is protecting the cursor
67SQL_PROFILESQL_PROFILEVARCHAR2(64)SQL profile
68 SQL_PATCHVARCHAR2(30)  
69 SQL_PLAN_BASELINEVARCHAR2(30)  
70PROGRAM_IDPROGRAM_IDNUMBERProgram identifier
71PROGRAM_LINE#PROGRAM_LINE#NUMBERProgram line number
72EXACT_MATCHING_SIGNATUREEXACT_MATCHING_SIGNATURENUMBERSignature calculated on the normalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings.
73FORCE_MATCHING_SIGNATUREFORCE_MATCHING_SIGNATURENUMBERThe signature used when the?CURSOR_SHARING?parameter is set to?FORCE
74LAST_ACTIVE_TIMELAST_ACTIVE_TIMEDATETIme at which the query plan was last active
75BIND_DATABIND_DATARAW(2000)Bind data
76 TYPECHECK_MEMNUMBER  
77 IO_CELL_OFFLOAD_ELIGIBLE_BYTESNUMBER  
78 IO_INTERCONNECT_BYTESNUMBER  
79 PHYSICAL_READ_REQUESTSNUMBER  
80 PHYSICAL_READ_BYTESNUMBER  
81 PHYSICAL_WRITE_REQUESTSNUMBER  
82 PHYSICAL_WRITE_BYTESNUMBER  
83 OPTIMIZED_PHY_READ_REQUESTSNUMBER  
84 LOCKED_TOTALNUMBER  
85 PINNED_TOTALNUMBER  
86 IO_CELL_UNCOMPRESSED_BYTESNUMBER  
87 IO_CELL_OFFLOAD_RETURNED_BYTESNUMBER 

[출처]

http://wiki.gurubee.net/display/CORE/Dynamic+View?


추가로 유휴 상태인 세션 확인 쿼리다.


유휴 상태 세션 찾기


select sid, serial#, username, trumc(last_call_et/3600,2)||'hr'last_call_et

from v$session

where last_call_et>7200 and username is not null


- last_call_et 는 "초" 단위이므로 7200 이면 2시간이된다.



유휴 상태 세션 죽이기


alter system kill '<sid>,<seril#>'


[출처]

http://oraclezombie.tistory.com/entry/%EC%9C%A0%ED%9C%B4idle-%EC%83%81%ED%83%9C%EC%9D%B8-%EC%84%B8%EC%85%98-%EB%B3%B4%EA%B8%B0

반응형
반응형

몇일 전 프로세스 이슈인 줄 알고 찾아보면서,

하루에 한번씩 프로세스 현황을 각 DB 마다 수집 하여 

통계가 필요할 것 같아 스크립트를 작성해 보았다.


대충은 아니지만 후다닥 만든 부분 이라 앞으로 테스트로 수집하면서

필요하거나 부족한 부분을 보충하면서 완성해야 될 것 같다.


대략 흐름은 아래와 같다.


1. 모니터링을 관장할 DB에서 각 수집을 해야할 DB들의 Link를 생성

2. DB Link를 통해 매일 오전 7시에 각 DB 의 session과 Process 를 수집

  (Scheduler 를 이용)

3. 수집 대상은 session / process / instance / host 등이 된다.

  (RAC 장비들이 다수이기 때문에 gv$를 이용하여 진행)


스크립트는 아래와 같다


--DB Link생성

CREATE PUBLIC DATABASE LINK DBA_LINK

CONNECT TO SYSTEM

IDENTIFIED BY 비밀번호

USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DBIP)(PORT = 포트)))(CONNECT_DATA = (SERVICE_NAME = DB서비스명)))';


--정보를 저장할 Table 생성  

create table chk_session

(

l_date date default sysdate not null,

l_instance nvarchar2(20),

l_hostname nvarchar2(20),

ss_max number default 0,

ss_current number default 0,

ss_limit number default 0,

ss_active number default 0,

ss_inactive number default 0,

ps_max number default 0,

ps_current number default 0,

ps_limit number default 0

);


--procedure 생성

create or replace procedure SYS.proc_chk_session

is

begin

  insert into chk_session

 select 

    sysdate as rs_date,

    b.instance_name AS RS_INSTANCE,

    b.host_name AS RS_HOSTNAME,

    MAX(case when  resource_name='sessions' then MAX_UTILIZATION end) as SESSION_MAX,

    MAX(case when  resource_name='sessions' then CURRENT_UTILIZATION end) as SESSION_CURRENT,

    MAX(case when  resource_name='sessions' then LIMIT_VALUE end) as SESSION_LIMIT,

    MAX((SELECT  COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='ACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_ACTIVE,

    MAX((SELECT  COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='INACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_INACTIVE,

    MAX(case when  resource_name='processes' then MAX_UTILIZATION end) as PROCESS_MAX,

    MAX(case when  resource_name='processes' then CURRENT_UTILIZATION end) as PROCESS_CURRENT,

    MAX(case when  resource_name='processes' then LIMIT_VALUE end) as PROCESS_LIMIT

  from gv$resource_limit@DBA_LINK a, gv$instance@DBA_LINK b

  where a.resource_name in ('processes', 'sessions')

    and a.inst_id = b.inst_id

  GROUP BY sysdate, b.instance_name, b.host_name;

end;

/


--scheduler 생성

begin 

SYS.dbms_scheduler.create_job

  (job_name => 'check_session_db'

  ,start_date      => TO_TIMESTAMP_TZ('2016/01/16 07:00:00','yyyy/mm/dd hh24:mi:ss')

  ,job_class  => 'DEFAULT_JOB_CLASS'

  ,JOB_TYPE => 'PLSQL_BLOCK'

  ,repeat_interval => 'FREQ=DAILY; INTERVAL=1'

  ,job_action => 'BEGIN PROC_CHK_SESSION; END;'

  );

end;

/

--scheduler 활성화 및 테스트 실행

exec sys.dbms_scheduler.enable('check_session_db');

exec sys.dbms_scheduler.run_job('check_session_db');

 



정말 허접해 보이기는 하지만 나는 이것도 내 경험이라 생각해 본다.


수정 보완점은 아래와 같다.

1. system 계정으로 진행했기 때문에 보안상 문제가 될 소지가 있다. 그래서 이 부분을 각 권한을 따로 부여하여 진행

2. 성능 부분을 체크 안했기 때문에 플랜을 확인하여 최소한의 리소스를 사용


이렇게 하나하나 쿼리를 작성하는 것도 좋을 듯 하다.


반응형

'Oracle > DBA' 카테고리의 다른 글

[튜닝가이드] 인덱스 사용 여부 관련 생각 + [펌]  (0) 2016.10.06
[펌][ORACLE] ORA-에러  (0) 2015.12.22
[Oracle] Index monitoring  (0) 2015.12.14
[Oracle] Partition Local Index 테스트  (0) 2015.12.02
[ORACLE] ASM 에 Datafile 추가  (1) 2015.11.25
반응형

가장 최근의 연재인 (작년 12/24) #8 화를 제대로 읽지를 못해서 정리하는데 시간이 조금 더 소요 되었다.


이번에는 #5부터 #8까지 내용을 정리 하였다.


이 글은 어쩌면 Andrew 님의 정리를 또 정리한 것이기 때문에 자세한 부분은 DB Guide net을 통해서 찾아보거나,

이 분이 여기저기 많이 작성한 글들이 인터넷에 있기 때문에 조금만 검색해 봐도 나올 것이다.


#5

SDN(Software Defined Network) controller

[중앙에서 모든 곳의 트래픽과 경로의 상태를 보면서 패킷이 가는 경로를 조절하는 것]


Openflow 

[SDN Controller에게 보내고 받는 명령어를 표준화]


OVS(Open Virtual Switch)

[Openflow를 사용할 수 있게 만든 오픈소스기반의 소프트웨어 스위치]

 

ex) SDN Controller는 네이베이션 안내서버 / openflow는 데이터 망 또는 핸드폰앱과 서버간의 통신 프로토콜 / OVS는 운전자


Reactive

[OVS의 경우 자신에게 설정된 flow가 없는 새로운 패킷이 들어올 때 반드시 SDN Controller에 접속해서 경로를 받아와야만 패킷을 처리]


proactive / predefined

[OVS가 SDN Controller에게 묻지 않고 자신이 알아서 차단하거나 특정 경로로 보내는 것]


1. SDN Controller에서는 클러스터 형태의 Controller를 개발하거나 분산 데이터 베이스를 사용해서 부하를 최대한 분산

2. Openflow 를 통해 패킷의 경로들이 실제 물리 네트워크는 터널 형태로 모두 연결이 되어 있어야만 함


원문

http://www.dbguide.net/knowledge.db?cmd=specialist_view&boardUid=187658&boardConfigUid=117&boardStep=0


▶해당 차트는 내용은 이해가 되지만 조금 더 깊게는 이해하기 힘들어서 정리가 힘들었습니다.


------------------------------------

#6

아마존에서 한국에 별도의 데이터 센터를 갖추어서 해당 지역내에 원활하게 가상 머신과 네트워크를 제공하는 단위를 발표

하지만 그 이전에도 몇몇 클라우드 서비스를 할려는 글로벌 기업들이 자체 데이터 센터를 세우는 대신 대기업의 데이터 센터를 임대하여 사


용함으로써 경쟁이 아닌 대기업과 상생을 하려고 함


이후 내용들은 주관적인 부분이 감미 되어 있기에 읽는 독자들의 생각과 상이할 수 있다고 느끼기에 원문으로 대체합니다.

[저는 Andrew님과 비슷한 생각을 가지고 있습니다.]


http://www.dbguide.net/knowledge.db?cmd=specialist_view&boardUid=188289&boardConfigUid=117&boardStep=0


-------------------------------------

#7

클라우드에 대해서 이야기하고 있지만 자신이 하고 있는 일에 충실하면 된다...라는 뜻으로 이해하였습니다.

지금 저에게 가장 필요한 이야기 일듯...


--------------------------------------

#8

클라우드 컴퓨팅

[프로그램가능한 리소스 관리(Protrammable resource management)]


Programmable

[프로그램 코드로써 리소스들을 관리] - 일정한 룰과 규칙을 정확하게 이해할 줄 아는 사람이 해야함(사용하는 제품의 SLA(Service Level 


Agreement) 를 정확하게 이해해야하고 제공자는 이 룰에 맞도록 제품과 서비스를 만들어야 함


Resource

[계산이나 계산에 필요한 자료를 저장하는 자원]

- 클라우드에서 제공하는 리소스는 측정 가능해야 함 (측정이 가능해야지 사용자가 얼마나 사용했는지 이에 대해 가격 및 Abusing을 막을 수 있음)

- 독립적이어야 함(멀티 테넌시의 개념과 비슷한데 추가/제거가 가능하기 때문 - CPU는 측정이 가능하지만 독립적으로 추가나 제거가 불가)


ex) 아마존의 lambda라는 서비스는 작업을 정의해 두면 해당 작업이 수행된 시간만큼만 과금(밀리초 단위)


클라우드는 이러한 프로그램 가능한 리소스를 관리

- 생성, 삭제 부터 크기 변환 등

- 자동으로 리소스의 라이프 사이클을 관리할 수 있기 때문에 auto-scale-out 또는 auto-scale-in 가능


앞으로 self-management의 특성상 클라우드 사용자가 자신의 리소스를 관리하기 때문에 이러한 기능을 api화 해서 판매도 가능


추가로 연재가 올라오면 정리해서 올리겠습니다.


또한 Cloud 관련해서 좋은 기사나 내용이 있으면 블로그 하도록 하겠습니다.

반응형

'Cloud' 카테고리의 다른 글

[Cloud] Andrew 의 Cloud 정리-1  (0) 2016.01.13
반응형

아침부터 장애를 해결하다 보면 시간은 빨리가지만,

그만큼 빨리 지치는 것 같다.


아침에 WAS에서 DB로 접속이 간간이 안된다고 하는데, Toad에서는 접속이 잘 된다는 소리에,

크게 개의치 않고 천천히 Alert 로그를 봤다.


헉!!!!!

ORA-12516: TNS:listener could not find available handler with matching protocol stack


검색해 보니 너무나도 잘 나온 블로그가 나와 있어서...그대로 가져와 쓰고 싶지만..조금만 가져왔다-ㅎ

[출처]http://justckh.blogspot.kr/2013/09/oracle-ora-12516-tns.html

Problem
ORA-12516: TNS:리스너가 프로토콜 스택과 일치하는 처리기를 찾을 수 없습니다.

Cause
Oracle DB를 이동하여 Application을 가동하다 보면 위와 같은 Message와 마주칠 수 있습니다.

이는 동시 처리 가능한 Processes parameter 값을 초과했기 때문에 더 이상 Session을 연결할 수 없다는 message입니다.

Resolution
Processes parameter 값을 변경해주면 됩니다.


음???process 값이 수정..

확인해봤다.


참고로 여기는 2 node RAC라서 gv$resource_limit 으로 검색했다.



응??

MAX 값은 아니다...

그래서 해당 job 들에 대해서 확인을 해봤다.

어떠한 공통점이 있는지...


확인해 보니, DB_LINK가 모두 사용하고 있었다.

(개발자님...왜 같은 DB에 있는 유저에 대해서도 DB_LINK를 사용해서 보시나요...그냥 권한만 받아서 select 하시지.....-_-+++)


DB_LINK로 접속 테스트해 보았다.


앞에서 적었듯이 2node rac 이기에, 각자 instance에 접속을 테스트 해 보았다.


1번 Instance 는 전혀 문제 없이 접속..

2번 Instance는 접속이 안된다!!!!!!!!리스너 status 는 정상이며 아래와 같이 에러가 발생한다

TNS-12520: TNS:listener could not find available handler for requested type of server


TNS-12520: TNS:listener could not find available handler for requested type of server


Cause: None of the known and available service handlers for requested type of server (dedicated or shared) are appropriate for the client connection.


Action: Run "lsnrctl services" to ensure that the instance(s) have registered with the listener and that the appropriate handlers are accepting connections.

흠...

LSNRCTL SERVICES 를 확인해 보니, state 가 Block 인 것을 확인.


리스너 로그는 어느 순간 4g........왜???

매달 정리해 주는데, 언제 4g Full이 되어 있을까.


리스너 로그는 아래와 같은 에러가 계속 있는 것을 확인 하였다.

...

14-JAN-2016 13:45:03 * nsevwait_error * 0

14-JAN-2016 13:45:03 * nsevwait_error * 0

....


lsnrctl log_status off 로 한 후 

리스너 로그를 정리 및 리스너 재시작하였다.


이후에는 에러 발생이 되지 않았아.


해결은 했지만, 무슨 이유로 위와 같은 로그가 끊임없이 쌓였는지 확인이 되지 않는다.

DB Link와 관련된 문제 인 듯 한데...

원인이 발견되면 업데이트 해야겠다.


오늘도 Clear!!!!


반응형
반응형

Cloud 와 관련하여 검색하다가, DB Guide넷 에서 Andrew님이 Cloud 관련하여 강좌 하는 것을 읽게 되었다.


클라우드는 대학생때 잠시 접했으며, 잠시 심취하여 외계 생명을 찾는데에 나의 Resource를 제공하고,

그에대해 신기하여 외국 전문 저널??은 아니지만

중립자 관련하여 또 Resource 를 제공할 수 있다고 하여 제공하고자 찾아봤다.


하지만 그게 전부였다..


5년이 넘게 지난 지금 이제는 조금 더 깊게 개념을 잡아 나가고자 또 찾아서 정리해 봤다.


이 글은 Andrew님이 연재하는 강좌를 읽고 그것을 정리한 부분이다.


혹여 저작권 관련하여 문제가 발생하지 않고자 모두 오픈하는 바입니다.


Andrew의 Cloud 이야기 1~3#을 정리한 내용입니다.


1#


앤드류 - 클라우딩 (DB Guide Net) 정리


위키피디아 클라우드 정의 

[클라우드 컴퓨팅은 IT 관련된 기능들이 서비스 형태로 제공되는 컴퓨팅 스타일

사용자들은 지원하는 기술 인프라스트럭처에 대한 전문 지식이 없거나 제어할 줄 몰라도 인터넷으로부터 서비스 이용 가능]

-> 필요한 서버들을 그때 그때마다 생성하고, 클라우드 서비스 사업자가 이 자원에 대해서 관리를 해 주기 때문에 지식이나 경험이 없는 사용자도 대규모 서비스를 손쉽게 사용이 가능(가상머신)

-> 더 많은 종류의 IT 자원들(서버 / DB 등)을 선택만 하면 바로 생성이 가능


서비스 업체에서 관리를 해주기 때문에 안정적인 서비스를 운영 기대

-> 클라우드의 가장 큰 특징인 자동화와 단명성 부분을 이용하지 못하는 것(클라우드 서비스는 자동으로 리소스를 관리할 수 있도록 API 제


● 클라우드 자동화

[프로그램을 이용하여 언제든 서버를 만들거나 중지/삭제가 가능.] 

ex) 사용자가 폭발적으로 늘어날 경우 새로운 컴퓨팅 리소스를 만들어 채워 넣음으로 서비스에 능동적으로 관리하며, 반대로 리소스가 필요 없을 경우 최소한의 리소스만 남겨 둠으로써 자원을 아낄 수 있음

-> 이전에는 간단한 스크립트 언어로 관리를 하였다면, 이제는 멀티 프로세스나 쓰레드(Thread)를 사용하고, 네트워크 프로그램을 사용해서 API를 사용할 정도의 실력이 필요


● 클라우드 단면성

[클라우드 공급자에 의해 서비스를 꺼버리거나 자연재해에 의해 파괴되어 문제가 발생 / 공급자에 의해 서비스가 좌지 우지 할 수 있음]

ex) 2012년 홍수로 인해 아마존의 데이터센터 중 하나가 작동 불능 상태

->클라우드에서 개발할 때에는 자신의 컴퓨팅 리소스가 사라질 수 있다는 것을 가정(IP/DNS 정보를 정적으로 지정은 피해야 함)

-> 내부적으로 코디네이터(Coordinator-동적)나 서비스 디스커버리(Discovery-정보를 찾는)를 중앙에 두고 

   다른 서버끼리는 이것을 통해 필요한 서버나 서비스의 정적인 정보를 조회


클라우드가 확장되면 될 수록 사용자의 개발 역량도 같이 향상이 되어야 하며, 그래야지 서비스가 커졌을때 규모 대비 적은 비용으로 유지가 가능


----------------------------------

#2

2014년 클라우드 현실


- 가트너의 신규 기술의 성쇠주기(2014)

hybrid cloud computing 과 cloud computing 에 대해 항목 표시

-> Cloud computing 은 사람들이 10년만에 클라우드라는 개념과 기술에 대해서 이해햐기 시작하였으며, 필요한 부분을 발견하기 시작함.

투자가 진행되었으며, 단적인 예로 가상머신에 대해 기피하지 않고 상용화가 되고 있는 수준에 이르렀음

또한, 이전과 달리 안정된 서비스에서 사용자의 요구사항의 변화에 능동적으로 대처하며 재빨리 수정하고 보완해서 제품을 변경하는 민첩성


이 높은 방식으로 개발을 진행 하고 있음


클라우드라는 개념과 관련 기술들이 인기를 다시 끌고 있는 것이라고 생각


----------------------------------

#3

클라우드에서는 빅데이터의 하둡 만큼 오픈스택이라는 유명한 솔루션이 있음.


SDN without SDN at daumkakao - Andrew 님이 진행한 세미나


https://www.openstack.org/summit/vancouver-2015/summit-videos/presentation/sdn-without-sdn-at-daumkakao


오픈스택 서밋에서 컨테이너 관련 세션이 가장 인기 있음.

멀티테넌시(multi-tenancy) : 하나의 서버에 여러 명의 사용자(Tenanter?테넌트)가 사용할 수 있도록 해주는 개념

하나의 물리자원을 가상자원으로 나누어서 사용하여 리소스 사용량을 극대화 시킬 수 있는 개념 -> 가원 격리(resource isolation)

다른 사용자가 실행시킨 프로세스에 영향을 받지 않고 자신의 프로세스를 사용 가능

대부부분의 클라우드 서비스와 솔루션들이 이를 위해서 가상화를 사용

가상이지만 완전히 물리 서버와 동일한 느낌을 주는 프로그램과 기술을 사용

(클라우드 기술 = 가상화 기술이라고도 함)


네임 스페이스(namespace) - 자원 격리 기술의 새로운 통칭[표준화](컨테이너 기술)

코드를 작성할 때 중복되는 이름들을 막거나, 해당 모듈이나 패키지에서만 변수들의 이름을 검색하도록 정의 한 것을 컴퓨팅 자원 사용에도 


적용

이 기술을 사용해서 가상화 없이도 사용자 프로세스를 격리 시켜서 사용 가능

ex) 구글에서 가장 먼저 사용 (보그-borg라는 이름으로 사용하다가 쿠버네티스(kubernetes)라는 이름으로 오픈소스화)


컨네이너 목적

- 리소스 관리의 표준화

1. 컴퓨팅 리소스의 표준화 - 서버를 추가하는 것이 아닌 표준으로 구분된 인스턴스를 추가 요청

2. 모니터링의 표준화 - 서로의 목적에 따라 모니터링이 아닌 표준화 되고 단일화 된 형태로 처리




반응형

'Cloud' 카테고리의 다른 글

[Cloud] Andrew 의 Cloud 정리-2  (0) 2016.01.15
반응형





난 도대체 뭘 선택 해야 할까...

오라클을 계속 공부하고 싶은데...다시 새로운 DB를 공부를 해야될까...


돈을 쫒아서 가야 될까...아니면 조금 더 기다려야 되는 걸까...


내가 추구해야하는 게 무엇일까...


다시 한번 큰 갈림길에 서 있다....

반응형

'Life' 카테고리의 다른 글

누군가에게 제안하기 전에..  (0) 2016.07.01
블로그의 의미  (0) 2016.03.14
2016 병신년 늦은 새해 인사  (0) 2016.01.06
즐거운 여름휴가 (1)  (0) 2015.08.05
처음은 아니지만 블로그의 시작  (1) 2015.07.31
반응형

MS Server 에서 Oracle 로 마이그레이션 테스트가 필요하여

직접 진행해 봤다.


Oracle 10g의 경우 현재 최신 버전의 SQL Developer로는 테스트가 되지 않았다.


이유는 저장소를 생성하며 에러가 발생하는 부분인데, 스크립트상 11g 에서만 호환이 되는 부분이라 예상이 되어,

10g는 Sql developer 를 하위 버전으로 진행(3.XX Version) 하였으며 정상적으로 되는 부분을 테스트 하였다.


이 부분을 문서로 만들었으며, 또한 블로그에도 공개하는 바이다.

많은 테스트를 통해서 추가적으로 업데이트를 할 예정이다.(문서상으로 진행하며, 블로그는 최종적으로 올릴까 한다)


많이 참고하시기 바라며, 혹시라도 문의 사항이나 추가 사항이 있으면 댓글 부탁 드립니다.

(이미지는 PDF 파일로 다운받아 보시면 됩니다.)


MS SQL to Oracle using SQL Developer_초안.pdf



MS SQL to Oracle using SQL Developer

By. Louis Kim.

1. 목적

- MS SQL 의 데이터를 Oracle 로 Migration

- 10g 및 11g 테스트 진행 / MS SQL Server 2008 R2

2. 테스트 장비 및 Tool Version

- 10.2.0.5 / sqldeveloper64-3.0.04.34-no-jre

- 11.2.0.4 / sqldeveloper-4.1.3

3. SQL Developer 환경셋팅 (모든 SQL developer 버전 동일)

- SQL Developer 에서 MS SQL 로 접속하기 위해서 JDBC 드라이버 추가 필요

- jtds-1.3.1-dist.zip (http://sourceforge.net/projects/jtds/) 파일을 다운 받아서 압축풀기

- sql developer -> 도구 -> 환경설정 -> 데이터베이스-> 타사 JDBC 드라이버 -> 항목 추가 (압축 푼 Jar 파일 등록)

 

 

4. Oracle 접속 및 MS SQL 접속

Oracle 권한은 가급적 DBA 권한을 부여하여 진행 (Migration 작업 시 오류 발생하며, 제대로 작업이 진행되지 않음)

- 2개의 DB에 모두 동시에 접속이 가능

- MS SQL Server 접속

  

- Oracle 접속

 

- 접속 확인

 

 

5. 저장소 생성(Repository)

- Migration 하기 전에 저장소를 반드시 생성

- 저장소는 메타 데이터를 수집 및 변화를 해주는 작업을 해주는 곳

The Migrations Repository is a database schema that stores the meta_data collected and transformed in the migration process.

- 저장소 생성(저장소는 Oracle 에서 생성)

저장소를 생성할 신규 유저(DBA권한을 보유한 유저)로 진행

CREATE USER MIG_USER IDENTIFIED BY MIG_USER DEFAULT TABLESPACE USERS;

GRANT CONNECT, RESOURCE, DBA TO MIG_USER;

생성한 유저(MIG_USER) 로 접속한 후 저장소 생성

도구[탭] -> 이전 -> 저장소 관리 -> 저장소 생성

저장소 생성 시 해당 접속 정보(11g_MIG_USER)로 생성

 

 

 

6. Migration 진행

6-1. MS Server To Oracle 11g

A. Migration 하려는 MS sql 데이터 베이스를 우클릭 하여 [Oracle 이전]을 선택

 

B. [이전 마법사] 대로 진행

 

저장소의 경우 앞에서 진행하면서 생성한 저장소를 선택


이름 및 폴더 디렉토리를 지정(Log가 저장)

로그 폴더에 Migration script가 생성 및 저장


온라인으로 진행 시 현재 MSSQL DB의 내용을 가져오게 되며, 오프라인으로 진행 시 Dump파일을 이용하여 MSSQL DB의 내용을 가져오게 된다. (MSSQL 의 dump는 *.ocp 파일을 선택)


데이터 Type을 정할 때 기준으로 삼는 데이터베이스 선택

Data type을 확인 후 변경이 필요할 경우 변경


참고) 블로그1

DATETIME -> TIMESTAMP(6) 에서 DATETIME -> DATE 로

BIGINT -> NUMBER(10,0) 에서 BIGINT -> NUMBER(19,0)



변환할 Object들을 선택


온라인으로 하는 경우 Oracle에 스크립트가 생성

오프라인으로 설정할 경우 생성 스크립트가 설정한 디렉토리에 저장


온라인으로 진행하는 경우 Oracle에 데이터가 자동으로 저장

오프라인으로 하는 경우 저장소에서 만든 경로에 스크립트가 생성



마지막으로 확인 및 진행


완료

 

확인(User 생성 여부)

 

Table 및 객체 생성 확인

 

 - Migration 이 완료 되면 우측과 같이 저장소에 해당 내역이 저장되어 있는 것을 확인 가능

 - Oracle 에서는 Mig 라는 유저가 생성되어 생성된 유저로 MS SQL 의 정보들이 migration 이 된 것을 확인





6-2. MS Server To Oracle 10g

10g와 동일한 방법으로 진행 하되, 다음과 같은 버전으로 진행(하위버전) sqldeveloper64-3.0.04.34-no-jre

7. 비고

A. 설정 시 문제 사항

요청한 작업을 수행하는 중 오류 발생:

I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.

위의 jtds-1.3.1-dist.zip 을 푼 파일에서 \jtds-1.3.1-dist\x64\SSO 내의 ntlmauth.dll 를 C:\Windows\System32 내에 붙여 넣은 후 종료 후 다시 실행하여 진행


SQL Developer 실행 시 "Unable to create an instance of the Java Virtual Machine error" 오류 발생 : "SQL Developer 설치 폴더"\ide\bin 폴더 내의 ide.conf 파일을 편집기로 열어서 다음과 같이 수정

AddVMOption -Xmx256M 

SQL Developer 실행 후 브라우저 창이 안 보이는 경우 : 윈도우 탐색기 옵션에서 "보호된 운영 체제 파일 숨기기"을 해제해야 하고 "숨김 파일 및 폴더 표시"을 설정

"C:\Users\사용자 계정명\AppData\Roaming" 폴더 내의 "SQL Developer" 폴더 삭제 후 다시 SQL Developer 실행


B. 추가 시 작성



반응형
반응형

DB 관련 튜닝을 공부하다 보면 쿼리 튜닝이 아닌 성능적으로 튜닝이 필요한 경우가 있다.

그럴때 마다 나오는 것이 PCTFREE / PCTUSED 다.


하지만 Block 관련된 core 부분을 대충 공부하고 넘어가면, 나처럼 정리된 것을 다시 한번 읽어 보는 경우가 생긴다.


그래서 정리한 나의 Text 문서들을 한번에 복사해서 정리해 봤다.


Block

- Block 단위로 작업 (Defualt 8K)






- DB_BLOCK_SIZE 파라미터는 Create Database 하면서 지정이 되며, Database를 재생성하기 전까지는 변경이 불가능(Standard block size)


- 혹시라도 DB_BLOCK_SIZE 외의 size로 지정하기 위해서는 Buffer Cache 에도 해당 Block size 만큼 공간을 미리 할당해 두어야 함(아니면 에러가 발생)


  ex) SQL> create tablespace test_4k datafile 'D:\ora_data\orcl\test_4k.dbf' size 5m blocksize 4k;

ERROR at line 1:

ORA-29339: tablespace block size 4096 does not match configured block sizes



SQL> alter system set db_4k_cache_size=10m; -> DB Cache에 미리 공간을 할당


Data block 구조


-- Block 정보에 대한 size 와 type 확인(Default)

select component, type, description, type_size 

from v$type_size

where component in ('KCB', 'KTB');



- Block Header



1. Transaction layer

A. Transaction layer-fixed

 - Block Type

 - 마지막으로 수행된 Block cleanout 시간

 - ITL Entries 정보

 - Free list link 정보

 - Free space lock 정보


  B. Transaction layer-variable

    - 24byte를 가짐

    - Block 에 있는 Row 를 변경하기를 원하는 실제 ITL 관련 정보 저장

      - ITL (Interested Transaction) 특정 Block 에 데이터를 변경해야 할 경우 해당 Block에 사용자 명단에 자신의 정보(TxID)를 적고 변경

        (사용하는 대기자 명단)

      - 가변성 으로써 기본으로 Table에 대한 1개 / Index에 대한 2개의 ITL 정보

      - 테이블이나 인덱스를 생성할 때 INITRANS 파라미터의 값을 변경하면 그 기본값을 변경할 수 있음

      

2. Cache layer

  - Data Block Address(DBA)

  - Block Type (ex- Table, Index, Undo..)

  - Block Format(v6, v7, v8...)

  - System Change Number(SCN: 복구 작업 등에 사용됨)


PCTFREE 와 PCTUSED


PCTFREE (Block의 Defualt 10%)

  - Block에 입력되어 있는 데이터들이 Update될 경우를 대비해 예약을 해 두는 공간(오직 Update)

  - update 했을 때 행의 크기 증가에 대비해 여유 공간을 만듦


PCTUSED (Block의 Defualt 40%)

- Block에서 row가 삭제되는 경우 Dirty List에 등록된(Free Block 에서 Dirty Block이 된) Block이, 

 Free Block 되는 상태까지 남은 용량이 얼마나 되는 지 결정하는 값

- Dirty Block이(block 들이 모여서) Free Block 의 상태까지 될 수 있는 값

  - PCTUSED 에 설정된 퍼센트 값만큼 남아서 Free space가 확보 되면 이 Block을 Free Block 으로 설정되어 Insert가 가능


※ PCTREE를 많이 주면 Update 가 많이 발생할 경우 좋지만 update가 자주 발생 안되면 비효율적인 공간이 됨


-----------------------------------------------------------------------------------------------

기본 pctfree 10 -> 5로 변경 (update 문이 적을 경우 괜찮을 듯..)


--기존 Table들에 대한 정보

select

   table_name, owner, pct_free, pct_used, num_rows

from

   dba_tables

where 

avg_row_len > 1

and 

avg_row_len < .5*&blksz

and

table_name not in

 (select table_name from dba_tab_columns b

   where

 data_type in ('RAW','LONG RAW','BLOB','CLOB','NCLOB')

 )

and owner not like '%SYS%'

order by 

   owner, 

   table_name

;


rem pctused.sql

set heading off;

set pages 9999;

set feedback off;


--보통 8k 기본(8192)

column db_block_size new_value blksz noprint

select value db_block_size from v$parameter where name='db_block_size';


define spare_rows = 2;


select

   ' alter table '||owner||'.'||table_name||

   ' pctused '||least(round(100-((&spare_rows*avg_row_len)/(&blksz/10))),95)||

   ' '||

   ' pctfree '||greatest(round((&spare_rows*avg_row_len)/(&blksz/10)),5)||

   ';'

from

   dba_tables

where 

avg_row_len > 1

and 

avg_row_len < .5*&blksz

and

table_name not in

 (select table_name from dba_tab_columns b

   where

 data_type in ('RAW','LONG RAW','BLOB','CLOB','NCLOB')

 )

and owner not like '%SYS%'  --SYS 관련 계정 제외

order by 

   owner, 

   table_name

;


Row

  1. Row Header(Overhead)

    - Row에 동시에 Transaction 을 일으키는 것을 막기 위한 Lock 정보 기록

    - Row piece에 들어있는 Column Data의 개수 기록

  2. Column Data

    - 실제로  Data가 저장되는 곳


Row Chaining

  - Block의 Column Data 부분에 모두 기록할 수 없을 경우, Row를 다른 Block 에 연결해서 저장

  - Row chaining 이 많이 일어나는 경우 Block 의 크기를 크게 해 주면 되지만 wait 현상이 많이 발생(Write complete waits, Buffer Busy Waits 등) 성능 저하 가능성

Row migration

  - 특정 Block에 위치하던 Row 가 update 등의 이유로 해당 Block 의 공간이 부족해서 다른 공간으로 이사를 가는 것을 의미

  - 해당 Block 에 빈 공간이 부족해서 일어나는 현상이므로 PCTFREE 값을 많이 주거나 테이블 재생성(Reorg) 작업을 통해 줄일 수 있음 

  - pctfree 가 큰 경우 update 가 많치 않을 경우 공간 비효율성 발생

※ I/O가 더 많이 일어나는 장점



참고 문서

 - "오라클 관리 실무" 책을 공부하면서 정리한 내용


사진 출처

http://hayleyfish.tistory.com/74

반응형
반응형

오전에 OS 담당자로부터 dump 관련하여 문제가 있어 보인다고..(단순히 이렇게 던짐...ㅎㄷㄷ)

하여 해당 DB dump 쪽을 모두 확인해 보았다.


당연히!!!alert log에는 어떠한 오류도 없었다!!!

(이럴 때는 자부심이..!!!!ORA- 떨어져 있으면 -_-!!!!!ㅎㅎ)


각설하고, 혹여나 udump 쪽을 확인했다. 예전에 누군가가 trace를 걸어놔서 그거 잡느라 고생했기에...

파일들이 엄청 많아서 확인했더니, 아래와 같은 것들이 있었다.




예전에도 bug로써 패치를 진행하면 해결이 된다고 찾아 봤기에 한번 더 확인해 보았다.


Bug 9772888 - Needless "WARNING:Could not lower the asynch I/O limit to .. for SQL direct I/O It is set to -1" messages (문서 ID 9772888.8)


역시나, 즐겨찾기가 되어 있어서 한눈에 찾아 볼 수 있었다.


일단 내용을 찾아보면 아래와 같다

Description


Trace files may be seen with warning of the form:

 WARNING:Could not lower the asynch I/O limit to 160 for SQL direct I/O. 

 It is set to -1 

 

This bug is specifically for the case of messages showing "It is set

to -1" in the message.

 

Workaround

Ignore the message - it is spurious and of no value.

The fix only hides the message so that it does not produce "noise"


ASYNCH I/O를 더 낮출 수 없다는 메시지인데, Asynch I/O는 아래와 같다.(발췌)

 Asynchronous I/O는 processes들이 write를 한 후에 기다리지 않고 바로 다음 작업을 수행할 수 있도록 해주는    Input/Output mechanism입니다.

   Asynchronous I/O는 불필요하게 낭비되는 idle time을 최소화해서 system 성능을 향상시켜 줍니다.

   DBWR는 각각의 I/O에 방해받지 않습니다.

[출처] http://shadou.tistory.com/entry/ASYNCIO%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%A7%88%EB%AC%B8%EB%93%A4


patch는 10.2.0.5.2 에서 되니 그 상위 버전으로 패치하면 될 듯 싶다.

현재는 psu가 전혀 안되어 있다.



이번 주 일요일에 작업 완료 후 다시 확인해서 리플로 결과를 공유 하겠습니다.


아래는 HP-UX 관련한 문서 번호이다. 필요 시 찾아보면 좋을 듯 싶다.

HP-UX: Asynchronous i/o (Doc ID 139272.1)


반응형

+ Recent posts