老铁们有没有遇到过在终端执行 sql 语句非常快,几十几百毫秒级,但是通过程序调用执行非常慢回到几十秒甚至一两百秒
![]() | 1 Momostudent 2023-09-18 12:27:43 +08:00 遇到过 同样的问题,在 plsql 等工具下面直接 执行也是非常快,在程序中调用非常慢 后来自己自己恢复了、、、、、、 |
![]() | 2 jmss 2023-09-18 13:03:41 +08:00 还能这么离谱吗,是不是和程序调用的数据库驱动有关,能准确复现吗 |
4 crasa OP @Momostudent 啥也没管就好了? |
5 matepi 2023-09-18 16:10:32 +08:00 via iPhone 可能是终端和程序调用时上 fetch 条数的默认设定不同导致,终端默认 fetch first 50 或窗口大小可显示条数,导致执行计划和实际开销都优于,程序默认调用全量返回数据的执行计划和实际开销 可以尝试通过程序侧调用执行计划获取一下,比对一下终端都执行计划 最终程序执行上要考虑耗时功能优化翻页等等 |
6 crasa OP @matepi 感谢老铁,不过程序调用也是有分页的,就是同一个分页查询在不同机器的执行效果相差太大。一个是开发机调用 sql (百来毫秒),一个是测试环境机器调用 sql (几十到几百秒) |
7 a href="/member/matepi" class="dark">matepi 2023-09-18 16:32:05 +08:00 @crasa 还是看下执行计划吧,有分页也会再被 fetchsize 最终再限制 |
8 matepi 2023-09-18 16:35:02 +08:00 哦,还想起来一个场景,对于一些数字形字符是否有隐式转换为数字,造成对数字可以用上索引之类的。可能在不同的接入客户端模式上也有不同。对应的 preparestatement 或者 orm 框架上,对应的既能数字、也能文字的字段类型,是否正确绑定,用上了索引。 |
![]() | 10 QZFCANBA 2024-03-07 21:45:31 +08:00 老哥找出问题了吗。。我这也有这个问题,datagrip 里 2 300 毫秒,mybatis 里 4 5 秒 |