亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

高速緩存和連接池對數據庫性能的影響

2019-11-18 12:37:43
字體:
來源:轉載
供稿:網友

內容: 

初識高速緩存和連接池 
Cache(高速緩存)和Connection Pool(連接池)的概念和機制 
高速緩存的參數設定 
連接池的設置和應用 
性能問題的深遠思考 
解決性能問題的幾條經驗 

初識高速緩存和連接池

  設想這樣一種情形:你忽然口渴,需要一杯水來緩解,從心情上來講,當然是越快越好了。通常,一杯水的產生包括從水源(井水、河水或江水、甚至海水等)抽取,通過管道傳輸和設備凈化,才到達你飲水的容器中。上述過程是必須的,但并不是每一杯水的產生都必須把上述過程重復一次。你可以用一個大一點的容器(例如缸或罐等)來盛大量的水,喝水之前分到杯子小部分中即可,你的代價只是把水從缸轉移到杯子;你還可以在大量用水(例如洗澡或洗衣服等)時,只需打開水閥,而不必臨時鋪設通往水源的管道和購買凈化水的設備。因為水是人們生活不可缺少的東西,每時每刻都在被大量地使用,而且物理本質也完全相同,所以政府會鋪設管道和建設水處理站,完成那些比較困難的工作,達到資源共享的目的,而你也可針對自己的需求,用容器來盛那些具有特定用途的水。本文將要和你討論的高速緩存和連接池與上述特定容器和傳輸管道有很多相似之處,它們都達到了同一個目的:在滿足用戶意愿的前提下,盡可能地共享資源,以提高整個系統的性能。

  高速緩存和連接池是數據訪問中的重要技術,某些情況下的應用對訪問數據庫的性能有巨大的提高,而且都得到了數據庫業界的普遍支持。前者由DBMS廠商針對自己的數據庫實現,提供可供用戶配置的方案;后者是JDBC的一個標準接口,由支持J2EE技術的應用服務器廠商提供具體的實現,而你的java程序代碼無需更改。本文將向你簡單介紹高速緩存和連接池的概念和機制,并以PointBase數據庫為例向你展示高速緩存的應用,而一個簡單的連接池應用場景將向你描述應用的條件和提高的性能。

  Cache(高速緩存)和Connection Pool(連接池)的概念和機制

  它們不是數據庫獨有的技術,但卻得到數據庫業界的普遍支持,并在其它數據存取和對象復用領域有很多類似的應用。

Cache(高速緩存) 

  作為個人計算機的日常使用者,你肯定聽說過這些名詞:Cache(高速緩存)、Memory(內存)、Hard disk(硬盤)。它們都是數據存取單元,但存取速度卻有很大差異,呈依次遞減的順序。對于CPU來說,它可以從距離自己最近的Cache高速地存取數據,而不是從內存和硬盤以低幾個數量級的速度來存取數據。而Cache中所存儲的數據,往往是CPU要反復存取的數據,有特定的機制(或程序)來保證Cache內數據的命中率(Hit Rate)。因此,CPU存取數據的速度在應用高速緩存后得到了巨大的提高。
 
  對于數據庫來說,廠商的做法往往是在內存中開辟相應的區域來存儲可能被多次存取的數據和可能被多次執行的語句,以使這些數據在下次被訪問時不必再次提交對DBMS的請求和那些語句在下次執行時不必再次編譯。

  因為將數據寫入高速緩存的任務由Cache Manager負責,所以對用戶來說高速緩存的內容肯定是只讀的。需要你做的工作很少,程序中的SQL語句和直接訪問DBMS時沒有分別,返回的結果也看不出有什么差別。而數據庫廠商往往會在DB Server的配置文件中提供與Cache相關的參數,通過修改它們,可針對我們的應用優化Cache的治理。下圖是在Win2K中配置MS access數據源的界面,在"驅動程序"部分你可設置的頁超時和緩沖區大小就是和Cache有關的參數。在后面的討論中,我將展示一個更復雜的數據庫,向你解釋Cache對訪問數據庫性能的影響和如何尋找最優的配置方案。

