Tibero DB 대기 이벤트

Tibero Database에서 발생하는 대기 이벤트 정보에 대하여 설명합니다.

V$SYSTEM_EVENT

Tibero는 서버 프로세스와 백그라운드 프로세스들이 일을 처리하는 과정에서 발생하는 대기 현상들을 측정하기 위 해 여러가지 대기 이벤트들을 정의하고 프로세스들이 일을 진행하다가 대기 이벤트가 발생할 때마다 횟수와 대기 시간을 내부에 저장합니다.

v$system_event는 인스턴스 기동 후 현재까지 누적된 이벤트 발생 현황을 시스템 레벨로 확인할 때 사용합니다.

개별 세션별로 누적치를 확인하려면 v$session_event를 조회하고 세션 레벨에서 현재 진행 중 이거나 바로 직전에 발생했던 이벤트 정보를 보여주는 View 는 v$session_wait 입니다.

Single DB

다음은 Single DB 쿼리 작성 예입니다.

SELECT  name,
        total_waits,
        time_waited/1000000 "time_waited", 
        average_wait/1000000 "average_wait", 
        total_timeouts
FROM v$system_event 
WHERE Total_waits>0
ORDER BY time_waited DESC;

결과는 아래와 같습니다.

NAME           TOTAL_WAITS     time_waited     average_wait    TOTAL_TIMEOUTS
----------     ------------    -----------     ------------    --------------
WE_CONN_IDLE            739	2.113803       .0028603560	         0
WE_DBWR_IDLE	       3458	 .681122	 .00019697            3450
WE_NTF_SNDR_IDLE        334	 .342805        .001026362             334			
WE_NMON_IDLE	        334	 .342702	.001026054             334
WE_TASK_MGR_IDLE        337	 .342536	.001016427             334			
WE_TPM_COLLECTOR_IDLE	334	 .342449	.001025296             334			
WE_LGWR_SLAVE	        119	  .34013    	.002858235               0
WE_LGWR_IDLE	        119	 .339966	.002856857             112			
WE_RSRC_IDLE	        112	  .33824	    .00302             112
WE_ACTM_IDLE	         33	 .337832	.010237333              33			
WE_TPM_SENDER_IDLE       11	 .332167	   .030197              11
WE_LARC_IDLE	         12	 .332117	.027676417              11			
WE_CKPT_IDLE            309	 .315669	.001021583             307
WE_WTHR_RECV	         22	 .207194	.009417909               0			
WE_BG_READY              17	 .016937	.000996294               0
WE_SPIN_SHP_ALLOC_SLAB	209	 .007554	.000036144               0
WE_WTHR_READY	         17	 .004178	.000245765               0			
WE_RECO_IDLE	          2	 .003147	  .0015735               0
WE_JOB_SCHED_IDLE	  3	 .003115	.001038333               3			
WE_RECO_REQ               1	 .002164	   .002164               0	
WE_JC_BUF_DISK_READ     939	  .00143       . 000001523               0			
WE_BUF_WAIT              16	  .00017	.000010625               0	
WE_JC_LGWR_AIO_SUBMIT_REQUEST 8  .000153	.000019125               0
WE_SPIN_SHP_ALLOC_MISC	306	 .000117	.000000382               0			
WE_LOG_FLUSH_COMMIT	  6	 .000048	   .000008               0
WE_JC_BUF_DISK_READM	  6	 .000007	.000001167               0			
WE_RECO_REPLY             2	 .000003	  .0000015               0	
WE_LOG_FLUSH_REQ	  1	       0	         0               0			
WE_SPIN_BUF_BUCKET      238	       0	         0               0	
WE_SPIN_SHP_ALLOC_LC	  1	       0	         0               0			
WE_SPIN_SHP_ALLOC_DD      2	       0	         0               0	
WE_SPIN_ALLOC_LRU	  1	       0	         0               0			

각 항목에 대한 설명은 아래의 “TAC DB” 내용을 참고합니다.

TAC DB

다음은 TAC DB 쿼리 작성 예입니다.

SELECT  inst_id,
        name, total_waits, 
        time_waited/1000000 "time_waited", 
        average_wait/1000000 "average_wait", 
        total_timeouts
FROM gv$system_event
WHERE Total_waits>0
ORDER BY inst_id, time_waited DESC ;

결과는 아래와 같습니다.

INST_ID    NAME                        TOTAL_WAITS   time_waited        average_wait    TOTAL_TIMEOUTS 
-------    -------------------       ------------- --------------    ------------    ---------------
1	        WE_ACF_CMPT		      1902	5.854036        .003077832	        0
1		WE_CONN_IDLE		       522	1.556958	.002982678		0
1		WE_ACF_ATH		       720	 .499886	.000694286		0
1		WE_ACF_GC		       462	 .473068	.001023957	      462
1		WE_DBWR_IDLE		      2497	  .46998	.000188218	     2477
1		WE_NMON_IDLE		       232	  .23756	.001023966	      232
1		WE_NTF_SNDR_IDLE	       232	 .237513	.001023763	      232
1		WE_TPM_COLLECTOR_IDLE	       232	 .237505	.001023728	      232
1		WE_TASK_MGR_IDLE	       234	 .236753	.001011765	      231
1		WE_ACF_RECONF		        49	 .235883	.004813939	       46
1		WE_ACTM_IDLE		        23	 .235396	.010234609	       23
1		WE_LGWR_IDLE		        94	 .235207	.002502202	       77
1		WE_LGWR_SLAVE		        95	 .235205	.002475842		0
1		WE_RSRC_IDLE		        78	  .23469	.003008846	       78
1		WE_CKPT_IDLE		       231	 .234052	.001013212	      229
1		WE_TPM_SENDER_IDLE	         7	 .211622	.030231714		7
1		WE_LARC_IDLE		         8	 .211508	  .0264385		7
1		WE_WTHR_RECV		         9	 .105829	.011758778		0
1		WE_BG_READY		        17	 .017796	.001046824		0
1		WE_JOB_SCHED_IDLE	         4	 .003438	  .0008595		3
1		WE_ACF_CRAS		         3	 .003133	.001044333		0
1		WE_ACF_RCF		        16	 .002916	 .00018225		0
1		WE_RECO_IDLE		         2	 .002708	   .001354	        0
1		WE_RECO_REQ		         1	 .002458	   .002458	        0
1		WE_ACF_MTX_RW		         1	  .00087	    .00087	        0
1		WE_CWS_AST		       386	 .000414	.000001073		0
1		WE_WTHR_READY		         9	 .000302	.000033556		0
1		WE_CCC_AST_CR		       330	 .000188	 .00000057		0
1	        WE_JC_BUF_DISK_READ	       306	 .000156	 .00000051	        0
1	        WE_CCC_AST_CUR    	       123	 .000054        .000000439	        0
1	        WE_SPIN_SHP_ALLOC_SLAB	       122	 .000047	.000000385	        0
1	        WE_CCC_AST_MBR	                13	 .000014	.000001077	        0
1	        WE_SPIN_SHP_ALLOC_MISC	       297	 .000011	.000000037	        0
1	        WE_ACF_GMC	                13	 .000011	.000000846	        0
1	        WE_GV_REPLY	                 8	  .00001	 .00000125	        0
1	        WE_LOG_FLUSH_COMMIT	        13	 .000009	.000000692	        0
1	        WE_CR_BUF_BUSY_LOCAL	        10	 .000007	  .0000007	        0
1	        WE_JC_BUF_DISK_READM	         4	 .000005	 .00000125	        0
1	        WE_BUF_WAIT	                 8	 .000005	.000000625	        0
1	        WE_RECO_REPLY	                 4	 .000005	 .00000125	        0
1	        WE_GV_REQ	                 3	 .000005	.000001667	        0
1	        WE_LOG_FLUSH_REQ	         1	 .000003	   .000003    	        0
1	        WE_JC_LGWR_AIO_SUBMIT_REQUEST	18	       0	         0	        0
1	        WE_SPIN_BUF_BUCKET	       675	       0	         0	        0

