利用oracle并行查询充分发挥多CPU的能力
让我们进一步看看CPU的数量如何影响这些参数。
参数fast_start_parallel_rollback
的并行机制的一个令人兴奋的部分是调用并行回滚当系统崩溃的能力。当Oracle数据库有一些崩溃,Oracle能够自动检测和未完成的事务回滚到初始状态,这就是所谓的平行热启动时,Oracle使用基于cpu_count fast_start_parallel_rollback参数确定未完成的交易度。
并行数据操作语言(DML)恢复可以大大加快其启动Oracle数据库崩溃后,此参数的默认值是两倍的系统CPU,但一些DBA认为应该设置为四倍,cpu_count。
参数parallel_max_servers_parameter
Oracle的一个显着增强的程度,OPQ并行自动确定。因为甲骨文已经意识到服务器的CPU数量,它自动分配适当数量的子过程来提高并行查询的响应时间。当然,也会有其他的外部因素,如表分区和磁盘输入/输出子系统等的布局,但根据cpu_count设置parallel_max_servers参数会给Oracle选择并行化水平的合理依据。
由于Oracle并行运行在很大程度上依赖于服务器上的CPU数量,parallel_max_servers将设置为服务器上的CPU数。如果有多个实例运行在服务器上,默认值太大,导致过度的页面切换和严重的CPU负担。并行度也取决于目标表中的分区的数量,所以parallel_max_servers应设置足够大以允许Oracle为每个查询选择最佳的并行子查询号码。
参数log_buffer
参数log_buffer定义直接写入重做日志信息保留的内存数量,这是受cpu_count.oracle建议log_buffer是最大cpu_count乘以500kb或128KB。CPU的数量log_buffer是非常重要的,因为Oracle会生成多个日志写入进程(LGWR)释放的重做信息异步。
log_buffer是Oracle最misunderstandable RAM参数,通常有以下几个配置错误:
log_buffer设置太高(例如,大于1MB),这会引起性能问题的这段时间,因为在写同步容量大的结果。例如,日志同步和等待事件非常高。
log_buffer
在单个服务器中安装更多的CPU已经成为当前的趋势,在8, 16或32 CPU和几个千兆RAM的Oracle服务器的条件下使用SMP服务器(SMP)一点也不奇怪。
Oracle跟上硬件的发展,提供了许多面向CPU的功能。从Oracle8i,Oracle实现了并行性在每个数据库功能,包括SQL访问(全表检索),并行数据操作和并行恢复的Oracle专业版的挑战是配置为多CPU尽可能为用户数据库。
一个在Oracle环境中实现并行性的最好方法是使用Oracle并行查询(OPQ)。我将讨论OPQ作品和如何使用它来提高大型全表检索的响应时间,并调用并行事务回滚等。
使用OPQ
当一个合法的、大的全表搜索是Oracle进行,OPQ可以大大提高反应时间。通过OPQ,Oracle将表分成逻辑块如图A所示
图一
一个由OPQ表
一旦表被划分成块,Oracle就启用了并行子查询(有时称为事务处理),每个子查询同时读取一个大表的一部分,在完成所有子查询之后,Oracle将结果发送到并行查询调度器。它将重新安排数据,和排序,如果必要的话,结果传递到最后user.opq具有无限的可扩展性,所以全表搜索,需要几分钟的时间,目前的响应时间小于一秒前。
OPQ严重依赖于处理器的数量。并行操作可以大大提高全表检索的性能,这是基于n-1并行进程(n = oracle服务器上的CPU数量)。
必须注意,Oracle9i数据库能够自动检测外部环境非常重要,包括对服务器的CPU数。安装时,它会检查服务器上的CPU数量,设置参数为cpu_count,使用cpu_count作为默认的初始化输入参数。这些参数初始化由Oracle的影响内部查询的处理。
以下是一些参数的闭集,根据cpu_count安装时。
fast_start_parallel_rollback
parallel_max_servers
log_buffer
db_block_lru_latches
{分页}
这不是db_block_size.in Oracle9i的多,log_buffer应该是2048字节的倍数。
参数db_block_lru_latches
The number of LRU locks is used to manage database buffers within the Oracle database, which is heavily dependent on the number of CPU on the server.
许多聪明的数据库管理员使用多个缓冲的数据缓冲区(如db_32k_cache_size)。They recommend that the declared parameter be reset to the default maximum.Db_block_lru_latches parameters are used in Oracle8i many times, but in Oracle9i, it becomes an undeclared parameter, because Oracle now sets a reasonable default value according to the number of CPU owned by the database.
db_block_lru_latches设置的cpu_count一半服务器的默认值(例如,只有一个Oracle数据库服务器上),Oracle建议db_block_lru_latches不会超过两或三倍cpu_count,或1 / 50的db_block_buffers。
如果多个缓冲池使用,这一计算方法由于分配给每个数据缓冲池的锁的数量不能控制有问题。如果db_writers参数大于1,默认似乎太小。
加强服务器
Oracle数据库总是提高性能。检测cpu_count和基本的基于外部服务器环境参数设置为Oracle软件的一个重要步骤的能力。
随着越来越多的Oracle系统转向SMP,当客户需要采取措施将大型数据库转移到32或64 CPU的大型服务器时,这些参数变得越来越重要。
上一页