Wishlist 0 ¥0.00

mysql数据库首次查询缓慢 

绕了一大圈的问题分析思路

** 缺陷效果表现 **
mysql查询,没有缓存的情况下,就是第一次查,特别的慢 然后又正常了,过了一段时间后又特别缓慢

  1. 初始判断mysql索引等等问题
  2. 然后判断是不是缓存问题,毕竟表现形式就是第一次慢,后面缓存了快

一开始以为是mySql问题 最后还是未解决问题

索引问题排除   考虑到实际数据并不多不考虑到索引问题
mysql在本地环境下特别快,但是使用远程的sql就出现问题了

会不会是mysql自动断开连接所以搜索缓慢 最后还是未解决问题

这种自动断开无非就是因为无人访问mysql,mysql有资源保护机制,发现没人用了就断开掉节约资源
通过给一个定时任务3分钟调用一次sql语句实现永久不断开

发现使用Navicat查远程mysql库也很缓慢 最后还是未解决问题

Navicat一直有一个通病,就是时不时卡顿闪退一想到navicat都搜索缓慢时不时数据库本身有问题

1. 使用在[mysqld]下配置一下属性方式尝试解决,实际未解决问题
skip-name-resolve
在linux环境下配置文件是/etc/my.cnf,
windows环境下配置是my.ini文件
做完操作后记得重启mysql
2. 修改mysql连接方式外网修改内网ip尝试解决,实际未解决问题
之前一直是用的外网ip连接的数据库,api和数据库实际都是在同一个服务器,可以使用内网ip连接mysql

判断是不是代码逻辑问题 导致第一次多操作缓慢 最后还是未解决问题

但是第一次代码虽然会有很多操作 有这种可能性 可是后面存储了信息之后 走的是缓存的逻辑,只做了一个简单的查询判断接口,
但是这个简单的接口也特别的慢,这就不是代码问题的    

发现是建立连接( Initial connection)时巨慢 21s 成功解决问题

在这里插入图片描述
Initial connection 什么鬼,竟然20多秒

其实测试时就已经发现这个问题了,一直以为是mysql或者其他的问题导致的第一次加载特别慢的原因,
所以没在意分析具体耗时在哪。
无奈百度,google也没找到解决方案。
全都是其他的一堆乱七八糟的方案,把我带偏了

本地localhost访问一直都很快,显然不是代码的问题。ping的了域名发现解析速度也没有问题。
最后重新给网站换了个域名,结果就解决了。打开阿里云查看域名解析,
发现自己把两个IP用在了同一个域名上面导致冲突了
然后果断删除其中一个解析,解决了这个贼坑的问题

怎样设置Initial connection ?

"Initial connection"(初始连接)的设置通常是由应用程序代码和数据库连接池配置来控制的。具体的设置方式取决于你使用的编程语言和数据库连接库。以下是一些通用的方法来设置初始连接:

1. 使用连接池

使用连接池是一种常见的优化数据库初始连接的方法。连接池是一个维护数据库连接的缓存,它允许应用程序重复使用已经建立的连接,而不是每次需要连接时都创建新的连接。连接池可以减少连接的创建和关闭开销,提高应用程序的性能。

具体的配置方式会根据使用的编程语言和连接池库的不同而有所差异。以下是一个使用Java中的HikariCP连接池的示例:


 

java

HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); config.setUsername("username"); config.setPassword("password"); // 设置连接池大小 config.setMaximumPoolSize(10); // 创建连接池 DataSource dataSource = new HikariDataSource(config); // 使用 dataSource 来获取数据库连接 Connection connection = dataSource.getConnection();

在这个例子中,连接池的最大大小被设置为10,这意味着最多会有10个数据库连接在池中等待被使用。

2. 优化连接参数

在连接数据库时,可以优化连接参数以减少初始连接的时间。例如,设置合适的连接超时时间(connection timeout)和Socket超时时间,以便在网络故障时能够迅速失败。

3. 使用连接字符串参数

在连接数据库时,可以使用连接字符串(Connection String)参数来设置一些连接相关的选项。例如,在MySQL中,可以使用autoReconnect=true来启用自动重新连接,以确保在连接断开时自动重新建立连接。

