2016-11-30 6 views
1

У меня есть следующий код Java-кода, который сравнивает производительность этих двух SQL-запросов. getNamedStatistics() печатает несколько столбцов из таблицы сеансов v $, например, последовательные запросы получения, выполнения и т. Д.Oracle JDBC flush общий пул не работает

Хотя я не могу записать память оракула, поэтому я могу сравнить производительность этих двух запросов.

 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

Что такое, что заставляет вас думать, что общий пул не сбрасываться?

У меня есть подозрение, что вы путаете общий пул и статистику сеанса? Статистика сеанса подсчитывает потребление разных ресурсов для вашей сессии. Промывка общего пула влияет на количество ресурсов, которые потребляет ваш сеанс (так как это потребует, чтобы операторы были проанализированы), но это, очевидно, не приведет к сбросу счетчиков потребления ресурсов.

Я рекомендую вам взглянуть на присланные показания, где это подробно изложено.

С наилучшими пожеланиями

Ваш дружелюбный учитель, который установил упражнение, что вы спрашиваете о

Смежные вопросы