我想知道是否有办法查看在Informix上执行的查询
如果我使用onstat -g sql
,它只显示SQL语句类型(如果是insert或select)。但是我希望看到完整的查询文本,例如select * from table
可以使用SQL Server Profiler在SQL Server上执行此操作。
答案 0 :(得分:9)
onstat -g sql
和-g ses
将为您提供在会话中解析的当前和最后一个语句以及完整语句+主机变量(到当前语句)。
如果你有快速的语句运行,肯定你会错过很多。
以下是一个例子:
$ onstat -g sql 170
IBM Informix Dynamic Server Version 11.70.FC6 -- On-Line -- Up 13:39:50 -- 529332 Kbytes
Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers Explain
170 SELECT sysmaster CR Not Wait 0 0 9.24 Off
Current statement name : slctcur
Current SQL statement (3) :
select t.tabname, c.colno, c.colname from systables t, syscolumns c
where t.tabid = c.tabid order by 1,2
Last parsed SQL statement :
select t.tabname, c.colno, c.colname from systables t, syscolumns c
where t.tabid = c.tabid order by 1,2
如果您希望获得所有语句的执行历史记录,那么最好的方法就是使用' SQL TRACE'资源。哪个版本仅在版本11之后可用。
此跟踪使您可以将在instance / database / user / session执行的所有语句保存到旋转缓冲区中(当它们填充时,开始覆盖它自己)。
您可以使用命令onstat -g his
或查询表sysmaster:syssqltrace
来观看此跟踪。
以下是SQL TRACE
的IBM手册参考只是分享,这是我的" swissknife"启用和追踪某人...... 我只需更改一些参数,评论/取消我需要的内容并使用informix执行。 之后我开始用onstat / choose ...监视缓冲区。
select sysadmin:task('set sql tracing off') as sql from sysmaster:sysdual
union all select sysadmin:task("set sql user tracing off") from sysmaster:sysdual -- USER mode
union all select sysadmin:task("set sql user tracing clear") from sysmaster:sysdual -- USER mode
union all select sysadmin:task('set sql tracing user clear') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing database clear') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing session', 'clear') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing info') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing database list') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing user list') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing session list') from sysmaster:sysdual
--union all select sysadmin:task('set sql tracing database add','testdb') from sysmaster:sysdual
union all select sysadmin:task('set sql tracing user add','aviana') from sysmaster:sysdual
--union all select sysadmin:task('set sql tracing session','on', sid) from sysmaster:syssessions where username = 'cinacio' and (sid in (0) or pid in (0))
--union all select sysadmin:task('set sql user tracing on ', sid) from sysmaster:syssessions where username = 'cinacio' and (sid in (0) or pid in (0))
--union all select sysadmin:task('set sql user tracing on ', 354851) from sysmaster:sysdual
union all select sysadmin:task('set sql tracing on',150000,'4000b','high','user') from sysmaster:sysdual
;
还有其他选项可以即兴创作:
set explain
(informix特定声明)
此命令说服务器在文件中保存在会话中执行的所有sql语句,以及它们的优化信息等
可以由自己的会话启用(执行set explain on;
语句)或使用命令onmode -Y <options>
激活
作为参考,请查看IBM手册:explain,onmode 从这个IIUG线程中引用艺术:http://www.iiug.org/forums/ids/index.cgi/read/35708
SQL Power Tools - 来自SQL Power Tools,Inc, - http://www.sqlpower.com/ - 可以捕获100%通过TCP / IP发出的查询,然后加载到 存储库(当前是SQL Server,但它们使用的是Informix 存储库)他们的GUI查看器可以从中显示,操作和 报告。显示不是实时的,因为数据是以块的形式捕获的 查询平面文件并定期批量加载到存储库中。 在服务器上使用网络嗅探器实用程序或使用单独的框 对服务器本身几乎没有影响以进行捕获。
iWatch - 来自Exact-Solutions,Inc。 - www.exact-solutions.com - 可以捕获 100%的查询通过TCP / IP发出,然后加载到专有 库。可以显示实时捕获。使用网络嗅探器实用程序 在您的服务器或嗅探设备上(非常高的交易率) 系统)对服务器的影响很小。
答案 1 :(得分:0)
不确定对于11.70或更早版本,但对于12.10或更高版本,请查询syssqlstat,该查询几乎显示了onstat -g sql以及SQL语句的所有列。缺少的一列是说明是关闭还是打开...我仍在试图弄清楚这一点。 ^ _ ^
$> echo "select * from syssqlstat where sqs_sessionid = 38737;" | dbaccess sysmaster
Database selected.
sqs_sessionid 9999
sqs_dbname my_dbname
sqs_iso 2
sqs_lockmode 0
sqs_sqlerror 0
sqs_isamerror 0
sqs_feversion 9.03
sqs_statement select * from my_table
1 row(s) retrieved.
Database closed.
$> onstat -g sql
IBM Informix Dynamic Server Version 12.10.FC12 -- On-Line (Prim) -- Up 01:19:08 -- 201687588 Kbytes
Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers Explain
9999 - my_dbname DR Wait 30 0 0 9.28 Off
位置:
不幸的是,IBM尚未记录该表...¯_(ツ)_ /