为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
如下的慢日志,第一行是参数列表,第二行是带占位符的sql。我想在这里请教下专家,参数列表跟sql是怎么映射的,怎么一一对应,我想要知道参这层关系,我观察了下stmt的值相同的2行就算同一个sql吗?会不会存在一个stmt出现多个sql语句
2025-03-21 14:38:50.464 (EP[0] sess:0x7f393b5fd0f8 thrd:23882 user:QOA trxid:338270689 stmt:0x7f393b6278f0 appname: ip:::ffff:172.16.12.16) PARAMS(SEQNO, TYPE, DATA)={(0, INTEGER, 1), (1, INTEGER, -2)}
2025-03-21 14:38:50.782 (EP[0] sess:0x7f393b5fd0f8 thrd:23882 user:QOA trxid:338270689 stmt:0x7f393b6278f0 appname: ip:::ffff:172.16.12.16) [SEL] select * from WD where (Status =? or nvertStatus= ?) and delflag = 0 order by operatedate desc,twendate desc ,row_id desc EXECTIME: 317(ms).
不会出现多个的,按顺序查找即可
就是这样,如果sql日志记录全部的话,会有2个,第一次是[ORA]开头记录,代表接收到的原始语句,之后是收到的参数,之后是[SEL]或者[INS]、[UPD]等开头的相同语句,代表实际执行。
要根据stmt,事务号,时间戳判断。同一个stmt,这个同样事务,日志都是按时间有序记录的,所以找到SQL语句,其实一般根据stmt,按顺序继续往下找就行了