按类别查询搜索结果
关于关键词 的检测结果,共 20227
dingjun123 | 2025-04-26 18:19:17 | 阅读(10) | 评论(0)
mysql执行计划里索引访问算子和oracle的不同之处

1.mysql Index range scan算子包括index access,index filter(ICP),回表不带过滤的时间,
如果有额外的过滤条件,有Filter算子,过滤时间算在这里面。
ICP如果能大幅度减少回表的行,也就减少了回表的随机IO,则效率提升明显。

2.估算的rows实际上是访问方法扫描的行数,对应普通explain的rows,不包括ICP以及回表过滤filtered,不是结果行数,
这个实际上和oracle不一样,oracle的rows/cardinality是整个条件结果行数

3.mysql的analyze的actual rows则包括过滤条件,所以估算的rows和actual rows实际上标准不统一,是缺陷

通过估算的rows可以看到索引index access效率,比如访问行数多,则效率低,然后actual rows少,说明要么走ICP,要么组合索引顺序非最佳

index访问,过滤,回表效率比较:ind【阅读全文】
dingjun123 | 2025-04-26 18:04:04 | 阅读(10) | 评论(0)

对子查询的优化处理能力,oracle > pg > mysql,mysql的子查询有不少优化,但是还是有很多问题。

子查询的原始语义是:

只返回主表结果,子查询只是用来进行存在性判断。
从这点看,如果子查询要转为普通join,要么join key有唯一键,要么子查询结果按照join key剔重,当然anti join不需要,
一般anti join不会自动改成left join+inner.id is null,但是可以手动实现,这种只查找不匹配的,不需要子查询join key唯一。
像ORACLE的子查询做成view然后hash unqiue就是剔重转为普通join,像MySQL的materialization,loose scan,pull out,dupsweedout都有各种
按照join key对子查询剔重的动作。【阅读全文】
dingjun123 | 2025-04-26 16:56:01 | 阅读(0) | 评论(0)
Oracle 12c引入的TABLE ACCESS BY INDEX ROWID BATCHED技术是一种针对索引回表操作的优化机制,旨在减少回表过程中的物理I/O开销和资源消耗。以下从技术原理、作用、优缺点及适用场景等方面详细分析该技术。
??
?为了减少回表过滤次数,减少逐行回表,减少表数据块访问次数和index clustering factor影响,
oracle 12c推出了table access by index rowid batched,可以批量rowid回表,先索引访问,
查出rowid,然后排序,批量回表查找,避免多次回表过滤
和index clustering factor影响多次查询表数据块。。。
这时候,就不是逐行回表了,而且批量回表可能会导致索引不能消除排序,
还有批量回表,索引查找可以使用并行,请详细分析12c的batched回表技术,
解析其作用,和单行回表相比的优缺点【阅读全文】
dingjun123 | 2025-04-26 16:35:20 | 阅读(10) | 评论(0)
对于使用了函数或表达式运算会导致统计信息用不上、and条件列组相关性紧密,这些情况下的cardinality可能计算不准,
导致多表JOIN的join order、join method选择不对,从而走错执行计划,这时候可以使用扩展列统计信息来优化cardinality计算。【阅读全文】
dingjun123 | 2025-04-26 15:45:13 | 阅读(0) | 评论(0)
对于完全存在性判断,子查询非相关的。。。三大数据库的CBO都是差不多的处理逻辑:
非相关的希望单独执行一次即可,然后结果缓存下来,对于存在性判断的非相关子查询,希望只执行一次只查询一条。
【阅读全文】
dingjun123 | 2025-04-26 15:15:07 | 阅读(0) | 评论(0)
组合索引要符合leftmost prefix规则,前导列是范围的,后续列条件不能index access,只能index filter...
但是貌似有例外:
MySQL的like后通配,between,>=,=1 and b>3,“如果a是整数”
然后索引访问实际上是拆成两份:a=1 and b>3 和a>1 and b>3,前者能真正用到两个列索引访问,后者只能用到a>1
那么,如果存在a>1的数据很少,a=1的数据多,但是a=1 and b>3的数据少,
那么where a>=1 and b>3就比a>0 and b>3的效率高,因为写成
a>0 and b>3则只能用到a>0,而a>0是等价于a>=1的。。。但是实际上访问效率不一样,【阅读全文】
dingjun123 | 2025-04-06 21:37:39 | 阅读(20) | 评论(0)
oracle分页的三种写法及其下推裁剪优化
1) 从12c开始,分页有新的fetch,offset的语法,可以和order by写一起,内部使用row_number/rank分析函数实现,with ties用rank实现
2) row_number分析函数从oracle 11g后就做了优化,可以类似普通分页写法那样,满足条件可以下推裁剪,减少数据访问量
rank分析函数可以下推

注意:dense_rank不能走索引下推优化
3)传统rownum写法裁剪优化
?【阅读全文】
dingjun123 | 2025-04-06 21:05:42 | 阅读(20) | 评论(0)
如果动态采样,且peeking关闭,则不管列的数据分布,会按照默认选择率计算,很容易走错索引,
需要收集统计信息。

