如何查看在Informix DB上执行的查询

时间:2014-03-12 14:06:18

标签: sql select command informix

我想知道是否有办法查看在Informix上执行的查询 如果我使用onstat -g sql,它只显示SQL语句类型(如果是insert或select)。但是我希望看到完整的查询文本,例如select * from table 可以使用SQL Server Profiler在SQL Server上执行此操作。

2 个答案:

答案 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
;

还有其他选项可以即兴创作:

  • 在informix客户端激活$ SQLIDEBUG + sqliprint命令 (未归属资源) 这最初用于调试和调查客户端/服务器之间的通信问题。 您可以通过此IBM article
  • 获取更多信息
  • 在Windows ODBC配置中激活sql跟踪 这是任何ODBC驱动程序的标准功能(如果您使用它) 您可以在ODBC属性中激活它。
  • 激活set explain(informix特定声明) 此命令说服务器在文件中保存在会话中执行的所有sql语句,以及它们的优化信息等 可以由自己的会话启用(执行set explain on;语句)或使用命令onmode -Y <options>激活 作为参考,请查看IBM手册:explainonmode

其他选项

从这个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

位置:

  • sqs_iso:1是DR,2是CR
  • sqs_lockmode:0为不等待,其他为等待X

不幸的是,IBM尚未记录该表...¯_(ツ)_ /