각 항목에 대한 설명은 다음과 같습니다.

항목

설명

INST_ID

Tibero 인스턴스 정보 (TAC DB 질의 쿼리)

TOTAL_WAITS

해당 이벤트가 호출된 총 횟수

time_waited

해당 이벤트에서 대기한 시간 (단위 : 초)

Average_wait

해당 이벤트에서 한번에 대기한 평균 시간 (단위 : 초)

Total_Timeout

해당 이벤트에 Timeout이 설정이 되어 있을 때 Timeout 발생 횟수

주요 이벤트는 아래와 같습니다.

이벤트

설명

WE_SEQ_WRITEBACK

Agent가 Seq를 Writeback할 때까지 기다리는 이벤트

WE_SEQ_FREESLOT

Seq_Buffer_의 Free Slot이 없을 때까지 기다리는 이벤트

WE_SEQ_NEXTVAL

Agent가 New Value를 Cache에 올릴 때까지 기다리는 이벤트

WE_BUF_WAIT

Buf Pin을 위해 기다리는 이벤트

WE_BUF_WRITE

Buf Write까지 기다리는 이벤트

WE_BUF_FREE

Free Buf가 생길 때까지 기다리는 이벤트

WE_MBR_WAIT

MBR이 끝날 때까지 기다리는 이벤트

WE_SEQ_FLUSH

Seq alba가 Cache Flush를 마칠 때까지 기다리는 이벤트

WE_WTHR_READY

WTHR Ready까지 기다리는 이벤트

WE_LGWR_ARCHIVE

LGWR Process가 Archive 완료할 때까지 기다리는 이벤트

WE_LGWR_LNW

LGWR Process가 네트워크를 통해 로그를 쓸 때까지 기다리는 이벤트

WE_LOG_FLUSH

Log Flush 할 때까지 기다리는 이벤트

WE_LOG_FLUSH_SPACE

공간이 부족해서 Log Flush할 때까지 기다리는 이벤트

WE_LOG_FLUSH_REQ

Log Flush를 요청해서 기다리는 이벤트

WE_CKPT_WAIT

Checkpoint를 기다리는 이벤트

WE_PROC_DOWN

Shutdown Finish되는 경우 발생하는 이벤트

WE_WTHR_START

WTHR가 시작되기 위해서 메시지를 받을 때까지 기다리는 이벤트

WE_WTHR_MSG

WTHR가 클라이언트의 MSG를 기다리는 이벤트

WE_ACF_SCVR

SCVR(scavenger)에서 CCC/CWS RSB(Resource Block)를 reclaim 요청 받을 때 까지 기다리는 이벤트

만약 reclaim 요청이 없더라도 주기적 (_ACF_SCVR_TIMEOUT(기본값 : 1초))으로 깨어나서 reclaim을 수행

WE_ACF_AST

WTHR가 AST(asynchronous system trap)인 경우 이벤트

Waiting은 실제 수행되는 작업의 성능을 저하하므로 가장 많이 발생하는 대기 이벤트를 중점적으로 해결하고 각 대 기 이벤트의 종류에 따라 Waiting이 많이 발생하는 이벤트를 해결합니다. 또한 모든 wlock 관련 정보는 대기 이벤트로 나타나므로 wlock Contention을 알아보는데 사용할 수 있습니다.

예제

다음은 여러 세션이 특정 Block에 지속적으로 업데이트를 하면서 동시에 계속 Commit을 수행하고 있을 때WE_LOG_FLUSH_COMMIT 이벤트가 많이 발생하는 예입니다.

V$session_wait 쿼리를 조회해 보면 다음과 같습니다.

[그림 1] V$session_wait 수행 결과

[그림 1] V$session_wait 수행 결과

V$system_event 수행결과를 통해 해당 이벤트가 255471번 호출된 것을 아래와 같이 확인할 수 있습니다.

[그림2] V$system_event 수행 결과

[그림2] V$system_event 수행 결과

Commit 횟수를 줄이면 WE_LOG_FLUSH_COMMIT 이벤트가 호출된 횟수 또는 Waiting한 시간이 크게 개선된 것을 확인할 수 있습니다.

[그림3] WE_LOG_FLUSH_COMMIT 개선 효과

[그림3] WE_LOG_FLUSH_COMMIT 개선 효과

WE_LOG_FLUSH_COMMIT 이벤트가 줄어든 만큼 Hot Block의 경합으로 인해 WE_BUF_WAIT 이벤트가 발생하는 것을 확인할 수 있습니다. WE_BUF_WAIT는 Buffer Pinning을 위해 대기하는 이벤트로 동일 Block에 대해 업데이트를 하기 때문에 발생하는 이벤트입니다.


V$SYSSTAT

인스턴스 기동 후 현재까지 누적된 수행 통계치를 시스템 레벨로 확인할 때 사용하는 View가 v$sysstat 이고 개별 세션별로 확인할 때 사용하는 View가 v$sesstat 입니다. 또한 현재 접속해 있는 본인 세션에 대한 수행 통계는 v$mystat을 통해 확인이 가능합니다.

Single DB

다음은 Single DB 쿼리 작성 예입니다.

SELECT *
FROM v$sysstat
order by value desc;

결과값은 아래와 같습니다.

