
# TaurusDB建立连接慢导致客户端超时
#### 场景描述
业务在高峰期时，客户端经常出现向TaurusDB建立连接超时，导致系统登录需要十几秒。
#### 原因分析
1. [查看TaurusDB的错误日志](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0018.html)，观察是否有如下信息：connection xxx is established slowly。示例：
   ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001882570860.png)
   有上述日志，说明存在某些连接超过一定时间仍未被处理，客户端的超时时间大于该时间，就会报错。
   
2. 进一步查看线程池配置（默认开启），可以在控制台查看。 ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001928569993.png)
   可以看出，threadpool_size为1，threadpool_stall_limit为500ms，threadpool_oversubscribe为3，线程池处理连接等待的时间主要与上述3个参数相关：
   - 当线程池所有线程在忙碌，线程池中的调度线程会每隔500ms（threadpool_stall_limit）创建一个新线程，所以此时，每个线程组平均每500ms才能处理一个新的连接。如果队列太长，很可能导致客户端超时；
   
   - 所有线程都在忙碌是指，工作线程达到线程池总线程数，在大量建立连接时，总线程数计算方法：threadpool_size\*(threadpool_oversubscribe+1))
    
 
#### 解决方案
对于存在大量新建连接，建议调大threadpool_oversubscribe增加线程总数。
减少线程重复创建与销毁部分的开销，提高性能，同时它也限制了TaurusDB的runing线程数，关键时刻可以保护系统，防止雪崩。
正常情况下，线程池适用于大量短连接的场景，如果客户是长连接，并且连接数量不多（客户端使用了连接池等情况），线程池的作用不大，此时调整threadpool_size和threadpool_oversubscribe两个参数扩大线程总数，或者直接关闭线程池。
