基于裸数据的异地数据库性能诊断与优化

本文介绍了一种从生产环境中一次性获取并分析SQL性能数据的方法,包括获取执行计划、表及索引信息等内容,用于诊断数据库性能问题。文章还提供了一个案例分析,详细展示了如何定位并解决由不良SQL语句引起的性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击有惊喜


影响数据库性能的因素有很多,从大的方面可以分为硬件和软件。硬件包括CPU、内存、存储、网络设备等,软件方面包括操作系统版本、操作系统参数、数据库版本、数据库参数、数据库架构、运行的SQL代码等。

以上因素中,运行的SQL代码可单独归为一类,这部分内容多变,可控性较低,与业务强关联,动态影响,难以准确捕获,问题此消彼长难以根除。通过我们处理的故障类型统计,80%的性能问题来自于不良的SQL语句编写。

生产环境常做访问控制,管理生产环境DBA忙于日常事务无法顾及数据库性能。本文介绍一次性从生产库上获取分析性能SQL相关的数据,拿到本地环境分析诊断生产性能问题。

裸数据获取

较详细分析一个SQL的性能,需要的内容包括执行计划信息、表的基础信息、索引基础信息、SQL写法问题等等。这些内容都存放在数据字典中。

1、创建相关的表,语句参考:

3bde969dc2a52d62f5dba76a87c81b78afaac67e

注:(第三条、第四条红框处,没有* 是因为这两个视图里面有long类型,不支持create as ct操作,实际操作过程中,未获取long类型的数据,只选取了必要的列)

2、通过数据泵导出上述创建的表

3、导出AWR裸数据

$ORACLE_HOME/rdbms/admin/awrextr.sql

4、本地导入创建的表

5、通过数据泵导入AWR裸数据

$ORACLE_HOME/rdbms/admin/awrload.sql

裸数据初析

1、执行时段为10~12点,15~17点,平均执行时长超过1秒的SQL统计。多个采样期间都有执行的,取执行次数最多的采样期间。

ab5b36943cc0fc8faf5f001cd2ec193ad9a1b7af

2、执行结果部分展示如下:

64f053fb50340d9cef7a910ddad92099b8dfc52d

3、生成这获取这此SQL的SQLAWR数据脚本(取前20)

fb223b84d60e8181d85e86e55ec862608722ed2a

4、生成结果放入命令窗口执行

6826068b7c8640a5758487c79995959bbef0b7c6

注:红框为格式化操作

5、生成结果展示如下

8581b8c1d9b0af945d063baab39d2b8ccf6b722d


案例解析

NEW_TOP_PHYSICAL_16_awr_sqlrpt_dqdx4x39x2x7m.html

SQL文本

SELECT COUNT(1)
FROM GPCXXXXXXXX A
WHERE A.VALIDDATE < :B1
AND A.SUBMITDATE < :B1
AND A.SUBMITDATE >SYSDATE - 40
AND A.FEETYPE IN ('307')
AND A.PLANSTATUS = 'N'
AND ROWNUM = 1;

f59a4135195c6ed047f7a20780a233ba1e8e07c3


  1. 小时内还未执行完一次,但占用整个采样期间8.21%的物理读,并伴有严重的IO等待,对采样期间数据库整体性能有较大影响
  2. 执行计划中存在全表扫描操作
  3. 语句简单易懂
表基础信息
2493238c253cf89fe2a8c138c209f6d2cca123f2

近3亿行,未分区,平均行长149,理论占用空间大小为 296815739*149*1.17/1024/1024/1024=48G,实际占用约50G空间(从MY_DBA_SEGMENTS中获取),知此表碎片并不严重或不存在碎片。

SQL绑定变量分析
20ce40a4e7d6bd23ecd0ab02d4675fbb2f70488c

结合绑定变量和条件看,大范围上,只查询40天以内的数据。

条件列数据分布情况
14d177cd2d110b25044360fde7ea32951c93c462

回顾下SQL条件:

