ORACLE TPS
1. ORACLE TPS
A.
TPS 정의
TPS (Transactions
per Second) is a metric used to measure or benchmark database performance.
orafaq에 위와 같이 정의되어있다. TPS 라는
이니셜을 보아서는 항상 SECOND 값을 사용해야 할 것 같이 보이지만 FREE LISTS 의 경우에는 글제목에 NUMBER OF
TRANSACTIONS PER MINUTE /HOUR 라는 단어를 사용하기도 했다.
2. TPS 조회쿼리
A. TPS 조회 쿼리(from FreeList)
select
round(sum(s.value / (86400 * (SYSDATE - startup_time))),3)
"TPS"
from
v$sysstat s
,v$instance i
where s.NAME in ('user
commits','transaction rollbacks') /
위의 쿼리를 보면 V$INSTANCE 와 V$SYSSTAT을 사용한다. (from FREELIST)
V$INSTANCE 는 DB의 STARTUP 시간 정보를 가지고오기 위해 사용한다. STARTUP 시간을 가져와 DB가 시작된 이래의 시간정보를 구해
해당 시간을 가지고 단위 TRANSACTION 을 구한다.
Tx(TRANSACTION
대신 사용하겠다.) 의 종료는 COMMIT 혹은
ROLLBACK 으로 이루어진다. 때문에
V$SYSSTAT 에서 위와같이 NAME 이 user
commits, transaction rollbacks 를 사용하였다.
B.
TPS 조회 쿼리 (자작)
위의 쿼리는 DB 가 시작된 시점을 가지고 산출한 값으로 DB에 일량이 한참 많을 때 나오는 값과는 차이가 있다. 이러한 값을
구하고 싶을 때 사용할 쿼리를 만들어보았다.
col name for
a20
col value for
9999999999
set
serveroutput on
var
l_new_tps_value number;
var
l_old_tps_value number;
var l_new_time
varchar2(20);
var l_old_time
varchar2(20);
begin
select
sum(value),to_char(systimestamp,'sssss.ff')
into :l_new_tps_value,:l_new_time from
v$sysstat
where name in ('user commits','user
rollbacks');
dbms_output.put_line('Time :
'||to_number(:l_new_time - :l_old_time)||' sec');
dbms_output.put_line('Sigma:
'||to_number(:l_new_tps_value - :l_old_tps_value));
dbms_output.put_line('Delta:
'||round(to_number(:l_new_tps_value -
:l_old_tps_value)/nvl(to_number(:l_new_time - :l_old_time),1)));
:l_old_tps_value := :l_new_tps_value;
:l_old_time := :l_new_time;
end;
/
위의 쿼리에서는 현재와 과거의 값을 가지고 DELTA 값을
구했다. 다시 말해 쿼리를 수행 후 다시 수행 ( / ) 을
했을 때 그 시간 간격과 변화한 STAT 값을 가지고 구했다.
3. 글을 마치며
A.
인터넷을 뒤지면서도 Tx의 종료가
USER COMMIT, USER ROLLBACK 이란 문장이 확실히 나온 것을 보지 못했다. 추후 /*+ TPS 를 구하기 위해 사용하는 지표… 그리고 시간간격에 있어 현재와 과거 어느시점을 가지고 구해야 하는지 */ 에 대해 명확하지 않았다.