【问题标题】:Oracle JDBC flush shared pool is not workingOracle JDBC 刷新共享池不工作
【发布时间】:2017-04-14 16:15:22
【问题描述】:

我有下面的java代码比较这两个SQL查询的性能。 getNamedStatistics()打印 v$session 表中的一些列,如一致获取、执行计数等。

虽然我不能刷新 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

【问题讨论】:

  • 我觉得你也应该alter system flush buffer_cache
  • 没有任何区别

标签: java oracle jdbc oracle11g


【解决方案1】:

是什么让您认为共享池没有被刷新?

我怀疑您混淆了共享池和会话统计信息?会话统计信息会统计会话中不同资源的消耗情况。刷新共享池会影响会话消耗的资源数量(因为它会例如解析需要语句),但这显然不会重置资源消耗计数器。

我建议您重新查看分配的读数,其中详细说明了这一点。

最好的问候

您友好的老师,他设置了您询问的练习

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-01-06
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多