WHERE A.VALIDDATE < :B1
AND A.SUBMITDATE < :B1
AND A.SUBMITDATE > SYSDATE - 40
AND A.FEETYPE IN ('307')
AND A.PLANSTATUS = 'N'
AND ROWNUM = 1;

结合条件和上述查询结果,分析如下:

FEETYPE,PLANSTATUS是等值关联,VALIDDATE是开区间范围关联,SUBMITDATE是闭区间范围关联。已知此表中SUBMITDATE保留3年数据,在数据分布平均的情况下,此SQL查询的数据量约为(296815739/3/365)*40/25/2=21.7W,约占整个表的0.07%。理论上适合使用索引,不必要全表扫描。


点击有惊喜


<think>我们正在讨论PostgreSQL和高斯数据库(GaussDB)的区别。根据引用内容,高斯数据库是基于PostgreSQL的,但华为对其进行了深度优化和扩展。下面我将从多个维度分析两者的主要区别: ### 1. **起源开发背景** - **PostgreSQL**:开源关系型数据库,由全球社区共同维护,支持SQL标准并具备高度可扩展性[^1]。 - **GaussDB**:华为基于PostgreSQL内核开发的企业级分布式数据库,针对金融、政企等高可靠性场景优化,支持分布式架构和国产化生态[^1][^4]。 ### 2. **架构设计** - **PostgreSQL**:单机为主,可通过扩展(如Citus)实现分布式能力。 - **GaussDB**: - 原生支持分布式架构(如分片、多副本),通过全局事务管理实现跨节点一致性[^1]。 - 支持存储计算分离,便于弹性扩缩容[^4]。 ### 3. **性能优化** - **GaussDB** 在 PostgreSQL 基础上增强: - **向量化执行引擎**:加速OLAP复杂查询,性能提升可达10倍[^1]。 - **智能索引**:支持全局二级索引(GSI),解决分布式环境下的跨节点查询问题。 - **并行计算**:优化大规模并行处理(MPP)能力,适用于TB级数据分析。 ### 4. **高可用容灾** - **PostgreSQL**:依赖流复制(Streaming Replication)或逻辑复制实现高可用。 - **GaussDB**: - **多级容灾机制**:支持同城双活、异地三副本,RPO=0,RTO<60秒[^4]。 - **智能运维**:自动故障检测切换,减少人工干预。 ### 5. **安全合规** - **GaussDB** 满足中国行业标准: - 通过CC EAL4+安全认证,支持国密算法(如SM2/SM3/SM4)[^1]。 - 提供数据脱敏、行级访问控制等企业级安全特性。 ### 6. **生态兼容性** - **PostgreSQL**:兼容PG生态工具(如pgAdmin、psql)。 - **GaussDB**: - 兼容PostgreSQL协议,支持JDBC/ODBC连接(如引用中Java项目示例)[^1]。 - 额外提供Oracle语法兼容模式,降低迁移成本。 ### 7. **部署管理** - **GaussDB** 提供企业级工具: - **Docker/Kubernetes支持**:快速部署单机或集群(如引用中的Docker命令)[^4]。 - **可视化管控平台**:支持性能监控、SQL诊断和自动备份。 ### 8. **使用场景差异** | 场景 | PostgreSQL | GaussDB | |---------------------|---------------------|-----------------------| | 中小型OLTP | ✓ 原生支持 | ✓ 兼容 | | 分布式OLAP | ✗ 需扩展插件 | ✓ 原生优化 | | 金融级高可用 | ✗ 需定制 | ✓ 企业级解决方案 | | 国产化替代 | ✗ 无专项适配 | ✓ 深度支持 | > 注:GaussDB的PL/pgSQL过程语言继承自PostgreSQL,但增强了分布式事务处理能力[^2]。 --- ### 典型问题案例 **问题**:Hibernate查询序列失败(引用[3]) **原因**:高斯数据库的序列信息存储在`PG_SEQUENCE`而非`information_schema.sequences`。 **解决方案**:修改查询为`SELECT * FROM pg_sequences`[^3]。 --- ### 总结 | 维度 | PostgreSQL | GaussDB | |--------------|------------------|------------------| | **架构** | 单机为主 | 分布式原生 | | **性能** | 通用场景 | OLAP/HTAP优化 | | **高可用** | 基础复制 | 多级容灾 | | **生态** | 全球开源 | 国产化适配 | | **运维** | 依赖第三方工具 | 企业级管控平台 | §§相关问题§§ 1. GaussDB的分布式事务如何实现ACID? 2. 从PostgreSQL迁移到GaussDB需要修改哪些SQL语法? 3. GaussDB在哪些行业场景中具有明显优势? 4. 如何评估GaussDBPostgreSQL性能差异? 5. GaussDB的存储计算分离架构如何设计?</think>### PostgreSQL 高斯数据库(GaussDB)的核心区别 #### 1. **架构设计** - **PostgreSQL**: 纯开源单机关系型数据库,支持垂直扩展(如读写分离),但分布式能力需依赖第三方插件(如 Citus)。 - **GaussDB**: 华为基于 PostgreSQL **深度改造的企业级分布式数据库**,原生支持以下特性: - 分布式存储(分片+多副本) - 计算存储分离架构 - 全局事务管理(GTM)[^1] - 多活容灾(同城双活/异地灾备) #### 2. **性能优化** | 能力 | PostgreSQL | GaussDB | |---------------------|---------------------|-----------------------| | 并行计算 | 基础支持 | 强化 MPP 大规模并行处理 | | 向量化执行引擎 | ✗ | ✓(OLAP 性能提升 5-10 倍) | | 智能索引 | B-tree/GIN/GiST | 全局二级索引(GSI) | | 内存优化 | 常规 Buffer Pool | 智能冷热数据分层[^4] | #### 3. **高可用安全** - **GaussDB 特有功能**: - **金融级高可用**:RPO=0(零数据丢失),RTO<30秒 - **全链路加密**:支持国密算法(SM2/SM3/SM4) - **安全合规**:通过 CC EAL4+ 认证,满足等保四级[^1] - PostgreSQL 需依赖外部工具实现类似能力 #### 4. **生态兼容性** - **协议兼容**: GaussDB 兼容 PostgreSQL 协议,支持标准 JDBC/ODBC 连接(如引用中的 Java 配置)[^1] - **扩展差异**: - PL/pgSQL 过程语言:两者均支持,但 GaussDB 增强分布式事务处理[^2] - 序列管理:GaussDB 需特殊处理 Oracle 迁移的序列(如引用中的 `information_schema.sequences` 问题)[^3] #### 5. **部署运维** - **PostgreSQL**: 标准开源部署,依赖社区工具(如 pgBackRest、Patroni) - **GaussDB**: - 提供企业级管控平台(支持智能调优/故障自愈) - 容器化部署优化(如引用中的 Docker 命令)[^4] - 国产化适配(鲲鹏芯片/麒麟OS) --- ### 典型场景对比 | **场景** | **PostgreSQL** | **GaussDB** | |------------------------|---------------------|----------------------| | 单机 OLTP | ✓ 最优 | ✓ 兼容 | | 分布式 OLAP | ✗ 需扩展 | ✓ 原生支持(列存引擎)| | 金融核心系统 | ✗ 高可用能力不足 | ✓ 企业级解决方案 | | 国产化替代项目 | ✗ 无专项适配 | ✓ 深度支持 | > ⚠️ **注意**:GaussDB 的存储过程在分布式环境下需重写,例如游标遍历需改用分片批处理[^2]。 --- ### 总结 | **维度** | **PostgreSQL** | **GaussDB** | |----------------|-------------------------|------------------------------| | 定位 | 通用开源数据库 | 企业级分布式数据库 | | 架构 | 单机为主 | 原生分布式 | | 性能峰值 | 10万 TPS | 百万 TPS(分布式扩展) | | 国产化适配 | 无 | 深度支持(芯片/OS/生态) | | 成本 | 免费 | 商业授权 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值