Oracle数据库性能问题

时间:2017-08-02 12:46:26

标签: oracle

我们正试图从oracle数据库中提取数据,但似乎性能非常低。

我们有一个大约10M行的表格,我们有一个索引,通过它我们可以拉动1.3k行{select * from tab where indexed_field ='value'}(以简化形式)。

SQuirreL报告查询采取“执行:0.182s,构建输出:28.921s”。返回的数据占用340kB(例如,复制/粘贴到文本文件中时)。

有时,建筑物输出阶段需要更长时间(> 5分钟),尤其是第一次运行查询时。重复它似乎运行得更快 - 例如29s值超过。这可能只是数据库暂时过载的结果,可能是因为缓冲了重复数据吗?

每50行(13kB)是第二个合理数字还是这个意外大? (这不太可能是网络问题。)

dbms是否有可能无法利用数据可以物理分组的事实(通过使物理顺序与索引顺序相同)并且每行执行单独的磁盘读取,如果是这样,怎么能它被说服更有效率?

数据并不奇怪 - 每行22列,大多数定义为varchar2(250),但通常包含几十个字符。我不确定运行Oracle的铁器有多大,但是它存在于数据中心,所以可能不会太过分。

感激地收到任何想法。

3 个答案:

答案 0 :(得分:1)

kfinity>您是否尝试过将抓取尺寸设置得更大,比如500左右?

那是那个!加速一个数量级。 2.5s中1.3k行,19s中9.5k行。谢谢你的建议。

顺便说一下,选择1只能提供大约10%的加速,我想这表明磁盘访问不是瓶颈。

其他> 获取计划是:

    Operation           Options                   Object        Mode        Cost    Bytes   Cardinality
0   SELECT STATEMENT                                            ALL_ROWS    6       17544   86
1   TABLE ACCESS        BY INDEX ROWID BATCHED    TAB           ANALYZED    6       17544   86
2   INDEX               RANGE SCAN                TAB_IDX       ANALYZED    3               86

,由于我的理解有限,看起来还不错。

“sho参数”的东西不起作用(SQL错误),除了给出的选择:

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE    12.1.0.2.0  Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

我想唯一突出的问题是“将获取大小设置为较大值的缺点是什么?”。鉴于我们将总是最终读取整个结果集(除非有例外),我的猜测将“不多”。是吗?

无论如何,非常感谢那些回应并非常感谢解决方案的人。

答案 1 :(得分:0)

对于oracle,10M行的表上的1.3k行不是太大。

第二个结果比第一个结果快的原因是oracle在fisrt查询中加载RAM中的数据并且只在第二个结果中从RAM读取它。

你确定索引使用得很好吗?也许你可以做一个解释计划并向我们展示结果?

答案 2 :(得分:-1)

立即采取的行动很少:

  1. 在表格上重建索引。
  2. 收集桌上的统计数据。
  3. 执行以下操作,然后重新运行查询以提取执行计划。

    SQL> set autotrace traceonly enable;

  4. 通过以下方式关闭此功能:

    sql> set autotrace off ;
    

    另外,提供以下结果:

    sql> sho parameter SGA 
    sql> sho parameter cursor
    sql> select banner from v$version;
    
    • ABHI