我使用「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作爲我的開發機器。
聽起來像是一個Windows ulimit的東西..我不使用Windows,以便更多的猜測..閱讀這裏https://support.socketlabs.com/index.php?/Knowledgebase/Article/View/ 61/0 /如何修復每個套接字地址協議網絡地址端口的錯誤一般允許 其次,如果您的套接字用完了,那麼您也可以許多連接打開,並沒有正確地關閉它們,當你完成他們..只是單看代碼,你就產生了3個連接每個循環..更不用說其他任何其他人... – reticentroot
在這裏看到以及http:/ /www.alexedwards.net/blog/organising-database-access你可以從這篇文章中挑選出適合你的sql連接的最佳實踐 – reticentroot
@reticentroot mysql-lib有一個連接管理。當我理解DOC正確時,我想設置MaxOpenConns和Open/Close只是「Block」和「Release」conns以供使用。我會檢查你的第一個推薦,我會嘗試玩這個值,但是我從來沒有在mysql儀表板秒殺中看到conn狀態。它在查詢期間總是在3-6左右。 – Tiega