并行执行oracle SQL语句的最佳方法

时间:2014-08-29 09:48:06

标签: c# sql multithreading oracle parallel-processing

之前我曾问过类似的问题,但现在我会很感激细节。我有需要在C#.NET 4.5 Web应用程序中运行的5-11 SQL,目前它们是按顺序完成的,这会导致响应时间变慢。

与各种架构师/ DBA交谈他们都告诉我这可以通过并行运行查询来改进,但是当我要求他们变得非常模糊时,从不详细说明如何; 0)

Oracle中是否有一些可以调用的函数来传递查询以并行运行?

或者我一直在研究ASYNC / AWAIT功能,但是Web上的示例令人困惑(大多数都涉及将控制权返回给UI,然后在任务最终完成时更新屏幕上的一些文本),我想知道如何调用多个方法让它们并行执行SQL,然后在继续之前等待所有这些方法完成。

如果有人能指出我的文件方向或提供具体的例子我会很感激!!!!

更新了示例代码,有人可以指出如何将此更新为异步以等待所有各种调用完成:

    private CDTInspection GetDetailsInner(CDTInspection tInspection)
    {
        //Call Method one to get data
        tInspection = Method1(tInspection);

        //Call Method two to get data
        Method2(tInspection);

        //Call Method three to get data
        Method3(tInspection);

        //Call Method four to get data
        Method4(tInspection);

        return tInspection;

    }



    private void method2(CDTInspection tInspection)
    {
        //Create the parameter list
        //Execute the query
        //MarshalResults
    }

2 个答案:

答案 0 :(得分:4)

您可以使用 DBMS_SCHEDULER 创建作业,以便独立运行。阅读有关DBMS_SCHEDULER

的文档中的更多内容

例如,您可以并行运行作业:

BEGIN
    DBMS_SCHEDULER.RUN_JOB('pkg1.proc1', false);
    DBMS_SCHEDULER.RUN_JOB('pkg2.proc2', false);
    DBMS_SCHEDULER.RUN_JOB('pkg3.proc3', false);
END;
/

答案 1 :(得分:0)

如果您想在应用程序中并行运行5-11个查询,则必须启动多个线程并在线程内并行执行查询。

但是,如果您希望数据库在数据库服务器上并行执行查询,通常在查询长时间运行并且您希望加快单个查询执行时间时非常有用,那么您可以使用{{ 3}}

并行执行有益于具有以下所有特征的系统:

  • 对称多处理器(SMP),集群或大规模并行系统
  • 足够的I / O带宽
  • 未充分利用或间歇使用的CPU(例如,CPU使用率通常低于30%的系统)
  • 足够的内存来支持额外的内存密集型进程,例如排序,散列和I / O缓冲区

实现并行执行的最简单方法是通过提示:

SELECT /*+ PARALLEL */ col1, col2, col3 FROM mytable;

但是,这可能不是最好的方法,因为它会改变您的查询并有其他缺点(例如,如果您想再次停用并行性,则必须再次更改查询)。另一种方法是在表级指定:

ALTER TABLE mytable PARALLEL;

如果不再需要它而不改变查询本身,那将允许再次停用并行执行。