【发布时间】:2014-04-16 17:41:39
【问题描述】:
我想知道是否有办法查看在 Informix 上执行的查询。
如果我使用onstat -g sql,它只会显示 SQL 语句类型(如果是插入或选择)。但我想查看完整的查询文本,例如select * from table。
可以使用 SQL Server Profiler 在 SQL Server 上执行此操作。
【问题讨论】:
标签: sql select command informix
我想知道是否有办法查看在 Informix 上执行的查询。
如果我使用onstat -g sql,它只会显示 SQL 语句类型(如果是插入或选择)。但我想查看完整的查询文本,例如select * from table。
可以使用 SQL Server Profiler 在 SQL Server 上执行此操作。
【问题讨论】:
标签: sql select command informix
对于 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 没有记录该表...¯_(ツ)_/¯
【讨论】:
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
;
还有其他一些即兴创作的选择:
set explain(informix 特定语句)。set explain on; 语句)或使用命令onmode -Y <options> 激活。从这个 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 发出,然后加载到专有的 存储库。可以显示实时捕捉。使用网络嗅探器实用程序 在您的服务器或嗅探器设备上(对于非常高的交易率 系统),对服务器的影响非常小。
【讨论】: