oralce优化之10大要点九十

编程范式的本质:阴阳二分,相融相异 本文源于一次真实的设计讨论,上片博客沿着四种语言实现的路子走下去,本篇博客则沿着设计模式的路线归结到计算机哲学的根。需求本身小得不能再小:给一个存放数据库读取结果的 `Dict` 列表按字段名排序。但当我们把约束加码到"字段演进时排序器永不改动"时,这个需求就不再是工程问题,而成了三种编程范式的正面交锋。沿着这条线走下去,我们最终抵达了一个更根本的结论——**编程范式不是一张并列的表格,而是一棵树,而树的根只有两个。** 阅读详情

 九、SQL优化

    1、优化器模式

    Oracle9i有两种优化器模式可以选择:
    • Rule-based:
    – Uses a ranking system
    – Syntax- and data dictionary–driven
    • Cost-based:
    – Chooses least-cost path
    – Statistics-driven
    Rule-based模式满足向后兼容,而Cost-based模式中的成本大部分来自于逻辑读的次数,推荐使用Cost-based模式。

    2、固定optimizer plan

    1)概念
    对于每一个查询,optimizer都会准备一个定义了操作执行顺序和方法的操作树(执行计划),oracle server根据这个执行计划执行语句。通过固定执行计划,可以强制应用通过一种理想的方式访问数据,并且一个稳定的执行计划可以经历数据库的变化而保持不变。固定执行计划通过创建stored outline实现,outline使用cost-based的optimizer,因为其由一系列的hints组成。
    执行计划的固定依赖于当判定一个查询是否存在stored outline时查询语句是否完全一致,与判定shared pool里一个执行计划是否可以重用时的匹配方式是一致的。
    Outline被保存在outln schema中。

    2) 创建stored outline
    alter session set CREATE_STORED_OUTLINES = train;
    create or replace OUTLINE co_cl_join
    FOR CATEGORY train ON
    select co.crs_id, ...
    from courses co,classes cl
    where co.crs_id = cl.crs_id;

    stored outline通过category组织,相同的sql语句可以在多个category同时拥有stored outline,如果categoey没有指定,缺省是default category。
    当CREATE_STORED_OUTLINES等于true或category名时,oracle会为所有被执行的sql语句创建stored outline,也可以通过create outline手工创建。

    3) 使用stored outline
    将USE_STORED_OUTLINES设置为true或category名。
    alter session set USE_STORED_OUTLINES = train;

    当为一个查询寻找stored outline时,查询语句与stored outline里的语句必须完全一致,在outline里的hints也必须在查询语句中出现。

    3、private outline

    Private outline是当前保存的stored outline的副本,可以被编辑而不影响正在运行的系统,一个private outline只能被当前session看到,它的数据被保存在当前被解析的schema里。,知道显示的将其公布。
    当USE_PRIVATE_OUTLINES=TRUE时,一个已有outline的sql被提交时,optimizer会检查是否存在private outline,如果不存在,optimizer就不使用optimizer编译语句,而不会去检查公布的stored outline。

    4、在sql中使用hints
    Create index gen_idx on customers(cust_gender);
    Select /*+ index(customers gen_idx)*/
    Cust_last_name,cust_street_address,cust_postal_code
    From sh.customers where upper(gender)=’M’;

    5、EXPLAIN PLAN
    可以不通过tracing,需要建立plan_table表:
    Sql>@oracle_home/rdbms/admin/utlxplan;
    建立explain plan:
    Explain plan for select last_name from hr.emp;
    查询plan_table中的explain plan,可以直接查询,也可以通过脚本utlxplx.sql(隐藏并行查询信息)、utlxplp.sql(显示并行查询信息)查询。

    6、管理统计信息
    利用analyize命令收集或删除信息。
    参数:
    Compute:统计精确的数据;
    Estimate:估计的统计数据。

    各类统计数据的位置:
    表:dba_tables;
    索引:dba_indexes;
    列:user_tab_col_statistics;
    柱状图(histogram)详细的描述了一个特定列中数据的分布情况,可以通过analyize table ... for columns... 命令创建,保存在dba_histogram/dba_tab_histograms中。

 

十、操作系统优化和使用资源管理器

    1、操作系统优化
    1)概念
    操作系统优化时应该考虑的因素有:内存的使用;Cpu的使用;IO级别;网络流量。各个因素互相影响,正确的优化次序是内存、IO、CPU。
    操作系统使用了虚拟内存的概念,虚拟内存使每个应用感觉自己是使用内存的唯一的应用,每个应用都看到地址从0开始的单独的一块内存,虚拟内存被分成4K或8K的page,操作系统通过MMU(memory management unit)将这些page与物理内存映射起来,这个映射关系通过page table控制。
    Raw device是没有文件结构或目录结构的磁盘或磁盘分区,由于它忽略了操作系统缓存,在某些情况下可以显著提升性能,但是在windows NT下,由于操作系统IO操作本身不使用文件系统缓存,所以raw device不能显示性能上的优点。

    2)Guideline
    CPU的最高使用率:90%;
    OS/USER进程数之比:40/60;
    各个CPU的负载应该大致均衡。

    3)服务器安全性检查
    A、检查UNIX系统用户口令
    检查:/etc/passwd、/etc/shadow,UNIX密码采用了shadow机制,安全性能高
    建议:参考UNIX命令passwd,修改/etc/default/passwd文件的某些设置如MAXWEEKS、MINWEEKS、PASSLENGTH使口令修改更加合理化。
    建议:定期更改UNIX系统的如下用户口令:
    root、oraprod、applprod、appprod

    B、检查 Remote Login
    启动了rlogin,服务器数据库a、数据库b、数据库c,终端console1、console2、console3及T3形成相互非常信任的关系,用户只要拥有一个服务器的超级权限就可以rlogin到.rhosts指明的任一主机而无需要口令。
    建议:非常不安全,参考UNIX命令rlogin和/目录下的文件.rhosts。在正式环境服务器和测试环境服务器之间不要建立这种远程信任的机制。

    C、检查FTP服务
    检查可以FTP到服务器的用户(/etc/ftpusers),注释了root用户,就是说用户可以用root权限FTP到服务器上。权限太大。
    建议:把这种权力取消,将/etc/ftpusers中root的注释符号(#)去掉,在列表中添加oraprod、applprod、appprod等用户使之不能FTP服务器。必要时(如上传PATCH时)再打开applprod的FTP权限。
    D、建议:UNIX系统管理员定期检查/var/adm下的messages、sulog;/etc/syslog.conf 等信息。检查是否有非法用户登陆UNIX。
    建议:与UNIX工程师探讨更好的监控方式

    4)数据库与应用产品安全性检查
    A、建议:修改oracle用户根目录下的.profile文件,修改该文件的权限为500。即使得用户登陆时并不执行和数据库或应用相关的环境变量,增加安全性。
    B、检查数据库DBA权限的用户密码和应用系统用户密码:SYSTEM、APPS密码都已经改变,SYS密码还是初始安装密码Change_on_install
    建议:立即修改SYS用户密码,定期更改APPS、SYSTEM、SYS密码。
    C、定期检查并清除$ORACLE_HOME/admin/bdump目录下的alert_PROD.log文件和后台进程trace文件。定期清除$ORACLE_HOME/admin/udump目录下的trc文件。
    D、建议:给应用产品登陆的用户设置口令过期限制,如口令访问次数限制或时间(天数)限制。
    建议:不要给使用应用产品的用户共享用户名和口令,每个用户分配一个应用产品用户名。
    建议:对有应用系统管理员权限的用户登记,不适合有系统管理员权限的用户要把权限回收,统一管理。
    E、定期检查并清除与Apache Server有关的log文件,目录为:
    /u01/prodora/iAS/Apache/Apache/logs/acccess_log、error_log
    /u01/prodora/iAS/Apache/Jserv/logs/jserv.log、mod_jserv.log
    F、定期检查清除listener、tnsname的log文件,文件存放在:
    /u01/prodora/8.0.6/network/admin/apps_prod.log、
    /u01/proddb/8.1.7/network/admin/prod.log
    /u01/proddb/8.1.7/network/log/listener.log、sqlnet.log…
    G、数据库控制文件做多个镜像,放在多个磁盘位置,提高安全性。

    5)网络安全性检查
    检查$ORACLE_HOME/dbs/initPROD.ora文件
    #remote_login_passwordfile=EXCLUSIVE
    设置为REMOTE_LOGIN_PASSWORDFILE=NONE,不允许远程客户用INTERNAL方式登陆。
    2、资源管理器(Resource Manager)
    通过资源管理器可以管理混合工作负载,控制系统性能。数据库资源管理器包括:
    • Resource plans:包括 resource plan directives, 它指定了被分配到各个 resource consumer group的资源。
    • Resource consumer groups:定义了具有类似资源使用需求的一组用户。
    • Resource plan directives:包括下列内容:为consumer groups 或 subplans 指定resource plans;在各个 consumer groups 或资源计划的subplans 分配资源。

YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试 本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。 阅读详情

相关推荐

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 644

SQL Server 2022 保姆级环境搭建 + 数据库/表/数据类型全解(从零到建库建表)

学 C#、学 WPF、学上位机,绕不开一件事:数据往哪儿存?变量一关程序就没了,文件一多就乱,最后都得落到数据库。这篇从"为什么学数据库"讲起,把 SQL Server 2022 Express + SSMS 的安装、两种登录方式、数据类型、建库建表一次讲透,全程按课堂实操步骤走,装不上的坑也一并标出来。

2501_94699871的博客 145

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 183

MySQL系统篇,库的操作(三):建库、字符集校验规则与备份恢复

本文系统讲解MySQL数据库创建与管理,聚焦字符集(CHARACTER SET)与校验规则(COLLATE)的核心作用:前者决定字符存储范围,后者影响比较与排序逻辑。通过对比utf8_general_ci(不区分大小写)与utf8_bin(二进制比较)的实测差异,揭示其对查询结果和排序顺序的显著影响。文章还详解CREATE DATABASE语法、IF NOT EXISTS防错机制、命名规范及跨版本兼容性问题,并强调新项目应优先使用utf8mb4以支持完整Unicode。最后提供SHOW CREATE DAT

dasdasfv的博客 309

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2922

别再手动切换了!用SP3485+三极管搞定RS485自动收发电路(附完整原理图)

本文详细介绍了如何利用SP3485芯片和三极管设计RS485自动收发电路,解决传统手动切换带来的IO资源占用和软件复杂度问题。通过原理分析、电路设计拆解和实战注意事项,帮助工程师打造稳定可靠的自动收发通信模块,显著提升系统性能和可靠性。

weixin_26833939的博客 514

Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选

从订单与库存写入出发,拆解 @Transactional 的代理调用链、默认回滚规则与自调用问题;通过 Spring Boot + H2 的五个验证用例比较 REQUIRED、REQUIRES_NEW、NESTED,并说明数据库事务与 Redis、消息和远程接口的边界。

qq_74421990的博客 319

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

全网最详细的YOLOv5项目源码解读之训练部分train. py。全文近5万字!代码逐行注释,逐段讲解,小白入门必备!

路人贾的博客 3万+

Oracle多租户集群PDB异机恢复至单机部署数据库

本文详细演示了将Oracle RAC集群中的PDB(RMAN_PDB)通过RMAN备份恢复至单机CDB的全过程。首先在源库创建测试PDB并插入数据,随后配置RMAN备份路径,备份该PDB及其元数据文件。接着将备份文件传输至单机环境,启动实例并恢复控制文件与数据文件,最后利用DBMS_PDB.EXPOSE_PDB_FROM_RMAN生成PDB描述文件,将其插入新单机CDB中,实现PDB的独立使用。整个流程涵盖数据准备、备份、恢复及插入,完整验证了跨环境PDB迁移的可行性。

qq_57492774的博客 195

SAP AI Core 高阶能力实战参考

