Perl DBI 每次连接到 Oracle 数据库需要 60 秒

ND *_*eek 3 oracle perl

我觉得我的 SQL 连接一定有问题。我通常忽略了它,但我最终会尝试深入了解它。

my $dsn = "DBI:Oracle:host=$host;sid=$sid";

my $dbh = DBI->connect($dsn,$dbuser,$dbpass,{ RaiseError => 1,AutoCommit => 0 }) or die("Unable to connect: $DBI::errstr");
Run Code Online (Sandbox Code Playgroud)

每次跑步都需要 60 秒DBI->connect。相当大的查询可能需要一些时间,网络延迟可能会导致一些延迟,但所有这些都超出了连接所需的 60 秒。我可以DBI->connect在不实际运行查询的情况下直接运行然后立即关闭它,这将需要 60 秒。我可以使用不同的工具毫无问题地查询这个数据库,但是任何时候我DBI->connect对它运行一个,都需要 60 秒。我的大多数查询返回的时间为 61.2 秒、63.4 秒或 65.3 秒。不管怎样,从脚本点击 DBI->connect 到它点击下一行的时间是 60 秒。我什至在之前和之后的行上给它加上了时间戳。时间戳之间的唯一内容是DBI->connect.

我究竟做错了什么?

ND *_*eek 6

感谢 @ThisSuitIsBlackNot 将我指向DBI 中的跟踪功能,我能够在不指定端口的情况下将其跟踪到错误。我知道我应该在其他程序中设置其他连接时指向 1521,但是 DBI 不需要端口来运行,等待它给出结果只需要 60 秒。除非另有说明,否则 DBI 首先假定 1526 是目标端口,因此当以 1521 上运行的服务器为目标时,它在尝试 1521 之前在 60 秒后超时。

原来的:

DBI -> 端口 1526 -> 无响应 -> 等待 60s -> 无响应 -> 失败 -> 端口 1521 -> 成功

指定端口:

DBI -> 端口 1521 -> 成功