成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB 查詢超時異常的原因及解決辦法

運維 數據庫運維 其他數據庫 MongoDB
在對超過百萬條記錄的集合進行聚合操作時,偶爾會發生Read timed out 異常,本文分析了ConnectionTimeOut和SocketTimeOut的區別,并提出該問題的解決辦法。

在對超過百萬條記錄的集合進行聚合操作。

  1. DBObject match=(DBObject)JSON.parse("{$match:{logType:{'$in':[5,9]}}}"); 
  2. DBObject group=(DBObject)JSON.parse("{$group:{'_id':'$domainUrl','count':{'$sum':1}}}"); 
  3. AggregationOutput output = logCollection.aggregate(match,group); 

偶爾會發生Read timed out 異常。

  1. com.mongodb.MongoException$Network: Read operation to server /192.168.10.202:27017 failed on database adLogTable 
  2. at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:253
  3. at com.mongodb.DB.command(DB.java:261
  4. at com.mongodb.DB.command(DB.java:243) ... 
  5. Caused by: java.net.SocketTimeoutException: Read timed out 
  6. at java.net.SocketInputStream.socketRead0(Native Method) 
  7. at java.net.SocketInputStream.read(SocketInputStream.java:152

通過多次測試,發現執行一次聚合平均時間為5s,超過5s時就會報錯!

然后查看MongoDB的配置信息:

  1. socket-timeout="5000" //5s 

socket-timeout的默認配置為0,也就是沒有限制。

沒有超時限制,系統出了問題也不容易發現,應該根據實際情況,給出合理的超時時間。

通過多次測試發現最長執行時間為6秒,就把超時時間設置成了10000。

  1. socket-timeout="10000" //10s 

注意:MongoDB在與Spring整合時,如果要配置多個MongDB源,只會啟用***一個<mongo:options>配置。

應該把參數配置信息存儲在properties文件中。

  1. <mongo:mongo host="${mongodb.ip}" id="mongo202" port="${mongodb.port}"
  2. <mongo:options connections-per-host="200" 
  3. threads-allowed-to-block-for-connection-multiplier="100" 
  4. connect-timeout="1000" 
  5. max-wait-time="1000" 
  6. auto-connect-retry="true" 
  7. socket-keep-alive="true" 
  8. socket-timeout="10000" 
  9. slave-ok="true" 
  10. write-number="1" 
  11. write-timeout="0" 
  12. write-fsync="true" /> 
  13. </mongo:mongo> 

通過Java API獲取配置參數

  1. DBCollection logCollection = mongoTemplate.getCollection(collName); 
  2. MongoOptions mongoOptions = logCollection.getDB().getMongo().getMongoOptions(); 
  3. System.out.println(mongoOptions.getSocketTimeout()); 

***一點: ConnectionTimeOut和SocketTimeOut的區別:

一次完整的請求包括三個階段:

  • 建立連接
  • 數據傳輸
  • 斷開連接

如果與服務器(這里指數據庫)請求建立連接的時間超過ConnectionTimeOut,就會拋 ConnectionTimeOutException,即服務器連接超時,沒有在規定的時間內建立連接。

如果與服務器連接成功,就開始數據傳輸了。

如果服務器處理數據用時過長,超過了SocketTimeOut,就會拋出SocketTimeOutExceptin,即服務器響應超時,服務器沒有在規定的時間內返回給客戶端數據。

責任編輯:Ophira 來源: oschina博客
相關推薦

2017-06-21 08:30:20

MySQL原因解決辦法

2015-10-15 09:38:21

程序員發福

2009-11-30 10:09:31

PHP中文亂碼

2023-06-20 11:46:58

2009-12-07 18:38:16

WCF異常

2019-08-29 14:29:42

JVM內存 Java

2010-09-01 11:32:50

DB2暫掛

2011-10-17 14:41:26

激光打印機解決辦法

2011-05-07 10:05:17

打印機打印空白頁解決方法

2009-12-22 14:16:01

WCF連接服務超時

2010-05-04 13:52:00

Oracle用戶被鎖

2009-07-31 09:14:01

WinCE啟動失敗

2012-11-12 11:33:06

路由器組網H3C

2012-04-16 10:09:52

2009-01-14 09:16:24

SQL Server查SQL Server查SQL Server

2023-08-28 10:54:09

容器Docker

2024-01-04 09:04:02

2011-07-12 21:52:06

激光打印機技巧

2010-01-27 12:06:00

UPS常見故障

2012-05-30 16:19:11

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看一级视频 | 国产精品一区一区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久久久一区二区三区 | 久久久久免费精品国产 | 女人av | 国产精品久久久久久久久久久久 | 成人免费视频久久 | 在线亚洲精品 | 婷婷综合| 国产女人叫床高潮大片免费 | 免费黄色在线 | 97伊人 | 国产免费一区二区三区 | 韩国精品一区 | 黄网站在线播放 | 国产精品久久久久久福利一牛影视 | 午夜精品一区 | 国产欧美一区二区三区久久人妖 | 亚洲高清视频在线观看 | 天天夜碰日日摸日日澡 | 91电影在线 | 精品欧美一区二区三区久久久 | 亚洲女人天堂成人av在线 | 一区二区在线 | 亚洲成人精品在线 | 久久99精品久久久久蜜桃tv | 久久久精品高清 | 尤物在线精品视频 | 国产精品美女久久久久aⅴ国产馆 | 亚洲欧洲精品一区 | 日本视频一区二区 | 视频一二三区 | 草草在线观看 | 免费激情网站 | 欧洲国产精品视频 | 请别相信他免费喜剧电影在线观看 | 久久精品欧美一区二区三区不卡 | 美日韩中文字幕 | 国产精品久久久久久久久久久久 | 可以在线看的黄色网址 |