4. 使用SSL/TLS加密

如果需要加密连接,可以启用SSL/TLS来保护数据库连接。使用加密连接可以确保数据在传输过程中的安全性。

5. 数据库端优化

在数据库服务器端,你可以通过调整最大连接数、调整缓冲池大小等参数来优化初始连接的性能。这需要修改数据库服务器的配置文件(如my.cnf或my.ini)来生效。

请注意,具体的设置方法和可用的选项取决于你使用的数据库系统和编程语言。在进行设置时,建议参考相应数据库和连接库的文档以获取最准确和最适合你应用程序的配置参数。

Initial connection 是什么?

"Initial connection"(初始连接)是指客户端应用程序首次连接到数据库服务器的操作。在数据库领域,这是一个重要的过程,因为它涉及建立与数据库服务器的通信通道,进行身份验证,以及建立会话以执行数据库查询和操作。

以下是初始连接的一般步骤:

  1. 建立连接:客户端应用程序创建一个与数据库服务器的网络连接。这通常是通过TCP/IP协议或Unix套接字(在Linux/Unix系统上)来实现的。

  2. 身份验证:一旦建立连接,客户端需要进行身份验证,以证明它具有访问数据库的权限。这通常涉及提供用户名和密码,尽管也可以使用其他身份验证方法,如证书身份验证。

  3. 会话建立:一旦客户端通过身份验证,数据库服务器会建立一个数据库会话。这是一个与客户端应用程序之间的通信通道,用于执行SQL查询和接收结果。在会话期间,客户端可以发送多个查询和命令。

  4. 执行SQL操作:客户端可以开始执行SQL查询、插入、更新、删除等操作。这些操作将由数据库服务器处理,并返回结果或影响行数。

  5. 断开连接:当客户端不再需要与数据库通信时,它可以关闭连接,释放资源。通常情况下,客户端和服务器之间的连接不会一直保持打开状态,除非需要。

初始连接是整个数据库交互过程中的第一步,因此它的性能和效率对于数据库应用程序的整体性能至关重要。优化初始连接可以包括使用连接池来重用连接、减少身份验证时间、减少网络延迟等方法,以确保应用程序能够快速建立连接并开始执行数据库操作。

skip-name-resolve的作用

"skip-name-resolve" 是一个MySQL服务器的配置选项,它控制服务器是否进行主机名解析。主机名解析是将客户端的主机名转换为IP地址的过程,通常在客户端连接到MySQL服务器时进行。这个选项的作用如下:

  1. 提高性能:当MySQL服务器启用了主机名解析时,每当有新的连接请求到达服务器时,服务器会尝试解析客户端的主机名。这可能涉及到网络DNS查询,而DNS查询可能会花费一定的时间。如果你的MySQL服务器有大量的连接请求,启用主机名解析可能会在性能方面产生一定的开销。通过启用 "skip-name-resolve",你可以避免这些DNS查询,从而提高服务器的性能。

  2. 避免连接延迟:在某些情况下,如果DNS解析过程发生问题或延迟,它可能导致客户端连接到MySQL服务器的延迟。通过禁用主机名解析,你可以避免由于DNS问题引起的连接延迟。

  3. 简化安全设置:在MySQL中,你可以使用主机名来控制哪些主机可以连接到服务器。禁用主机名解析可以简化这些安全设置,因为它会使MySQL只关注IP地址,而不需要考虑主机名。这可以在某些情况下更容易配置和维护访问控制。

需要注意的是,当你禁用主机名解析时,客户端连接到MySQL服务器时必须使用IP地址,而不是主机名。因此,你需要确保客户端应用程序正确配置为使用IP地址进行连接,而不依赖于主机名。如果你的应用程序需要主机名解析来正常工作,那么禁用 "skip-name-resolve" 可能不适合你的情况。

总之,"skip-name-resolve" 的作用是提高MySQL服务器的性能、避免连接延迟,以及简化安全设置,但需要谨慎使用,以确保不会对应用程序造成不必要的问题。

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.