GBase 8s SQLIDEBUG跟踪ODBC调用过程
GBase社区管理员我们在通过应用程序访问GBase 8s数据库,或者调试应用程序过程中,往往需要对应用程序访问数据库的过程进行跟踪,以便排查故障,调优程序。SQLIDEBUG就是GBase 8s自带的trace工具,能够将应用程序调用数据库的详细过程记录下来。
1、跟踪unix/linux客户端odbc程序调用
打开trace开关
通过在客户端设置SQLIDEBUG环境变量打开trace开关。例如,在环境变量文件(ksh为.profile,bsh为.bash_profile)中设置:export SQLIDEBUG=2:/tmp/8s/sqlidebug.txt环境变量生效后,运行odbc程序过程中,在/tmp/8s目录中自动产生sqlidebug.txt_xxx格式的文件。例如,sqlidebug.txt _10679_0_22cb1e0。应用程序通过ODBC与数据库的交互信息均被记录在/tmp/8s/ sqlidebug.txt _10679_0_22cb1e0文件中。
解析trace 文件
SQLIDEBUG trace产生的文件为二进制文件,需要通过sqliprint命令进行解析。解析语法如下:
sqliprint -o /tmp/8s/trace.txt/tmp/8s/sqlidebug.txt_10679_0_22cb1e0
trace.txt文件即为解析后的跟踪信息。
gbasedbt@linux-tnrw:/tmp/8s> more trace.txt SQLIDBG Version 1 S->C (4)Time: 2017-04-13 10:20:10.82588 SQ_INTERNALVER Internal Version Number: 316
C->S (14)Time: 2017-04-13 10:20:10.82589 SQ_PROTOCOLS Cprotocol stream len = 8 byte[0] = ff byte[1] = fe byte[2] = 9f byte[3] = fe byte[4] = 74 byte[5] = aa byte[6] = 72 byte[7] = 93 SQ_EOT
S->C (16)Time: 2017-04-13 10:20:10.82596 SQ_PROTOCOLS Sprotocol stream len = 9 byte[0] = bd byte[1] = be byte[2] = 9f byte[3] = fe byte[4] = 7f byte[5] = b7 byte[6] = ff byte[7] = ef byte[8] = e0 SQ_EOT
C->S (188)Time: 2017-04-13 10:20:10.82606 SQ_INFO INFO_ENV Name Length = 12 Value Length = 98 "DBTEMP"="/tmp" "SHELL"="/bin/bash" "SUBQCACHESZ"="10" "PATH"="/home/gbasedbt/gbase8s/bin:/home/gbasedbt/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" "NODEFDAC"="no" INFO_DONE SQ_EOT
S->C (2)Time: 2017-04-13 10:20:10.82614 SQ_EOT
C->S (32)Time: 2017-04-13 10:20:10.82614 SQ_CONNECT "stores_demo" [11] "stores_demo" [11]
C->S (66)Time: 2017-04-13 10:20:10.82618 SQ_COMMAND # values: 0 CMD.....: "select fname , lname from customer where lname < "C"" [52] SQ_NDESCRIBE SQ_WANTDONE SQ_EOT
S->C (86)Time: 2017-04-13 10:20:10.82655 SQ_DESCRIBE Stmt Type...........: 2 Server Stmt Id......: 0 Estimated Cost......: 0 Size of output tuple: 30 # output fields.....: 2 Size of string table: 12 0) Field 'fname' Index into string table: 0 Starting offset in tuple: 0 Type....................: CHAR; NULLABLE Length : 15 (0xf)
1) Field 'lname' Index into string table: 6 Starting offset in tuple: 15 Type....................: CHAR; NULLABLE Length : 15 (0xf) SQ_DONE Warning..: 0x10 # rows...: 0 rowid....: 0 serial id: 0 SQ_COST estimated #rows: 9 estimated I/O..: 3 SQ_EOT |
其中:C->S代表客户端向服务器发送请求,S->C代表服务器响应客户端请求。且每个通信环节都有时间戳,通信内容。
关闭trace开关
去掉SQLIDEBUG环境变量即可。
2、跟踪windows客户端odbc程序调用
打开trace开关
windows中打开SQLIDEBUG同unix/linux原理相同。以win7为例,步骤如下:
我的电脑à属性→高级系统设置→环境变量→在系统变量中新建,变量名为SQLIDEBUG,变量值为“2:文件路径”

注意:windows下,路径名称盘符后面需要双斜杠。
设置好环境变量后,运行odbc程序访问数据库,自动在E盘下产生sqlidebug.txt_xxx格式的文件。例如,sqlidebug.txt_3864_1196_b85b58
解析跟踪文件
cmd中执行:>sqliprt E:\\ sqlidebug.txt_3864_1196_b85b58 >>E:\\trace.txt
则可将跟踪信息解析到E盘trace.txt文件。
3、跟踪 JDBC程序调用
通过在URI中增加SQLIDEBUG参数实现。 URI格式参考:"jdbc:gbasedbt-sqli://172.16.3.15:9088/testdb:user=gbasedbt;password=gbasedbt;gbasedbtserver=gbaseserver;SQLIDEBUG=C:\\JDBCTrace.txt";
java程序运行过程中自动产生C:\\JDBCTrace.txtXXX文件,例如,JDBCTrace.txt1492053131600.0通过sqliprt来解析:
sqliprt C:\\JDBCTrace.txt1492053131600.0 >>C:\\trace.txt
常见问题1:
在linux下执行sqliprint时可能会出现如下报错,导致解析内容中不包含时间戳:
Warning: the timestamp format you have chosen is wrong. No timestamp will be generated in the output file. Please choose the correct type for the [-platform type] argument. |
解决办法:根据产生debug文件平台的不同,配置不同的- platform参数。例如,在x86 linux平台加上” -platform IEEEM”即可解决:
| sqliprint -platform IEEEM sqlidebug.txt1500345140359.0 > sqlidebug.txt |
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526