之前我曾问过类似的问题,但现在我会很感激细节。我有需要在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
}
答案 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}}
并行执行有益于具有以下所有特征的系统:
实现并行执行的最简单方法是通过提示:
SELECT /*+ PARALLEL */ col1, col2, col3 FROM mytable;
但是,这可能不是最好的方法,因为它会改变您的查询并有其他缺点(例如,如果您想再次停用并行性,则必须再次更改查询)。另一种方法是在表级指定:
ALTER TABLE mytable PARALLEL;
如果不再需要它而不改变查询本身,那将允许再次停用并行执行。