正文
前阵子做分布式数据库的运维工作,因为一些客观原因(客户现场无法远程),客户找我们解决一个:“大数据量时查询不全数据的问题”。
这个问题涉及到的软件是:C# 数据库驱动、JDBC 驱动、数据库服务端。
在最开始的时候,我们和客户沟通,拍脑袋以为是 C# 驱动的问题,结果又是查日志,又是查 C# 驱动源码,还是解决不了问题,认为是数据库服务端有问题。
我把现象反馈给大领导,大领导说:“不是有 JDBC 驱动嘛,你把客户端的问题都排除了,再来找服务端的问题!”(大领导工作很忙,所以找他解决问题时,一些打下手的工作,我们得尽可能多的去完成,比如这次的定位问题)。
从技术面看,大领导说的很对,细细想来:有两个驱动程序,如果是数据库服务端问题,那么不但使用 C# 驱动能复现问题,使用 JDBC 驱动也可以复现问题的!
在找大领导前怎么没想到呢?可能是因为之前没遇到过这种问题吧,维护 C# 驱动的工程师想着大领导能兜底,能把问题抛给大领导就抛给他。其实,这也是运维中定位问题时常用的排除法,看来平时还是得多总结的。
于是,我用 Java 写了个程序,使用 JDBC 驱动把问题终于踏踏实实得定位到了服务端。
PS:为什么要先找客户端问题,再找服务端问题?因为,服务端相对客户端而言更抽象一点,越抽象,细节就越少,犯错的可能性会小很多。(当然了,服务端也是有细节的,某些地方比客户端细节更细,这里就不讨论了)