Connection Pool(連接池)

  池是一個很普遍的概念,和緩沖存儲有機制相近的地方,都是縮減了訪問的環節,但它更注重于資源的共享。下圖展示了建立"調制解調器池"以共享調制解調器資源的VPN撥號方案:

  對于訪問數據庫來說,建立連接的代價比較昂貴,因此,我們有必要建立"連接池"以提高訪問的性能。我們可以把連接當作對象或者設備,池中又有許多已經建立的連接,訪問本來需要與數據庫的連接的地方,都改為和池相連,池臨時分配連接供訪問使用,結果返回后,訪問將連接交還。

  JDBC 1.0標準及其擴展中沒有定義連接池,而在JDBC 2.0標準的擴展中定義了與連接池相關的接口。與接口對應的類由應用服務器廠商實現,你可在對服務器的治理過程中調節某個數據庫連接池的參數。下圖簡略地描述了連接池的運行機制:

高速緩存的參數設定

  在PointBase數據庫DB Server的配置參數列表中,我們可以找到這幾個參數:cache.checkpointinterval、cache.size、SQLCaching.size等。下表是對各個參數的描述:

參數名 參數描述 

cache.checkpointinterval 檢查點的時間間隔 
cache.size 高速緩存的最大頁數(素數時,性能最好) 
SQLCaching.size 高速緩存中SQL語句的個數 

  對于cache.checkpointinterval來說,和前面Access界面中的頁超時是一個概念,它指定了頁面內容更新的時間間隔,這取決于你的應用對時效性的要求程度。

  對于cache.size來說,指定了頁面的個數,一般應設定為符合你查詢結果的需求。至于為何是素數,我也納悶,不過還是遵照廠商的指示吧。

  對于SQLCaching.size來說,指定了存儲的經過編譯的SQL語句的個數,你可以把它設定為0,從而取消這個選項。

  使用Cache后,性能到底有多大提高?我打開PointBase的Console通過JDBC驅動訪問Server,將SQL菜單下的Timing Mode選上,以顯示各個步驟的耗費時間。執行語句是:

SELECT * FROM PRODUCT_TBL

第一次訪問,總計耗時1082毫秒,而編譯耗時771毫秒。

緊接著的第二次訪問,總計耗時僅為160毫秒,而編譯耗時為0。

再接著的第三次訪問,總計耗時僅為91毫秒,編譯耗時也為0。

  關閉Console,等待超過30秒之后,重新開啟Console,執行相同的語句,總計耗時210毫秒,編譯耗時為20毫秒。

  自等待超過30秒之后,執行語句,總計耗時101毫秒,編譯耗時為0。

  由此可以看出,高速緩存的應用大大提高了訪問數據庫的性能,而其參數的設定則要依據前面對它們的描述來進行,需要你仔細閱讀數據庫的配置文檔。

連接池的設置和應用

  我選擇IBM公司的應用服務器平臺WebSphere來給大家演示連接池的設置,使你面對友好的Web界面,可以體驗到非常簡易的操作場景。

  首先,我們進入WebSphere的治理控制臺,這是一個非常漂亮的Web界面:

  緊接著,我選定一個數據源:session Persistence datasource,就可看到這個數據源的屬性配置了。在這兒,僅僅列舉和連接池有關的屬性:

  Minimum Pool Size 池中保持的連接的最小數目;有新的請求,且沒有激活連接可供使用時,池中連接數將增大,到最大連接數為止 
  Maximum Pool Size 池中保持的連接的最大數目;當這個數目達到,且沒有激活連接可供使用時,新的請求將等待 
Connection Timeout 當連接數達到最大值,且激活連接都在被使用時,新的請求等待的時間 
Idle Timeout 連接可在池中閑置的時間;超過將釋放資源,到最小連接數為止 
Orphan Timeout 連接在被應用控制時,可閑置的時間;超過將返回池中 

你可以根據需要來修改這些數值,以滿足你的應用需要。接下來,我們討論一下連接池的應用。

EJB訪問數據庫(場景1,使用JDBC 1.0) import java.sql.*;
import javax.sql.*;
...
public class AccountBean implements EntityBean {
...
public Collection ejbFindByLastName(String lName) {
try {
String dbdriver = new initialContext().lookup("java:comp/env/DBDRIVER").toString();
Class.forName(dbdriver).newInstance();
Connection conn = null;
conn = DriverManager.getConnection("java:comp/env/DBURL", "userID", "passWord");
...
conn.close();
}
...
}

