一次问题解决的反思

有人在群里喊数据库链接数不够了,要调大,听上去不怎么靠谱,跟进了一下。

  1. A: 是xxx数据库吗?
  2. B: 是mysql数据库
  3. A: 用xxx管理连接吗?
  4. B: 不是
  5. A: 前面讨论close wait是tcp状态吗?
  6. B: 是
  7. A: tcp状态在db端看到还是应用服务器?
  8. B: 应用服务器。
  9. A: 那应该是mysql主动关闭呀
  10. A: 应用服务器看到的tcp连接是来自客户端还是到db的?
  11. B: 来自客户端
  12. A: 哦,应该是客户端主动关闭。原因可能是应用服务器超时没响应,超时原因有很多,可能是应用服务器线程被阻塞,阻塞一般都是在等待资源,资源可能是一把锁、一个数据库链接或其他。超时还可能是应用服务器处理速度变慢,处理速度慢也是资源紧张,资源可能是内存、CPU、外部IO。
  13. B: 哦,看看吧,先赌一把数据库链接不够。
  14. A: 如果是数据库链接,忘关的可能性大,或者死锁。只调大还不行,要在连接池加上自动释放,锁加上不等待。最终还是要排查真正原因,解决掉。

在这个处理过程中,A尽量做到思维严谨,不过还有改进空间。

  1. 这个问题可以改成开放式,“什么数据库?"
  2. 同样改成开放式,”用什么管理数据库链接?“
  3. 这里思维跳了一下,前面并没说tcp 链接是到mysql的
  4. 对连接池管理不是非常熟悉,没法凭直接指引方向了。

总结下来,要像高手一样灰飞烟灭间扫除问题,需要严谨的逻辑推理+丰富实战经验培养的直觉。

你可能感兴趣的:(一次问题解决的反思)