首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java驱动程序在postgres 11中不触发查询-启动探测

Java驱动程序在postgres 11中不触发查询-启动探测
EN

Database Administration用户
提问于 2019-04-26 09:55:41
回答 1查看 56关注 0票数 0

当使用SystemTap在x86_64-pc-linux-gnu上的PostgreSQL 11.2上跟踪postgres会话时,由gcc (GCC) 4.8.5 20150623 (RedHat4.8.5-36)编译,64位。

代码语言:javascript
复制
global livequeries

probe process("/usr/pgsql-11/bin/postgres").mark("query-start"){
  printf("[%s] Query start on PID %d : %s \n", ctime(gettimeofday_s()), pid(), user_string($arg1) )
  livequeries[tid(),$arg1] = gettimeofday_us()
}

psql会触发这个探测,但是java驱动程序不会。

参考文献:文档

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-04-26 14:31:52

我认为,通过psql运行查询与使用Java程序运行查询的不同之处在于,您在Java中使用了准备好的语句。处理“简单语句”和准备好的语句在Postgres后端(postgres.c)中采用不同的代码路径。

只有在执行简单语句(exec_simple_query)时才调用“query”探测,而准备好的语句处理有两个不同的阶段:解析(exec_parse_message)和执行(exec_execute_message)。

当它们在PortalRun中调用pquery.c时,这两种代码路径都会聚在一起,其中调用“query”探测。

换句话说,这两个代码路径看起来如下(省略了“完成”探测):

代码语言:javascript
复制
psql -> simple statement
  query-start probe
  query-parse-start probe
  query-parse-done probe      
  query-rewrite-start probe
  query-rewrite-done probe
  query-plan-start probe
  query-plan-done probe
  query-execute-start probe
  query-execute-done probe
  query-done probe

JDBC -> prepared statement
  prepare phase
    query-parse-start probe
    query-parse-done probe     
  execute phase 
    query-execute-start probe
    query-execute-done probe

如果您不特别关心查询解析和计划延迟,则需要捕获“query *”探测。如果您需要查询文本,也可以捕获“查询-解析-开始”。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/236765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档