  假如EntityBean是一個共享組件,那么每次客戶請求時,都要建立和釋放與數據庫的連接,這成為影響性能的主要問題。

EJB訪問數據庫(場景2,使用JDBC 2.0) import java.sql.*; 
import javax.sql.*; 
// import here vendor specific JDBC drivers

public ProductPK ejbCreate() {
try {
// initialize JNDI lookup parameters
Context ctx = new InitialContext(parms);
...
ConnectionPoolDataSource cpds = (ConnectionPoolDataSource)ctx.lookup(cpsource); 
...
// Following parms could all come from a JNDI look-up 
cpds.setDatabaseName("PTDB"); 
cpds.setUserIF("XYZ"); 
...
PooledConnection pc = cpds.getPooledConnection(); 
Connection conn = pc.getConnection(); 
...
// do business logic
conn.close();
}
...
}

  EJB組件利用JNDI的lookup()方法定位數據庫的連接池資源,利用getConnection()方法得到已經打開的數據庫連接,而用close()來釋放連接,放回池中。因此,與場景1相比,少了與數據庫建立物理連接的損耗。對于原本要頻繁打開和關閉物理連接的應用來說,通過這種建立邏輯連接并復用的方法,性能肯定能夠得到大幅度提高。

性能問題的深遠思考

  性能問題并不局限于數據庫的應用上,而是存在于每個軟件系統中。我們希望軟件系統付出的最小,而獲得的最大,因而無時無刻不在優化它們。通過《Java程序訪問數據庫的速度瓶頸問題的分析和解決》和本文,我對Java程序訪問數據庫的性能問題做了分析,并提供了優化Java程序的解決方案,希望對你有所幫助。

  也許你會關心碰到類似的性能問題時應如何分析和解決,我就針對此次探討"訪問數據庫的速度瓶頸"問題的過程中碰到的難題、網友的意見和自己的體會,作一個關于"方法論"的經驗總結,希望能夠拋磚引玉,更好地解決類似的問題。

解決性能問題的幾條經驗

  不要讓硬件的低配置成為軟件正常運行的障礙,后者有升級前者的需求,請立即滿足;經常碰到這樣的問題"P166+64M的機子跑Win2K+MySQL+JBoss,能跑么?"我在回答"可以"的同時只有對著屏幕發呆了。 
盡量使用商業軟件,并享受良好的售后技術支持;假如你沒有黑客精神,請不要使用自由軟件。 
分析好自己的問題,也許它的本質和他人的不同;沒有一把鑰匙可打開的任一把鎖。
 
  確定瓶頸環節的位置;解決了瓶頸問題,往往整個的性能問題就解決了,千萬不要抓著邊緣的問題不放。 

  將瓶頸環節細分為多個順序的流程,用逐個替代的方法來試探瓶頸的核心位置;細分問題使你都問題有更進一步的了解。 

  做自己能做的和該做的事情,始終面向自己的現實問題;不要嘗試那些應該由廠商解決的問題(例如,自己寫個JDBC驅動)。 

  他人的方案只供自己參考,解決要靠自己思考;你我應用的情形不同,應用解決方案要在理解他人的方案之后。 

  觀察新技術,應用新技術;它往往包含了前人對問題解決的思路,只是對你來說不可見。 

  問題得到解決后,立即罷手,并匯報結果;在現實問題得到解決后,沒有必要花費精力在非核心的問題上,也許它們永遠不會被碰到,不要假想問題讓自己解決。 

