資料庫連線不穩定引發的事情

2021-09-05 07:44:43 字數 2117 閱讀 7885

上段時間,遇到乙個這樣的問題,由於資料顯示的原因,需要往spring boot專案中配置兩個資料庫連線池,乙個是mysql,另外乙個是amazon redshift。

接著前言,當連上兩個資料庫後,發生乙個問題,由於redshift主要定位是資料倉儲,所以對於頻繁的查詢插入操作會比較慢,另外,由於redshift資料庫連線數配置問題,會導致druid連線被遠端關閉。經常性會報500錯誤,實際是time_out。

其實這樣原因也挺正常,remote拒絕連線,所以把我的連線關閉了。

由於資料庫連線的關閉,druid就迴圈嘗試連線,當連線失敗,就會迴圈記錄error:

log.error("create connection outofmemoryerror, out memory. ", e);
首先乙個嘗試連線的執行緒:

@override

public void run()

看runlnternal方法:

private void runinternal() 

boolean emptywait = true;

if (createerror != null && poolingcount == 0)

if (emptywait)

// 防止建立超過maxactive數量的連線

if (activecount + poolingcount >= maxactive)

}} finally

physicalconnectioninfo physicalconnection = null;

try catch (outofmemoryerror e) finally

}if (breakafteracquirefailure) finally

return;

}this.errorcount = 0; // reset errorcount

if (closing || closed)

createschedulerfuture = createscheduler.schedule(this, timebetweenconnecterrormillis, timeunit.milliseconds);

return;

}} catch (sqlexception e) finally

}if (breakafteracquirefailure) finally

return;

}this.errorcount = 0; // reset errorcount

if (closing || closed)

createschedulerfuture = createscheduler.schedule(this, timebetweenconnecterrormillis, timeunit.milliseconds);

return;

}} catch (runtimeexception e) catch (error e) finally

log.error("create connection error", e);

// unknow fatal exception

setfailcontinuous(true);

break;

} catch (throwable e)

if (physicalconnection == null)

boolean result = put(physicalconnection);

if (!result)

break;

}}

runinternal中,可以看出,乙個for的死迴圈,無限次嘗試連線,所以失敗就記錄錯誤。

最終在console或者log檔案裡,將會有一大片日誌。

我開始嘗試尋找乙個引數,能夠設定嘗試次數,如果超過多少次,就放棄重連,但是沒有找到。。

在**中,不過有乙個這樣引數:

breakafteracquirefailure

由名字可以知道,就是當連線失敗,就不進行嘗試重連,也就是這樣完全放棄重試了。

該值預設是false,也就是預設嘗試連線

由一道題目引發的為穩定與不穩定的排序思路

今天為一道題目傷透了,還是因為自己的腦子不夠機靈,很多地方想的不夠透徹。這個一道很典型的排序題目 這個題目中,我們要求對陣列進行排序,只要就是相同的數字,序號必須在前面的優先,所以這個題目最合適的做法就是使用氣泡排序,不會產生不穩定的問題。我一直使用選擇排序,結果是拍來拍去,最後都是答案錯誤,最後爛...

連線oracle資料庫超時引發的問題。

最近生產庫突然產生客戶端連線時提示超時的現象。生產伺服器上只執行了oracle資料庫。生產伺服器版本windows2008r2 sp1。剛開始懷疑是網路問題。ping伺服器,不丟包,完全正常。tnsping不正常,時好時壞,與客戶端連線超時的現象一致。但在此期間ping伺服器未丟包。登陸伺服器net...

sql mode引發的資料庫問題

前幾天,在本地做完專案,測試完畢後,上傳到線上伺服器的時候,在做很多寫入資料庫的操作時,發現全部發生500報錯,返回的報錯資訊是,某個字段沒有預設值,寫入的時候沒有新增這個字段,該字段在資料表中是not null並且無預設值,導致插入失敗。查詢原因是從本地上傳伺服器專案時,伺服器資料庫由原來的5.6...