生活的内容不全是工作,工作只是生活的一部分;享受生活,热爱工作!
分类: Sybase
2014-11-17 18:13:28
IQ 15之前的版本就提供了SQL Trace功能,即通过相应设置后IQ可以把用户发出的SQL语句写入到Server端相应日志文件中;然后可以通过相应工具对这个日志文件进行分析,得到SQL语句执行时间、执行次数等信息;通过分析这些信息,可以找到需要优化的SQL语句。
IQ 15改变了SQL Trace log文件的格式,并且提供了新的存储过程工具sa_get_request_profile和sa_get_request_times用于读取日志文件,把SQL语句执行情况的汇总信息和详细信息分别存放在相应的临时表中,satmp_request_profile表用于存放汇总信息,satmp_request_time表用于存放详细信息。用户可以使用标准的select语句对SQL语句执行情况的信息进行灵活的查询和分析。
功能具有DBA权限的用户执行如下存储过程可以打开SQL Trace功能:
call sa_server_option('request_level_logging', 'ALL');
call sa_server_option('request_level_log_file','sqltrace.log');
注意:使用上述方式打开sql trace之后,形成的sqltrace.log文件与.db文件所在目录相同。sql trace打开之后,所有用户的请求都会记录到日志文件中,如果用户有大量SQL请求,文件会增长较快,需要注意相应文件系统有较多的剩余空间。sqltrace.log文件名和存放的目录位置可以根据需要进行设置:
call sa_server_option('request_level_log_file','/sybiq/trace/mysqltrace.log')
功能grant execute on sa_get_request_profile to username
grant execute on sa_get_request_times to username
功能执行以下命令:
call sa_server_option('request_level_log_file','');
call sa_server_option('request_level_logging','NONE');
抓取的日志分析的步骤如下:
1、执行存储过程读取SQL Trace log文件
call sa_get_request_profile('sqltrace.log');
call sa_get_request_times('sqltrace.log');
2、执行select查询,分析语句执行情况
select * from satmp_request_profile
where prefix like '%select%' or prefix like '%from%'
select start_time,conn_id,millisecs,stmt from satmp_request_time
where (stmt like '%from%' or stmt like '%FROM%') and stmt not like '%count(*%' and stmt not like '%sysobject%' order by millisecs desc