我有以下情况
main()
{
hnd = CreateTHread( func1 );
// Call fun2()
wait(hnd);
return ;
}
fun2()
{
//Access database to perform some read operation on TAble A
}
func1()
{
//Access database to perform some read operation on TAble A
// Recursive operations
}
我观察到,如果我使用线程方法,fun2()
需要更长的时间才能完成。难道是因为 THread func 和 fuc2 在同一张表上工作。请注意,这两个函数中只有读取操作。 AWR 报告建议,使用线程方法时查询执行次数增加了
最佳答案
类似的问题 - Multi-threaded database read access
Oracle JDBC 接口(interface)以及 Oracle native 驱动程序(我想)能够处理多线程请求 (http://www.cs.umbc.edu/portal/help/oracle8/java.815/a64685/tips1.htm)
然而,当涉及到数据库引擎中的实现时,这还不清楚。根据当前文档,我的理解是,只要您的请求是只读的且无意更新,就不会发生锁定,您应该会看到性能提升(至少是次要的)。
然而,还有许多其他因素决定引擎是否会使用并行性。服务器的硬件配置(多核)等也可以确定查询引擎是采用并行还是排队的方法。
顺便说一句,您在尝试过的两种方法中观察到的时间差异有多大。您的数据有多大?
关于c++ - 并行线程中的数据库访问,可行的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728986/