STAT#   NAME                                      CLASS              VALUE
-----   ------------------------------------    ----------    ------------
 1687	req service time			        7	2299456122
 1692	SQL processing time			        4	2296995825
 8827	Inner SQL processing time		        4	2205272006
 6757	SQL execute elapsed time		        4	2194635979
 9687	cursor fetch time in SQL process		7	2190428869
 2567	csr fetch select time		                4	1914352565
 1632	transactions total time		                7	 397179327
 1712	csr fetch update time		                4	 278915574
 6392	DML update time		                        4	 272191133
 6427	update pick current block time		        4	 268970800
 8152	After inner SQL processing time		        4	  89187498
 3947	reply message plus log flush waiting time	4	  85357794
 3762	reply msg processing time for sql		4	  84360096
  617	redo wait time for flush time		        1	  83489590
 3752	log flush waiting time		                4	  80705939
  622	redo write time		                        2	  75552684
10872	submit lgwr aio request time		       16	  69949301
 4492	DB CPU time		                        7	  59192955
  596	redo log size		                        1	  27065213
 1681	sent message size (byte)		        4	  22649208
 7552	dbwr aio slave bitq read time		        7	  10726440
 9607	preparing cursor fetch	time in	SQL process	7	   8348468
 6742	parse time elapsed				4	   6370379
 1682	sent message time				4	   5483956
 9682	executor tree generation time in SQL process	7	   5372611
 3942	table full scan time		        	4	   4633794
 3757	write reply message time(syscall)	        4	   4190447
 4412	profile check time	                        7	   3488971
 9797	cursor close all time	                        4	   3160322
 3792	cursor close time	                        4	   2871394
  146	candidate bh scanned buffers	                7	   2856728
 6747	hard parse elapsed time	                        4	   2702998
  292	dbwr	write	time - OS	                2	   2106676
  297	dbwr	write	time	                        7	   2051949
 9847	dbwr	write	suspend time	                7	   1946449
 4422	Total times to update session login/logout time	7	   1759645
 6402	table single update time		        4	   1699029
 6522	ppc search time		                        4	   1658335
 8147	Before inner SQL processing time		4	   1574051
  145	candidate bh scanned		                7	   1565170
 2037	optimizer time		                        4	   1564116
 8021	logical reads		                       17	   1547617

각 항목에 대한 설명은 아래의 "TAC DB" 내용을 참고합니다.

TAC DB

다음은 TAC DB 쿼리 작성 예입니다.

SELECT *
FROM gv$sysstat
order by inst_id, value desc;

결과값은 아래와 같습니다.

INST_ID STAT#   NAME                                         CLASS        VALUE
------- ------  ------------------------------------------   -------  ----------
1	2527	Total Times sleeps to wait acf task ready       5      21164597
1	7116	INC messages received size		        5	4622210
1	7121	INC packets received size	                5	4622210
1	6742	parse time elapsed		                4	1483226
1	6747	hard parse elapsed time		                4	1477528
1	7141	INC packets sent size		                5	 963718
1	7136	INC messages sent size		                5	 799709
1	2037	optimizer time		                        4	 797031
1	2472	Total Times sleeps to wait ctx sync		5	 713767
1	  32	block disk read time		               17	 605534
1	6847	optimizer loading statistics time		4	 595535
1	4842	dd search time		                        4	 574467
1	4847	dd search - load time		                4	 560479
1	3292	optimizer dynamic sampling time	        	4	 502320
1	8002	current block received RTT		        5	 486245
1	1632	transactions total time		                7	 473131
1	3297	optimizer dynamic sampling block read time	4	 442447
1	 622	redo write time		                        2	 354457
1	2547	Total Round Trip Times to grant lock		5	 342502
1	 297	dbwr write time		                        7	 324160
1	 292	dbwr write time - OS		                2	 322394
1	9847	dbwr write suspend time		                7	 319952
1	7552	dbwr aio slave bitq read time		        7	 312180
1	5827	current block received RTT:data block		5	 301297
1	4532	isgmt get cr time	                        3	 255159
1	7742	INC messages passed to CMPT - time	        5	 252813
1	6892	INC messages sent without block time	        5	 243157
1	4527	dsgmt get cr time	                        4	 242525
1	4537	isgmt get cr in lvl time	                3	 240762
1	4217	Total CR blocked time by CUR request	        5	 234883
1	4507	tdi fetch start time	                        3	 221763
1	4897	Total Round Trip Times to grant wait-lock	5	 200031
1	6757	SQL execute elapsed time	                4	 197059
1	4412	profile check time	                        7	 171434
1	4427	total times to begin tx	                        7	 161552
1	2567	csr fetch select time	                        4	 150829
1	4442	total times to get undo	block and apply	        7	 150210
1	4447	total times to get undo	block	                7	 148789
1	7782    Total Times sleeps to wait WRCF status	        5	 122150
1	5837	current block received RTT:index leaf block	5	  90114
1	7772	Total Times sleeps to wait CRCF status        	5	  83969
1	 617	redo wait time for flush time	                1	  79085
1	7137	INC messages sent time	                        5	  79046
1	7752	INC messages sent from send queue - time	5	  75017
1	8857	INC messages received by batch - time	        5	  57922
1	9632	PSM SQL processing time	for cursor open	        7	  52662
1	9662	PSM SQL processing time				7	  52642
1	1687	req service time				7	  51710
1	1692	SQL processing time				4	  51695
1	8827	Inner SQL processing time		        4	  51336
1	9767	stat load query soft parse time elapsed	        4	  50949
1	9752	stat load query hard parse elapsed time	        4	  49593
1	7767	Total Times to process CCC message	        5	  41603
1	 596	redo log size			                1	  39491
1	5822    current block received RTT:segment header       5         36180
1	6762    PSM execution elapsed time                      0         35483
1      11097    index scan time                                 4         35305

각 항목에 대한 설명은 다음과 같습니다.

항목

설명

INST_ID

Tibero 인스턴스 정보 (TAC DB 질의 쿼리)

STAT#

Stat 번호.

NAME

Stat 이름.

VALUE

Stat 값

v$sysstat와 v$sesstat에 나타나는 값들은 인스턴스 기동 후 또는 세션 수립 후 현재까지 누적된 값이므로 그 값의 크고 작음으로 의미있는 정보를 얻기 어렵습니다.

이를 제대로 활용하는 방법은 두 구간 사이의 변화량을 구해 SQL 수행 도중에 내부적으로 어떤 일들이 발생했는지 판명하는 것입니다.


Spin Lock Contention

TSM(Tibero Shared Memory)의 모든 Spin Lock에 대한 적중률을 확인합니다.

Single DB

다음은 Single DB 쿼리 작성 예입니다.

SELECT  name "Name",
        SUM(fast_cnt + try_get_cnt) as "Gets",
        SUM(spin_cnt + sleep_cnt + try_fail_cnt) as "Misses", 
        SUM(sleep_cnt) as "Sleeps",
        round((1 - (SUM(spin_cnt + sleep_cnt + try_fail_cnt) /
             SUM(fast_cnt + spin_cnt + sleep_cnt + try_get_cnt + try_fail_cnt))) * 100, 3) 
             as "Hit Ratio"
