-
[运维管理] gauss on hdfs 外表和gauss 内表做联邦查询的时候,hdfs外表创建的方式是roundrobin的方式,他们根据哪个字段做的轮询,是逐条轮询分布到dn,还是按batch去轮询?gauss on hdfs 外表和gauss 内表做联邦查询的时候,hdfs外表创建的方式是roundrobin的方式,他们根据哪个字段做的轮询,是逐条轮询分布到dn,还是按batch去轮询?
-
背景 对数据库集群内资源管控与资源隔离一直是企业客户长久以来的诉求。华为云GaussDB作为一款企业级分布式数据库,一直致力于满足企业对大型数据库集群的管理需要。 数据库可以管理的资源有计算资源与存储资源,计算资源包括CPU、内存、IO与网络,存储资源包括数据存储空间、日志存储空间与临时文件等。 从用户角度来看,资源管控通过设定阈值或者优先级限定程序对资源的使用,保证承诺服务等级协议的同时,又满足不同用户间资源隔离,达成多个租户共享数据库资源的目的。 从系统的角度来看,引入资源监控与控制的手段,可以实现资源在可控情况下被合理利用的目的,避免资源耗尽,防止系统停止响应、崩溃等情况的发生。作业优先级,可以保证作业平稳运行,避免某个作业占用资源过高时影响其他作业,并在资源富裕时,实现资源利用的最大化。除此以外,还能满足外部的期望,保证系统资源使用最大化。通过对作业控制,可以保证作业是平稳的,避免作业执行过程中出现不可控的行为。 为了解决上述目标,华为云GaussDB数据库提供了一种对数据库集群内资源进行细粒度管控的方案——细粒度资源管控。该方案在不同的管控粒度(如用户级、会话级与语句级)和不同的管控维度(CPU、内存与IO)都提供了对应的管控能力。用户可以根据自己业务需求采取合适的管控维度与管控粒度来达成资源管控与资源隔离的目标,满足不同场景的资源控制的需要。 技术架构 我们先来看下细粒度资源管控的技术架构和运行原理: 从上图中可以看到,GaussDB提供资源池模块来完成CPU、内存与IO的管控逻辑。用户可以创建一个资源池并指定其可以使用的CPU、内存与IO的份额,并把资源池与用户绑定。之后该用户发起的作业在数据库内核优化解析、执行引擎以及存储引擎模块运行的过程中都会受到实时资源管控,确保其CPU、内存与IO都在对应资源池的范围内。 假设A公司部署了一套GaussDB实例,其同时存在三个不同的应用来访问该实例,如OLTP业务、报表业务、其他低优先级业务。A公司希望对三个业务做资源的合理管控,在保证资源使用最大化的情况下,系统平稳运行。我们可以使用系统管理员执行如下命令来为三个业务的用户设置,其资源份额比例为50:30:10,剩余的10%为系统预留。 这里仅做简单的使用示例,每一个参数的具体含义会在后面的章节进行详细说明。 create resource pool respool_tp with(control_group=“cgroup_tp”, max_dynamic_memory=“5GB”, max_shared_memory=“5GB”, io_limits=50, io_priority=“High”); alter role tp_user RESOURCE POOL ‘respool_tp’; create resource pool respool_report with(control_group=“cgroup_report”, max_dynamic_memory=“3GB”, max_shared_memory=“3GB”, io_limits=30, io_priority=“Medium”); alter role report_user RESOURCE POOL ‘respool_report’; create resource pool respool_other with(control_group=“cgroup_other”, max_dynamic_memory=“1GB”, max_shared_memory=“1GB”, io_limits=10, io_priority=“Low”); alter role other_user RESOURCE POOL ‘respool_other’; 如上操作后,OLTP业务、报表业务与其他低优先级业务分别使用tp_user、report_user与other_user连入GaussDB执行作业时,这三个业务则会受到对应的资源池respool_tp、respool_report与respool_other的管控,在资源发生争抢的时候保证三个业务分别可以使用GaussDB集群50%、30%以及10%的资源。 关键能力 在了解了细粒度资源管控的整体架构和使用方法之后,我们再来看看它具备哪些关键能力,这些能力可以为客户带来什么样的业务价值。 CPU管控 GaussDB的CPU管控是以资源池粒度来做用户资源管控的,每一个资源池绑定一个控制组,通过控制组(Control Group,CGroup)来实现CPU的管控。CGroup是Linux内核提供的一种限制、记录、隔离进程组所使用的物理资源(如CPU、Memory、IO等)的机制。 考虑到数据库系统、用户、作业不同维度的隔离性和可配置性,GaussDB使用控制组的层级特性构造符合数据库场景的模型(见下图),其满足客户SLA的关键特性,并支持三个维度的层次隔离和控制:数据库程序与非数据库程序隔离、数据库常驻后备线程与执行作业线程隔离以及数据库多用户之间的隔离。 GaussDB控制组可以设置CPU的百分比以及核数的上限,其中根节点负责管控GaussDB进程可用的CPU份额;Backend控制组负责管控数据库常驻后台线程的CPU份额(Vacuum、DefaultBackend);Class控制组负责管控用户的作业线程的CPU份额(UserClass1,UserClass2,…UserClassN);Class控制组内还可以创建Workload控制组(TopWD,RemainWD…)进行更细粒度的管控。 接上面的示例,我们用GaussDB提供的CGroup工具来为A公司的OLTP业务、报表业务以及其他低优先级业务分别创建控制组,CPU分配比例为50%、30%与10%。 gs_cgroup -c -S cgroup_tp -s 50; gs_cgroup -c -S cgroup_report -s 30; gs_cgroup -c -S cgroup_other -s 10; 执行如上命令就代表我们成功创建了3个控制组,之后可以在创建资源池时指定该控制组名称。绑定资源池的用户所发起的作业就会收到控制组对应CPU份额的管控。 CGroup管控CPU有两个问题需要注意: 一是,如果线程的CPU需要受CGroup管控,那么需要执行CGroup的系统API来为线程绑定对应的CGroup,该操作较为耗时; 二是,CGroup的CPU管控效果,在线程数与CPU成比例的情况下,管控效果最佳。 基于这些问题GaussDB提出了线程组的概念,每一个资源池对应一个线程组,线程组里的线程都绑定了该资源池所对应的CGroup。同时,GaussDB会将每一个线程组的线程数量调整到与对应CGroup的CPU份额一致。具体可见下图: 每一个用户发起的作业都会被分发到对应的线程组里的线程来执行,由于线程已经绑定了对应的Cgroup节点,所以操作系统会在线程调度时完成CPU管控。 GaussDB提供两层用户机制,绑定Class控制组的资源池称之为组资源池,对应的用户为组用户,绑定Workload控制组的资源池称之为业务资源池,对应的用户为业务用户。组用户一般对应一个部门,而业务用户对应这个部门的不同的业务。业务资源池的各个资源维度的资源份额会不会超过所属组资源池的份额,从而达到两级资源管控的目标。 CPU管控也提供名称为session_respool的GUC来限制单个会话的CPU不超过对应资源池的CPU上限。 内存管控 GaussDB提供动态内存与共享缓存的管控,创建资源池时可以指定max_dynamic_memory与max_shared_memory来分别完成动态内存与共享缓存的阈值设置。 动态内存管控并没有更改其原有的内存资源分配机制,仅在分配内存之前增加一个逻辑判断层,对多分配出的内存进行记账,通过检查该记账值是否达到允许使用的内存上限来完成内存的管控。当动态内存超过上限时,作业申请内存会失败。作业退出时,该作业已申请的内存会进行释放来保证其他作业可以正常执行。同理,当作业使用的共享缓存超过资源池的管控上限时,再次申请共享缓存,需要先释放自己已经占用的共享缓存,比如BufferPool,作业申请页面时,会对自己已经占用的页面进行淘汰,淘汰之后空余出来的页面供自己继续使用。 GaussDB除了用户粒度的内存管控外,也提供session_max_dynamic_memory与query_max_mem两个GUC参数来完成会话级与语句级动态内存的管控,当一个会话或者语句所使用的动态内存达到GUC的阈值时,作业申请内存失败。 IO管控 GaussDB的磁盘读写IO都由后台线程完成,该线程无法区分页面属主,只是按照时间顺序依次落盘,无法针对不同用户管控不同的IO使用。基于此,考虑IO管控功能采用逻辑IO统计方式,对用户或者会话的读写IO进行管控限制,在工作线程和共享缓存之间增加了逻辑IO计数,对于行存表来说每6000(可通过io_control_unit GUC进行修改)行算做一次IO,当一秒产生的读写IO请求数超过资源池设置的阈值时,则将该IO请求加入到后台线程的一个等待队列里,后台线程将对等待队列里的这些IO请求进行监控,当其等待时间符合条件时,将这些IO请求从等待队列中唤醒。 GaussDB支持两种模式的IO资源管控,上线数值模式是通过设置固定的触发IO次数的数值,进行IO资源控制;优先级模式是指在当前磁盘长时间使用率达到95%以上,所有作业都无法达到上线数值模式时,用户可通过该模式进行IO控制,控制该作业原本触发IO的优先级比例,优先级包含三挡:High、Medium与Low。 接上面的示例,我们为A公司的OLTP业务、报表业务以及其他低优先级业务分别创建资源池,IO权重分别设置的为High、Medium与Low。那么,OLTP业务能使用50%的IO请求向BufferPool中读取或写入数据,少量的IO请求会进入等待队列等待;报表业务能使用20%的IO请求向BufferPool中读取或写入数据,较多的IO请求会进入等待队列等待;其他低优先级业务能使用10%的IO请求向BufferPool中读取或写入数据,较多的IO请求会进入等待队列等待;后台监控线程会周期性的遍历IO等待队列,唤醒等待时间符合要求的IO请求从BufferPool读取或写入数据。 GaussDB除了支持用户粒度的IO管控外,也支持通过设置会话级GUC参数io_limits与io_priority,来完成指定会话上允许作业的IO管控。 连接数与并发管控 GaussDB提供基于资源池的连接数管控与并发管控,创建资源池时可以指定max_connections与max_concurrency来分别完成连接数与并发数的设置,可以使用如下SQL,为前面示例A公司的三个业务对应的资源池完成连接数与并发数管控: alter resource pool respool_tp with(max_connections=-1, max_concurrency = -1); alter resource pool respool_report with(max_connections=200, max_concurrency = 100); alter resource pool respool_other with(max_connections=100, max_concurrency = 50); 如上SQL执行成功后,实时生效。A公司OLTP业务的连接数与并发数不受限制,只有集群有资源它都可以使用到;报表业务的最大连接数为200,其他低优先级业务的最大连接数为100,当这两个业务建立的连接数超过该值时,GaussDB内核会自动拦截,报当前连接数不足,链接失败;报表业务的最大并发数为100,其他低优先级业务的最大并发数为50,当这两个业务同时发起的作业数超过该值时,超出的作业将会进入等待队列,直到已有的作业完成之后GaussDB才会将其唤醒继续执行作业。 存储空间管控 存储空间管控,用于限定不同用户可以使用的空间配额,防止单用户存储空间使用过大导致整个数据库业务受阻。GaussDB通过在创建用户时指定存储空间的大小来实现对存储资源的管控。 存储空间资源分为三种类型:永久表空间(Perm Space)、临时表空间(Temp Space)与算子下盘空间(Spill Space)。 可以使用如下SQL,为前面示例A公司的三个业务对应的用户完成磁盘空间额管控。 alter user tp_user PERM SPACE ‘200G’ TEMP SPACE ‘20G’ SPILL SPACE ‘20G’; alter user report_user PERM SPACE ‘100G’ TEMP SPACE ‘10G’ SPILL SPACE ‘10G’; alter user other_user PERM SPACE ‘100G’ TEMP SPACE ‘10G’ SPILL SPACE ‘10G’; 存储空间管理支持对组用户和业务用户的存储空间管理。当业务用户对应的组用户存在空间限制时,业务用户的空间也受到该组用户的空间限制。指定存储空间的大小后,该用户在DN上所有的写操作会增加用户已用空间,删除操作减少用户已用空间,CN会周期性的从DN获取一次已用空间总和,并对用户已用空间进行判断,超过最大值后cancel掉写作业(insert/create table as/copy),后面写作业报错退出。 特性演示 特性演示这里我们就简单的为大家演示一下CPU的管控效果,因为对业务影响最大的就是CPU。 创建两个资源池分别设置20%与60%的CPU,然后使用两个绑定了该资源池的用户开始跑业务。观测CPU的实际使用情况。 创建控制组: gs_cgroup -c -S class1 -s 20; gs_cgroup -c -S class2 -s 60; 创建资源池: CREATE RESOURCE POOL xuuer_pool with(control_group = “class1”); CREATE RESOURCE POOL xyuser1_pool with(control_group = “class2”); 创建用户绑定资源池: create role user1 RESOURCE POOL ‘xuuer_pool’; create role user2 RESOURCE POOL ‘xyuser1_pool’; 通过Top观察系统CPU状态,同时细粒度资源管控提供gs_wlm_respool_cpu_info函数来观察各个资源池的CPU实时情况。 如上图,可知初期系统CPU是空闲状态,资源池的CPU监控视图也显示CPU使用为0。让user1开始跑业务,观测可知系统CPU有一定业务占用,查询资源池的CPU监控视图显示,user1可以使用80%的CPU。此时,让user2也开始跑业务,观测可知系统CPU进入繁忙状态,查询资源池的CPU资源监控的系统函数可知user1的CPU使用率开始下降,user2的CPU使用率开始上升。 整理两个用户的CPU使用率并绘制曲线图如下图,可看出user1与user2的CPU使用率最终会平衡到3比1的状态,符合资源池对应的CGroup控制组里设置的20%与60%的比例,达到了CPU管控的效果。 总结 细粒度资源管控特性目前支持集中式与分布式。分布式下的计算资源管控是各个节点独立管控自己节点的资源,存储资源管控是以集群维度来整体管控的。 细粒度资源管控作为多租户的资源隔离的底座,实现资源的精准划分与控制,并解决高负载场景下资源不足而导致集群不可服务的问题。该特性适用于数据隔离不敏感,但对不同业务有资源隔离需求的场景,如果客户对资源隔离和数据隔离都有需求的话,可以关注一下我们后面即将分享的多租数据库特性哦!
-
1. GaussDB对于存储不同类型的数据,如string、int、double、datetime等类型的数据压缩率分别是多少cid:link_3答:暂无2.GaussDB最多能存储多少行多少列的数据cid:link_0答:暂无3. GaussDB有没有内置的MD5函数,能在INSERT语句中,自动将某个字段的值(比如密码)进行MD5处理问题处理中 cid:link_4答:GaussDB确实提供了内置的MD5函数,您可以在SQL语句中使用这个函数来自动对字段值进行MD5处理。例如,如果您想在插入数据时对密码字段进行MD5加密,可以这样编写INSERT语句:INSERT INTO your_table (password_column) VALUES (MD5('your_password_here'));在这个例子中,your_table是您的数据库表名,password_column是您想要存储加密密码的字段名,而your_password_here是您希望加密的原始密码。执行这条SQL语句后,password_column中将存储your_password_here的MD5散列值.4. GaussDB能否实现对某个字段(比如密码)加密存储,然后在读取的时候自动解密cid:link_5答:GaussDB确实支持对存储在数据库中的数据进行加密,以提高数据安全性。根据搜索到的信息,GaussDB提供了透明数据加密(TDE)功能,这项功能可以对数据文件执行实时的I/O加密和解密。数据在写入磁盘之前会进行加密,从磁盘读入内存时会进行解密,这样可以在不影响应用程序操作的情况下保护数据的静态安全。 此外,GaussDB还支持列级别加密,允许用户定义表中的特定列为加密列,数据库会自动将这些列的数据加密存储,并在读取时自动解密,确保敏感信息的安全。 综上所述,GaussDB可以实现对特定字段(如密码)的加密存储,并在读取时自动解密,从而满足对数据安全性的高要求。5. GaussDB 内部是按行存储的,还是按列存储的cid:link_1答:GaussDB是OLTP类型数据库,使用行级存储6. GaussDB Join的时候,大表在前速度快,还是大表在后速度快?cid:link_6答:通常情况下,将较小的表作为驱动表(外表)而较大的表作为被驱动表(内表)可以提高查询性能。 在数据库操作中,尤其是涉及到大型表的JOIN操作时,大表的位置(即作为驱动表还是被驱动表)对性能有着显著的影响。在传统的数据库系统中,通常推荐将小表作为驱动表,以减少不必要的扫描和提高JOIN操作的效率。这是因为小表的全表扫描或索引扫描通常比分析大表的成本要低。 具体可以参考:cid:link_2
-
GaussDB对于存储不同类型的数据,如string、int、double、datetime等类型的数据压缩率分别是多少
-
GaussDB最多能存储多少行多少列的数据
-
一、前言华为云数据库 GaussDB是一款拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。同时具有PB级海量数据存储、实时高效访问、自动化运维等特点,广泛应用于金融、电信、物流、电商、政体等行业,成为行业最受欢迎的企业级数据库之一。GaussDB在经过多年的优化和升级,目前已经发展成为华为云的核心产品之一。其先进的技术架构和优秀的性能表现,在国际和国内市场上都赢得了良好的口碑和市场占有率。未来随着云计算技术和大数据应用不断发展,GaussDB将在市场竞争中不断突破创新,提升性能表现和可靠性,满足更多用户的需求。同时,GaussDB还将继续加强与其他华为云的产品的协同,进一步推进数字化转型和智能化建设。二、GaussDB: 立足创新与自研,助力企业核心数据安全高效上云云数据库GaussDB,一方面拥抱并兼容MySQL等生态,另一方面打造自己的openGauss生态,主要面向政企客户,强调高性能、高可靠、高安全等方面诉求。同时,打造数据库结构+ 应用+数据一站式迁移工具方案,让客户选型安心、迁移放心、管理省心,目前已经规模应用在金融、电 信、泛政府、能源、交通、互联网等各行业。1、选型:全业务场景、全开放生态、安全可信2、迁移:数据库结构+应用+数据一站式迁移3、管理:无缝协同上层应用,三、GaussDB: 基于华为openGauss开放生态打造的 金融级分布式数据库1、定位为企业级云分布式数据库,架构上着重构筑传统数据库的企业级能力和互联网分布式数据库的高扩展和高可用能力2、方案优势:高可用:同城AZ内节点故障,RPO=0,RTO<60s;保证数据0丢失。两地三中心异地容灾方案,跨Region数据实时灾备混合负载高性能:支持高吞吐强一致性事务能力,鲲鹏2路服务器,32节点1500万tpmC高扩展性:1000+计算节点在线扩展,卓越线性比高安全:业界首个纯软全密态数据库技术,实现数据从传输、计算到存储的全程加密全栈软硬自研可控,生态可控:业界领先的存储+网络+计算+openGauss自研开放生态3、案例:G行A、B类核心业务商用GaussDB1)此业务通过三个阶段完成切换:第一阶段,商密公文系统投产;第二阶段,贵金属业务投产;第三阶段,个人网上银行业务投产。AS Is(切换前的现状):To Be(切换后的状态):2)方案优势:高可用:同城单Region多AZ互联支持同城双活,金融级支持三层组网的管控高可用部署方案性能线性扩展:支持集群水平扩展,基本联机性能与Oracle持平弹性部署:部署实例及应用要快速响应业务需求,数据库支持容器化部署四、GaussDB(for MySQL): 基于开源生态打造的企业级自研云原生数据库1、存算分离,业界领先架构,释放华为软硬结合技术积累。2、方案优势:巅峰性能:多层级并行计算+NDP近数据计算下推,TPCH场景性能可达友商34倍海量存储高可靠:DB-inside分布式存储,由开源2T扩展至128T,存储三副本,秒级备份Serverless极致弹性:首创分布式行锁及remote log cache技术,支持16个主节点扩展,线性比达0.7。独创OCC&PCC混合并发控制技术,支持高并发下事务冲突无失败回滚极致安全:计划内停机RTO=0,计划外停机RTO< 10秒。两地三中心架构,跨Region数据实时灾备生态友好:100%兼容MySQL 8.0五、DRS+UGO:数据库结构+应用+数据一站式迁移1、DRS:数据同步黑科技加持,全场景安心迁移2、UGO:一键迁移数据库对象,消除异构数据库迁移忧虑3、案例:永安保险商用GaussDB(for MySQL)+DRS1)核心诉求: 搬迁某主流商业数据库2)解决方案:全栈工具链切换商业数据库+专家服务。 超预期4倍+满足客户诉求六、GaussDB NoSQL:国内首家,业内领先多模非关系型数据库服务1、独创的ALL-PRIMARY技术:多写,RPO=0,分钟级节点扩容2、方案优势极致弹性:存算分离架构,分钟级快速扩展,扩容过程中性能无抖动;自动负载均衡读 写,业务无感访问。极致高可靠:多活多写,容忍最大N-1节点故障;容灾集群实时复制。极致高可用:存储层节点故障,TB级数据分钟级副本重建;极速备份,时间点还原相比原生NoSQL:故障切换时间: 快20倍、数据备份时间: 快10倍、节点扩容时间: 快20倍、性能:优1.5倍3、案例:GaussDB NoSQL助力天地图提供最佳用户体验1)解决方案:GaussDB(for Mongo)提供在线地图的瓦片数据处理服务2)客户价值保障业务稳定连续:客户业务无需任何改造,17TB海量数据迁移仅需2天、故障秒级转移,客户业务无感知、支持96TB的海量数据处理能力助力降本增效:性能相比社区版提升3倍以上、新业务上线速度提高2倍、数据更新效率提高5倍、成本为友商同规格的一半七、补充说明如何选择符合业务发展的数据库?——华为云数据库为用户提供灵活、方便、低成本的上云解决方案,全场景业务,全开放生态,让核心数据安全上云、稳定高效处理与分析。1、关系型数据库云数据库 GaussDB(自主创新):应用于金融、电信、政府等行业关键核心系统,高性能场景云数据库 GaussDB(for MySQL)(自主创新):中大型企业生产系统(高性能,大数据容量),例如金融、互联网等云数据库 RDS for MySQL:开源MySQL业务上云,享受云数据库的安全、弹性、高可用,降低企业TCO云数据库RDS for PostgreSQL:开源PostgreSQL业务上云,享受云数据库的安全、弹性、高可用,降低企业TCO云数据库RDS for SQL Server:企业用户微软生态上云,支持高可靠数据业务需求2、非关系型数据库云数据库 GaussDB(for Mongo)(自主创新):应用于游戏(装备、道具)、泛互联场景云数据库 GaussDB(for Cassandra)自主创新:泛互联网日志数据存储(并发写入量大,存储容量高)、工业互联网数据存储(写入规模大、存储容量大)云数据库 GaussDB(for Influx)自主创新:工业互联网时序数据、用户银行流水数据、物联网数据存储(时序)云数据库 GaussDB(for Redis)自主创新:Key-Value存储模式,可用于互联网场景文档数据库服务 DDS:兼容MongoDB协议,应用于游戏(装备、道具)、泛互联网场景3、数据库生态工具&中间件数据复制服务 DRS:用于数据库在线迁移和数据库实时同步数据管理服务 DAS:数据库一站式开发,DBA智能运维,企业流程审批,享受便捷、智能、安全、高效的数据库管理手段数据库和应用迁移 UGO:异构数据库迁移,数据库对象DDL的SQL转化和应用SQL转化分布式数据库中间件 DDM:配套RDS for MySQL的分库分表场景更多精彩内容参见官网资料:cid:link_1前期 《企业级分布式数据库 - GaussDB介绍》 参见:cid:link_0
-
一、前言随着大数据和互联网技术的不断发展,数据库管理系统的作用越来越重要,实现数据的快速读写以及保证数据的安全性和完整性成为企业在选择数据库技术时最为关注的问题之一。事务是保证数据一致性和完整性的关键机制之一,因此事务管理在数据库技术中占据了极为重要的位置。在这里我们将着重介绍华为云数据库GaussDB对事务的支持及管理,包括事务应用场景、事务管理、事务语句、事务隔离、事务监控等内容。二、GaussDB事务的定义及应用场景事务是数据库系统中的一个重要概念,通俗来讲,事务就是一组数据库操作看成一个整体,这个整体要么全部执行成功,要么全部撤销。事务可以应用在并发访问数据库时,保持数据的一致性。一些常见的应用场景包括转账操作、订单修改、银行交易等。在这些场景中,事务的功能是保证操作的原子性,即要么全部执行成功,数据库的值正确地更新,即处于一个“一致状态”,要么出现异常或系统故障,全部回滚至操作前的状态,以保证数据的准确性和完整性。GaussDB支持ACID事务,即原子性、一致性、隔离性和持久性。在GaussDB中,事务是指一组数据库操作,这些操作要么全部成功,要么全部失败。当一个事务提交时,所有的修改都会被永久保存。如果事务失败,则所有的修改都会被回滚,数据库状态会被还原到事务开始前的状态。GaussDB还支持分布式事务(集群事务),可以涉及到多个节点的事务(本次不做重点介绍)。原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的操作,要么都做, 要么都不做。一致性(Consistency):事务的执行结果必须是使数据库从一个一致性状态转到另一 个一致性状态。隔离性(Isolation):数据库中一个事务的执行不能被其他事务干扰。即一个事务 的内部操作及使用的数据对其他事务是隔离的,并发执行的 各个事务不能相互干扰。持久性(Durability):事务一旦提交,对数据库中数据的改变是永久的。提交后的 操作或者故障不会对事务的操作结果产生任何影响。三、GaussDB事务的管理事务管理是指在使用数据库系统时,对事务的开启、提交、回滚、保存点、分布式事务等进行管理:启动事务:GaussDB通过START TRANSACTION和BEGIN语法启动事务设置事务:GaussDB通过SET TRANSACTION或者SET LOCAL TRANSACTION语法设置事务提交事务:GaussDB通过COMMIT或者END可完成提交事务的功能,即提交事务的所有操作回滚事务:回滚是在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销存储过程本身就处于一个事务中,开始调用最外围存储过程时会自动开启一个事务,在调用结束时自动提交或者发生异常时回滚。除了系统自动的事务控制外,也可以使用COMMIT/ROLLBACK来控制存储过程中的事务。在存储过程中调用COMMIT/ROLLBACK命令,将提交/回滚当前事务并自动开启一个新的事务,后续的所有操作都会在此新事务中运行。示例1:启动一个事务--以默认方式启动事务。START TRANSACTION;SELECT * FROM tpcds.reason;END;--以默认方式启动事务。BEGIN;SELECT * FROM tpcds.reason;END;--以隔离级别为READ COMMITTED,读/写方式启动事务。START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;SELECT * FROM tpcds.reason;COMMIT;示例2:设置事务--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。START TRANSACTION;SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;COMMIT;示例3:支持在PLSQL的存储过程内使用COMMIT/ROLLBACK。CREATE TABLE EXAMPLE1(COL1 INT);CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()ASBEGINFOR i IN 0..20 LOOPINSERT INTO EXAMPLE1(COL1) VALUES (i);IF i % 2 = 0 THENCOMMIT;ELSEROLLBACK;END IF;END LOOP;END;/运行结果:在GaussDB中,控制管理事务可以采用两个方法:原子性和隔离性。原子性指一组操作要么全部执行,要么全部不执行。隔离性指一个事务的操作不受其他事务干扰,保证并发执行时数据的一致性。更多事务管理过程中的使用场景(支持/不支持调用的上下文环境),请参见官网示例:cid:link_0四、GaussDB事务语句事务语句可以看作是在事务中执行的一组语句,常见的事务语句有insert、update、delete等。GaussDB支持事务语句,事务语句组合成一组原子性、隔离性和一致性的操作。例如,下面的所有查询都包含在同一个事务小片中。如果有任何一个查询失败,整个事务将回滚。以下是事务语句的例子:BEGIN;SELECT balance FROM account WHERE id = 1 FOR UPDATE;UPDATE account SET balance = balance - 100 WHERE id = 1;COMMIT;五、GaussDB事务隔离GaussDB支持的事务隔离级别包括:Read Uncommitted(读未提交)、Read Committed(读提交)、Repeatable Read(重复读)、Serializable(序列化,Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不建议使用)。语法:{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }| { READ WRITE | READ ONLY } } [, ...]1. Read Uncommitted 隔离级别:最低的隔离级别,它允许提交了但尚未被写入磁盘的事务修改的数据被其他事务所读取。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2. Read Committed 隔离级别:这个级别保证一个事务所见到的数据,要么是提交事务所修改的(已经将数据更新至磁盘),要么就是其他提交事务所修改的。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED;3. Repeatable Read 隔离级别:保证在一个事务内重复执行的查询返回的结果集是一样的。特别地,在这个级别的情况下,在事务中第一次读表时就会自动获取到所有被查询记录的共享锁,直到关闭连接为止。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;4. Serializable 隔离级别:这个级别最高,实现方法是对数据进行锁定,以保证在写操作(INSERT、DELETE 和 UPDATE 等)期间数据不会被访问。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;六、GaussDB事务监控事务监控是指对事务进行实时的监控,包括事务的状态、执行时间、执行语句、执行结果等。事务监控可以对数据库操作进行记录和追踪,包括事务开始和结束的时间、事务中执行的语句、事务提交或回滚的状态等。可以通过这些信息来监控事务的执行情况,优化性能和调整配置。华为云数据库GaussDB支持ACID事务,事务隔离级别支持读已提交、可重复读、序列化三种,并具有分布式事务支持功能。在实际应用中,GaussDB的事务机制可适用于金融账务、电商订单、物流管理等多种场景。例如,在电商订单场景中,可以在一个事务中包含插入订单、更新库存、生成支付信息等相关操作,确保这些操作全部成功或全部失败,而不会出现其中某个操作提交,其他操作失败的情况。而在日常开发中,要注意对事务的合理使用,避免在一个事务中执行过多的操作,尽可能缩小事务的范围,减少事务的执行时间,从而提高系统的并发性能。事务监控可以对数据库操作进行记录和追踪,包括事务开始和结束的时间、事务中执行的语句、事务提交或回滚的状态等。可以通过这些信息来监控事务的执行情况,优化性能和调整配置。以下是事务监控的示例:1. 查看活动事务信息(PG_PREPARED_XACTS视图显示当前准备好进行两阶段提交的事务的信息)select * from pg_prepared_xacts;2. 查看事务状态(PG_STAT_ACTIVITY视图显示和当前用户查询相关的信息。)select pid, datname, usename, query, query_start, state from pg_stat_activity where state != 'idle' and state != 'idle in transaction';七、总结事务是保证数据一致性和完整性的核心机制之一,对于一个数据库来说,事务的支持和管理是必须的。GaussDB通过支持手动和自动管理事务、事务隔离级别以及事务监控等功能,满足了企业对数据一致性和完整性的需求。在日常开发中,需要特别注意事务的控制和隔离,以保证事务的正确执行,从而提高数据的可靠性和安全性。本文介绍到此结束,更多操作可在实际应用中参考官方文档。
-
一、前言华为云数据库GaussDB是一款高性能、高安全性的云原生数据库,在数据库领域处于领先地位。而在GaussDB中,存储过程是一个不容忽视的重要功能。本文将深入介绍GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等方面,为读者提供全方位的指导与帮助。存储过程是一个可重用的、批处理的SQL语句代码块,可以包含多条SQL语句,通常用于执行复杂的数据操作、提高数据库的性能和安全性,以及简化数据库应用程序的开发和维护。在GaussDB中,存储过程的使用可以使数据库应用程序更具灵活性、数据完整性更高、执行速度更快。二、GaussDB中的定义商业规则和业务逻辑可以通过程序存储在GaussDB中,这个程序就是存储过程。 存储过程是SQL、PL/SQL、Java语句的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。三、存储过程的使用场景存储过程是一种储存在数据库中的预编译的程序,它被定义为一系列的SQL语句,并且被用来执行一系列的数据库操作。在实际运用中,存储过程可以提高性能、提高开发效率,同时也具备良好的安全性能。下面列举几个存储过程的适用场景复杂任务处理:存储过程可以用于一些需要处理复杂任务的场景,例如一个较为复杂的SQL语句,需要处理多个条件和大量的数据,使用存储过程可以提高效率。数据持久化:存储过程可以在服务器端创建和存储处理逻辑,而客户端通过调用存储过程即可处理需要的数据。数据访问权限管理:存储过程可以通过设置不同的访问权限来提高数据访问的安全性。2、存储过程特点:频繁的、重复性、可封装、易管理。复杂的数据事务处理,可以使用存储过程实现事务的一致性和数据完整性,同时提高执行效率。对于常用的查询,可以把它们封装成存储过程,并将其缓存到内存中,在每次执行时,不需要从磁盘中读取数据,提高查询速度。四、存储过程的使用优缺点在使用存储过程时,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择,下面罗列了一些常见的存储过程的使用优缺点。1、优点:高效率、可复用、可维护在执行大量的操作时,存储过程可以减少数据库客户端与数据库的通信次数,从而提高了执行效率。在多次使用同一函数时,存储过程所需要的内存资源和CPU时间较少,因此,存储过程可以被看作一种可复用的数据库对象。在维护和升级方面,存储过程具有良好的维护性,可以被视为一种良好的API,简化系统的维护过程。存储过程的安全性和可维护性更高,减少了数据库维护的工作量。2、缺点:难度较高、对数据库依赖性强存储过程需要使用专门的SQL软件进行开发,所以对开发人员的技能水平要求比较高,并且使用错误可能会抛出不可预知的异常。存储过程涉及到多个数据库对象,使用不当有可能产生不可预知的结果。当数据库结构发生变化时,存储过程也需要进行相应调整,因此,存储过程对数据库的依赖性比较强。开发和维护存储过程需要一定的技术水平,对于小型数据库来说,使用存储过程的必要性较小。存储过程的执行需要对存储过程进行编译,对于频繁修改的存储过程,可能会影响数据库的性能。五、存储过程的示例及示例解析1、GaussDB存储过程语法格式CREATE [ OR REPLACE ] PROCEDURE procedure_name[ ( {[ argname ] [ argmode ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ][{ IMMUTABLE | STABLE | VOLATILE }| { SHIPPABLE | NOT SHIPPABLE }| {PACKAGE}| [ NOT ] LEAKPROOF| { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }| {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}| COST execution_cost| SET configuration_parameter { [ TO | = ] value | FROM CURRENT }][ ... ]{ IS | AS }plsql_body/--说明:定义存储过程,在SQL语句末,需要输入“/” (执行)。参数说明•OR REPLACE当存在同名的存储过程时,替换原来的定义。•procedure_name创建的存储过程名称,可以带有模式名。 取值范围:字符串,要符合标识符的命名规范。•argmode参数的模式。 须知:VARIADIC用于声明数组类型的参数。 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。•argname参数的名称。 取值范围:字符串,要符合标识符的命名规范。•argtype参数的数据类型。可以使用%ROWTYPE间接引用表的类型,或者使用%TYPE间接引用表或复合类型中某一列的类型。 取值范围:可用的数据类型。•IMMUTABLE、STABLE等行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见CREATE FUNCTION•plsql_bodyPL/SQL存储过程体。 须知:当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。说明:argname和argmode的顺序没有严格要求,推荐按照argname、argmode、argtype的顺序使用。2、GaussDB存储过程语法示例我们来看几个具有代表性的GaussDB数据库存储过程示例,以进一步了解其编写和使用方式。示例一:下面是一个简单的GaussDB存储过程示例:--创建一个存储过程。CREATE OR REPLACE PROCEDURE prc_add ( param1 IN INTEGER, param2 IN OUT INTEGER)ASBEGINparam2:= param1 + param2;dbe_output.print_line('result is: '||to_char(param2));END;/--调用此存储过程。SELECT prc_add(2,3);--删除存储过程DROP PROCEDURE prc_add;解析:上面的代码是创建了一个名为prc_add的存储过程,该存储过程有两个参数,一个输入参数param1和一个输入/输出参数param2,数据类型均为整型(INTEGER)。 在存储过程的主体中,对输入/输出参数param2进行了修改,将其值赋为param1 + param2。在调用存储过程时,输入2作为输入参数param1的值,3作为输入/输出参数param2的值。最后,存储过程的结果输出到dbe_output控制台,显示“result is: 5”。总的来说,这个存储过程的功能是将输入参数param1与输入/输出参数param2的值相加,并将相加后的结果输出。它可以在程序中多次使用,以简化代码。示例二--创建一个存储过程,将带着调用它的用户的权限执行。CREATE TABLE tb1(a integer);CREATE OR REPLACE PROCEDURE insert_data(v integer)SECURITY INVOKERASBEGININSERT INTO tb1 VALUES(v);END;/--调用此存储过程。CALL insert_data(123);--查看结果select * from tb1;--删除存储过程DROP PROCEDURE insert_data;解析:上述代码实际上创建了一个带有一个输入参数的存储过程insert_data,并将其定义为以调用者的权限来运行。当调用该存储过程时,将传递一个整数参数作为输入,该参数将插入一个新行到tb1表中,该新行的值为该整数。然后通过执行select语句查看tb1表中的所有数据行。执行完整段代码后,将看到只有一行数据,该行的值为123,这是由insert_data存储过程插入的。3、存储过程的调用方法存储过程的调用方法主要有两种:通过客户端请求调用和通过触发器自动调用。通过客户端请求调用通常是手动调用,通常使用以下两种方法调用存储过程:1)CALL语句CALL stored_procedure_name(…)2)SELECT语句SELECT stored_procedure_name(…)通过触发器自动调用通常是在特定操作的情况下自动执行存储过程。例如,当插入一条记录时,可以设置触发器来自动执行存储过程。七、总结本文详细介绍了GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等内容。使用存储过程可以提高效率、可维护性,同时具备良好的安全性能。在使用存储过程之前,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择。只有深入了解GaussDB的存储过程的使用方法和技巧,才能在开发过程中得心应手,更好地配合GaussDB实现高效的数据管理和业务处理。对于需要频繁重复执行的SQL语句,我们可以将其封装成一个存储过程,方便管理和提高效率。当存储过程执行达到一定规模时,我们需要注意存储过程的维护和优化,以确保存储过程的执行性能。作为一个高可靠性的全球化分布式关系型数据库,华为云数据库GaussDB提供了丰富的存储过程支持,为存储过程的开发、管理和执行提供了更多的优化策略和高可用性保障。本次介绍就到此,欢迎大家测试、交流!
-
一、数据类型转换场景数据类型转换在实际应用中非常常见。GaussDB作为一款企业级分布式关系型数据库,在实际业务场景使用中,也会避免不了数据类型的转换。以下是一些数据类型转换的应用场景:数据清洗与转换:在数据分析和处理中,经常需要对数据进行清洗和转换,例如将文本数据转换为数字格式,将日期格式转换为文本格式等。数据格式化:在输出数据时,需要将数据格式化为合适的格式,例如将数字格式化为货币格式、百分比格式等。数据计算:在进行数据计算时,需要对数据类型进行转换,例如将整数类型的数据转换为浮点数类型的数据,以便进行精确的计算或处理。数据存储:在将数据存储到数据库中时,需要将不同类型的数据转换为数据库支持的数据类型,以便正确地存储和查询数据。数据传输:在数据传输过程中,需要将不同类型的数据转换为相同的数据类型,以便正确地传输数据。总之,数据类型转换在数据处理、数据分析、数据存储和数据传输等领域都有广泛的应用。二、数据类型转换及示例在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB中大多数类型转换是由通用规则来管理的。数据库中允许有些数据类型进行隐式类型转换(赋值、函数调用的参数等),有些数据类型间不允许进行隐式数据类型转换,可尝试使用GaussDB提供的类型转换函数。1、cast(value AS type) 描述:CAST进行数据类型强转。如果有必要,可以将值显式转换为指定类型。1)整型转浮点型SELECT CAST(1 AS FLOAT8); -- 将整数 1 转换为浮点数2)浮点型转整型SELECT CAST(3.14 AS INT4); -- 将浮点数 3.14 转换为整数 33)布尔型转整型使用 CAST 函数将布尔型数据转换为整型数据,其中 TRUE 转换为 1,FALSE 转换为 0,例如:SELECT CAST(TRUE AS INT4),CAST(FALSE AS INT4); -- 将布尔型数据 TRUE 转换为整数 1;将布尔型数据 FALSE 转换为整数 02、to_date(text)描述:将文本类型的值转换为指定格式的时间戳。格式一:无分隔符日期,如20230314,需要包括完整的年月日。格式二:带分隔符日期,如2023-03-14,分隔符可以是单个任意非数字字符。SELECT TO_DATE('20230314'),TO_DATE('2023-03-14');3、to_date(text,format)描述:将字符串类型的值转换为指定格式的日期。SELECT TO_DATE('14 MAR 2023', 'DD MON YYYY'),TO_DATE('20230314','YYYYMMDD'); 4、to_char(datetime, format)描述:日期时间型转字符型。SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS'); -- 将当前日期时间型数据转换为字符型数据,格式为 'YYYY-MM-DD HH24:MI:SS'5、to_char(string)描述:将CHAR、VARCHAR、VARCHAR2、CLOB类型转换为VARCHAR类型。SELECT TO_CHAR(1110)6、CASE 表达式布尔型转字符型,使用 CASE 表达式将布尔型数据转换为字符型数据,例如:1)SELECT CASE WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END; -- 将布尔型数据 TRUE 转换为字符型数据 'TRUE'2)SELECT CASE WHEN FALSE THEN 'TRUE' ELSE 'FALSE' END; -- 将布尔型数据 FALSE 转换为字符型数据 'FALSE'三、 小结数据类型转换是将一种数据类型转换为另一种数据类型的过程。在中,我们经常需要对数据类型进行转换以满足代码的需求。 在很多编程语言中,数据类型转换可以分为隐式转换和显式转换两种类型。 隐式转换是指在代码中进行赋值、运算或比较等操作时,编程语言会自动对数据类型进行转换,以保证操作的正确性和合法性。GaussDB支持多种数据类型转换,以下是GaussDB中常用的数据类型转换方式:隐式转换:GaussDB支持隐式转换,即在表达式中,如果不同数据类型的操作数参与运算,GaussDB会自动将其中一个数据类型转换为另一个数据类型,以满足运算要求。例如,如果一个整型数值与一个浮点型数值进行运算,GaussDB会将整数转换为浮点数再进行运算。显式转换:GaussDB中支持使用CAST函数进行显式转换。CAST函数可将一个数据类型的值转换为另一个数据类型的值。例如,使用CAST函数将一个字符串类型转换为整型类型。数字转换:GaussDB支持将数字类型转换为其他数字类型,例如将整型转换为小数型、将小数型转换为整型等。字符串转换:GaussDB支持将字符串类型转换为其他数据类型,例如将字符串转换为整型、将字符串转换为日期类型等。日期转换:GaussDB支持将日期类型转换为其他日期类型,例如将日期转换为时间类型、将时间类型转换为日期类型等。布尔型转换:GaussDB支持将布尔型数据转换为其他数据类型,例如将布尔型转换为整型、将布尔型转换为字符串类型等。……需要注意的是,在进行数据类型转换时,应该考虑出现的数据精度、数据溢出、数据失真等问题,同时也要避免数据类型不兼容造成的错误。当然了,数据类型转换也会影响查询效率和性能,需要根据实际业务需求和数据量大小进行优化和调整。以上示例到此结束,更多类型转换可参考官网文档,欢迎大家测试、交流。
-
目录:一、GaussDB 数据库二、数据类型概念及特点三、常用数据类型1、常用字符串类型介绍2、布尔类型3、数值类型4、日期/时间类型四、数据类型选择建议附:GaussDB数据库涉及的数据类型一、GaussDB 数据库GaussDB是华为基于openGauss自研生态推出的云化企业级分布式关系型数据库,它支持多种数据类型,包括数值、字符、日期等。在使用GaussDB时,可能需要进行数据类型转换,以满足不同的需求。本文将以示例的形式罗列并介绍一些常见的数据类型转换方法等。二、数据类型概念及特点数据类型是一组值的集合以及定义在这个值集上的一组操作。GaussDB数据库是由表的集合组成的,而各表中的列定义了该表,每一列都属于一种数据类型,GaussDB根据数据类型有相应函数对其内容进行操作,例如GaussDB可对数值型数据进行加、减、乘、除操作等。数据类型是用来定义数据存储格式和数据范围的规范。每种数据类型都有自己的特点和适用范围,它们在数据库中的作用主要有以下几点:存储数据:数据库中的每个字段都必须指定数据类型,这样才能确定它们在数据库中的存储格式。不同的数据类型使用不同的存储方式,例如整型会以二进制形式存储,而字符型则以ASCII码或Unicode编码形式存储。约束数据范围:数据类型可以限制某个字段存储的数据范围,例如整型只能存储整数值,小数型只能存储浮点数等。这样可以确保数据的准确性和完整性,防止非法值进入数据库。提高查询效率:数据库在查询数据时会根据字段的数据类型进行优化,例如对整型字段的查询会比对字符型字段的查询更快,因为整型字段的数据存储格式更简单,计算也更快。降低存储空间:不同的数据类型使用不同的存储方式,一些数据类型可以在存储时减少存储空间的占用。例如使用整型可以减少存储空间的占用,因为整型在存储时只需要占用4个字节,而字符型则需要占用更多的存储空间。提高数据安全性:数据类型可以帮助数据库对数据进行有效的过滤和验证,限制不合法的数据输入,增强数据的安全性和可靠性。综上所述,数据类型在数据库中扮演着极为重要的角色,它们不仅仅用于存储数据,还可以提高查询效率、降低存储空间、提高数据安全性等。数据库开发人员在设计数据库时必须充分了解各种数据类型的特点和使用场景,合理选用数据类型,才能保证数据库的高效性和稳定性。三、常用数据类型1、常用字符串类型介绍在进行字段设计时,需要根据数据特征选择相应的数据类型。字符串类型在使用时比较容易混淆,下表罗列了GaussDB中常见的字符串类型。1)常用字符串类型2)示例--创建表。CREATE TABLE t_char_type(column1 VARCHAR(5))DISTRIBUTE BY HASH (column1);--插入数据。INSERT INTO t_char_type VALUES ('ok');--插入的数据长度超过类型规定的长度报错。INSERT INTO t_char_type VALUES ('too long');ERROR: value too long for type character varying(5)CONTEXT: referenced column: column1--明确类型的长度,超过数据类型长度后会自动截断。INSERT INTO t_char_type VALUES ('too long'::varchar(5));--查询数据。SELECT column1, char_length(column1) FROM t_char_type;column1 | char_length---------+-------------ok | 2too l | 5(2 rows)2、布尔类型1)说明“真”值的有效文本值是:TRUE、't'、'true'、'y'、'yes'、'1'以及所有非0整数。“假”值的有效文本值是:FALSE、'f'、'false'、'n'、'no'、'0'、0。使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。2)示例--创建表。CREATE TABLE t_bool_type(column1 BOOLEAN,column2 TEXT)DISTRIBUTE BY HASH(column2);--插入数据。INSERT INTO t_bool_type VALUES (TRUE, 'one');INSERT INTO t_bool_type VALUES (FALSE, 'two');--查看数据。SELECT * FROM t_bool_type;column1 | column2---------+---------t | onef | two(2 rows)SELECT * FROM t_bool_type WHERE column1 = 't';column1 | column2---------+---------t | one(1 row)3、数值类型1) 整数类型TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。2)示例--创建具有TINYINT,INTEGER,BIGINT类型数据的表。openGauss=# CREATE TABLE t_int_type(column1 TINYINT,column2 TINYINT,column3 INTEGER,column4 BIGINT);--插入数据。openGauss=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);--查看数据。openGauss=# SELECT * FROM int_type_t2;column1 | column2 | column3 | column4-----------+----------+------------+-------100 | 10 | 1000 | 10000(1 row)4、日期/时间类型1)日期输入说明:日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。日期的文本输入需要加单引号包围,语法:type [ ( p ) ] 'value',可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。2)时间段输入说明:reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。四、数据类型选择建议选择数据类型,在字段设计时,基于查询效率的考虑,一般遵循以下原则:选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。使用一致的数据类型,当多个表存在逻辑关系时,表示同一含义的字段应该使用相同的数据类型。对于字符串数据,建议使用变长字符串数据类型,并指定最大长度。请务必确保指定的最大长度大于需要存储的最大字符数,避免超出最大长度时出现字符截断现象。除非明确知道数据类型为固定长度字符串,否则,不建议使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降。尽量使用执行效率比较高的数据类型,一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。比如某客户场景中对列存表进行点查询,filter条件在一个numeric列上,执行时间为10+s;修改numeric为int类型之后,执行时间缩短为1.8s左右。尽量使用短字段的数据类型:长度较短的数据类型不仅可以减小数据文件的大小,提升IO性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。附:GaussDB数据库涉及的数据类型“数值类型、货币类型、布尔类型、字符类型、二进制类型、日期/时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、JSON/JSONB类型、HLL数据类型、范围类型、对象标识符类型、伪类型、列存表支持的数据类型、账本数据库使用的数据类型”。详见官方文档:cid:link_0以上就是本期的内容,欢迎大家测试、交流!
-
为确保GaussDB实例发挥出最佳性能,您可以根据业务需求修改GaussDB数据库实例参数,也可以通过该功能查看当前实例所使用的参数值。GaussDB提供如下两类参数类型:公共参数:GaussDB安装后,有一套默认的运行参数,为了使GaussDB与业务的配合度更高,用户需要根据业务场景和数据量的大小进行参数调整。扩容重分布参数:数据库扩容时,控制数据重分布策略的参数。注意事项修改扩容重分布参数仅支持2.6及以上版本的分布式实例。仅2.7.1及以上版本的主备版实例,在1主2备部署形态下,支持只读节点参数修改。
-
操作场景GaussDB支持使用已有的实例级自动备份,恢复实例数据到指定时间点。GaussDB支持将备份恢复到新实例、当前实例和已有实例。注意事项恢复到任意时间点仅支持2.1版本以上实例,单副本实例暂不支持。节点扩容,版本升级,恢复自身期间,对应时间点无法恢复。实例故障,发生CN剔除等场景无法产生归档日志,对应时间点无法恢复。如果您要将数据库备份恢复到新实例:数据库引擎、数据库大版本,与原实例相同,不可修改。数据库密码需重新设置。恢复到当前实例会将当前实例上的数据全部覆盖,并且恢复过程中数据库不可用,且立即停止归档。恢复完成后会出现数据确认按钮,在单击数据确认前,可多次进行恢复。数据确认后会删除本次恢复时间点后的归档日志,并重新开启日志归档。删除实例会默认删除所有归档日志,不支持选择保留。删除实例后,重建实例或恢复实例不支持恢复任意时间点。操作步骤登录管理控制台。单击管理控制台左上角的,选择区域和项目。在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。在“实例管理”页面,选择指定的实例,单击实例名称。在左侧导航栏中选择“备份恢复”页签,单击“恢复到指定时间点”。单击“确定”,恢复实例。
-
操作场景GaussDB支持使用已有的实例级自动备份和手动备份,将实例数据恢复到备份被创建时的状态。该操作恢复的为整个实例的数据。当前支持恢复到新实例、已有实例和当前实例。限制条件恢复时目标实例异常、实例磁盘满将会导致恢复失败。不支持跨大版本恢复。例如:1.4.x的实例仅可以恢复到1.4.y版本的实例。操作步骤登录管理控制台。单击管理控制台左上角的,选择区域和项目。在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。在左侧导航栏单击“备份恢复管理”,选择需要恢复的备份,单击操作列的“恢复”。您也可在“实例管理”页面,单击指定的实例名称,在左侧导航栏单击“备份恢复”。在“全量备份”页签下选择实例级备份,单击目标备份对应的操作列中的“恢复”。单击“确定”,恢复实例。
-
操作场景创建GaussDB实例时,系统默认开启实例级自动备份策略。实例创建成功后,您可根据业务需要修改实例级自动备份策略。GaussDB按照用户设置的自动备份策略对数据库进行备份。当数据库故障或数据损坏时,可以通过备份恢复数据库,从而保证数据可靠性。备份以压缩包的形式存储在对象存储服务上,以保证用户数据的机密性和持久性。由于开启备份会损耗数据库读写性能,建议您选择业务低峰时间段启动自动备份。GaussDB默认开启的自动备份策略设置如下:保留天数:默认为7天。备份时间段:默认为24小时中,间隔一小时的随机的一个时间段 ,例如01:00~02:00,12:00~13:00等。备份时间段以UTC时区保存。如果碰到夏令时/冬令时切换,备份时间段会因时区变化而改变。备份周期:默认周一至周天。差量备份策略:默认每30分钟保存一次。备份流控:默认75MB/s。差量预取页面个数:默认64。是否启用备机备份:默认开启。
-
操作场景GaussDB支持对运行正常的实例创建实例级手动备份,用户可以通过手动备份恢复数据,从而保证数据可靠性。注意事项手动备份是由用户启动的数据库实例的全量备份,会一直保存,直到用户手动删除。备份操作需要在实例状态为正常时才可以进行。同一用户在一个实例上,同一时间只能进行一次实例级备份操作。GaussDB单副本实例3.0以下版本不支持创建实例级手动备份。登录管理控制台。单击管理控制台左上角的,选择区域和项目。在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。在“实例管理”页面,选择指定的实例,在操作列选择“更多 > 创建备份”。在创建备份弹出框中,命名该备份,并添加描述,单击“确定”,提交备份创建,单击“取消”,取消创建。备份名称的长度在4~64个字符之间,必须以字母开头,区分大小写,可以包含字母、数字、中划线或者下划线,不能包含其他特殊字符。备份描述不能超过256字符,且不能包含回车和>!<"&'=特殊字符。手动备份创建过程中,状态显示为“备份中”,此过程所需时间由数据量大小决定。页面长时间未刷新,可单击页面右上刷新页面,查看实例是否备份完成。若实例状态为正常,备份完成,执行6。手动备份创建成功后,用户可在“备份恢复管理”页面,对其进行查看并管理。也可在“实例管理”页面,单击实例名称,在左侧导航栏,单击“备份恢复”,对其进行查看并管理。
上滑加载中
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
去报名 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签