在 Ubuntu 上连接 SQL Server 很慢,通常不是网络带宽问题,而是 协议、DNS、驱动或配置 导致的。下面按常见原因 → 排查方法 → 解决方式给你总结。
SQL Server 在建立连接时,会尝试对客户端 IP 做 反向 DNS 解析。
如果 Ubuntu 的 DNS 配置不好:
✅ 解决方法(任选):
# 1. 使用 IP 而不是主机名连接
sqlserver://192.168.1.10:1433
# 2. 在 Ubuntu 加 hosts
sudo vim /etc/hosts
192.168.1.10 sqlserver
# 3. 在 SQL Server 禁用反向解析(Windows 端)
SQL Server Configuration Manager
→ 协议 → TCP/IP → 关闭 “Force Encryption” 和反向 DNS
如果你用:
unixODBCFreeTDSpyodbc常见问题:
TDS版本太低instance✅ 推荐 FreeTDS 配置:
[sqlserver]
host = 192.168.1.10
port = 1433
tds version = 7.4
测试:
tsql -S sqlserver -U sa
很多人这样写:
jdbc:sqlserver://sqlserver;databaseName=test
✅ 推荐写法:
jdbc:sqlserver://192.168.1.10:1433;databaseName=test;
loginTimeout=5;
socketTimeout=30;
encrypt=false;
trustServerCertificate=true;
⚠️ encrypt=true 在 Ubuntu 上有时会非常慢(证书校验)
Ubuntu 默认优先 IPv6,而 SQL Server 通常只监听 IPv4。
✅ 临时测试:
ping -4 sqlserver
✅ 禁用 IPv6(可选):
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
如果是:
第一次慢,后面快 → 连接池冷启动
✅ 解决:
# 1. 是否能解析
nslookup sqlserver
# 2. 端口是否通
telnet 192.168.1.10 1433
# 3. ODBC 测试
isql -v DSN user pass
# 4. 抓包看卡在哪
tcpdump -i any port 1433
| 场景 | 慢点 |
|---|---|
| Python pyodbc | DNS / encrypt |
| Java JDBC | encrypt / loginTimeout |
| PHP | FreeTDS 版本 |
| Node mssql | 连接池未开 |
你可以告诉我:
我可以直接给你最小可用配置。