FROM _vt_spinlock
GROUP BY type,
        pin_level, 
        name
HAVING SUM(fast_cnt + try_get_cnt) > 0
ORDER BY 4 DESC,
        2 DESC;

결과는 아래와 같습니다.

Name                            Gets        Misses        Sleeps  Hit Ratio
---------------------------    ---------    ----------    -------- ---------
SPIN_SHP_ALLOC_SLAB		  3927		49		2    98.768
SPIN_BUF_BUCKET		        206134		58		1    99.972
SPIN_LC_BUCKET		         51315		 1		1    99.998
SPIN_SHP_ALLOC_MISC		  9636		60		1    99.381
SPIN_ROOT_ALLOC		          7419		 9		1    99.879
SPIN_BUF_WS		        189376		 0		0	100
SPIN_BUF_WS_CKPT		174230		 0		0	100
SPIN_ALLOC		         45179		15		0    99.967
SPIN_SQLSTATS		         24092		 1		0    99.996
SPIN_RECR_UNPIN		         16527		 0		0	100
SPIN_BITQ		         16014		 0		0       100
SPIN_L1CL		         11200		 0		0	100
SPIN_PARAM		          5012		16		0    99.682
SPIN_DD_CACHE_BUCKET		  4594		14		0    99.696
SPIN_WLOCK		          4194		28		0    99.337
SPIN_SESS_CSR_POOL		  3065		 0		0	100
SPIN_ENABLED_ROLES		  2061		 0		0	100
SPIN_DBWR_AIOQ		          1449		 0		0	100
SPIN_SLAB_ALLOC		          1371		 0		0	100
SPIN_ALLOC_LRU		          1064		 0		0	100
SPIN_PP_QSTAT            	   791	         1	        0    99.874
SPIN_FD_BUCKET	                   704	         0	        0	100
SPIN_GLOBAL_MEM_MGR	           551	         0	        0	100
SPIN_SC_ALLOC	                   547	         0	        0	100
SPIN_FIXED_SYS_MEM_INFO        	   527	         0	        0	100
SPIN_SHP_ALLOC_DD	           405	         0	        0	100
SPIN_SESS_TSAM_HNDL_POOL	   405	         0	        0	100
SPIN_SESS_LTIME            	   384	         0	        0	100
SPIN_CF	                           368	         0	        0	100
SPIN_REDO_ALLOC	                   337	         0	        0	100
SPIN_IMCS_PARAM	                   336	         0	        0	100
SPIN_GV_PARAM	                   336	         0	        0	100
SPIN_REDO_COPY	                   264	         0	        0	100
SPIN_WTHR_READY	                   240	         0	        0	100
SPIN_CKPT_PROGRESS	           166	         0	        0	100
SPIN_SHP_ALLOC_LC	           142	         0	        0	100
SPIN_CL_CONN	                   122	         0	        0	100
SPIN_USGMT_HASH	                   122	         0	        0	100
SPIN_PROC_MEM_MGR	           116	         0	        0	100
SPIN_TSGMT_LIST	                   116	         0	        0	100
SPIN_SESS_SERIAL_NO	           114	         7	        0    94.215
RW_SYSCTX	                   112	         0	        0	100
SPIN_ALERT	                   112	         0	        0	100
SPIN_PE_SESS	                   112	         0	        0	100
SPIN_MAIO_POOL	                   112	         0	        0	100
SPIN_TEMP_TS_ID	                   110	         0	        0	100
SPIN_LISTENER	                   107	         0	        0	100
SPIN_SERVER	                   107	         0	        0	100
SPIN_IMCS_REQ_LIST	            96	         0	        0	100
SPIN_TSN_TIME_MAP	            95	         1	        0    98.958
SPIN_DBWR_IOSLOT	            80	         0	        0	100
SPIN_FDPOOL	                    53	         0	        0	100
SPIN_ASH_CSR_READ	            53	         0	        0	100
SPIN_DBWR_LOW	                    52	         0	        0	100
SPIN_DBWR_IR_STATUS	            50	         0	        0	100
SPIN_PP_EXPCN_LIST	            48	         0	        0	100
SPIN_PPID	                    48	         0	        0	100
SPIN_XA_VTI	                    39	         0	        0	100
SPIN_SVRMODE_ACK	            36	         0	        0	100
SPIN_BUF_GLOBAL_RECOQ	            29	         0	        0	100
SPIN_REDO_WRITING	            26	         0	        0	100
SPIN_USGMT_CACHE	            25	         0	        0	100
SPIN_XQC	                    20	         0	        0	100
SPIN_LGWR_AIO_REQ	            16	         0	        0	100
SPIN_DML_STAT_BUCKET	            15	         0	        0	100
SPIN_TXR	                    14	         0	        0	100
SPIN_BUDDY_ALLOC	            13	         0	        0	100
SPIN_ALLOC_POOL	                    12	         0	        0	100
SPIN_MSG_LIST	                    10	         0	        0	100
SPIN_SHP_ALLOC_SUPER	             9	         0	        0	100
SPIN_TX	                             9	         0	        0	100
SPIN_SHUTDOWN	                     8	         0	        0	100
SPIN_PEP	                     6	         0	        0	100
SPIN_TEMP_UNIT_POOL	             4	         0	        0	100
SPIN_BUF_FREE_WAIT	             2	         0	        0	100
SPIN_LOGNET_WRITE	             1	         0	        0	100

각 항목에 대한 설명은 아래의 “TAC DB” 내용을 참고합니다.

TAC DB

다음은 TAC DB 쿼리 작성 예입니다.

SELECT  INST_ID,
        name "Name",
        SUM(fast_cnt + try_get_cnt) as "Gets",
        SUM(spin_cnt + sleep_cnt + try_fail_cnt) as "Misses", 
        SUM(sleep_cnt) as "Sleeps",
        round((1 - (SUM(spin_cnt + sleep_cnt + try_fail_cnt)
                / SUM(fast_cnt + spin_cnt + sleep_cnt + try_get_cnt + try_fail_cnt)))
                * 100, 3) as "Hit Ratio" 
FROM _gvt_spinlock
GROUP BY INST_ID,
      type, 
      spin_level, 
      name
HAVING SUM(fast_cnt + try_get_cnt) > 0
ORDER BY 2,
      5 DESC,
      3 DESC;

결과는 아래와 같습니다.

INST_ID   Name                        Gets       Misses  Sleeps    Hit Ratio
-------   --------------------------  --------   -------  ------  ------------