文章摘要:本文探讨了在企业SAP架构中整合GenAI技术的工程化实践,重点分析了SAP AI Core的高阶能力应用。作者指出,企业级AI应用需解决多轮对话管理、Git同步工作流、提示词治理等核心问题,而非简单接入大模型API。技术方案展示了如何通过SAP AI Core的orchestration service管理对话历史,利用GitOps实现AI资产版本控制,并强调prompt template在审计合规中的治理价值。全文以SAP技术栈(ABAP/RAP/Fiori)为背景,阐释了AI能力与企业核心系

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 104

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。

猿小白的博客 1169

Mysql数据库基础篇(三):全面掌握数据库与数据表操作:深度剖析底层文件差异与核心管理机制

如果你想彻底改掉某个字段的名字,应该使用 change。实例:将 employee表中的 name列修改为xingming注意:使用 change时,即便不改变数据类型,在指定了新列名后依然需要完整地写一遍它的数据类型与约束定义。

2501_93641778的博客 249

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

10 月更新|NineData 新增 Vastbase、SelectDB、DB2 等异构链路,优化 Oracle 增量解析性能

10月,NineData持续强化数据库DevOps、AIAgent与数据复制能力。新增18条数据复制与对比链路,支持多引擎异构迁移,如TiDB→DB2、OpenGauss→PolarDB等。DevOps扩展Databricks支持,优化SQL规范校验、WebSocket缓冲与OnlineDML功能。权限流程升级,支持API获取数据源,修复工作流状态一致性。AIAgent优化模型配置与ChatDBA交互体验。数据复制增强增量写入、容灾与Oracle性能,支持TiCDC集群源与字段长度超限处理。SQL窗口修复多

云原生智能数据管理平台 375

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【寻币打靶笔记】Web密码学攻击练习:AES-ECB分组拼接、CBC比特翻转、Padding Oracle与哈希长度扩展

寻币xuncoin靶场Web密码学攻击(web-crypto-attacks)房间打靶记录,整理前端HMAC密钥泄露、AES-ECB分组剪切拼接与Byte-at-a-time逐字节还原预言机、AES-CBC首块IV比特翻转篡改tier=1、PKCS#7 Padding Oracle填充预言机解密、hash_extender哈希长度扩展攻击以及时间戳PRNG种子预测。

QAQerji的博客 334

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

缓存穿透与击穿防御:一个 3 秒的空值标记和一把按 key 分的锁(四)

缓存穿透与击穿现象相似却机制迥异:前者因查询不存在数据导致数据库压力骤增,命中率却难反映;后者因热点 key 过期引发周期性回源尖刺。二者均在 get(key, loader) 路径生效,解法需分治——穿透通过“空值标记+短 TTL”(如3秒)防止无效请求反复冲击;击穿则依赖“按 key 加锁”实现单实例内并发收敛。关键在于区分“未缓存”与“已缓存为空”,并控制锁生命周期,避免内存泄漏。两策略协同,方能真正抵御缓存打穿。

tantan的小记录 478

oracle:多字符串包含匹配

