parallel index

[复制链接]
发表于 2025-9-22 13:37:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
select * from tablename tb
为进步查询服从,可使用一下方法:
(1)并行查询:/*+ parallel(tb,32) * /
select  /*+ parallel(tb,32) */  count(*)  from leo1 tb;  
(2)逼迫走索引:/*+ index(tb, indexname) */
select /*+ parallel(tb, idx_tb$clear) */ count(*) from leo1 tb;
一、Hint
/* */在Oracle中是hint
Hint 使用规则及注意事项
1、hint 实在是一种解释,假如目的 SQL 的文本出现了 hint,则优化器会选择 hint 的实行操持,而不会思量最优的实行操持,但条件是这个 HINT 是可选的实行操持之一。
2、hint 的用法:必须紧随关键字 select、insert、update,delete 后,hint 中第一个星号和加号之间不能有空格,一样平常写法 /*+ gather_plan_statistics */,假如有两个 hint,用空格隔开。hint 中指定详细对象时,不能带上该对象所在 schema 的名称。纵然该 sql 文本中已经有对应的 schema的名称。
在 hint 中指定详细表名时,假如该表在对应 sql 文本中有别名,则应该使用该表的别名。oracle 数据库中的query block 是指一个语义上完备的查询语句,hint 收效范围仅限于它本身所在的 query block。假如一个语句有子查询,那么主查询的 hint 只能作用于主查询,假如想让 Hint 作用于子查询,那么 hint 要加在子查询上。
举例:/*+ full(table_name)*/ 表现查询表table_name时逼迫使用全表扫描,逼迫表扫描也是制止使用索引的一个方法
SQL>Select /*+full(a)*/ * from t a; -- 使用 hint
SQL>Select /*+full(t) */ * from t a; --倒霉用 hint,失效
AI运行代码
sql
参考资料:Oracle Hint 语法详解-CSDN博客
二、逼迫走索引:/*+ index(tb, indexname) */
Oracle性能分析8:使用索引_oracle parallel index-CSDN博客
三、并行查询:/*+ parallel(tb,32) * /
3.1 并行概念
并行实行(parallel execution)是Oracle企业版才有的特性(尺度版中没有这个特性),指可以大概将一个大型串行任务(任何DML,大概一样平常的DDL)物理地分别为多个较小的部分,这些较小的部分可以同时得到处置惩罚。
并行包罗:
并行查询:这是指能使用多个利用体系历程或线程来实行一个查询。Oracle会发现能并行实行的利用(如全表扫描或大规模排序),并创建一个查询操持来实现)。
并行DML(PDML):这在本质上与并行查询很相似,但是PDML重要是使用并行处置惩罚来实行修改(INSERT、UPDATE、DELETE和MERGE)。
并行DDL:并行DDL是指Oracle能并行地实行大规模的DDL利用。比方,索引重修、创建一个新索引、数据加载以及大表的重组等都可以使用并行处置惩罚。
并行规复:这是指数据库能并行地实行实例(以致介质)规复,以镌汰从故障规复所需的时间。
过程并行化:这是指能并行地运行所开辟的代码
3.2 何时使用并行
在应用并行实行之前,须要包管以下两点创建:
必须有一个非常大的任务,如对50GB数据举行全面扫描。
必须有充足的可用资源(CPU、I/O、内存)。在并行全面扫描50GB数据之前,你要确保有充足的空闲CPU(以容纳并行历程),还要有充足的I/O通道。
假如只有一个小任务(通常OLTP体系中实行的查询就是这种典范的小任务),大概你的可用资源不敷(这也是OLTP体系中很典范的环境),此中CPU和I/O资源通常已经得到最大限度的使用,那就根本不消思量并行实行。
假如一个任务只须要几秒(或更短时间)就能串行地完成,引入并行实行后,干系的管理开销大概会让整个过程淹灭更长的时间。
举比方,写一页文档若12个人来写,须要开会分段等,大概并不如一个人来写更快。而假如写1200页,12个人写须要的时间只为原来的1/12,就算分配任务大概也就1/12,还是比一个人写要快多了。
3.3 并行查询
并行查询允许将一个SQL SELECT语句分别为多个较小的查询,每个部分的查询并发地运行,然后会将各个部分的结果组合起来,提供终极的答案。
在并行历程和扫描文件之间并不存在1对1映射,可以多个历程扫描同一个文件。
各个并行历程可称为并行实行服务器(parallel execution server),偶尔也称为并行查询(parallel query,PQ)附属历程。各个并行实行服务器都是单独的会话,就像是专业服务器历程一样毗连数据库。每个并行实行服务器分别负责扫描表中一个部分(各个部分都不重叠),汇总其结果子集,将其输出发回给调和服务器(即原始会话的服务器历程),它再将这些子结果汇总为终极答案。
在默认环境下,Oracle是不启用并行查询的。启用并行查询有多种方法,可以直接在查询中使用一个提示,大概修改表要求思量并行实行路径等。
3.3.1 并行查询方法
1.暗示hints式  暂时有效   >>>   常用
select /*+ parallel(leo1, 2) */ count(*) from leo1;
2.alter table对象式, 直接修改对象属性 长期有效
alter table leo1 parallel 4;       界说leo1表并行度为4
3.alter session会话式,会话生命周期有效
alter session force parallel query parallel 4;       逼迫界说并行度为4
4.并行DDL式,会话生命周期有效
并行查询和并行DDL可以无停滞使用并行,假如想使用并行DML,就须要启动会话DML并行功能
alter session enable parallel dml;
对于前两种方式,若省略num则Oracle将自动根据负载确定并行度。并行度要随着体系上工作负载的增减而厘革。假如有富足的空闲资源,并行度会上升;假如可用资源有限,并行度则会降落。如许就不会为呆板强加一个固定的并行度。使用这种方法,允许Oracle动态地增长或镌汰查询所需的并发资源量。
到场:Oracle并行详解_oracle 并行-CSDN博客
3.3.2 parallel-hints式语法
/*+parallel(table_short_name,cash_number)*/
/*+ parallel(leo1,2) parallel(leo2,2) parallel(leo3,2) ……*/   背面同理连续
select /*+parallel(table_name num)*/ count(*) from table_name;

