【问题标题】:Determine the size of a SQL result set in KB确定 SQL 结果集的大小(以 KB 为单位)
【发布时间】:2010-11-27 12:11:41
【问题描述】:

我希望找到如何在 OracleDB 中获取结果集的 kb 大小。 我不是系统管理员,但经常运行返回超过 100k 行的查询,我需要找到一种方法来确定总 kb 大小。 谢谢你

【问题讨论】:

    标签: sql oracle plsql oracle10g


    【解决方案1】:

    在 SQL*Plus 中:

    SET AUTOTRACE ON
    
    SELECT *
    FROM emp
    WHERE rownum <= 100;
    
            27  recursive calls
             0  db block gets
            19  consistent gets
             4  physical reads
             0  redo size
         **11451  bytes sent via SQL*Net to client**
           314  bytes received via SQL*Net from client
             8  SQL*Net roundtrips to/from client
             0  sorts (memory)
             0  sorts (disk)
           100  rows processed
    

    使用 AUTOTRACE 需要 PLUSTRACE 角色,默认情况下不授予该角色。 Find out more.

    【讨论】:

    • 哇,太棒了。 Autotrace 实际上知道您对发送的字节感兴趣并用星号标记了行?你会认为甲骨文至少会修复导致数字错位的错误。 :-) +1 以获得比我更好的答案。
    • 感谢您的回答,确实自动跟踪很棒。还有一个问题 - 我使用 SQL Developer,似乎有一些未返回的结果(我需要的结果:()。当我将自动跟踪设置为 ON 并运行 SELECT 时,我得到以下结果:Statistics 685 recursive calls 3 db 块获得 22744 一致获得 247 物理读取 0 重做大小 0 工作区执行 - 多通道 0 解析时间 cpu 0 解析时间经过 0 帧签名不匹配 2 执行计数 关于如何进一步调整以检索所需结果的任何提示和技巧?
    • 请注意,“通过 SQLNet 发送到客户端的字节数”表示从服务器到客户端的总流量,其中不仅包括结果集本身。例如从双重选择空; => 411 个字节通过 SQL 发送到客户端Net(在 Oracle 11.1 上测试)
    【解决方案2】:

    通常,您可以将列列表替换为 count(*) 以返回行数。

    我不确定这对于具有许多连接等的非常复杂的查询的效果如何,但是对于更简单的查询,它应该没问题。替换:

    select a,b,c from t where a > 7;
    

    与

    select count(*) from t where a > 7;
    

    这将在您运行实际查询之前为您提供行数。请记住,您的计数查询和实际查询之间的数据可能会发生变化(希望不会太多)。了解数据属性将使您能够从行数中估算出千字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2014-06-12
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多