1	  SPIN_SHP_ALLOC_SLAB	       3927	  49	     2	     98.768
1	  SPIN_BUF_BUCKET	     206134	  58	     1	     99.972
1	  SPIN_LC_BUCKET	      51315	   1	     1	     99.998
1	  SPIN_SHP_ALLOC_MISC	       9636	  60	     1	     99.381
1	  SPIN_ROOT_ALLOC	       7419	   9	     1	     99.879
1	  SPIN_BUF_WS		     189376	   0	     0		100
1	  SPIN_BUF_WS_CKPT	     174230	   0	     0		100
1	  SPIN_ALLOC		      45179	  15	     0	     99.967
1	  SPIN_SQLSTATS		      24092	   1	     0	     99.996
1	  SPIN_RECR_UNPIN	      16527	   0	     0		100
1	  SPIN_BITQ		      16014	   0	     0		100
1	  SPIN_L1CL		      11200	   0	     0		100
1         SPIN_PARAM		       5012	  16	     0	     99.682
1	  SPIN_DD_CACHE_BUCKET	       4594	  14	     0	     99.696
1	  SPIN_WLOCK		       4194	  28	     0	     99.337
1	  SPIN_SESS_CSR_POOL	       3065	   0	     0	        100
1	  SPIN_ENABLED_ROLES	       2061	   0	     0	        100
1	  SPIN_DBWR_AIOQ	       1449	   0	     0	        100
1	  SPIN_SLAB_ALLOC	       1371	   0	     0	        100
1	  SPIN_ALLOC_LRU	       1064	   0	     0	        100
1	  SPIN_PP_QSTAT	                791	   1	     0	     99.874
1	  SPIN_FD_BUCKET	        704	   0	     0	        100
1	  SPIN_GLOBAL_MEM_MGR	        551	   0	     0	        100
1	  SPIN_SC_ALLOC	                547	   0	     0	        100    
1	  SPIN_FIXED_SYS_MEM_INFO	527	   0	     0	        100
1	  SPIN_SHP_ALLOC_DD	        405	   0	     0	        100
1	  SPIN_SESS_TSAM_HNDL_POOL	405	   0	     0	        100
1	  SPIN_SESS_LTIME	        384	   0	     0	        100
1	  SPIN_CF	                368	   0	     0	        100
1	  SPIN_REDO_ALLOC	        337	   0	     0	        100
1	  SPIN_IMCS_PARAM            	336	   0	     0	        100
1	  SPIN_GV_PARAM	                336	   0	     0	        100
1	  SPIN_REDO_COPY	        264	   0	     0	        100
1	  SPIN_WTHR_READY	        240        0         0          100
1	  SPIN_CKPT_PROGRESS	        166	   0	     0	        100
1	  SPIN_SHP_ALLOC_LC	        142	   0	     0	        100
1	  SPIN_CL_CONN	                122	   0	     0	        100
1	  SPIN_USGMT_HASH	        122	   0	     0	        100
1	  SPIN_PROC_MEM_MGR	        116	   0	     0	        100
1	  SPIN_TSGMT_LIST	        116	   0	     0	        100
1	  SPIN_SESS_SERIAL_NO	        114	   7	     0	     94.215
1	  RW_SYSCTX	                112	   0	     0	        100
1	  SPIN_ALERT	                112	   0	     0	        100
1	  SPIN_PE_SESS	                112	   0	     0	        100
1	  SPIN_MAIO_POOL	        112	   0	     0	        100
1	  SPIN_TEMP_TS_ID	        110	   0	     0	        100
1	  SPIN_LISTENER	                107	   0	     0	        100
1	  SPIN_SERVER	                107	   0	     0	        100
1	  SPIN_IMCS_REQ_LIST	         96	   0	     0	        100
1	  SPIN_TSN_TIME_MAP	         95	   1	     0	     98.958
1	  SPIN_DBWR_IOSLOT	         80	   0	     0	        100
1	  SPIN_FDPOOL	                 53	   0	     0	        100
1	  SPIN_ASH_CSR_READ	         53	   0	     0	        100
1	  SPIN_DBWR_LOW	                 52	   0	     0	        100
1	  SPIN_DBWR_IR_STATUS	         50	   0	     0	        100
1	  SPIN_PP_EXPCN_LIST	         48	   0	     0	        100
1	  SPIN_PPID	                 48	   0	     0	        100
1	  SPIN_XA_VTI	                 39	   0	     0	        100
1	  SPIN_SVRMODE_ACK	         36	   0	     0	        100
1	  SPIN_BUF_GLOBAL_RECOQ	         29	   0	     0	        100
1	  SPIN_REDO_WRITING	         26	   0	     0	        100
1	  SPIN_USGMT_CACHE	         25	   0	     0	        100
1	  SPIN_XQC	                 20	   0	     0	        100
1	  SPIN_LGWR_AIO_REQ	         16	   0	     0	        100
1	  SPIN_DML_STAT_BUCKET	         15	   0	     0	        100
1	  SPIN_TXR	                 14	   0	     0	        100
1	  SPIN_BUDDY_ALLOC	         13	   0	     0	        100
1	  SPIN_ALLOC_POOL	         12	   0	     0	        100
1	  SPIN_MSG_LIST            	 10	   0	     0	        100
1	  SPIN_SHP_ALLOC_SUPER	          9	   0	     0	        100
1	  SPIN_TX	                  9	   0	     0	        100
1	  SPIN_SHUTDOWN	                  8	   0	     0	        100
1	  SPIN_PEP	                  6	   0	     0	        100
1	  SPIN_TEMP_UNIT_POOL	          4	   0	     0	        100
1	  SPIN_BUF_FREE_WAIT	          2	   0	     0	        100
1	  SPIN_LOGNET_WRITE	          1	   0	     0	        100

각 항목에 대한 설명은 다음과 같습니다.

항목

설명

INST_ID

Tibero 인스턴스 정보 (TAC DB 질의 쿼리)

NAME

Spin Lock의 종류

Gets

최초 시도에서 Spin Lock 획득을 요청한 경우 값을 Gets값을 1씩 증가

Misses

최초 시도에서 Spin Lock 획득에 실패한 경우 Misses값을 1씩 증가

Sleeps

슬립 상태에 빠질때마다 1씩 증가

Hit Ratio

적중률

Willing-to-Wait 모드에서의 Latch 획득 성공과 실패에 대한 통계값은 v$latch View를 통해 조회합니다. Gets(I), Misses(I) 항목은 각각 Gets(또는 Immediate gets)와 Misses(또는 Immediate misses)값을 의미하며 Gets와 Immediate gets 가운데 큰 값을 보여줍니다.

