最近我們的主資料庫當前連線數超過
400,
客戶端連線經常超時
,cpu
波動較大,四台memcached (每台32g) 已經不夠用,命中率也較低。該資料庫伺服器是每天4億pv的核心。我們優化資料庫後。開發了檔案快取系統。
某個頁面第一次接受使用者訪問時將資料庫中獲取到的內容轉化成字串檔案的形式,並且儲存在伺服器硬碟當中,當後面的人再來訪問時先讀取本地
cache,
如果獲取不到只需要直接讀取物理檔案的內容即可,從而達到減少資料庫操作的目的.
先看一下流程圖:
使用檔案快取肯定乙個讀
/寫衝突,併發的問題
,特別像我們這麼大訪問的頻道
1. 解決讀寫衝突方法
get獲取物理時1à
判斷檔案鎖
.lock
是否存在
à 如果存在表示該檔案正在被寫中
.不獲取
.否則就獲取2à
讀取時中間已加上
防止不停地在讀.造成
i/o過高.
set
寫入物理檔案 1
à 使用讀取鎖
readerwriterlock
_locker = new
readerwriterlock (); //
讀取鎖2 à
_locker.acquirewriterlock(timespan .fromseconds(3));
// 寫鎖定(寫入時間最大允許在3 秒內完成,超時立即退出)
3 à
建立乙個.lock 的物理檔案, 表示該檔案正在被建立
4 à
建立快取物理檔案
5 à
刪除.lock 物理檔案
6 à
_locker.releasewriterlock(); //
釋放寫鎖定
源**:
學習Mybatis中的快取以減少對資料庫的蹂躪
一 一級快取 通過mybatis自帶快取,且預設開啟一級快取,不開啟二級,當使用同樣的sqlsession物件查詢相同資料時,只有第一次查詢會向資料庫傳送查詢語句,並將查詢結果放入session快取中,之後查詢相同資料時,直接在快取中取用即可。commit可以清除快取。二 當二個或多個sqlsess...
對資料庫的操作
資料庫的檔案 資料檔案 包含資料和物件,主資料檔案建議副檔名.mdf,其餘.ndf 事務日誌檔案 包含恢復資料庫中的所有事物所需的資訊,建議副檔名.ldf 至少包含乙個資料檔案和乙個日誌檔案 對資料庫的操作 選其中乙個,可以選 選其中乙個,必選 分割,表示多個選項 表示說明 建立create dat...
資料庫效能優化 4 減少對資料庫的連線次數
原因 1 頻繁的對資料庫操作將影響其他正常使用者的訪問。2 為了保護資料的安全會牽涉到鎖 資料庫級鎖,表級鎖,塊級鎖,頁級鎖,行級鎖。3 對資料庫的訪問會牽涉到磁碟io的操作,經過一段時間分析發現 效能差主要是在資料的讀寫。4 每次讀資料庫的更新操作會寫日誌,減少不必要的磁碟寫入。解決方法 1 能合...