不同的数据库驱动程序 jTDS 与 MS SQL 会导致同一数据库 MS SQL Server 上不同的执行计划和性能

问题描述 投票:0回答:0

我们最近将其中一个应用程序升级到 Spring Boot v2.7.12 并使用 MS SQL Server 驱动程序执行查询。

我们一直在使用 JTDS 驱动程序,但该驱动程序已经长期不受支持,因此决定转向 MS SQL 驱动程序。 MS SQL Server 是我们的数据库。

根据一些负载测试,我们发现使用 jTDS 驱动程序在旧应用程序中运行的查询在几毫秒内完成,但使用新的 MS SQL Server 驱动程序执行完全相同的查询需要 5 秒到 20 秒不等的时间。

与 DBA 合作,在比较遗留应用程序与 Spring Boot 应用程序时,执行计划似乎也不同。

差异之一是隐式数据长度,对于数据库中 VARCHAR(20) 类型的输入参数之一,jTDS/legacy 上的查询计划显示参数作为 VARCHAR(8000) 传递,而 Spring 的查询计划则显示为 VARCHAR(8000) 传递的参数Boot/MS SQL Server 驱动程序,参数以 VARCHAR(4000) 形式传递。

Java/Spring JDBCTemplate 中是否有一种方法可以将指示特定大小的 VARCHAR 类型输入传递为 VARCHAR(20) 以匹配数据库中的大小?

有人在使用不同的数据库驱动程序时遇到过同样的问题吗?潜在的解决方案是什么。

期望使用新的 MS SQL Server 驱动程序的查询应与使用 jTDS 的查询同时执行。

sql-server jdbc java-11 jdbctemplate jtds
© www.soinside.com 2019 - 2024. All rights reserved.