Gets가 Willing-to-Wait 모드로 요청된 경우 Immediate gets는 No-Wait 모드로 요청됩니다. Willing-to-Wait 모드는 Spin Lock 획득에 실패하는 경우 Spin과 Sleep을 하면서 획득에 성공할 때까지 재시도를 하고, No-Wait 모드는 원하는 Spin Lock 획득에 실패하는 경우 해당 Latch를 위해 Wait하지 않으므로 기본적으로 Willing-to-Wait 모드를 사용한다는 것은 Spin Lock을 획득할 때까지 대기한다는 의미입니다.


Spin Lock 모니터링

Spin Lock의 Contention에 대한 정보를 확인합니다.

Single DB

다음은 Single DB 쿼리 작성 예입니다.

SELECT  name,
        gets, 
        misses, 
        spin_gets, 
        sleeps,
        decode(gets,0,0,trunc((1-misses/(misses+gets))*100,2)) "Hit Ratio", 
        wait_time,
        round(ratio_to_report(wait_time)over()*100,2) "WAIT_TIME(%)" 
FROM v$latch
ORDER BY 7 desc,
      3 desc ;

결과는 아래와 같습니다.

NAME                 GETS         MISSES     SPIN_GETS     SLEEPS     Hit Ratio     WAIT_TIME  WAIT_TIME(%)
-------------------  -----------  ---------  ------------  ---------- ------------- ---------  -------------
SPIN_ALLOC	       2310004	       877	    863	       14	  99.96    12072          20.63
SPIN_BITQ	       1112055	        19	     19	        0	  99.99    10357	   17.7					
SPIN_SHP_ALLOC_SLAB	  4022	        35	     28	        7	  99.13     7335	  12.53
SPIN_LC_BUCKET	       3840144	         0	      0	        0	    100     7036	  12.02
SPIN_TSN_TIME_MAP	  7172	        58	      6	       52	  99.19     5443	    9.3
SPIN_SHP_ALLOC_MISC	127549	      3018	   2996	       22	  97.68     5138	   8.78
SPIN_PARAM	         64866	       655	    645	       10	     99     2475	   4.23					
SPIN_DD_CACHE_BUCKET	 30799	       461	    453	        8	  98.52     1591	   2.72
SPIN_L1CL	        812300	       412	    407	        5	  99.94     1110	    1.9					
SPIN_SESS_CSR_POOL	162123	         3	      2	        1	  99.99     1089	   1.86
SPIN_BUF_BUCKET	        483194	       340	    340	        0	  99.92      816	   1.39	
SPIN_CF                   7845      	 0	      0	        0	    100      784	   1.34
SPIN_WLOCK		153143	       780	    777	        3	  99.49      759	    1.3					
SPIN_BUF_WS_CKPT	347369	         0	      0	        0	    100      628	   1.07
SPIN_DBWR_AIOQ	        107097	         0	      0	        0	    100      524	     .9
SPIN_BUF_WS	        344857	         0	      0	        0	    100      518	    .89
SPIN_CKPT_PROGRESS	 11743	         3	      3	        0	  99.97      344	    .59
SPIN_REDO_ALLOC	          4536	         2	      0	        2	  99.95      121	    .21				
RW_SYSCTX	          8123	         0	      0	        0	    100       79	    .13
SPIN_REDO_WRITING	  1336	         0	      0	        0	    100       40	    .07				
SPIN_CL_CONN	          8272           0	      0	        0	    100       40	    .07	
SPIN_USGMT_CACHE	   287	         1	      0	        1	  99.65       31	    .05				
SPIN_ENABLED_ROLES	 65255       	 0	      0	        0	    100       29	    .05
SPIN_DBWR_LOW	          3665	         0	      0	        0	    100       27	    .05				
SPIN_DBWR_IR_STATUS	  3651           0	      0	        0	    100       23	    .04	
SPIN_SLAB_ALLOC	          3294	         1	      1	        0	  99.96       14	    .02
SPIN_SQLSTATS	         94656	         0	      0	        0	    100       14	    .02				
SPIN_GV_PARAM	         24431	         0	      0	        0	    100       13	    .02
SPIN_PP_QSTAT	         24753	         0	      0	        0	    100       12	    .02				
SPIN_IMCS_REQ_LIST	  7168           0	      0    	0	    100       12	    .02	
SPIN_SERVER	          8118	         0	      0	        0	    100       11	    .02				
SPIN_SESS_LTIME	         28672           0	      0	        0	    100       10	    .02	
SPIN_MAIO_POOL	          8123	         0	      0	        0	    100        7	    .01
SPIN_ALERT	          8123	         1	      1	        0	  99.98        5	    .01				
SPIN_LISTENER	          8117	         0	      0	        0	    100        5	    .01
SPIN_ROOT_ALLOC	          9140	         0	      0	        0	    100        2	      0				
SPIN_PPID	           141           0	      0	        0	    100        2	      0	
SPIN_SVRMODE_ACK	    36	         2	      2	        0	  94.73        1	      0				
SPIN_FIXED_SYS_MEM_INFO	   527           0	      0	        0	    100        1	      0	
SPIN_PROC_MEM_MGR	   414	         0	      0	        0	    100        1	      0				
SPIN_BUF_FREE_WAIT	    15           0	      0	        0	    100        1	      0	
SPIN_TXR	           753	         0	      0	        0	    100        1	      0
SPIN_SHP_ALLOC_LC          452           0	      0	        0	    100        1	      0
SPIN_BUF_GLOBAL_RECOQ	  2154           0	      0	        0	    100        1	      0
SPIN_MSG_LIST		   102           0	      0	        0	    100        1	      0
SPIN_USGMT_HASH            411           0	      0	        0	    100        1	      0
SPIN_SESS_SERIAL_NO	  8132	       239	    239	        0	  97.14        0	      0					
SPIN_ALLOC_LRU		 21470	         1	      1	        0	  99.99        0	      0					
SPIN_TEST1B                  0	         0	      0	        0	     0	       0	      0
SPIN_TEST1A	             0	         0	      0	        0	     0	       0	      0					
SPIN_TEST1                   0	         0	      0	        0	     0	       0	      0
SPIN_REDO_COPY		     0	         0	      0	        0	     0	       0	      0				

각 항목에 대한 설명은 다음의 "TAC DB" 내용을 참고합니다.

TAC DB

다음은 TAC DB 쿼리 작성 예입니다.

SELECT inst_id,
       name, 
       gets, 
       misses, 
       spin_gets, 
       sleeps,
       decode(gets,0,0,trunc((1-misses/(misses+gets))*100,2)) "Hit Ratio", 
       wait_time,
       round(ratio_to_report(wait_time)over()*100,2) "WT(%)" 
FROM gv$latch
ORDER BY 1 asc,
      8 desc,
      4 desc;

결과는 아래와 같습니다.

