优化大师性能评估:jdbc 性能优化



jdbc性能主要由两个原因决定,是数据库本身性质,另个是和数据库相对独立jdbc应用接口(api)使用.这里说是如何正确使用jdbc编程接口,以获得更好性能.
  jdbc主要优化有:

  1.选择正确jdbc驱动

  2.Connention优化 使用连接池来管理Connection对象

  3.Statement优化 使用批量更新等

  4.Result优化 正确从数据库中get数据等

  (1)选择正确jdbc驱动:

  1 jdbc-odbc 桥

  2 本地api-部分 java驱动

  3 jdbc网路协议-纯java驱动

  4 jdbc本地协议

  最好选择 jdbc网路协议-纯java驱动 效率比较高 但需要第 3方软件Software支持 比如corba weblogic属于这种类型

  (2)优化Connection对象:

  1.设置适当参数 DriverManager.getConnection(String url,Properties props);

  例如:
  
   Properties props = Properties;
  props.put( " user " , " wuwei " );
  props.put( " password " , " wuwei " );
  props.put( " defaultRowPrefectch " , " 30 " );
  props.put( " dufaultBatchValue " , " 5 " );
  Connection con = DriverManager.getConnection( " jdbc.net/forum/images/smiles/icon_surprised.g order=0>racle:thin:@hostsString " ,props);
  
  对象可以通过设置DefaultRowPrefetch() 和 DefaultBatchValue() 两个参数类优化连接
  2.使用连接池 可以自己写个连接池 这样灵活性强,便于移植.

  apache项目开发了套非常通用而表现非常稳定对象池 http://jakarta.apache.org/commons/pool.htm

  设计了自己连接池后 在客户端建立对象
  
   public Object makeObject throws Exception{
  Class.forName( " oracle.jdbc.driver.OracalDriver " );
   DriverManager.getConnection( " url " , " username " , " password " );
  }
  
  销毁对象时用
  
   public void destroyObject(Object obj) throws Exception{
  ((Connection)obj.close);
  }
  
  注意几点 对象池里有没有回收机制,对象池里有机有容量限制,对象池里有多少个闲置对象(可以释放)
  
  3.控制事务提交 最好手动提交事务,不但可以可以保证数据原子性,而且对新能提高留下余地.
  
   try {
  connection.AutoComm( false );
   // 代码 用PreparedStatement 性能比Statementh好.

  connection.commit;
  connection.AutoCommit( true );
  }
   catch (SQLException e){
  }
   finally {
   // 代码

   (connection != null ){
  connection.close;
  }
  }
  
  4.适当选择事务隔离级别 TRANSACTION_READ_UNCOMMITED 性能最高
  TRANSACTION_READ_COMMITED 快

  TRANSACTION_REFEATABLE_READ 中等

  RANSACTION_SERIALIZABLE 慢

  (3)Statement 优化

  jdbc3个接口用来处理sql执行,是Statement PreparedStatement CallableStatement

  提供适当Statement接口

  批量执行sql

  从数据库批量获取数据

  PreparedStatement 比Statement性能要好 主要体现在个sql语句多次重复执行情况

  PreparedStatemnt只编译解析次而Statement每次编译次.

  批量修改数据库

  Statement 提供了思路方法addBatch(String)和executeBatch

  思路方法为stmt.addBatch("isnert....."); stmt.addBatch("update.....")

  stmt.executeBatch;

  也可以用PreparedStatement从而更好提高性能.
  
  pstmt = conn.preparedStatement( " insert o test_table(......) values(....?) " );
  pstmt.String( 1 , " aaa " );
  pstmt.addBatch;
  pstmt.String( 1 , " bbb " );
  pstmt.addBatch;
  .....
  pstmt.executeBatch;
  
  批量地从数据库中取数据.
  通过FetchSize和getFectchSize思路方法来设定和查看这个参数.这个参数对体统性能影响比较大.

  这个参数太小会严重地降低地性能.

  Connection Statement ResultSet都有这个参数,他们对性能地影响顺序是:

  ResultSet---------Statement---------Connection

  (4)优化ResultSet.

  体现在以下几个方面

  批量读取数据.合理设置ResultSetgetFetchSizeFetchSize思路方法中参数

  使用正确get和思路方法

  使用整数而不是字段名作为参数性能比较高,

  例如 Int(1,100);

  String(2,"aaaa");

  比 Int("id","100");

  String("name","aaaa");

  性能好

  设置适当滚动方向.有3个方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN

  单向滚动性能比较高.

  其他方面性能优化

  及时显示关闭Connection Statement ResultSet

  其中Connection可以用Connetion Pool处理.

  使用数据库系统强大查询功能去组织数据.这样运行是和数据库服务交互次数少,数据库返回给



  记录条数少多,所以性能有很大提高.
Tags:  数据库性能优化 性能优化 为提高性能而优化

延伸阅读

最新评论

发表评论