当前位置:  开发笔记 > 编程语言 > 正文

读CLOB列很慢

如何解决《读CLOB列很慢》经验,为你挑选了1个好方法。

希望有人能够对我目前使用Oracle数据库的问题有所了解 - 我确信这很简单!

我已经设法在一个示例中重新创建了这个,所以这里是数据库结构:

CREATE TABLE MyTable(
    ixMyTable NUMBER,
    clobData CLOB
)
/

CREATE OR REPLACE PACKAGE PKGTEST
AS
    PROCEDURE DoSomething(
        cur_OUT OUT SYS_REFCURSOR
        );
END PKGTEST;
/

CREATE OR REPLACE PACKAGE BODY PKGTEST
AS

PROCEDURE DoSomething(
    cur_OUT OUT SYS_REFCURSOR
)
AS
BEGIN
    OPEN cur_OUT FOR 
        SELECT ixMyTable, clobData
        FROM MyTable;
END;

END PKGTEST;
/

GRANT EXECUTE ON PKGTEST TO TEST_ROLE
/

BEGIN
    FOR i IN 1 .. 7000 LOOP
        insert into mytable values (i, TO_CLOB('123456'));
    END LOOP;
END;
/

额外信息:

架构所有者是TEST_SCHEMA

用户是CARL

CARL具有TEST_ROLE角色

鉴于上面的数据库设置,我有一个C#测试应用程序,它使用标准的System.Data.OracleClient.OracleCommand等来执行PKGTEST.DoSomething并将结果抛出到数据网格(DevExpress).

很确定网格在这里是无关紧要的,因为我们使用开源OTL(不幸的是我的部门)通过c ++遇到了同样的问题.

好的,问题....

从开始到网格填充的时间是~35-40s,哎哟.

但是,如果我执行以下操作:

GRANT SELECT ON MyTable TO TEST_ROLE
/

然后再次执行查询,需要〜5-6s.

在我看来,这与特权等有关,但我不太确定为什么它仍然实际上有两种方式?

如果我改变程序,只是把其他东西扔进锅里

SELECT ixMyTable, TO_CLOB(TO_NCLOB(clobData))
FROM MyTable;

然后时间是〜5-6s,有或没有额外的SELECT权限.

任何指针或直接的解决方案将非常感谢!

编辑:

操作系统是Vista x86 Business

Oracle Server是10.2.0.1

Oracle客户端是10.2.0.3

编辑:

正如所建议的那样,我尝试从MS OracleClient更改为ODP.NET,这确实可以根据需要加快速度.

不幸的是,受影响的C#应用​​程序只是一个内部应用程序,用于查看表/运行SPROCS等.

我们的主要交付内容是使用OTL(http://otl.sourceforge.net/otl3_intro.htm)进行数据库访问的C++应用程序.这不是真正可以改变的东西,所以我真的想了解差异的原因,而不必在willy-nilly周围抛出无偿的GRANT SELECT.

如果缺少SELECT权限导致完全失败,那么我可能会接受这一点,但缺少SELECT似乎导致访问CLOB数据的路径较慢.

我已经标记了3个答案 - 感谢那些 - 但我确实有理由这样做,所以我会为此添加一笔赏金.

PS我们真的很想在OCCI开始时使用OCCI,但是由于Oracle始终支持IDE的一个版本,因此目前我们无法使用它来与我们的Visual Studio 2008完美配合.



1> Thomas Jones..:

你确定每次都从磁盘读取blob,而不是从磁盘缓存中读取第二个及后续的吗?

我已经在性能测试中看到了这个问题,特别是在Oracle上,第一次测试运行非常糟糕.然后,有一个小的(并且看似微不足道的变化),性能突然显着提高.但实际上发生的事情是,您查询的数据已加载到缓存中,并且可以以10倍或20倍的速率访问(内存与磁盘).

执行此测试的正确方法是在查询运行之间退回数据库.如果DBA不允许您为此测试退回测试生产服务器,请在您的计算机上加载Oracle XE的副本.

编辑:或更好:每次都删除并重新创建表.你可能会这样做,但没有提到它.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有