Oracle跟上了硬件发展的步伐,提供了很多面向多CPU的功能。从Oracle8i开始,Oracle在每个数据库函数中都实现了并行性,包括SQL访问(全表检索)、并行数据操作和并行恢复。对于Oracle专业版的挑战是为用户的数据库配置尽可能多的CPU。在Oracle环境中实现并行性最好的方法之一是使用Oracle并行查询(OPQ)。我将讨论OPQ是如何工作的和怎样用它来提升大的全表检索的响应时间以及调用并行事务回滚等等。
Oracle并行查询(OPQ)是Oracle数据库系统中一项强大的特性,它利用现代硬件的多处理器能力,显著提升大规模数据操作的效率。随着硬件的进步,尤其是对称多处理(SMP)服务器的普及,Oracle从Oracle8i版本开始在各个层面引入并行性,包括SQL查询、数据操作和恢复过程。
OPQ的工作原理是将大型表分成逻辑块,然后通过并行子查询(也称为执行服务器)同时处理这些块。每个子查询负责读取表的一个部分,处理完成后,所有子查询的结果由并行查询调度器合并、排序(如果需要)并返回给最终用户。这种并行处理方式使得全表检索的响应时间大幅缩短,尤其在具有大量CPU的环境中,性能提升更为明显。
Oracle9i及更高版本能自动检测服务器上的CPU数量,并根据`cpu_count`参数进行初始化设置。这个参数影响着并行操作的多个关键参数,例如:
1. `fast_start_parallel_rollback`参数决定了并行事务回滚的性能。在系统崩溃时,Oracle能自动回滚未完成的事务,加快数据库的重启速度。默认值通常是CPU数量的两倍,但有些数据库管理员建议将其设置为四倍,以优化并行回滚的效率。
2. `parallel_max_servers`参数控制着用于并行查询的最大服务器数。Oracle会根据CPU数量自动分配合适的子进程,以提升并行查询的响应时间。然而,这个值需要谨慎设定,过多的并行进程可能导致页面交换过于频繁,增加CPU负载。考虑到表的分区数量和其他系统因素,`parallel_max_servers`应足够大,以允许Oracle为每个查询选择最佳的并行度。
3. `log_buffer`参数定义了redo日志缓冲区的大小,它直接影响redo日志的写入性能。Oracle建议`log_buffer`的大小至少为`cpu_count`乘以500KB或128KB。CPU数量越多,Oracle会创建更多的LGWR进程,以异步方式写入redo信息,从而提高并发性和系统性能。
此外,`db_block_lru_latches`也是一个与CPU数量相关的参数,它控制了数据库块LRU链表的锁,以确保并行访问时的数据一致性。在多CPU环境中,适当调整这个参数可以减少争用,提升并发性能。
在实际应用中,DBA应当密切关注这些参数,根据系统的具体需求和硬件配置进行调整,以确保Oracle并行查询的最佳性能。同时,监控系统资源的使用情况,避免过度并行导致的资源争抢和性能瓶颈,是实施并行查询策略时不可忽视的任务。通过有效的参数调优和资源管理,可以充分利用Oracle的并行查询功能,充分发挥多CPU系统的潜力。