在Oracle数据库中,优化器计算等值条件选择率时,
通常优先使用DBA_TAB_COL_STATISTICS.NUM_DISTINCT(列的统计信息)【阅读全文】
dingjun123 | 2025-03-16 18:12:46 | 阅读(60) | 评论(0)
oracle,pg,mysql范围越界的选择率估算:
通过以下方式,防止突然变成1,导致笛卡尔积,当然,越界问题容易变成走索引(如果实际查的数据量大,则需要更新统计信息),另外越界的话还是可能估算
成1的,一般都是估算的很少行。【阅读全文】
dingjun123 | 2025-03-16 18:08:13 | 阅读(60) | 评论(0)
oracle读取数据分为物理读、逻辑读,其中大多数时候主要是逻辑读,因为热点数据存在buffer cache里。而物理读,除了direct path read,
也会产生逻辑读,所以逻辑读往往成为衡量SQL性能的重要指标。
逻辑读包括了consistent read(cr读)和db block gets(current reads),其中一致性读是遇到读取的块有DML的,需要从undo里进行一致性块重构,
所以如果select读取的block被修改未提交,读取的时候cr读会增加,这也是会影响性能的,而DML呢,查找时候会进行cr读,更新时候会进行
current reads。

另外注意:
1)如果select返回行很多,fetch size也会影响consistent reads,可能一个块被读取多次,因为每次fetch就要从buffer cache里获取数据。
2)逻辑读指标只会显示SGA里的操作,PGA里的比如hash join的IO操作,不会显示在逻辑读里,所以,逻辑读小的,如果是hash join之类的,不一定性能
就比逻【阅读全文】
dingjun123 | 2025-01-22 09:09:36 | 阅读(100) | 评论(0)
索引是有序存储的,查询最左或最右就可以查询最小,最大值,这是一种非常快的操作,因为min.max索引前导列,只需要从最左或最右侧
扫描到第一个非NULL值即可。


pg和mysql支持索引列min.max写在一起,会快速定位,而oracle不行,oracle可以拆分成两个标量子查询实现。
【阅读全文】
北亚数据恢复 | 2025-01-10 14:35:56 | 阅读(90) | 评论(0)
服务器上的8块硬盘组建了一组raid5磁盘阵列。上层安装windows server操作系统,部署了oracle数据库。
raid5阵列中有2块硬盘的硬盘指示灯显示异常报警。服务器操作系统无法启动,ORACLE数据库也无法启动。【阅读全文】
北亚数据恢复 | 2024-12-10 11:26:37 | 阅读(120) | 评论(0)
Oracle数据库常见故障表现:
1、ORACLE数据库无法启动或无法正常工作。
2、ORACLE ASM存储破坏。
3、ORACLE数据文件丢失。
4、ORACLE数据文件部分损坏。
5、ORACLE DUMP文件损坏。 【阅读全文】
dingjun123 | 2024-12-01 10:50:34 | 阅读(250) | 评论(0)
分区pruning是分区里的重要,通过partition pruning可以只访问需要的分区,实现减少IO的目的,
如果不能partition pruning,则可能全表(分区)访问,因为分区表一般很大,很显然IO很多,效率低,
当然,如果全表(分区)访问,如果有索引,也可能走索引提高效率的。

另外就算不能分区pruning,如果全局分区索引,如果走全局分区索引,也可能利用到索引分区裁剪。分区裁剪分为表分区裁剪、索引分区裁剪。
【阅读全文】
dingjun123 | 2024-12-01 10:33:08 | 阅读(180) | 评论(0)
oracle,mysql,pg杀会话区别和注意点【阅读全文】
dingjun123 | 2024-12-01 10:29:35 | 阅读(230) | 评论(0)
分页查询必须有COUNT STOPKEY裁剪,另外要使用索引消除排序才是最高效的。注意取前N行和第M到第N行的两重嵌套和三重嵌套写法。
【阅读全文】
北亚数据恢复 | 2024-11-27 13:01:55 | 阅读(120) | 评论(0)
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。
由于数据库没有备份,无法通过备份去恢复数据库。
“system01.dbf需要更多的恢复来保持一致性”,出现这个报错信息可能是由控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等原因所导致。对数据库文件做进一步检测&分析,结果发现sysaux01.dbf文件有坏块。修复并启动数据库后,很多查询报错,export和data pump工具也无法使用。查询告警日志并分析报错,发现就是sysaux文件损坏所导致的上述错误。从数据库层面无法修复数据库。system和用户表空间的数据文件都是正常的,可以尝试利用底层解析数据文件,恢复用户数据。【阅读全文】
北亚数据恢复 | 2024-11-21 11:20:56 | 阅读(140) | 评论(0)
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。
取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。【阅读全文】
dingjun123 | 2024-10-29 17:28:15 | 阅读(13810) | 评论(0)
overlap重叠查找算法:

一般用子查询实现,如果用join会导致结果集重复数量增多,因为不是1对1关系,而是1行对应多行。

使用子查询自关联,比如主表a,子查询的a取个别名b,对应的有start_date,end_date以及唯一标识id以及自关联的比如这里是staff_id
【阅读全文】
北亚数据恢复 | 2024-10-28 11:18:14 | 阅读(150) | 评论(0)
Oracle数据库数据恢复环境&故障:
Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。

Oracle数据库故障分析&恢复方案:
数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。【阅读全文】