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

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

如何測定JDBC的性能(下)

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

  封裝ResultSet類
  ResultSetWrapper類也主要包括托付方法:
  public class ResultSetWrapper implements ResultSet
  {
  ResultSet realResultSet;
  StatementWrapper parentStatement;
  String sql;
  public ResultSetWrapper(ResultSet resultSet, StatementWrapper statement, String sql) {
  realResultSet = resultSet;
  parentStatement = statement;
  this.sql = sql;
  }
  public boolean absolute(int row) throws SQLException {
  return realResultSet.absolute(row);
  }
  ...
  其中也有一些方法不是簡單的托付方法,getStatement()方法返回生成ResultSet的statement對象,我們需要讓它返回StatementWrapper對象:
  public Statement getStatement() throws SQLException {
  return parentStatement;
  }
  The getArray() methods need to return a wrapped Array object:
  public Array getArray(int i) throws SQLException {
  return new SQLArrayWrapper(realResultSet.getArray(i), parentStatement, sql);
  }
  public Array getArray(String colName) throws SQLException {
  return new SQLArrayWrapper(realResultSet.getArray(colName), parentStatement, sql);
  }
  最后,我們需要添加測試過程。許多開發人員都錯誤地認為,不同的Statement.execute*()方法都會引起數據庫交互過程帶來的負擔,對于數據庫的更新和讀取少量的數據庫記錄而言,這是正確的。假如讀取的數據庫記錄的量較大,ResultSet.next()需要大量的時間從數據庫中讀取記錄。假如讀取的記錄太多,ResultSet.next()調用所需要的時間就會多于SQL語句執行的時間。因此,測試ResultSet.next()調用的時間也就是理所當然的了。
  public boolean next() throws SQLException {
  Thread t = Thread.currentThread();
  JDBCLogger.startLogSqlNext(t, sql);
  boolean b = realResultSet.next();
  JDBCLogger.endLogSqlNext(t, sql);
  return b;
  }
  假如需要,還有一些ResultSet調用可以測量,例如PRevious()、insertRow()等,但大多數的應用程序只需要對next()進行測量。
  JDBC封裝類架構
  上面討論了需要封裝的類,我沒有明確地說明Array和DatabaseMetaData的封裝類,但它們都比較簡單,只需要返回ResultSetWrappers和ConnectionWrappers而不是ResultSets和Connections類。使用封裝對象測試數據庫交互過程性能的技術適用于JDBC 1、JDBC 2和未來的JDBC 3,它們在接口定義方面互不相同(因此需要不同的封裝類。但我們可以用同一種方式創建所有不同版本下的封裝類。
  我沒有討論的是JDBCLogger,該類的一個簡單的實現中不調用測試方法,但將不提供測試功能:
  package tuning.jdbc;
  
  public class JDBCLogger
  {
  public static void startLogSqlQuery(Thread t, String sql) {}
  public static void endLogSqlQuery(Thread t, String sql) {}
  public static void startLogSqlNext(Thread t, String sql) {}
  public static void endLogSqlNext(Thread t, String sql) {}
  }
  一個更有用的定義是測試查詢的時間。下面的方法記錄查詢開始時的時間,并在查詢結束時得出使用的時間。由于假定在同一個線程中SQL查詢不能遞歸(一般情況下都是這樣的),下面的方法是相當簡單的:
  private static Hashtable QueryTime = new Hashtable();
  public static void startLogSqlQuery(Thread t, String sql)
  {
  if (QueryTime.get(t) != null)
  System.out.println("WARNING: overwriting sql query log time for " + sql);
  QueryTime.put(t, new Long(System.currentTimeMillis()));
  }
  public static void endLogSqlQuery(Thread t, String sql)
  {
  long time = System.currentTimeMillis();
  time -= ((Long) QueryTime.get(t)).longValue();
  System.out.println("Time: " + time + " millis for SQL query " + sql);
  QueryTime.remove(t);
  }
  使用JDBCLogger類中的這些方法的輸出將如下所示:
  Time: 53 millis for SQL query SELECT * FROM JACKTABL
  對于每次查詢執行來說,這將使我們能夠精確地測試SQL查詢所使用的時間,也能夠計算出JDBCLogger類中所有查詢所需要的時間。我經常測試的是最小、最大、平均、平均偏差等值,這些值在測試大規模的系統的性能時更有用。
  使用JDBC封裝類框架
  我們已經介紹了非常有用的在應用程序的開發和布置階段測試JDBC調用性能的方法。由于封裝類比較簡單,而且功能強大,又不需要對應用程序進行大量的修改,它們可以被保留在已經布置好的應用程序中,創建一個可配置的JDBCLogger類將使我們能夠根據自己的需要開啟或關閉測試功能。
  在開發階段,由于能夠計算出累積的時間代價,我們能夠利用這些類辨別出個別的需要較大時間代價的數據庫交互過程和重復的數據庫交互過程,哪個的時間代價更大。辨別出時間代價較大的數據庫交互過程是我們改進應用程序性能的第一步。在開發階段,這些封裝類可以用來發現應用程序的理論性能和實際性能之間的差距,有助于我們分析為什么會有差距。
  在利用這些類找出JDBC的性能瓶頸在哪里后,我們就可以對數據庫的接口進行調整了。我將在以后的文章中繼續討論JDBC性能的技術。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99国产精品自在自在app| 45www国产精品网站| 疯狂做受xxxx高潮欧美日本| 日韩国产高清视频在线| 国产97在线|亚洲| 久久久久久久久爱| 日韩精品极品毛片系列视频| 亚洲精品一区二区三区不| 日本欧美爱爱爱| 久久影院中文字幕| 欧美体内谢she精2性欧美| 一区二区三区无码高清视频| 欧美老女人xx| 国产91精品久久久久久| 日韩欧美第一页| 亚洲精品456在线播放狼人| 久久精品视频中文字幕| 精品一区精品二区| 国产免费观看久久黄| 中文字幕欧美专区| 91成人在线视频| 国产精品久久久久久久久久尿| 国产一区二区视频在线观看| 亚洲精品videossex少妇| 91精品国产91久久久久久不卡| 国产精品久久久久久久久久免费| 国产成人激情小视频| 欧美大片va欧美在线播放| 久久理论片午夜琪琪电影网| 91精品国产91久久久久久| 91精品国产综合久久久久久久久| 国产精品极品美女粉嫩高清在线| 国产经典一区二区| 91精品中文在线| 青青久久av北条麻妃海外网| 国产亚洲精品高潮| 国产欧美日韩中文字幕| 久久久久久久久久久久久久久久久久av| 91在线播放国产| 富二代精品短视频| 久久精彩免费视频| 欧美日韩免费观看中文| 91成人福利在线| 亚洲欧洲国产伦综合| 亚洲男人天堂2019| 国产精品视频一区二区三区四| 欧美日韩另类字幕中文| 国产精品视频在线观看| 欧美中文在线观看国产| 久久99精品久久久久久琪琪| 日韩在线欧美在线国产在线| 精品久久久中文| 九九久久综合网站| 亚洲欧洲午夜一线一品| 亚洲aⅴ日韩av电影在线观看| 国产精品私拍pans大尺度在线| 日韩中文字幕网址| 亚洲综合日韩中文字幕v在线| 91po在线观看91精品国产性色| 精品在线观看国产| 久久久久久久97| 国产精品欧美在线| 亚洲级视频在线观看免费1级| 欧美亚洲成人xxx| 欧美最猛性xxxxx(亚洲精品)| 中文字幕在线看视频国产欧美| 激情成人在线视频| 欧美午夜电影在线| 97国产在线观看| 欧美性理论片在线观看片免费| 精品国产福利在线| 欧美国产第一页| 亚洲天堂av在线免费| 亚洲国模精品一区| 亚洲va欧美va在线观看| 国产福利成人在线| 国内精品久久久久久中文字幕| 亚洲性av在线| 色综合五月天导航| 亚洲91精品在线观看| 色综合导航网站| 日韩成人激情在线| 亚洲最大中文字幕| 久久精品这里热有精品| 一区二区三区四区精品| 久久久精品一区二区三区| 欧美亚洲另类制服自拍| 日韩精品一二三四区| 欧美日韩999| 国产成人精品av在线| 国产精品99久久99久久久二8| 国产a∨精品一区二区三区不卡| 亚洲伊人久久综合| 最新的欧美黄色| 26uuu亚洲伊人春色| 国产视频在线观看一区二区| 久久久国产一区二区| 亚洲经典中文字幕| 欧美国产日本在线| 青草青草久热精品视频在线观看| 亚洲精品国产综合久久| 国产精品久久久久久久久久新婚| 国产91色在线|免| 亚洲精品中文字幕有码专区| 亚洲少妇激情视频| 欧美日韩中文在线| 亚洲日韩中文字幕在线播放| 国产在线精品一区免费香蕉| 日韩欧美一区二区三区| 久久精品最新地址| 国产精品男女猛烈高潮激情| 亚洲最大av网站| 国产亚洲人成a一在线v站| 欧美性猛交xxxxx水多| 国产精品久久久久77777| 91在线视频免费| 欧美性猛交xxxxx免费看| 久久亚洲精品成人| 国产精品jizz在线观看麻豆| 欧洲美女7788成人免费视频| 精品久久香蕉国产线看观看亚洲| 国产成人在线一区二区| 77777亚洲午夜久久多人| 精品国模在线视频| 国产精品视频免费观看www| 国产欧洲精品视频| 91精品国产91| 亚洲天堂免费观看| 久久影视电视剧免费网站清宫辞电视| 午夜精品三级视频福利| 欧美性xxxx极品hd欧美风情| 国产精品露脸av在线| 中文字幕亚洲综合久久| 亚洲国产精品va在看黑人| 欧美高清理论片| 日韩女优人人人人射在线视频| 国产精品黄页免费高清在线观看| 九色91av视频| 中文字幕精品www乱入免费视频| 欧美中文在线字幕| 亚洲电影免费观看高清完整版在线| 欧美精品videos另类日本| 在线亚洲国产精品网| 狠狠综合久久av一区二区小说| 日韩成人小视频| 久久久久久国产| 欧美激情综合色综合啪啪五月| 亚洲国产精品人久久电影| 黑人巨大精品欧美一区二区三区| 九九热在线精品视频| 精品久久久久久中文字幕| 亚洲欧美在线播放| 成人xxxxx| 日韩欧美第一页| 亚洲国产精品女人久久久| 欧美放荡办公室videos4k| 欧美日本黄视频| 久久影院资源站| 免费不卡欧美自拍视频| 日韩久久免费电影| 日韩精品中文字幕在线| 日本亚洲欧洲色α| 亚洲图片在线综合| 国产精品日韩欧美综合|