三.数据库基础-国产数据库-华为GaussDB高斯学习这一篇就够了(详细)

本文介绍了GaussDB,华为的国产数据库,以及从Oracle迁移到GaussDB时需要注意的关键差异,包括对象命名、事务控制、数据存储、分布式设计和性能调优。GaussDB在语法上与MySQL相似,且在数据库对象、连接方式、事务处理、表分区等方面与Oracle有区别,迁移时需特别关注这些方面。

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

简介

高斯数据库(GaussDB),是华为发布的国产自主研发数据库。核心可以算是在PostgreSQL9.2基础上的魔改,但自研比例已经相当高。现在基于分布式的关系型数据库GaussDB 200/300已在金融企业较多使用。
因版权要求这里对于其细节没有过多描述,建议学习高斯前先学习MySQl与Oracle,其内容都差不多。

Oracle迁移高斯注意点

  • 与Oracle不同,GaUS5DB 数据库对象命名默认以小写形式保存在数据库中,使用
    时默认不区分大小写。如果需要区分大小马,需要在加双引号引用对象 名,不建议
    使用大小写敏感的命名。
  • 没有 DUAL 表,替代表 SYS_DUMMY,或直接 SELECT,不使用 FROM 关键字,如
    "SELECT 1’
  • 序列查询使用方式 select nextval(‘序列名’)
  • 没有伪列 rownum,分页查询 使用 Limit 关键字
  • 对象命名长度问题 GaussDB 绝大部分对象命名长度上限为 63 字节,Oracle 为 128
    字节(需注意对象迁移因命名长度导致失败)
  • ORACLE 会默认进行数据类型转换,GaussDB 当数字类型和字符类型进行数字运算
    会报错、两个字符类型运算会隐式转换,总之避免隐式的数据类型转换问题
    如 SELECT 1 + '1.25’在 Gaus5DB 会执行错误
  • 高斯的语法上多像Mysql。

高斯学习笔记

1概述

1.1整体流程描述

客户端CNGTMDN
1监听服务
2请求链接服务
3权限验证
4发送执行脚本请求
5分配服务线程
6请求分配全局事物
7返回全局事物
8脚本解析优化
9发送执行计划给DN
10启动线程执行脚本
11返回执行结果
12返回执行结果12销毁线程
13关闭连接
14销毁线程

2数据库相关

2.1事务控制

支持事务的启动、设置、提交、回滚。支持读已提交、读未提交两种隔离级别。采用MVCC两阶段锁方式,实现读写不堵塞。

2.2连接方式

可以采用客户端工具gspl、应用程序接口(JDBC、ODBC)、psql连接。

2.2创建数据库

初始包含两个模板数据库template0、template1,和一个默认用户数据库postgres。使用命令创建数据库实际上是通过拷贝template0来实现。创建后可以查看、修改、删除数据库。注意:不支持跨库查询。
数据库字典表pg_database。

2.3数据存储方式

支持行存储或列存储。

存储方式描述优点缺点适用场景
行存将表按行存储在磁盘数据保存在一起,DML方便查询时几列时所有数据都会涉及1返回记录少,基于索引的点查询2DML操作多
列存将表按列存储在磁盘1查询时只有涉及的列会被读取2高效投影3任何列都可以为索引1DML麻烦2选择后需重新组装1关联、分组操作较多的统计分析查询2DML少3一次批量插入后查询4列较多5查询时涉及少数列

2.4表空间

默认两个表空间pg_default、pg_global。也可以用户自定义表空间。

pg_default默认表空间,存储非共享系统表、用户表、用户索引、临时表、临时索引、内部临时表
pg_global共享表空间,存储共享系统表

表空间字典表:pg_tablespace
查询表空间使用率:select PG_TABLESPACE_SIZE(‘表空间名’)

2.5表

  • 注意服务端与客户端字符集不一致问题,会导致输出结果与预期不一致。
  • 批量更新删除后,会在数据文件中产生大量的删除标记,查询工程中标记删除的数据也会扫描。所以批量更新删除反复的场景,定期执行VACUUM FULL 可以保持查询性能。
  • 表数据字典:pg_tables
  • 系统表:pg_user数据库中用户表、视图PG_STAT_ACTIVITY可以查看正在运行的查询语句、函数PG_TERMINATE_BACKEND可以根据线程ID结束会话。

2.6模式schema

