暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gbase8s sqltrace跟踪记录保存

原创 嘿嘿嘿 2024-03-20
239

01.创建监控数据库

create database mon_sqltrace in datadbs01 with log;

02.开启sqltrace监控需要的数据库

execute function sysadmin:task('set sql tracing off'); --关闭sql跟踪
execute function sysadmin:task('set sql tracing on','25000','4k','high','global'); --打开sql跟踪,保留25000条sql,sql最大大小为4k,跟踪等级为high,监控所有用户
execute function sysadmin:task('set sql tracing database add','gbasedb'); --添加需要监控的数据库
execute function sysadmin:task('set sql tracing database add','itpux'); --添加需要监控的数据库
--execute function sysadmin:task('set sql tracing database remove','itpux');--删除不需要监控的数据库
execute function sysadmin:task('set sql tracing database list'); --显示监控sql跟踪中的数据库
execute function sysadmin:task('set sql tracing info'); --显示sql跟踪信息

03.创建存储过程将数据同步到监控库对应的表中

--drop procedure mon_sqltrace:proc_sqltrace_mon;
create procedure mon_sqltrace:proc_sqltrace_mon() define v_sql_id int;
select max(sql_id) into v_sql_id from mon_sqltrace:syssqltrace;
if v_sql_id is null then let v_sql_id = 0; end if;
insert into mon_sqltrace:syssqltrace select * from sysmaster:syssqltrace where sql_id > v_sql_id;
insert into mon_sqltrace:syssqltrace_hvar select * from sysmaster:syssqltrace_hvar where sql_id > v_sql_id;
insert into mon_sqltrace:syssqltrace_iter select * from sysmaster:syssqltrace_iter where sql_id > v_sql_id;
end procedure;

04.创建sqltrace相关表

create table mon_sqltrace:syssqltrace as select * from sysmaster:syssqltrace;
create index idx_mon_syssqltrace_id on mon_sqltrace:syssqltrace(sql_id);
create table mon_sqltrace:syssqltrace_hvar as select * from sysmaster:syssqltrace_hvar;
--create table mon_sqltrace:syssqltrace_info as select * from sysmaster:syssqltrace_info where 1= 0;
create table mon_sqltrace:syssqltrace_iter as select * from sysmaster:syssqltrace_iter;

--truncate table mon_sqltrace:syssqltrace;
--truncate table mon_sqltrace:syssqltrace_hvar;
--truncate table mon_sqltrace:syssqltrace_iter;

05.执行存储过程测试

call mon_sqltrace:proc_sqltrace_mon();

06.查看监控库表对应数据

select count(*) from mon_sqltrace:syssqltrace;
select count(*) from sysmaster:syssqltrace;
select count(*) from mon_sqltrace:syssqltrace_hvar;
select count(*) from sysmaster:syssqltrace_hvar;
select count(*) from mon_sqltrace:syssqltrace_iter;
select count(*) from sysmaster:syssqltrace_iter;

07.简单数据查看

select sql_statement sql语句,count(sql_executions) 执行总次数,sum(sql_maxtime) 执行总时间,max(sql_maxtime) 执行最长时间,dbinfo('utc_to_datetime',max(sql_finishtime)) 最后完成时间
from mon_sqltrace:syssqltrace group by sql_statement order by 4 desc;

08.设置计划任务定时取数据到监控库对应表

insert into sysadmin:ph_task(
tk_name,
tk_description,
tk_type,
tk_group,
tk_dbs,
tk_execute,
tk_start_time,
tk_stop_time,
tk_frequency
)
values("sqltrce insert",
"Insert data",
"TASK",
"TABLES",
"mon_sqltrace",
"call proc_sqltrace_mon()",
DATETIME(00:00:00) HOUR TO SECOND,
DATETIME(23:59:59) HOUR TO SECOND,
INTERVAL (3) MINUTE TO MINUTE  --每三分钟执行一次
);

09.注意

1.数据库重启后,再次打开sqltrace跟踪,sql_id会从1开始重新记录,上述存储过程中会取mon_sqltrace库中的syssqltrace表的最大sql_id,所以需要注意历史记录问题;

2.创建计任务后如果没有正常执行,首先确认数据库安装目录/opt/gbase/etc/sysadmin目录下是否存在stop文件,如果存在计划任务不会执行,将stop文件改名后重启数据库再次观察,开sysadmin需要注意rootdbs数据空间的大小,以免撑满整个数据文件。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论