在localhost而不是域上连接/使用MySQL是否更快(即使域解析为同一台计算机)?

2022-09-03 14:21:56

如果我在Linux机器上运行MySQL,那么如果连接到localhost运行查询是否比我连接到解析为同一盒子的域更快?这是使用JDBC的Java。


答案 1

直接使用本地主机上任何接口的 IP 地址 - 环回接口 (127.0.0.1) 或任何其他接口 - 是具有绝对最佳性能的选项。数据包实际上将通过环回接口(无论实际使用哪个IP)以CPU速度进行路由。

但是,有三个原因比选择其他接口的 IP 更喜欢 127.0.0.1:

  • 环回接口对于系统的运行至关重要,因此它在引导过程的早期就已初始化,并且几乎总是可用。

  • 它不受外部因素的影响:虽然移除eth0电缆本身不会中断localhost通过eth0的IP访问自身,但如果您有许多“自动配置”系统中的任何一个,它会在链路丢失时愉快地关闭接口,那么事情就会搞砸。

  • 如果您设置了防火墙,则当涉及公共接口的 IP 时,规则链很可能更长(因此在性能方面稍差)。

如果您使用的是主机名,则本地主机主机名通常由 /etc/hosts 查找解析,这非常快,尽管使用 IP 直接会完全删除此查找。根据您的设置,它还会将其缓存在内存中,以便以后几乎非常快。

如果使用公共主机名,则可能涉及 DNS 查询,这意味着会增加 CPU 使用率和网络延迟。在本地主机上使用缓存名称服务器将主要解决此问题。但是,请记住,如果您的DNS服务变得不可靠,可能仍然存在问题。

使用公共主机名的一个优点是,如果它类似于 db.example.com。这允许您将数据库移动到单独的服务器,而无需更改客户端的配置。

由于您使用的是 JDBC,因此我假设您正在对所有查询重用单个连接,在这种情况下,在所有情况下,解决开销本身的主机名应该可以忽略不计,除非您必须处理损坏的 DNS 服务器。但是,选择127.0.0.1地址可能仍然有一些优点,因为它可能更有效的防火墙设置。


答案 2

localhost是一个解析到您的计算机的域,所以我会说它的速度一样快。

使用文件套接字可能会带来差异,尽管我不知道JDBC是否支持它。


推荐