-- 多表关联时多表并行:
select /*+parallel(tb1,num1) parallel(tb2,num2)*/ count(*) from table_name1 tb1, table_name2 tb2;
AI运行代码
sql
3.3.3 使用前需思量&确认点
3.3.3.1思量点
基于并行查询要启动并行历程、分配任务与体系资源、归并结果集,都是比力斲丧硬件资源的,优化时通常在逻辑上没有显着进步空间才使用硬件优化方式,故启用Parallel前应该思量:
1、当前数据库装备有富足硬件资源;
2、查询表的数据量很大,高出一千万,可通过改变Parallel显着进步服从;
3、体系的当前负载较低,实行任务时不影响别的业务的使用。
3.3.3.2 确认点
使用前我们须要看我们的电脑有几个cpu,而且每个cpu可以大概并行的线程数。
并行度:就是oracle在举行并行处置惩罚时,会启动几个并行服务历程来同时处置惩罚数据,注意看看数据须要几步处置惩罚,每一步都启n个历程而不是只启n个历程
并行度设定:一样平常来讲一个CPU内核可以支持一个并行度,一台多核服务器中通常采取CPU核数50%来设定并行度,余下的CPU处置惩罚其他步调
     并行度与硬件关系密切,同样并行度在差别硬件上表现的结果是大相径庭的
     并行度与并发数关系:总并行数=并行度*并发数,当并行度创建后,并发数越多总并行数越高
拜见资料:[转]Oracle 并行原理与示例总结
查察Oracle能使用的最大并行度:
SQL> show parameters cpu
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cpu_count                            integer     80
parallel_threads_per_cpu             integer     2
resource_manager_cpu_allocation      integer     80
AI运行代码
sql
1.cpu_count表现cpu数
2.parallel_threads_per_cpu表现每个cpu允许的并行历程数
3.default环境下,并行数为cpu_count*parallel_threads_per_cpu
————————————————
版权声明:本文为CSDN博主「猿艺」的原创文章,依照CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_52561535/article/details/141459660

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表