應用程式連線Oracle資料庫超時 連線數不夠用

2022-01-28 15:39:45 字數 2131 閱讀 1700

前段時間,開發同事反應出應用程式在insert資料時出現

[com.eyou.reyun.controller.reyun.reyunandroidgamelogcontroller%addgameloginlog() 161

] - could not open jdbc connection for transaction; nested exception is

com.alibaba.druid.pool.getconnectiontime

outexception: wait millis

10000, active 56, maxactive 800, creating 1, createelapsemillis 28926

連線資料庫異常。 檢視當時的客戶端接數也達到800+; 這個不正常。初步考慮是不是資料庫被入侵;根據監聽日誌;去檢視當天的連線情況。

awk -f"=

" '/connect_data/' log.xml | awk -f')' 'end'

連線資料庫都是應用程式的伺服器; 有各個**的資料、自有sdk資料、以及伺服器本地。 其中自有sdk所在的伺服器有大量的連線。超過70%。

初步診斷是連線數不夠;導致應用程式大量重複申請連線,資料庫支撐不了這麼大資料量;

vendor_id    : genuineintel

cpu family : 6model : 62model name : intel(r) xeon(r) cpu e5-2620 v2 @ 2.10ghz

stepping : 4cpu mhz : 2100.170cache size : 15360kb

physical id : 0siblings : 12cpu cores : 6cpuid level : 13

先從資料庫分析解決

目前oracle資料庫的最大連線數是1000;相對足夠大了。因為oracle是程序資料庫;不像mysql那樣能支援大量的客服端連線不像mysql那樣能支援大量的客服端連線

在這需要吐槽下oracle;連個連線池的中介軟體也找不到;是不是繳費了才有這服務。

為啥應用程式會大量重複連線資料庫呢?是限制非活躍回話超過多少分鐘就自動斷開

alter system set resource_file=false;

做了上面3步;上面connectiontimeoutexception;沒有出現;但是出現

socket() failed (24: too many open files) while connecting to upstream

核查後;發現有個遊戲登入記錄是cp方通過介面傳遞過來的;遊戲登入資料自有sdk也是有的;只是沒有角色資訊。而推廣平台未涉及到角色的層次的統計。

通過以上處理;在寫個指令碼監控下連線數

#

!/bin/sh

n=`ps -ef|grep oracleorcl | grep "

local=no

" |wc -l`

d=`date`

echo

"$d:$n

" >> /home/oracle/log/oracle_p_num

if [ $n

-gt 900];then

echo

$n >> /home/oracle/killorcl.log

ps -ef|grep oracleorcl | grep "

local=no

" |awk ''

echo "$d

" >> /home/oracle/killorcl.log

fi

在 oracle_p_num 記錄每分鐘的統計; 觀察下一周資料庫連線數趨於平穩100左右;oracle晚上10點會做統計資訊收集;最高不超過150的連線數。

最後:考慮後期公司遊戲業務發展/上線;需重新規劃下資料庫架構;重新挑選下資料庫伺服器;將oracle遷移到postgresql12。採用讀寫分離模式(邏輯複製+hot standby+pgbouncer)

最近通過編寫postgresql儲存過程有些心得;後期可考慮寫一系列的postgresql的儲存過程教程。

應用程式和資料庫連線

資料庫 資料庫的定義有好多,我們可以把他理解為是乙個存放資料的倉庫,而這些資料之間有存在聯絡。資料庫模式 根據資料庫的結構可以講資料庫分為三個模式 層次資料庫,網狀資料庫,和關聯式資料庫。前兩種資料模式沒有涉及,我只說關聯式資料庫。關聯式資料庫 乙個資料庫可以有n多表,這些表跟表之間通過某個字段可以...

C 應用程式中讀取Oracle資料庫

最近的任務就是開發了乙個功能,要從 商那邊讀取資料,然後拿過來,處理以後放到我們自己的資料庫中。商那邊是oracle資料庫,其實不管什麼資料我想都差不多,於是我就開始了。由於在家裡寫的部落格,那些截圖都放在公司電腦了,希望能通過文字讓大家明白,多有不周還請原諒。第一種方法 一開始我是用的.net裡面...

C 開發資料庫應用程式

簡單性 靈活性 而且,visual c 提供的開發環境可以使開發者根據自己的需要設計應用順序的介面和功能。visual c 提供了豐富的類庫和方法,可以使開發者根據自己的應用特點進行選擇。訪問速度快 visual c 提供了新的訪問技術 ole db 和 ado ole db 和 ado 都是基於 ...