Oracle 性能调优案例(代码级别)

时间:2021-10-31 14:29:49

业务案例一:

业务:千万记录表中查询出50条符合条件的记录。

现象:oracle部署时跨机器,业务取得数据耗时10ms。造成业务性能不达标。

为了突出主题,对于异常分支,均已省略。

对于通常写法,

    oracle::occi::ResultSet *rs = NULL;

    oracle::occi::Connection *con = MY_POOL_CONNECTION->get_connection();

    oracle::occi::Statement *stmt = con->createStatement(str_select_info);

    rs = stmt->executeQuery();

    while(rs->next())

    {

      string value(rs->getString(1));

      ...

    }

通过测试,发现主要耗时在rs->getString()处。

由于DB与app不在同一台机器,因此当rs->next()时,会多次与oracle交互,产生延时。

Oracle 性能调优案例(代码级别)

解决方法:

查看occi 中 关于next()的定义。

virtual Status next(unsigned int numRows = 1) = 0;

可知,默认为每次查询1条记录。

将 rs->next() 修改为 rs->next(50),则每次可以查询50条记录。

在getString时,不会多次与DB交互,减小延时。