schema又叫模式,用于管理权限。高斯同样存在用户与角色,与模式类似但管理权限角度不同。
每个库中都有一个pg_catalog_schema,包含系统表和所有内置数据类型、函数、操作符。

2.7表分区

支持范围分区:将数据基于范围映射到每一个分区。

2.8索引

按索引方式分支持:唯一索引、多字段索引、部分索引(建立在一个表的子集上,这种索引方式只包含满足条件表达式的元组)、表达式索引。
可以在分区表上建立分区索引。

2.9视图

2.10序列

通过序列使某字段成为唯一标识符有两种方法:
1声明字段类型为序列整型,由数据库在后台自动创建一个对应的Sequence
2使用CREATE SEQUENCE创建一个序列,然后将nextval(‘序列名’)函数值作为字段值。

2.11定时任务

兼容Oracle定时任务功能。
1.先建存储过程 create or replace procedure xxx;
2.建定时任务 call dbe_task_submit(‘call 存储过程名’,sysdate,‘interval “1 minute”’,a);
1分钟调用一次存储过程。

视图my_jobs可以查看当前用户创建的任务信息。
停止任务 call dbe_task.finish(1,true);
启动任务 call dbe_task.finish(1,false);
修改任务 call dbe_task_next_time(1,sysdate+1.0/24);改成1小时后执行
pg_job表存储了任务的权限信息。
参数job_queue_processes为0时表示关闭定时任务功能,大于0时表示其并发数。

2.12存储过程、函数、触发器、约束

与Mysql类似

2.14数据类型

  • 字符串:
    • 定长:CHAR(n)、CHARCTRE(n)、NCHAR(n)、BPCHAR(n)
    • 变长:VARCHAR(n)、CHARACTER VARYING(n)、VARCHAR2(n)、NVARCHAR2(n)、TEXT
  • 数值类型
    • 整数类型:TINYINT、SMALLINT、INTEGER、BINARY_IN
      TEGER、BIGINT
    • 任意精度型:NUMERIC[(p[,s])],DECIMAL[(p[,s])] 、NUMBER[(p[,s])]
    • 序列整型:SMALLSERIAL、SERIAL、BIGSERIAL
    • 浮点类型:REAL,FLOAT4、DOUBLE PRECISION,FLOAT8、FLOAT[§]、BINARY_DOUBLE、DEC[(p[,s])]、INTEGER[(p[,s])]
  • 货币类型:money
  • 布尔类型:BOOLEAN
  • 二进制类型:BLOB、RAW、BYTEA
  • 日期/时间类型:DATE、TIME、TIMESTAMP
  • 几何类型
  • 网络地址类型
  • 位串类型
  • 文本搜索类型
  • UUID 类型
  • JSON/JSONB 类型
  • HLL 数据类型
  • 范围类型
  • 对象标识符类型
  • 伪类型

3分布式设计

3.1表分布式方式

方式描述适用
Hash通过Hash方式散列到集群中多有DN上数据量大
Replication每个DN全量复制数据量小
Range对指定列进行范围映射到不同DN,范围分布根据范围部分
List对指定列进行值规则映射,值规则分布根据值类型分布

分布键的选择非常重要,选择不当会导致数据倾斜。

  • 分布键应该比较离散
  • 尽量不选在查询中存在常量过滤的字段
  • 尽量选择查询中关联条件字段

3.2表分布式与分区

表分区为物理数据分散,表分布为逻辑分布。互不影响。

4性能调优

4.1查询执行时间长sql

1.查询系统中长时间运行语句
SELECT current_timestamp - query_start AS runtime,datname,usename,query FROM pg_stat_activity WHERE state !=‘idle’ ORDER BY 1 DESC;
2.设置参数track_activities为on。
3.查看正在运行查询,查看视图pg_stat_activity
4.查询阻塞语句。
SELECT datname,usename,state,query FROM pg_stat_activity WHERE waiting = true;
5.查看阻塞信息。

SELECT w.query as waiting_query,
w.pid as w_pid,
w.usename as w_user,
l.query as locking_query,
l.pid as l_pid,
l.usename as l_user,
t.schemaname ||'.'|| t.relname as tablename
from pg_stat_activity w 
join pg_locks l1 on w.pid = l1.pid 
and not l1.granted join pg_locks l2 on l1.relation = l2.relation
and l2.granted join pg_stat_activity l on l2.pid = l.pid
join pg_stat_user_tables t on l1.relation = t.relid
where w.waiting;

