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

Cat*_*tao 4 sql informix select command

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

cei*_*art 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
Run Code Online (Sandbox Code Playgroud)

如果要获取所有语句的历史记录,可用的最佳方法是使用"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
;
Run Code Online (Sandbox Code Playgroud)

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

  • 在informix客户端激活$ SQLIDEBUG + sqliprint命令.
    (未填充的资源) 最初用于调试和调查客户端/服务器之间的通信问题.您可以在此IBM文章中获得更多信息
  • 在Windows ODBC配置上激活sql跟踪.
    这是任何ODBC驱动程序的标准功能(如果您使用它).
    您可以在ODBC属性中激活它.
  • 激活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发出的查询,然后加载到专有存储库中.可以显示实时捕获.在服务器上使用网络嗅探器实用程序或对服务器影响非常小的嗅探器设备(对于非常高的事务率系统).