スロークエリの出力対象

(5.6)

-- 確認事項
実行中のSQL、ロック待ちのSQL、ファンクション内部のSQL、エラーSQLがスロークエリに出力されるか


-- テスト準備
vim /etc/my.cnf
slow_query_log=1
slow_query_log_file="/var/lib/mysql/mmm050-slow.log"
long_query_time=0

sudo systemctl restart mysqld


drop table tab1;
create table tab1(col1 int);
create index ind1 on tab1(col1);
insert into tab1 values(1);

select * from tab1;

drop procedure proc1;

delimiter //
create procedure proc1()
begin
update /* test20200809_3 */ tab1 set col1 = col1 + 1;

end
//
delimiter ;

-- 確認
SET global innodb_lock_wait_timeout=1000000;
select @@innodb_lock_wait_timeout;

set session autocommit = 0;
select @@autocommit;


select /* test20200809_5 */ sleep(10);

lock table tab1 write;

lock table /* test20200809_1 */ tab1 read;

unlock tables;


call /* test20200809_2 */ proc1();

select /* test20200809_4 */ * from tab_not_exist;

tail -f /var/lib/mysql/mmm050-slow.log

-- 確認結果

実行中のSQL
→記録されない

ロック待ちのSQL
→記録されない

プロシージャ内部のSQL
→記録されない

エラーSQL
→記録される

 

 

(12cR1)

-- 確認事項
実行中のSQL、ロック待ちのSQL、ファンクション内部のSQL、エラーSQLがスロークエリに出力されるか


-- テスト準備

drop table tab1 purge;
create table tab1(col1 int);
create index ind1 on tab1(col1);
insert into tab1 values(1);
commit;
select * from tab1;

create or replace procedure proc1 as
begin
update /* test20200809_3 */ tab1 set col1 = col1 + 1;
commit;
end;
/


-- 確認
alter session set ddl_lock_timeout = 1000000;

execute /* test20200809_5 */ dbms_lock.sleep(10);


lock table tab1 in exclusive mode;

lock table /* test20200809_1 */ tab1 in share mode;

begin
dbms_workload_repository.create_snapshot();
end;
/

exec /* test20200809_2 */ proc1;

select /* test20200809_4 */ 1/0 from dual;

select SQL_ID,SQL_TEXT from v$sqlstats where sql_text like '%test20200809%';

select SQL_ID,SQL_TEXT from dba_hist_sqltext where sql_text like '%test20200809%';


-- 確認結果
実行中のSQL
→記録される

ロック待ちのSQL
→記録される

プロシージャ内部のSQL
→記録されない

エラーSQL
→記録される

 

(11)

-- 確認事項
実行中のSQL、ロック待ちのSQL、ファンクション内部のSQL、エラーSQLがスロークエリに出力されるか


-- テスト準備
vim postgresql.conf
log_min_duration_statement = 0;

sudo systemctl restart postgresql-11


drop table tab1;
create table tab1(col1 int);
create index ind1 on tab1(col1);
insert into tab1 values(1);

select * from tab1;

create or replace procedure proc1()
language plpgsql
as $$
begin
update -- test20200809_3
tab1 set col1 = col1 + 1;
end;
$$;

 

-- 確認
set lock_timeout = 1000000000;
show lock_timeout;
\set AUTOCOMMIT off
\echo :AUTOCOMMIT

select /* test20200809_5 */ pg_sleep(10);

lock table tab1 in access exclusive mode;

lock table /* test20200809_1 */ tab1 in access share mode;


call /* test20200809_2 */ proc1();

select /* test20200809_4 */ 1/0;

tail -f postgresql-Sun.log

-- 確認結果
実行中のSQL
→記録されない

ロック待ちのSQL
→記録されない

プロシージャ内部のSQL
→記録されない

エラーSQL
→記録される

 

(2014)

-- 確認事項
実行中のSQL、ロック待ちのSQL、ファンクション内部のSQL、エラーSQLがスロークエリに出力されるか


-- テスト準備

drop table tab1;
create table tab1(col1 int);
create index ind1 on tab1(col1);
insert into tab1 values(1);

select * from tab1;


drop procedure proc1;
go
create procedure proc1
as
begin
update /* test20200809_3 */ tab1 set col1 = col1 + 1;end
go


-- 確認
drop procedure proc2;
go
create procedure proc2
as
begin
declare @i integer;
set @i = 1;
while @i <= 10000000
begin
insert into tab1 values(@i);
set @i = @i + 1;
end
end;
go

exec /* test20200809_5 */ proc2;


set lock_timeout 1000000000;
select @@lock_timeout;

set implicit_transactions on;

DECLARE @IMPLICIT_TRANSACTIONS VARCHAR(3) = 'OFF';
IF ( (2 & @@OPTIONS) = 2 ) SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;

 

select * from tab1 WITH (XLOCK,TABLOCK);

update /* test20200809_1 */ tab1 set col1 = col1 + 1;


exec /* test20200809_2 */ proc1;

select /* test20200809_4 */ 1/0;

select SQL_ID,SQL_TEXT from v$sqlstats where sql_text like '%test20200809%';


DBCC FREEPROCCACHE;

select B.text,A.last_execution_time,A.execution_count,A.sql_handle
from sys.dm_exec_query_stats A
cross apply sys.dm_exec_sql_text(sql_handle) B
where B.text like '%test20200809%';


-- 確認結果
実行中のSQL
→記録されない

ロック待ちのSQL
→記録されない

プロシージャ内部のSQL
→記録される

エラーSQL
→記録されない