6.结束会话
SELECT PG_TERMINATE_BACKEND(线程ID);

4.2执行计划调优

其他大神总结

DM8(达梦8)数据库安装和使用

<think>好的,我现在需要帮助用户解决关于adb push和adb pull命令的使用方法的问题。首先,我得仔细看看用户提供的引用内容,从中提取有用的信息。用户已经引用了四个相关的资料,其中提到了基本用法、权限问题、操作步骤以及一些常见问题。 首先,我应该整理adb push和adb pull的基本语法。根据引用1和引用2,push是把本地文件传到设备,pull则是从设备拉取文件。需要确认命令的正确格式,比如adb push <本地路径> <设备路径>和adb pull <设备路径> [本地路径]。用户可能需要具体的例子,比如如何推送APK文件到/data目录,或者如何从设备拉取日志文件。 接下来是权限问题。引用2和引用3都提到,执行这些命令前需要adb remount来获取读写权限,否则会遇到只读文件系统的错误。这里需要强调adb root和adb remount的步骤,尤其是对于需要系统目录操作的情况。例如,用户可能需要先运行adb root,然后adb remount,才能成功push文件到/system或/data分区。 然后,用户可能遇到权限不足的问题,如引用3提到的chmod修改目录权限。这时候需要指导用户如何进入adb shell,使用su获取root权限,再通过chmod命令修改目录权限,确保可以写入。这部分可能需要详细步骤,比如如何检查当前权限,如何修改为755或777。 此外,用户提到的引用4中尝试修改APK文件但失败的情况,可能涉及到APK签名的知识。需要提醒用户直接替换APK内的文件会导致签名不一致,从而无法安装。这时候可能需要建议使用其他方法,比如重新打包并签名,或者使用动态加载资源的方式。 还需要考虑常见错误,比如路径错误、文件不存在、权限不足等。例如,如果用户push文件时提示“No such file or directory”,需要检查本地路径是否正确;如果提示“Permission denied”,则需要检查设备是否已root,并正确执行remount。 最后,用户可能需要实际应用的例子,比如如何备份文件、传输多媒体或调试应用。这些例子可以帮助用户更好地理解命令的实用场景。同时,注意事项如确保设备连接、文件系统类型(如FAT32无法处理大文件)也需要提及。 总结下来,回答的结构应该包括基本命令格式、操作步骤、权限处理、常用示例、常见问题及解决方法,以及注意事项。需要确保语言简洁明了,步骤清晰,并参考提供的引用内容来增强答案的可靠性。同时,生成的相关问题要围绕用户可能进一步询问的方向,比如权限问题、高级用法或错误处理。</think>### ADB push/pull 命令使用指南 #### 一、基础语法 1. **文件推送** `adb push <本地路径> <设备路径>` 示例:推送本地文件到设备系统目录 ```bash adb push D:/todolist.apk /data/ ``` 2. **文件拉取** `adb pull <设备路径> [本地路径]` 示例:从设备下载日志到当前目录 ```bash adb pull /sdcard/log.txt ./ ``` #### 二、关键操作步骤 1. **获取读写权限** - 执行 `adb root` 获取 root 权限 - 执行 `adb remount` 挂载系统分区为可读写(显示 *remount succeeded* 表示成功)[^2][^3] 2. **权限不足解决方法** ```bash adb shell su chmod 777 /data # 修改目录权限 exit ``` #### 、典型应用场景 | 场景 | 命令示例 | |---------------------|----------------------------------| | 安装测试APK | `adb push test.apk /data/local/tmp` | | 备份系统日志 | `adb pull /system/logs D:/backup` | | 修改系统配置文件 | `adb push hosts /system/etc/` | #### 四、常见错误处理 1. **Read-only file system** - 未执行 `adb remount` - 设备未完全 root(推荐使用 KingRoot 等工具)[^3] 2. **文件不存在/路径错误** - 检查路径中空格需转义 - 确认文件扩展名和大小写 3. **APK修改后无法安装** - 直接替换 APK 内文件会破坏签名,需重新签名[^4] #### 五、注意事项 1. 优先使用绝对路径 2. 系统分区操作需谨慎(误删可能导致设备变砖) 3. FAT32 格式存储设备不支持 >4GB 文件传输
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值