累積変数の差分値取得

(8.0.22)

drop procedure mystat1;
delimiter //
create procedure mystat1(in pS varchar(100), out pV integer)
begin
set pV := (select variable_value
from performance_schema.session_status
where variable_name = pS)
;
end//
delimiter ;


drop procedure mystat2;
delimiter //
create procedure mystat2(in pS varchar(100), in pV integer)
begin
select variable_value , format(variable_value - pV,0)
from performance_schema.session_status
where variable_name = pS
;
end//
delimiter ;


call mystat1('Innodb_os_log_written',@V);
insert into tab1 select * from tab1;
call mystat2('Innodb_os_log_written',@V);

call mystat1('Select_scan',@V);
insert into tab1 select * from tab1;
call mystat2('Select_scan',@V);

 

 

 

(19c)

vim mystat1.sql

set echo off
set verify off
column value new_val V
define S="&1"

select t1.name,t2.value
from v$statname t1
inner join v$mystat t2
on t1.statistic# = t2.statistic#
where t1.name = '&S'
;
set echo on

vim mystat2.sql

set echo off

select t1.name,t2.value,to_char(t2.value-&V,'999,999,999,999') diff
from v$statname t1
inner join v$mystat t2
on t1.statistic# = t2.statistic#
where t1.name = '&S'
;
set echo on


@mystat1 "redo size"
insert into tab1 select * from tab1;
@mystat2 "redo size"


@mystat1 "table scans (short tables)"
select count(*) from tab1;
@mystat2 "table scans (short tables)"

 

(13)


select heap_blks_read v
from pg_statio_user_tables
where schemaname='public'
and relname = 'tab1'
;
\gset


insert into tab1 select * from tab1;


select heap_blks_read ,to_char( heap_blks_read - :v,'FM999,999,999,999') diff
from pg_statio_user_tables
where schemaname='public'
and relname = 'tab1'
;

 

\gsetはプロシージャ内で使用できない

 

(2019)


create or alter procedure mystat1
as
begin
set nocount on;
declare @val bigint;
set @val = ( select logical_reads from sys.dm_exec_sessions where session_id = @@SPID );
exec sys.sp_set_session_context @key = N'key', @value = @val;
select session_context(N'key');
end
go


create or alter procedure mystat2
as
begin
set nocount on;
select logical_reads, replace(convert(varchar,convert(money,convert(int,(logical_reads - convert(bigint,session_context(N'key')))) ),1),'.00' , '')
from sys.dm_exec_sessions where session_id = @@SPID;
end
go

exec mystat1
go
select top 100000 * from tab1;
go
exec mystat2
go