BUFFER CACHE 调优

环境准备

Microsoft Windows XP Professional 32位机

双核CPU

2G内存

设置参数

BUF_DATA_BUFFER_PAGES = 64

创建表

create table t(a int, b varchar(50), c varchar(50), d varchar(50), e varchar(50), f varchar(50), g varchar(50), h varchar(50), i varchar(50), j varchar(50), k varchar(50),l varchar(50), m varchar(50), n varchar(50));

数据插入程序

public class Test {

    private static String url="jdbc:oscar://localhost:2003/osrdb ";

    public static void main(String[] args) {

        Test ioTest = new Test();

        try {
            Connection  conn = ioTest.getConnection();
            Statement   st = conn.createStatement();

            //循环插入
            for(int i = 0; i < 100000; i++) {
                st.executeUpdate("insert into t values("+12.0+",'asdasdadasdasdasdasdsadeweweweweweeweweweewwewe'," +
                                 " 'weweweweeeeeewewewewewewwewewewewwewewewewe', " +
                                 "'wewewewewewewewewewewewewewewewewewewwewweew'," +
                                 "'sdfsfsffsdfdfsfsfsfdsdfdfsfdsfsdfsfsdfsddfdfds', " +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf'," +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 "'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 "'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 "'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf', " +
                                 " 'sdfasdfasdfsafdasdfafsdfsdfsdfsdsdsdf')");
            }

        } catch (SQLException e) {

              e.printStackTrace();
        }
    }

    /**
     * 创建连接
     * @return
     * @description
     * @version 1.0
     * @author whw
     * @update 2012-5-23 下午1:16:29
     */

     public Connection getConnection() {

        Connection con = null;

        try {

            Class.forName("com.oscar.Driver");

            con = DriverManager.getConnection(url, "sysdba", "szoscar55");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();
        }

        return con;
    }
}

查询数据

打开运行时诊断工具BUFFER CACHE 缓存命中率监控,运行查询语句,

BUFFER CACHE 命中率

public class Test {

    private static String url="jdbc:oscar://localhost:2003/osrdb";

    public static void main(String[] args) {

        Test ioTest = new Test();

        try {

            Connection conn = ioTest.getConnection();

            //设置为手动提交
            long        start = System.currentTimeMillis();
            Statement   st = conn.createStatement();

            //循环插入
            for(int i = 0; i < 100; i++) {
                st.executeQuery("select * from t");
            }

            long end = System.currentTimeMillis();

            System.out.println(end - start);

        } catch (SQLException e) {

            e.printStackTrace();

        }
    }

    /**
    * 创建连接
    * @return
    * @description
    * @version 1.0
    * @author whw
    * @update 2012-5-23 下午1:16:29
    */

    public Connection getConnection(){

        Connection con = null;

        try {

            Class.forName("com.oscar.Driver");

            con = DriverManager.getConnection(url, "sysdba", "szoscar55");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return con;

    }
}

结果如下:

../../../../../_images/image1422.png

图 20-30 BUFFER CACHE 命中率

通过实时监控可以发现命中率为57%命中率比较低。运行时间为4140ms

性能调优

修改BUF_DATA_BUFFER_PAGES为8192(理论上讲在内存容许的情况下越大越好)重新执行查询程序。

结果如下:

../../../../../_images/image1432.png

图 20-31 BUFFER CACHE 命中率

程序的运行时间降低为2719ms,命中率也有很大的提升变为95%。

表格 20-14

名称 修改前 修改后 性能提升百分比(1 – 修改后/修改前)
程序运行时间 4140 ms 2719 ms 34.3%