- 理解表结构(拷贝到这里-排版功能有点糟糕)
- Oracle块大小一般大于OS块大小,分配最小按照extent来扩展(一个或者多个连续的块,逻辑连续),不是按照块;
- 相同的extent组成一个segment,包括表、索引、表分区、索引分区、回滚段;
- 行链:如果update导致原有地方放不小,Oracle迁移到一个足够放下的数据块,原来地方记录指针;行链加大系统开销;扩展大小带来性能问题不大;碎片实际影响不大,数据库不会扫描碎片所在的数据块;
- 设置PCTFREE比减少碎片重要--,数据库是从块底部往顶部分配空间;事务槽,顶部往底部分配空间;跟PG类似PCTfree参数需要设置大一些,避免行迁移;
- 设计:
- varchar会导致行迁移;
- 减少热块冲突(Buffer busy waits)的较好办法是把这张表放在块大小更小的表空间;另外还有提高DB cache命中率,使用多缓冲技术;加大PCTFree参数的值;Hash分区表(本身的访问受限-主键,范围扫描有缺陷,增加范围扫描成本);
- 数据结构&容灾技术:
- 硬件镜像复制,如果主出现问题,需要及时给力;
- dataguard基于oracle 块复制技术,不会造成块断裂;LGWR同步,生产库可能出现故障无法使用;采用LGWR或者ARCh,主库故障,可能丢失数据;
- OGG,DSG,Streams逻辑复制,都是挖掘日志,主库的一个UPdate2000万条备库可能执行2000万个update;OGG有批量insert的优化。
- 本地dataguard,远程采用存储复制技术;
- 优化:
- 增加sequence缓冲区;核心表参数:freelist,initrans,initial,next;表结构修改为hash分区,redolog分区和数据分区不同;批处理;
- 写优化PPT;
- 索引
- 查出一张有3000万的表的2000万条记录,通过访问索引可能比全表扫描慢;
- 一般分析的方法通过表找出sql,按照bufferget或者physical read排序,分析排在前面的对性能影响最大的SQL,找出where条件和连接条件;
- 普通,反转索引,降序索引、函数索引都是B树结构;位图索引完全不同,没有支节点,只有叶节点,需要完全扫描;
- 普通索引升序,右键值比左键值大;
- 函数索引一般不用,使用可以帮助简化逻辑,
- 反转索引是为了解决热块冲突问题,以及like‘%abc’模糊查找,实际的使用方式是'cba%‘;
- 对研发团队适当的培训,可以节省大量成本;
- 索引跳跃扫描(复合索引后面一个字段);索引全扫描(比全表扫描快)和索引快速扫描;
- 表的索引建立跟表大小无绝对关系,需要进行评估,跟表的大小,表的分布有很大关系;buffergets, physiccal read;
- 位图索引---Heap表的平面图;如果按照位图键值排序,索引较小,访问效率高;
最后修改时间:2022-12-01 23:04:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




