【问题标题】:How to see queries executing on Informix DB如何查看在 Informix DB 上执行的查询
【发布时间】:2014-04-16 17:41:39
【问题描述】:

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

【问题讨论】:

    标签: sql select command informix


    【解决方案1】:

    对于 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 没有记录该表...¯_(ツ)_/¯

    【讨论】:

      【解决方案2】:

      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 之后可用。

      此跟踪使您可以将在实例/数据库/用户/会话中执行的所有语句保存到一个循环缓冲区中(当它们填满时,开始自行覆盖它)。

      您可以使用命令onstat -g his 或查询表sysmaster:syssqltrace 来查看此跟踪。

      这是SQL TRACE 的 IBM 手册参考

      只是分享,这是我启用和追踪某人的“瑞士刀”... 我只是更改一些参数,注释/注释我需要的内容并使用informix 执行。 之后我开始使用 onstat/selects 监控缓冲区...

      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 发出,然后加载到专有的 存储库。可以显示实时捕捉。使用网络嗅探器实用程序 在您的服务器或嗅探器设备上(对于非常高的交易率 系统),对服务器的影响非常小。

      【讨论】:

        猜你喜欢
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 2017-08-14
        相关资源
        最近更新 更多