  上述經驗為個人即興的總結,并未有嚴謹的邏輯推導,僅代表我解決技術問題的思路,供你碰到類似問題時參考。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精久久久久久久久久人| 亚洲国模精品私拍| 久久久精品国产网站| 欧美性受xxxx白人性爽| 欧美国产乱视频| 欧美性videos高清精品| 伦伦影院午夜日韩欧美限制| 97视频在线播放| 亚洲欧美日韩精品久久亚洲区| 国产国语videosex另类| 国外视频精品毛片| 国产精品网站视频| 北条麻妃一区二区三区中文字幕| 亚洲一区美女视频在线观看免费| 亚洲国产精品人人爽夜夜爽| 国产视频久久久久久久| 视频在线观看一区二区| 欧美在线一区二区视频| 在线亚洲国产精品网| 青青草成人在线| 中文欧美在线视频| 成人网在线免费观看| 日韩av电影国产| 成人免费网站在线看| 久久精品99久久久香蕉| 一区二区三区回区在观看免费视频| 国产91精品久久久久久久| 亚洲欧美日韩一区二区三区在线| 久久精品视频在线播放| 欧美理论电影在线观看| 国产在线视频一区| 中文字幕在线精品| 色99之美女主播在线视频| 欧美久久久精品| 黑人巨大精品欧美一区二区免费| 国产成人精品av| 国产精品一区二区女厕厕| 最近2019年中文视频免费在线观看| 日本午夜精品理论片a级appf发布| 欧美最顶级的aⅴ艳星| 国产xxx69麻豆国语对白| 57pao成人国产永久免费| 国产欧美一区二区三区久久| 国产精品视频免费在线观看| 国产欧美日韩视频| 亚洲国产精品高清久久久| 欧美中文字幕在线观看| 亚洲天堂av在线播放| 久久五月天色综合| 久久久久日韩精品久久久男男| 97婷婷大伊香蕉精品视频| 亚洲一区二区久久| 欧美极品在线视频| 亚洲一区二区三区777| 4p变态网欧美系列| 精品美女国产在线| 久久777国产线看观看精品| 美女av一区二区| 亚洲欧美国产视频| 欧美久久久精品| 在线播放日韩av| 91极品视频在线| 欧美性生交大片免网| 色悠悠久久88| 国产91在线视频| 亚洲乱码一区二区| 欧美激情亚洲综合一区| 久久国产天堂福利天堂| 国产综合福利在线| 日韩精品免费一线在线观看| 国产成人精品日本亚洲专区61| 亚洲天堂第一页| 日本成人精品在线| 国产mv免费观看入口亚洲| 欧美性猛交xxxx富婆| 欧美在线观看www| 2019中文字幕在线免费观看| 性欧美xxxx视频在线观看| 久久精品国产亚洲一区二区| 亚洲女人天堂色在线7777| 亚洲第一级黄色片| 亚洲人在线视频| 欧美成人一区二区三区电影| 国产精品久久久久久久久久99| 亚洲精品视频中文字幕| 欧美激情久久久久| 91夜夜揉人人捏人人添红杏| 97精品在线视频| 日韩av成人在线| 美女国内精品自产拍在线播放| 清纯唯美亚洲激情| 69影院欧美专区视频| 97成人在线视频| 色婷婷成人综合| 国产精品高清在线| 最近2019年中文视频免费在线观看| 一本色道久久88亚洲综合88| 亚洲国产精品人人爽夜夜爽| 欧美激情国产日韩精品一区18| 久久精品国产v日韩v亚洲| 午夜精品理论片| 国产69久久精品成人| 国产91精品青草社区| 清纯唯美亚洲激情| 夜夜躁日日躁狠狠久久88av| 狠狠操狠狠色综合网| 欧美精品性视频| 欧美性猛交xxxx久久久| 亚洲美女福利视频网站| 另类天堂视频在线观看| 欧美巨猛xxxx猛交黑人97人| 91免费综合在线| 色青青草原桃花久久综合| 国产精品久久久久免费a∨大胸| 超薄丝袜一区二区| 国产日韩欧美91| 日韩国产高清污视频在线观看| 亚洲欧美制服丝袜| 国产一区二区在线免费视频| 亚洲精品av在线播放| 中文字幕久精品免费视频| 日韩久久精品电影| 国产成人a亚洲精品| 日韩美女在线观看| 久久久视频在线| 久久久久久国产精品三级玉女聊斋| 国产精品久久久久久久久久三级| 91精品久久久久久久久久久久久| 久久99精品久久久久久青青91| xvideos国产精品| 国产精品狼人色视频一区| 97久久精品人人澡人人爽缅北| 国产在线观看91精品一区| 久久久久中文字幕2018| 韩国v欧美v日本v亚洲| 欧美日韩亚洲系列| 91精品久久久久久久久不口人| 亚洲男人天堂网站| 成人黄色免费在线观看| 国产成人在线播放| 国产精品成人一区| 九九热r在线视频精品| 国产精品久久久91| 原创国产精品91| 91在线网站视频| 国产精品欧美一区二区| 日韩福利伦理影院免费| 亚洲欧洲av一区二区| 久久乐国产精品| 亚洲成人免费网站| 97国产真实伦对白精彩视频8| 亚洲人成电影在线观看天堂色| 久久精品一本久久99精品| 97国产精品人人爽人人做| 国产日韩一区在线| 亚洲天堂av在线免费观看| 国产精品视频成人| 亚洲天堂日韩电影| 国产v综合v亚洲欧美久久| 亚洲一区二区三区在线视频| 精品精品国产国产自在线| 亚洲激情久久久| 亚洲成人久久久久| 国产午夜精品免费一区二区三区|