若需区分大小写,添加参数 `'i'`;若关键词包含正则特殊字符(如 `.`, `+`, `*`),需使用 `\` 转义。`REGEXP_LIKE` 配合管道符 `|` 实现多字符串包含匹配(OR逻辑),这是处理多个关键词最简洁且。-- 示例:查询 column_name 字段中包含 'str1' 或 'str2' 或 'str3' 的记录。-- 同时包含 'str1' 和 'str2'性能优于多重 `LIKE OR`-- 不区分大小写匹配。

chinalog的专栏 423

Oracle 19c RAC ASM 在线扩容实战

最近有一套 Oracle 19c RAC 数据库,DATA 磁盘组空间使用率已经接近 90%,需要扩容。环境是两节点 RAC,底层使用 Dell EMC SAN 存储,通过 Multipath 管理共享磁盘,存储侧已经分配好一块 2TB 的新 LUN,只需要在操作系统上识别,然后加入 ASM 磁盘组。整个过程不需要停库,本文记录一下实际操作步骤。这次 Oracle 19c RAC ASM 扩容整体比较顺利。

LuciferLiu_DBA 307

Oracle 数据库迁移到 GaussDB 集中式

本文介绍Oracle到GaussDB集中式数据库的完整迁移方案,涵盖迁移评估、对象结构(UGO工具)与数据同步(DRS工具)两大阶段。流程包括环境准备、对象迁移、全量/增量同步、数据对比验证及业务割接。重点强调权限配置、归档日志开启、GUC参数设置,并推荐使用DRS实现近实时增量同步,结合行数与内容对比确保数据一致性。最终建议采用“工具同步+低峰期切换”的并轨策略,保障RPO接近零,实现平滑迁移。

Gauss松鼠会 805

oracle:数据类型不一致:应为-,但却获得blob

数据类型不一致:应为-,但却获得blob”,在 SQL 中使用了 `UNION`、`DISTINCT`、`GROUP BY` 或 `JOIN` 等需要对数据进行比较或去重的操作,而 Oracle 不支持直接对 `BLOB`/`CLOB` 大对象类型进行此类操作。2. 若需去重或关联,使用 `DBMS_LOB.SUBSTR` 或 `TO_CHAR` 将 BLOB 转换为字符串后再操作(仅适用于内容较小且为文本编码的情况),或直接排除 BLOB 字段参与去重/关联。

chinalog的专栏 313

带着小白学习-微服务-5 实战:配置中心-为server-store配置数据库连接

如前所述,服务治理主要包含注册中心,前面所有的微服务子工程均已注册到nacos,然后由相应的应用到nacos进行拉取。接下来,我们将使用nacos的配置中心,用于保存和分发应用运行所需的动态配置。比如数据库的各类信息等。

wdyan297的博客 225

用校园小助手生成ER图:从建表语句到可调布局

从建表语句或自然语言生成,到关系识别、主外键颜色区分,再到布局切换和折叠,校园小助手的ER图功能把画图过程中最耗时的部分交给了工具。它适合大学生论文、研究人员科研、教师教学及企业数据分析等场景,所有功能都在校园小助手平台内实现。下次作业要用ER图时,不妨先从手里的SQL开始。

weixin_74789176的博客 202

Oracle EBS Form 开发:高效设置字段可编辑性的通用写法

这种「遍历块内所有项 + 白名单过滤 + 状态统一控制」的写法,把字段可编辑性的控制逻辑集中到一个过程中,新增或删除受控字段只需修改IN列表,极大提升了 EBS Form 开发的可维护性,值得在项目中沉淀为公共程序单元。

longtimetoc的博客 169

数据库迁移怎么做?从全量初始化到增量追平,拆解完整流程

当全量初始化完成、增量积压基本消除、数据校验通过后,就可以准备业务切换。暂停旧库写入 → 等待增量追平 → 最终校验 → 切换应用连接 → 验证业务 → 恢复写入实际执行时,还需要检查定时任务、消息消费和其他写入入口,避免部分应用仍然向旧库写入。切换前,应重点准备三项内容。第一,切换窗口。选择业务量较低的时段,明确操作步骤、负责人和预计耗时。第二,回退预案。提前明确切换失败后的恢复方式。特别是新库已经产生写入时,不能简单认为改回旧库连接就能安全回退。第三,验证清单。

Leo的博客 645

SQLServer常用指令手册

覆盖数据库创建、表与约束、增删改查、查询进阶、索引、视图/存储过程/函数/触发器、事务、权限、运维排查。适用版本:SQL Server 2012 及以上(标注的条目为对应版本起可用)。

lzcbaba的博客 247

不装宝塔,怎么做定时备份和自动恢复

不用装宝塔 定时备份,工具只是触发方式,核心是"脚本 + 存别处 + 验证 + 监控"四件事。面板把前一件封装了,后三件无论用什么工具都得你主动。记住备份要离开源机器、要定期还原演练、失败要有人知道,这三点比用宝塔还是命令行要紧得多。

NextTech_的博客 295

oracle 查询出一个自增列的表

该语句利用CONNECT BY生成1至最大ID+1的连续序列,通过左连接表test_table查找缺失的最小ID。若无缺失,则返回最大ID+1,常用于补全编号或定位缺失记录。

无名大白 128
上一篇: oralce优化之10大要点七八
下一篇: oracle优化之几点技巧
夜雨~听风
博客等级 码龄18年 55粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值