INST_ID  NAME                   GETS MISSES  SPIN_GETS    SLEEPS   Hit Ratio    WAIT_TIME    WT(%)
-------  --------------------- ------ ------ ---------  ---------  ----------   -----------  --------
1	SPIN_CWS_RSB		 6091	130    80	       50	97.91	110322	     65.15
1	SPIN_ALLOC	       135601	264   261	        3	 99.8	 12052	      7.12	
1	SPIN_ROOT_ALLOC	         4365	  5     0	        5	99.88	 12026	       7.1
1	SPIN_SHP_ALLOC_SLAB	 3888	 25    23	        2	99.36	  2319	      1.37
1	SPIN_BUF_WS		80234	 12    10	        2	99.98	   786	       .46	
1	SPIN_BITQ		72616	  3	3	        0	99.99	   532	       .31	
1	SPIN_SHP_ALLOC_MISC     10902	477   476	        1	 95.8	   439	       .26	
1	SPIN_BUF_BUCKET	       142547	501   501	        0	99.64	   280	       .17	
1	SPIN_WLOCK	        14999	141   140	        1	99.06	   140	       .08	
1	SPIN_LC_BUCKET	       212034	  1	1	        0	99.99	   120	       .07
1	SPIN_DD_CACHE_BUCKET	 7999	109   109	        0	98.65	   111	       .07	
1	SPIN_CWS_RSBTBL	         4221	112   112	        0	97.41	    91	       .05
1	SPIN_CCC_RSB		 5415	 11	9	        2	99.79	    83	       .05	
1	SPIN_PARAM		 8316	243   243	        0	97.16	    80	       .05	
1	SPIN_CCC_RSBTBL	       113351	 11    11	        0	99.99	    47	       .03	
1	SPIN_DBWR_AIOQ		 5998	  0	0	        0	  100	    21	       .01	
1	SPIN_GMC_HANDLE	          228	  0	0	        0	  100	    16	       .01
1	SPIN_SQLSTATS		13903	  0	0	        0	  100	     5	         0	
1	SPIN_L1CL		47948	  0	0	        0	  100	     5	         0
1	SPIN_CCC_RECL_WS	 3147	  6	6	        0	 99.8	     4	         0	
1	SPIN_SHP_ALLOC_DD	  712	  3	3	        0	99.58	     3	         0	
1	SPIN_GV_PARAM		 1428	  1	1	        0	99.93	     2	         0	
1	SPIN_TSN_TIME_MAP	  386	  0	0	        0	  100	     2	         0	
1	SPIN_ACF_MTX_RW	         2220	  0	0	        0	  100	     2	         0	
1	SPIN_ACF_RCF		  246	  0	0	        0	  100	     2	         0 	
1	SPIN_RECR_UNPIN	         5795	  0	0	        0	  100	     2 	         0	
1	SPIN_CWS_RECL_WS	  842	  2	2	        0	99.76	     1	         0
1	SPIN_SVRMODE_ACK	   39	  1	1	        0	 97.5	     1	         0	
1	SPIN_CF			 1080	  0	0	        0	  100	     1	         0
1	SPIN_CKPT_PROGRESS	  699	  0	0	        0	  100	     1	         0	
1	SPIN_ACF_NMGR		  188	  0	0	        0	  100	     1	         0	
1	SPIN_SESS_SERIAL_NO	  468	 89    89	        0	84.02	     0	         0	
1	SPIN_CWS_LCB		16880	 40    40	        0	99.76	     0	         0
1	SPIN_MAIO		    0	  0	0	        0	    0	     0	         0	
1	SPIN_CCC_LKBTBL	         2675	  0	0	        0	  100	     0	         0	
1	SPIN_ACF_TIMEOUT	 3408	  0	0	        0	  100	     0	         0
1	SPIN_CWS_LKBTBL	         1321	  0	0	        0	  100	     0	         0	
1	SPIN_TXR		   55	  0	0	        0	  100	     0	         0
1	SPIN_TEST3		    0	  0	0	        0	    0        0	         0
1	SPIN_USGMT_CACHE	  107	  0	0	        0	  100	     0	         0	
1	SPIN_PPID		   66	  0	0	        0	  100	     0	         0	
1	SPIN_BUF_GLOBAL_RECOQ	  116	  0	0	        0	  100	     0	         0	
1	SPIN_CCC_CRAS		    0	  0	0	        0	    0	     0 	         0
1	SPIN_REDO_COPY		    0	  0	0	        0	    0	     0           0	
1	SPIN_MAIO_POOL		  459	  0	0	        0	  100	     0	         0
1	SPIN_USGMT_HASH	          309	  0	0	        0	  100	     0	         0 	
1	SPIN_PP_EXPCN_LIST	   66	  0	0	        0	  100	     0	         0	
1	SPIN_PPSTAT		    0	  0	0	        0	    0	     0	         0	
1	SPIN_RCMAP_BUCKET	    0	  0	0	        0	    0	     0	         0
1	SPIN_RCACHE		    0	  0	0	        0	    0	     0	         0 	
1	SPIN_TAS_DS		    0	  0	0	        0	    0	     0	         0
1	SPIN_SM_BUCKET		    0	  0	0	        0	    0	     0	         0	
1	SPIN_TEST1		    0	  0	0	        0	    0	     0	         0
1	SPIN_TEST1A		    0	  0	0	        0	    0	     0	         0	
1	SPIN_TEST1B		    0	  0	0	        0	    0	     0	         0
1	SPIN_BUF_FREE_WAIT	   10	  0	0	        0	  100	     0	         0	
1	SPIN_RCPOOL		    0	  0	0	        0	    0	     0	         0
1	SPIN_ACF_ATH_LOG_FLUSH_WAIT 0	  0	0	        0	    0	     0	         0
1	SPIN_WTHR_READY	          144	  0	0	        0         100	     0	         0	
1	SPIN_IICD		    0	  0	0	        0	    0	     0	         0
1	SPIN_TAS_NAME_HASH	    0	  0	0	        0	    0	     0	         0
1	SPIN_TAS_IOINFO	            0	  0	0	        0	    0	     0	         0
1	SPIN_RECR_LIST		    0	  0	0	        0	    0	     0	         0	
1	SPIN_SLAB_PEND		    0	  0	0	        0	    0	     0	         0
1	SPIN_TEST2		    0	  0	0	        0	    0	     0	         0	
1	SPIN_LOGNET_POOL	    3	  0	0	        0	  100	     0	         0	
1	SPIN_FB_COPY		    0	  0	0	        0	    0	     0		 0
1	SPIN_LOGNET_WRITE	    1	  0	0	        0	  100	     0	         0
1	SPIN_SHP_ALLOC		    0	  0	0	        0	    0	     0	         0
1	IN_SHP_ALLOC_LC	          214	  0	0	        0	  100	     0	         0	
1	SPIN_SHP_ALLOC_SUPER	   17	  0	0	        0	  100	     0	         0	

각 항목에 대한 설명은 다음과 같습니다.

항목

