2017-09-22 49 views
0

我使用「go-sql-driver/mysql」驅動程序。 我有一個產品表,有一些依賴關係。所以,我選擇產品並獲得將在子查詢中創建笛卡爾產品的依賴關係。通常是有200種產品限制有更好的表現,但在極少數情況下,限制將被刪除或提升至可以說,3000-5000然後,然後我會收到以下錯誤:Golang Mysql連接套接字塊

dial tcp 127.0.0.1:3306: connectex: Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.

這基本上意味着:

connectex: Use every Socketaddress only once.

這是剪斷從我的代碼,基本上所有我的查詢功能是建立這樣的:

mysql := this.DBController.Connect() 
defer mysql.Close() 
. 
. 
. 
for rows.Next() { 
    err := rows.Scan(&x, &y, &z) 
    if err != nil { 
     log.Println("DBFetchMachines: Scan Error") 
     log.Println(err) 
    } 
    product.PurchasePrice = this.priceR.DBFetchPurchasePriceByProductID(product.ID) 
    product.SellingPrice = this.priceR.DBFetchSellingPriceByProductID(product.ID) 
    product.DealerContact = this.contactR.DBGetBasicContact(product.DealerContact.ID) 
    . 
    . 
    . 
} 

當我查詢200-1000行是沒有問題的。 這可能是一個操作系統相關的問題?我使用Win10 64Bit作爲我的開發機器。

+1

聽起來像是一個Windows ulimit的東西..我不使用Windows,以便更多的猜測..閱讀這裏https://support.socketlabs.com/index.php?/Knowledgebase/Article/View/ 61/0 /如何修復每個套接字地址協議網絡地址端口的錯誤一般允許 其次,如果您的套接字用完了,那麼您也可以許多連接打開,並沒有正確地關閉它們,當你完成他們..只是單看代碼,你就產生了3個連接每個循環..更不用說其他任何其他人... – reticentroot

+0

在這裏看到以及http:/ /www.alexedwards.net/blog/organising-database-access你可以從這篇文章中挑選出適合你的sql連接的最佳實踐 – reticentroot

+0

@reticentroot mysql-lib有一個連接管理。當我理解DOC正確時,我想設置MaxOpenConns和Open/Close只是「Block」和「Release」conns以供使用。我會檢查你的第一個推薦,我會嘗試玩這個值,但是我從來沒有在mysql儀表板秒殺中看到conn狀態。它在查詢期間總是在3-6左右。 – Tiega

回答