2016-11-30 37 views
1

我有以下的Java代码和平比较这两个SQL查询的性能。 getNamedStatistics()打印v $ session表中的某些列,如一致性获取,执行计数等。Oracle JDBC刷新共享池不工作

尽管我无法刷新oracle的内存,因此我可以比较这两个查询的性能。

 clearOracleMemory(); 
     start = System.nanoTime(); 
     System.out.println("Named statistics --> " + getNamedStatistic(statistics, conn)); 
     query1UsingStatement(conn); 
     System.out.println("Named statistics --> " + getNamedStatistic(statistics, conn)); 
     end = System.nanoTime(); 
     System.out.println("Took: " + ((end - start)/1000000) + "ms"); 

     clearOracleMemory(); 
     start = System.nanoTime(); 
     System.out.println("Named statistics --> " + getNamedStatistic(statistics, conn)); 
     query2UsingStatement(conn); 
     System.out.println("Named statistics --> " + getNamedStatistic(statistics, conn)); 
     end = System.nanoTime(); 
     System.out.println("Took: " + ((end - start)/1000000) + "ms"); 

ClearOracleMemory看起来像这样:

private static void clearOracleMemory() { 
     try { 
      PreparedStatement stmt = conn.prepareStatement("alter system flush shared_pool"); 
      ResultSet rs = stmt.executeQuery(); 
      System.out.println("shared pool flushed"); 
     } 
     catch (SQLException e) { 
      System.out.println("error clearing shared pool"); 
      System.out.println(e.getMessage()); 
     } 
    } 

输出示例:

shared pool flushed 
Named statistics --> {CPU used by this session=45, consistent gets=5613, parse count (total)=194, parse time elapsed=14, parse time cpu=14, execute count=1544} 

Named statistics --> {CPU used by this session=326, consistent gets=936322, parse count (total)=724, parse time elapsed=58, parse time cpu=60, execute count=3651} 
Took: 3676ms 

shared pool flushed 
Named statistics --> {CPU used by this session=344, consistent gets=942088, parse count (total)=851, parse time elapsed=69, parse time cpu=73, execute count=5319} 

Named statistics --> {CPU used by this session=2374, consistent gets=1019846, parse count (total)=20975, parse time elapsed=1728, parse time cpu=1732, execute count=26948} 
Took: 28038ms 
+0

我想你也应该'改变系统冲洗buffer_cache' – Kacper

+0

NOP Didnt什么不同锻炼 – Asdf

回答

4

究竟是什么使你认为共享池不就脸红?

我怀疑你混淆了共享池和会话统计信息吗?会话统计数据统计了会话的不同资源的消耗。刷新共享池会影响会话消耗的次数(因为它会要求解析语句),但显然这不会重置资源消耗计数器。

我建议您重新看看分配的读数,这里详细列出了这些读数。

问候

你友好的老师,谁设置你问