설명

INST_ID

Tibero 인스턴스 정보 (TAC DB 질의 쿼리)

NAME

Spin Lock의 종류

GETS

최초 시도에서 Spin Lock 획득을 요청한 경우 값을 Gets값을 1씩 증가

MISSES

최초 시도에서 Spin Lock 획득에 실패한 경우 Misses값을 1씩 증가

SPIN_GETS

Spin Lock을 잡을 때까지 실패한 횟수를 의미하며 실패할 경우 1씩 증가

SLEEPS

슬립 상태에 빠질때마다 1씩 증가

Hit Ratio

적중률

WAIT_TIME

Spin Lock을 기다린 총 슬립 시간

WT

WAIT_TIME을 백분율로 표현한 항목

다음은 Spin Lock Contention을 발생할 수 있는 파라미터에 대한 설명입니다.

Shared Pool

  • SPIN_SHP_ALLOC

관련 파라미터

_SHARED_POOL_ALLOC_CNT(기본값 : 1)

설명

Shared Pool를 여러 개로 쪼갤 수 있고 몇 개의 allocator로 나누어 관리할지를 결정한다. 최고 15까지 설정 가능하며 설정값이 클수록 Contention은 줄지만 메모리 사용 효율은 떨어 진다.

  • SPIN_ALLOC_LRU

관련 파라미터

_SHARED_POOL_LRU_PER_ALLOC(기본값 : 4)

설명

하나의 Shared Pool Allocator에서 사용할 LRU list 개수를 결정한다.

2^n 값으로 설정해야 성능 저하가 줄어들며 설정값이 클수록 Contention은 줄지만 메모리 사용 효율은 떨어진다.

SHARED_POOL_LRU_PER_ALLOC 설정 값을 늘려 LRU가 늘었음에도 Contention 이 높다면

SHARED_POOL_ALLOC_CNT 늘려준다.

하지만 SHARED_POOL_ALLOC_CNT의 경우 여유있는 Allocator가 있더라도 Full인 Allocator를 사용할 수 있다는 문제점이 있다.

두 개의 파라미터를 곱했을 때 LRU 개수가 총 16개까지 가능하며 최신 버전에서는 15개까지 설정 가능하다.

  • SPIN_RECR_HANDLE_POOL

관련 파라미터

_RECR_HANDLE_FREELIST_CNT(기본값 : 8)

설명

DD Cache와 라이브러리 Cache에서 사용하는 구조체의 Free List 개수를 설정한다.

DD와 라이브러리가 메모리에서 사라질 수 있기 때문에 Handle이라는 구조체를 사용하며 매번 생성은 오버헤드가 크기 때문에 Pool로 관리한다.

WLOCK

  • SPIN_WLOCK

관련 파라미터

_WLOCK_BUCKETSET_CNT(기본값 : 64)

_WLOCK_BUCKET_PER_SET(기본값 : 1)

설명

wlock을 찾을 때 사용할 Hash Bucket의 Bucketset 개수를 결정한다.

Bucketset 별로 Spin Lock이 있으므로 개수가 늘어날수록 Contention이 줄어들지만 Hash Table 이 커지므로 메모리 사용량이 늘어난다.

Spin Lock만 늘려준다면 해당 파라미터만 늘려주고 전체적으로 분산을 원한다면

_WLIST_FREELIST_CNT 파라미터값도 같이 늘려준다.

wlock을 찾을 때 사용할 Hash Bucket의 Bucketset 개수를 결정합니다.

Bucketset별로 Spin Lock이 있으므로 개수가 늘어날수록 Contention이 줄어들지만 Hash Table이 커지므로 메모리 사용량이 늘어납니다. Spin Lock만 늘려준다 면 해당 파라미터만 늘려주고 전체적으로 분산을 원한다면 _WLIST_FREELIST_CNT 파라미터값도 같이 늘려줍니다.

  • SPIN_WLIST_FREELIST

관련 파라미터

_WLIST_FREELIST_CNT(기본값 : 8)

설명

wlock 또는 Buffer Cache에서 사용하는 구조체 Pool에서 Freelist의 개수를 결정한다. 설정값은 2 ^ n 값을 권장한다.

Buffer Cache

  • SPIN_BUF_WS / SPIN_BUF_WS_CKPT

관련 파라미터

_DB_BLOCK_LRU_LATCHES(기본값 : cpu 개수 * 3)

설명

Buffer Cache에서 사용할 LRU의 개수로 Workingset 값을 결정한다

  • SPIN_BUF_BUCKET

관련 파라미터

_DB_BLOCK_HASH_BUCKETS(기본값 : 131091)

_DB_BLOCK_HASH_LATCHES(기본값 : 131091)

설명

  • _DB_BLOCK_HASH_BUCKETS 파라미터 설정으로 Buffer Cache에서 특정 Buffer 를 찾을 때 사용할 Hash Bucket 개수를 결정한다.

  • _DB_BLOCK_HASH_LATCHES 파라미터 설정으로 Buffer Cache에서 사용하는 Hash에서 사 용할 Latch 개수를 결정한다.

Contention이 심하면 BUCKETS와 LATCHES값을 같게 할 수 있으나 Bucket마다 Latch가 있게 되어 메모리 효율은 떨어지게 된다.

Redo

  • SPIN_REDO_COPY

관련 파라미터

_LOG_SIMULTANEOUS_COPIES(기본값 : cpu 개수 * 2)

설명

Redo 버퍼에서 동시에 Copy 하는 트랜잭션의 개수를 설정한다.

Undo

  • SPIN_USGMT_HASH

관련 파라미 터

_USGMT_HASH_CNT(기본값 : 32)

설명

Undo 세그먼트의 Spin Lock Hash Bucket 수를 설정한다.

Spin Lock Hash Bucket 수를 늘려도 메모리를 많이 사용하지 않으므로 최소 64로 설정하는 것을 권장한다.

DD Cache

  • SPIN_DD_CACHE_BUCKET

관련 파라미터

_DD_BUCKETSET_CNT(기본값 : 16)

_DD_BUCKET_PER_SET(기본값 : 64)

설명

wlock과 거의 동일하게 Hash Bucket과 Bucketset의 개수를 결정한다.

PP Cache

  • SPIN_PPC_BUCKET

관련 파라미터

_PPC_BUCKET_CNT(기본값 : 1)

설명

wlock과 거의 동일하게 Hash Bucket 개수를 결정한다

Temp

  • SPIN_TEMP_UNIT_POOL_TF Temp 파일당 하나의 Spin Lock이 할당되며 여러 세션에서 Temp Tablespace를 사용할 경우 발생합니다. 해당 Spin Lock Contention이 비정상적으로 높을 경우 Temp Tablespace에 Temp 파일을 여러 개 추가하여 해결합니다.

Last updated