• [技术干货] 【精品动态】华为云数仓GaussDB(DWS)5月月刊来咯!!!
    汇总数仓GaussDB(DWS)最新的精品文章,带您快速了解每月最新精品动态。     眼观六路耳听八方还不知疲倦?数仓智能运维服务体系是怎么做到的【摘要】本文主要介绍GaussDB(DWS)数据库智能监控运维服务体系的设计规划和现状。本文作为DMS系列文章的第一篇,主要起到一个概要介绍的作用,让大家对GaussDB(DWS)数据库智能监控运维服务体系有个概略的认识。     GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率【摘要】 GaussDB(DWS)自身提供pgxc_get_table_skewness来查询倾斜情况,但实际实践过程中,该视图存在性能问题,而且本身的倾斜率计算有问题,实践过程中,该函数获取的倾斜率在不高的情况下,存在倾斜情况。本文基于项目实践提供一个快速获取整库或整schema的表倾斜率与空间大小获取方法。     GaussDB(DWS)计划生成原理揭秘(一)【摘要】 孙子兵法云:“谋定而后动,知止而有得”,做任何事一定要进行谋划部署,做好准备,这样才能利于这件事的成功,切不可莽撞而行。同样,GaussDB(DWS)执行查询语句也会按照预定的计划来执行,给定硬件环境的情况下,执行的快慢全凭计划的好坏,那么一条查询语句的计划是如何制定的呢,本文将为大家解读计划生成中行数估算和路径生成的奥秘。     给强大的“心脏”配上“超级流水线”- GaussDB(DWS)数据仓库平台ETL系统建设方案【摘要】本文对数据仓库构建ETL子系统进行初步介绍,说明了当前较为主流的两种ETL子系统实现架构,比对MPPDB数据库的ETL架构进行了对比说明。最后对GaussDB(DWS)下的ETL子系统的实现要点进行了梳理,重点对etl实现的逻辑视图以及GSQL封装的功能要点进行阐述。     DWS对接NBU备份故障排除指南【摘要】 NetBackup是Veritas公司软件产品,为各种平台提供完整而灵活的数据保护解决方案。这些平台包括Microsoft Windows、UNIX、Linux 等系统。利用NetBackup可以备份、归档和还原计算机上的文件、文件夹或目录以及卷或分区。当前DWS支持NBU介质备份恢复,本文介绍DWS对接NBU备份故障排除方法。     GaussDB(DWS)数据库智能监控系统应用场景分析【摘要】 与互联网产品的立项模式类似,当我们定义设计一款新产品时,首先需要对用户做需求分析,归纳整理综合分析用户的需求,定义我们的产品定位,功能,业务逻辑,使用界面等等。因此,为了设计好数据库智能监控系统,我们需要对数据库监控系统的目标用户做需求分析,收集用户诉求,挖掘用户潜在需求,绘制典型用户画像。最后,设计数据库监控系统的实现架构,将典型用户的各种需求纳入到产品的设计架构管道中。     震惊,PostGIS还可以这样用!!!【摘要】 PostGIS为PostgreSQL提供了空间数据库分析能力,是目前业界主流的地理数据库之一,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符等。在GaussDB 中,目前已支持PostGIS地理数据库扩展,并已广泛应用于国内外公安、农业、安平等政企客户。     GaussDB(DWS)新技术 集群慢节点竟然无处可藏【摘要】 GaussDB(DWS)在大规模集群上运行的过程中,随着时间推移,部分节点可能会出现性能严重下降的情况。此时这些节点仍然能对外提供服务,但响应明显变慢,处理同样的请求所需时间较其他正常节点大很多,从而影响了整个集群的性能。这样的节点称为“亚健康节点”,或“慢节点”。     GaussDB(DWS) SQL进阶之PLSQL(一)-匿名块、函数和存储过程【摘要】 在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL。本篇文章我们通过匿名块,函数,存储过程向大家介绍一下GaussDB(DWS)对于过程化SQL语言的基本能力。     GaussDB(DWS) 多租户管理【摘要】主要介绍了多租户技术的架构和使用方法,通过租户关联控制组和资源池,多租户的设置有效隔离了CPU资源、内存资源、IO资源和存储资源,提供了有力的混合负载管理能力。     从原理到实践,手把手带你轻松get数仓双集群容灾【摘要】 GaussDB(DWS) 的容灾方案是一个双集群同步的架构,即两套独立集群定期同步数据以达到容灾的目的。目前数据同步的方式是通过roach(GaussDB(DWS)备份、恢复工具)定期做增量备份和恢复同步。本文通过介绍双集群的架构、log结构、典型问题分析来介绍双集群容灾的问题分析方法。     《GaussDB(DWS)数据类型之DATE类型》【摘要】 本文章主要介绍了GaussDB(DWS)数据类型中的DATE类型在不同数据库模式下且在不同应用场景下的行为表现及对比。
  • [POC&交付] GaussDB(DWS)实践系列-GaussDB(DWS)如何查询对象(表)的创建时间?
    一、  背景描述          在项目交付中,经常有人会问“如何在数据库中查询表的创建时间?” ,那么究竟如何在GaussDB(DWS)中查找对象的创建时间呢?本文提供3种方法作为参考,包括dba_objecs视图查看方法、审计日志查看方法和CN日志查看方法。二、  操作演练方法1:视图查询方法DBA_OBJECTS视图存储了数据库中所有数据库对象的相关信息, GaussDB(DWS)支持通过DBA_OBJECTS视图进行查询,字段和详细说明如下:表1 DBA_OBJECTS视图字段名称类型描述ownername对象的所有者object_namename对象的名称object_idoid对象的OIDobject_typename对象的类型namespaceoid对象所在的命名空间createdtimestamp with time zone对象的创建时间last_ddl_timetimestamp with time zone对象最后修改时间,修改行为包括ALTER操作和GRANT、REVOKE操作。注意:需要有系统管理员权限才可以访问。其中对象的类型object_type字段会包括TABLE、INDEX、VIEW、RULE, PROCEDURE、TYPE、OPERATOR等,查询时可根据该字段进行筛选:1.      创建测试表创建测试表,用于后续查询测试。--定义一个表,使用HASH分布。CREATE TABLE employee_info(    id INTEGER NOT NULL,    name VARCHAR(16) NOT NULL,    tel VARCHAR(11),    addr varchar(10))DISTRIBUTE BY HASH(id); --查看当前系统时间。select current_timestamp;测试表创建完成后查看当前系统时间作为参考。2.      查询创建时间通过DBA_OBJECTS视图查看表对象创建时间。select * from dba_objects where object_type='TABLE' and object_name='employee_info';查询结果如下:3.      更新测试表更新测试表employee_info,测试dba_objects视图是否可以保存对象的最后修改时间,修改行为包括ALTER操作和GRANT、REVOKE操作:--向表中增加一个varchar列group_info。ALTER TABLE employee_info ADD group_info varchar(30);--查看当前系统时间。select current_timestamp;相关信息记录如下:4.      查看最后更新时间通过DBA_OBJECTS视图查看对象的最后更新时间。select * from dba_objects where object_type='TABLE' and object_name='employee_info';查询结果如下:方法2:审计日志查看方法审计日志统计信息更全,打开审计总开关audit_enabled=on,并设置审计项audit_system_object。audit_system_object参数说明:该参数决定是否对GaussDB A数据库对象的CREATE、DROP、ALTER操作进行审计。GaussDB A数据库对象包括DATABASE、USER、schema、TABLE等。通过修改该配置参数的值,可以只审计需要的数据库对象的操作。取值范围:整型,0~524287Ø  0代表关闭数据库对象的CREATE、DROP、ALTER操作审计功能。Ø  非0代表只审计某类或者某些数据库对象的CREATE、DROP、ALTER操作。默认值:12295 换算成19位二进制为000 0011 0000 0000 0111取值说明:该参数的值由19个二进制位的组合求出,这19个二进制位分别代表GaussDB (DWS)的19类数据库对象。如果对应的二进制位取值为0,表示不审计对应的数据库对象的CREATE、DROP、ALTER操作;取值为1,表示审计对应的数据库对象的CREATE、DROP、ALTER操作。这19个二进制位代表的具体审计内容请参见表2。 表2 audit_system_object取值含义说明二进制位含义取值说明第0位是否审计DATABASE对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第1位是否审计SCHEMA对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第2位是否审计USER对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第3位是否审计TABLE对象的CREATE、DROP、ALTER、TRUNCATE操作。0表示不审计该对象的CREATE、DROP、ALTER、TRUNCATE操作;1表示审计该对象的CREATE、DROP、ALTER、TRUNCATE操作。第4位是否审计INDEX对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第5位是否审计VIEW对象的CREATE、DROP操作。0表示不审计该对象的CREATE、DROP操作;1表示审计该对象的CREATE、DROP操作。第6位是否审计TRIGGER对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第7位是否审计PROCEDURE/FUNCTION对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第8位是否审计TABLESPACE对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第9位是否审计RESOURCE POOL对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作第10位是否审计WORKLOAD对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作第11位是否审计SERVER FOR HADOOP对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作第12位是否审计DATA SOURCE对象的CRAETE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第13位是否审计NODE GROUP对象的CREATE、DROP操作。0表示不审计该对象的CREATE、DROP操作;1表示审计该对象的CREATE、DROP操作。第14位是否审计ROW LEVEL SECURITY对象的CREATE、DROP、ALTER操作。0表示不审计该对象的CREATE、DROP、ALTER操作;1表示审计该对象的CREATE、DROP、ALTER操作。第15位是否审计TYPE对象的CREATE、DROP、ALTER操作。0表示不审计TYPE对象的CREATE、DROP、ALTER操作;1表示审计TYPE对象的CREATE、DROP、ALTER操作。第16位是否审计TEXT SEARCH对象(CONFIGURATION和DICTIONARY)的CREATE、DROP、ALTER操作。0表示不审计TEXT SEARCH对象的CREATE、DROP、ALTER操作;1表示审计TEXT SEARCH对象的CREATE、DROP、ALTER操作。第17位是否审计DIRECTORY对象的CREATE、DROP、ALTER操作。0表示不审计DIRECTORY对象的CREATE、DROP、ALTER操作;1表示审计DIRECTORY对象的CREATE、DROP、ALTER操作。第18位是否审计SYNONYM对象的CREATE、DROP、ALTER操作。0表示不审计SYNONYM对象的CREATE、DROP、ALTER操作;1表示审计SYNONYM对象的CREATE、DROP、ALTER操作。 12295 换算成19位二进制为000 0011 0000 0000 0111,修改第3位的值为1,表示审计TABLE对象的CREATE、DROP、ALTER、TRUNCATE操作,修改后的值为12303(对应的19位二进制为000 0011 0000 0000 1111)参数设置如下:gs_guc reload -Z coordinator -Z datanode -N all -I all -c "audit_enabled=on"gs_guc reload -Z coordinator -Z datanode -N all -I all -c "audit_system_object=12303"参数设置命令截图:设置成功:按照方法1中的流程创建并更新测试表,记录系统当前时间作为参照:查看审计日志:select * from pgxc_query_audit('2021-05-27 16:10:00','2021-05-27 16:20:00') where operation_type='ddl' and object_name='employee_info';截图如下:方法3:CN日志查看方法配置 postgresql.conf 配置文件,通过记录表的 DDL 信息,从而确定表的创建时间。log_statement参数介绍:log_statement参数说明:控制记录SQL语句。该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。即使log_statement设置为all,包含简单语法错误的语句也不会被记录,因为仅在完成基本的语法分析并确定了语句类型之后才记录日志。取值范围:枚举类型•none表示不记录语句。•ddl表示记录所有的数据定义语句,比如CREATE、ALTER和DROP语句。•mod表示记录所有DDL语句,还包括数据修改语句INSERT、UPDATE、DELETE、TRUNCATE和COPY FROM 。•all表示记录所有语句,PREPARE、EXECUTE和EXPLAIN ANALYZE语句也同样被记录。默认值:nonelog_statement参数设置方法:--登录CN所在的数据节点,执行source /opt/huawei/Bigdata/mppdb/.mppdbgs_profilegs_guc reload -Z coordinator -Z datanode -N all -I all -c "log_statement=ddl"参数设置命令截图:查看对应时间点的CN日志,可以记录表的创建时间,详细如下。转载来自:https://bbs.huaweicloud.com/blogs/271374
  • [POC&交付] 从二进制文件导入到GaussDB(DWS)
    【摘要】 使用copymanager接口,读取二进制文件流,将二进制文件中的数据导入到数据库中1.1   现网业务场景源数据推送二进制流-->解析二进制-->解析后的数据导入数据库为了模拟生产的业务场景,客户提供了一个二进制文件及二进制文件的解析程序,需要我们解析二进制文件后导入数据库。1.2   测试方案由于客户给出的解析程序是单条解析,为了提升数据导入的性能,需要微批导入的方式,在内存中积攒一定量的数据后,再调用copymanager接口导入数据库中。最终测试方案的整体流程如下所示:1.3   测试过程从上图可以看出,一批数据的耗时由三部分组成:解析二进制文件积攒一批数据数据导入数据库1)解析二进制文件这是客户提供的Java程序,按行读取二进制文件中的数据,每行解析成一个String对象。2)积攒数据积攒的数据最终是要通过copymanager接口导入数据库中的,因此其对象类型需要是copymanager接口可以调用的。从下图中可以看出,其对象类型为InputSream。初步采用的解决方案是将解析后的String对象拼接起来,然后在copymanager接口中将String转为InputStream。在测试过程中发现,由于String类型在处理这种大对象的时候效率较低随着积攒数据的增多,这部分耗时越来越久,因此,最终方案是将解析后的数据存放到StringBuffer对象中。3)调用copymanager接口在Java中引用GaussDB(DWS)安装包中的JDBC驱动后,需要import CopyManager及BaseConnectionimport org.postgresql.copy.CopyManager;import org.postgresql.core.BaseConnection;在创建copymanager对象的时候,需要将Connection对象转为BaseConnection,如下所示:CopyManager copyManager = new CopyManager((BaseConnection)conn); 1.4   测试结果在单连接的情况下,解析+入库可处理10.1W/S,导入性能可达到64.5W/S;在255并发情况下,解析+入库可处理1252.1 W/S,导入性能可达到4132.4W/S。1.5   总结在本地执行测试代码在本地用idle调试中需要一个二进制文件,可以从客户给出的文件中执行head –n 1000 ***.dat>1.dat 截取一部分文件内容放在本地。各个时间收集为了更好的给客户展现我们数据库的强大性能,需要把数据库导入的时间单独列出来,给客户一个更加直观的感受。高并发的设计首先,将并发程序布置在集群外的服务器上, 然后为了避免单盘IO性能瓶颈,在每块盘上存放一份数据文件及解析程序。由于是把一批数据积攒到内存中的,因此在启动并发时需要注意内存的使用情况。在客户端服务器并发75、内存已经饱和的情况下,查看集群的cpu及内存使用率仍然不高,因此,在集群内部的所有节点上每个增加30并发,达到最大并发数。注意事项:JDBC连接时,把所有并发平均分配到各个CN节点上;集群内部节点JDBC连接时可能会报gss错误,需要修改conf配置文件,将本地ip的连接方式由gss改为sha256。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/271103
  • [集群&DWS] 详解GaussDB(DWS)数据库智能监控运维服务如何定位SQL执行问题
    【摘要】 在GaussDB(DWS)智能运维体系介绍中,大致梳理了DMS作为DWS云原生的智能运维系统,整个体系设计和服务群体,本文将以DBA视角分析,当在使用DWS数仓服务遇到SQL执行问题,怎么利用DMS系统去定位问题,并介绍DMS是怎么设计查询相关的指标和页面。在GaussDB(DWS)智能运维体系介绍中,大致梳理了DMS作为DWS云原生的智能运维系统,整个体系设计和服务群体,本文将以DBA视角分析,当在使用DWS数仓服务遇到SQL执行问题,怎么利用DMS系统去定位问题。1. 直接入口 - 集群概览在集群概览页面中可以看到当前集群执行SQL中耗时和下盘量最大的top5的查询SQL,如果像获取更进一步的查询信息,可以通过【监控】-【查询监控】2. 查询监控 - 实时查询在实时查询页面,提供了一个当前查询执行的聚合数据,提供当前数据库中运行、阻塞、延迟、取消查询数,以及在快慢车道中的查询数。聚合指标说明聚合指标名称指标说明计算方式运行处于运行中查询的数量state = ‘active’ state = ‘fastpath function call’ 为了保证数据一致性,这里还需要减掉阻塞和延迟的查询数量。阻塞处于阻塞中查询的数量state = ‘active’ and waiting = ‘t’取消后端在事务中,但事务中有语句执行失败state = ‘idle in transaction (aborted)’延迟查询正在排队等待执行state = ‘active’ and enqueue is not NULL快慢车道处于快车道中的查询和处于慢车道中的查询数量lane = ‘fast’ lane = ‘slow’DBA可以在【查询监控】-【实时监控】页面中对当前系统的查一下以提交时间、阻塞时间、执行时间、CPU时间、CPU时间倾斜、平均下盘量这些维度进行排序,获取关注的这些维度的topN的数据。实时查询显示项说明指标名称指标描述查询ID当前查询语句的QueryID,内核给每一个查询语句分配的唯一标识用户名称提交当前查询语句的用户名称应用名称当前查询语句所对应的应用名称数据库名称当前查询语句所对应的数据库名称工作负载队列承载当前查询语句的工作负载队列名称提交时间当前查询语句提交的时间戳阻塞时间当前查询语句执行前的等待时间,单位:ms执行时间当前查询语句到目前为止的执行时间,单位:msCPU时间当前查询语句在所有DN上执行的CPU总时间,单位:ms平均下盘量当前查询语句在所有DN上的平均下盘量,单位:MB查询语句当前正在执行的查询语句接入CN提交当前查询语句的CN名称客户端IP提交当前查询语句的客户端IP地址快慢车道当前查询语句所在的车道查询状态当前正在执行查询的语句的查询状态排队状态当前查询在数据库中执行的状态,是否在工作负载队列上排队查询监控还可以对具体的单个查询查看详细信息。查询详情指标名称指标描述基本信息该查询的基本信息:用户名,数据库,开始时间,预估执行时间等等调优警告该语句触发的内核调优告警,没有的话返回空实时资源消耗展示SQL执行过程中,CPU,内存,I/O下盘量指标的变化趋势(该页面仅实时查询下钻显示)历史资源消耗展示SQL执行过程中,CPU,内存,I/O下盘量指标的变化趋势查询语句该查询所执行的SQL语句查询计划该查询的语句的查询计划DMS还提供了历史查询,供DBA通过时间区间查看历史查询信息历史查询除了表格数据,DMS还提供了性能监控,可以提供对当前集群或者数据维度的TPS,查询数等指标提供趋势分析性能监控除了针对DBA提供可视化的页面呈现,DMS还提供了openAPI供开发人员对应自有监控系统。openAPI (华为云未上线)/v1/{project_id}/dms/clusters/{cluster_id}/query{ "queries": [ { "query": "select count(*) \r\nfrom store_sales\r\n ,household_demographics \r\n ,time_dim, store\r\nwhere ss_sold_time_sk = time_dim.t_time_sk \r\n and ss_hdemo_sk = household_demographics.hd_demo_sk \r\n and ss_store_sk = s_store_sk\r\n and time_dim.t_hour = 8\r\n and time_dim.t_minute >= 30\r\n and household_demographics.hd_dep_count = 5\r\n and store.s_store_name = 'ese'\r\norder by count(*)\r\nlimit 100;", "max_cpu_time": 0, "min_cpu_time": 0, "total_cpu_time": 0, "cpu_skew": 0, "max_peak_mem": 11, "min_peak_mem": 11, "avg_peak_mem": 11, "mem_skew": 0, "max_spill_size": 0, "min_spill_size": 0, "avg_spill_size": 0, "spill_skew": 0, "max_peak_iops": 0, "min_peak_iops": 0, "avg_peak_iops": 0, "iops_skew": 0, "db_name": "test", "application": "gsql", "query_id": "79657418412457882" } ], "timestamp": 1616679496270, "cluster_id": "9c11a33a-64e6-40c1-93bd-01b2255b2228" }想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/269981
  • [测试] GaussDB(DWS)负载管理核心技术解密五: 空间管控解密
     GaussDB(DWS)提供了资源负载管理手段,来均衡任务对系统资源的利用。资源负载 管理存储空间目前主要实现了:1.用户级别的空间管控;2.schema级别的空间管控;1. 存储资源管理背景信息存储资源管理在多租户场景下用于限定不同用户可以使用的空间配额,防止用户使用 存储空间过大导致业务执行受阻。GaussDB(DWS)通过在创建用户时指定存储空间的 大小实现对存储资源的管理,包括指定:永久表存储空间(PREM SPACE)、临时表 存储空间(TEMP SPACE)及算子落盘空间(SPILL SPACE)。存储空间管理支持对组用户和业务用户的存储空间管理,当业务用户对应的组用户存 在空间限制时,则业务用户的空间也受到该组用户的空间限制。操作步骤1.1.设置用户磁盘空间上限:添加工作负载队列的时候可以设置存储资源上限,此处可以限制用户使用磁盘的上限;1.2.查看用户磁盘空间使用:点击相应队列可以查看对应队列关联用户磁盘使用量。说明:空间信息CN会定时从DN获取并执行检查,间隔周期为5s,用户使用使用空间大于上限值的时候会提示用户空间上限已到不允许用户进行数据插入。2. Schema资源管理背景信息GaussDB(DWS)存储资源管理上提供了Schema级别的空间管控能力,一方面可以实现 单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和 用户、队列解耦,实现了空间管控和权限的分离,降低用户使用空间管控的难度。 通过创建Schema时指定存储空间的大小实现对存储资源的管理,仅限制永久表存储空 间(PREM SPACE)。Schema存储空间管理支持对表数据的存储空间管理,当一个 Schema存在空间限制时,在业务执行过程中,如果该Schema下的表数据之和超过空 间限制,则会导致业务出错。概述当用户对永久表进行增删改等操作时,通过将空间增加/缩减到表所属Schema上实现Schema级别的空间管控,通过分布式管控防止数据倾斜引起数据库只读等问题。操作步骤2.1设置shema空间限额:选择模式空间管理,点击对应的数据库,选择需要修改的shema点击编辑:2.2 schema空间显示:说明:Schema空间管控实现单实例上的Schema级别空间管控,一方面可以实现单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和用户、队列解耦,实现了空间管控和权限的分离,降低了用户使用空间管控的难度。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/269430
  • [集群&DWS] GaussDB(DWS)cgroup技术介绍
    本文将对GausDB(DWS)中资源管理应用的cgroup技术做简单的概述。1、GausDB(DWS)中涉及到的子系统1.1 Memorycgroup.event_control #用于eventfd的接口memory.usage_in_bytes #显示当前已用的内存memory.limit_in_bytes #设置/显示当前限制的内存额度memory.failcnt #显示内存使用量达到限制值的次数memory.max_usage_in_bytes #历史内存最大使用量memory.soft_limit_in_bytes #设置/显示当前限制的内存软额度memory.stat #显示当前cgroup的内存使用情况memory.use_hierarchy #设置/显示是否将子cgroup的内存使用情况统计到当前cgroup里面memory.force_empty #触发系统立即尽可能的回收当前cgroup中可以回收的内存memory.pressure_level #设置内存压力的通知事件,配合cgroup.event_control一起使用memory.swappiness #设置和显示当前的swappinessmemory.move_charge_at_immigrate #设置当进程移动到其他cgroup中时,它所占用的内存是否也随着移动过去memory.oom_control #设置/显示oom controls相关的配置memory.numa_stat #显示numa相关的内存一旦设置了内存限制,将立即生效,并且当物理内存使用量达到limit的时候,memory.failcnt的内容会加1,但这时进程不一定就会被kill掉,内核会尽量将物理内存中的数据移到swap空间上去(swappiness参数可以选择是否使用swap),如果实在是没办法移动了(设置的limit过小,或者swap空间不足),默认情况下,就会kill掉cgroup里面继续申请内存的进程。当物理内存达到上限后,系统的默认行为是kill掉cgroup中继续申请内存的进程,那么怎么控制这样的行为呢?答案是配置memory.oom_control如果写0到这个文件,将启动OOM-killer,当内核无法给进程分配足够的内存时,将会直接kill掉该进程;如果写1到这个文件,表示不启动OOM-killer,当内核无法给进程分配足够的内存时,将会暂停该进程直到有空余的内存之后再继续运行;同时,memory.oom_control还包含一个只读的under_oom字段,用来表示当前是否已经进入oom状态,也即是否有进程被暂停了。1.2. CPUCPU是用来设置CPU配额的子系统,所谓配额是指CPU的相对使用比例。配置CPU子系统的方法有两种:一种是通过设置cpu.cfs_quota_us 和 cpu.cfs_period_us二者中的数值,来配置该cgroup中任务所占据的比例。举个例子,cfs_period_us的值为100,表明一个cpu时间周期内100ms, cfs_quota_us 的值为200, 表明在一个cpu周期上,该cgroup中的任务使用了200ms的时间,这表示该cgroup中的任务占用了两个cpu核心。另外一个配置方法是修改cpu.shares中的数值,这个数值表明系统中若干个cgroup所占用cpu的比例值。例如系统中有两个cgroup,分别为A与B,A的数值为1024(默认值),B的数值为2048,那么cgroup B所能占用的CPU时间为系统全部cpu时间的比例为:2048/(1024+2048) = 2/3 = 66.6%cpu.shares的配置方法有一个好处,就是如果系统没有在cpu资源占满的情况下,是不会触发这个机制的。也就是说,即便是cgroup A占有的cgroup比例仅为33.3%, 在cgroup B中的任务不繁忙的时候,cgroup A中的任务仍然可以使用超过33.3%的资源。与配置cfs调度中的时间片占用比例相比,使用shares参数可以使cpu的利用率得到提高。从上面我们能够看出来,cgroup提供的cpu控制组是比较纠结的,一个通过配置占据cpu时间片的比例,来将cpu占用比例的上限写死了,另一个cpu.shares参数虽然是动态的,但是如果cgroup的数量增加了,这个相对比例值也会发生变化。因此,在cpu子系统的配置还是很有讲究的。1.3. CPUACCT这个子系统没有什么实际限制作用,只是起到了对cgroup中任务占用cpu资源的统计,systemd将该子系统与cpu关联在一起挂载,可以通过查看cpuacct.usage来获取cgroup中任务所占用的总的cpu使用情况cpuacct.usage_percpu可以细粒度地看到每一个核心的使用情况。mppdb没有实际使用到cpuacct中的功能,在这里不做具体介绍。1.4. CPUSET该参数用于配置cgroup所使用cpu资源的限额,所谓限额,就是指使用的固定cpu核心数。可以通过配置cpuset.cpus参数来指定任务所使用的cpu核心数。默认的cgroup中cpu核心数是全部使用的,例如:0-119, 表明了系统共有120个cpu核心,全部都使用。需要注意的是,子cgroup中的cpu核心必须是父cgroup中cpu核心的子集,如果需要修改cpuset.cpus参数,需要从根节点向父节点修改,否则提示无法修改。2、GaussDB(DWS)中cgroup的应用2.1控制作业优先级我们可以通过资源池来与cgroup关联,可以通过资源池来指定任务的运行优先级,可以指定为rush, normal等不同的类别,这是通过cgroup中的cpu子系统来实现的。GaussDB(DWS)在安装的时候,会为系统默认创建cgroup, 命名规则为 Gaussdb: 用户名, 这个cgroup中会包含许多层级,例如Class,Backend等子cgroup. 2.2保障Gaussdb(DWS)线程优先级GaussDB(DWS)的后台线程(backend threads) 纳入cgroup保护,主要是vacuum线程等。转载来自:https://bbs.huaweicloud.com/blogs/269406
  • [存储] GaussDB(DWS) GDS单文件并发导入
    GaussDB(DWS) GDS在8.1版本中支持对一个文件进行并发导入,提升单文件的导入速率。原理:约束:1.仅支持text和csv文件,且CSV文件需要尽量保证每行数据只有一个换行。下面的示例对这种场景进行了说明。2.文件被拆分的总数小于等于8。3.当前分片小于等于文件被拆分的总数– 创建目标表。postgres=# CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code varchar(15), phone_code vcreate table pipegds_widetb_3 (city integer, tel_num varchar(16), card_code varchar(15), phone_code varchar(16), region_code varchar(6), station_id varchar(10), tmsi varchar(20), rec_date integer(6), rec_time integer(6), rec_type numeric(2), switch_id varchar(15), attach_city varchar(6), opc varchar(20), dpc varchar(20));– 创建带有file_sequence字段的外表。postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_1( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-1’);postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_2( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-2’);postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_3( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-3’);postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_4( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-4’);postgres=# CREATE FOREIGN TABLE gds_pip_csv_r_5( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION ‘gsfs://127.0.0.1:8781/wide_tb.txt’, FORMAT ‘text’, DELIMITER E’|+|’, NULL ‘’, file_sequence ‘5-5’);–将wide_tb.txt并发导入到pipegds_widetb_1。lel onpostgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_1;postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_2;postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_3;postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_4;postgres=# INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_5;\parallel off*注意使用CSV格式进行并行导入时,在如下示例场景中会因为CSV本身的规则和GDS拆分逻辑冲突而导致其中的某些分片导入失败。场景:csv文件中包含未转义的换行符,且该换行符被quote指定的字符所包含,并且该行数据处于逻辑分片的第一行。示例:并行导入一个文件big.csv ,正确导入显示内容如下:1111,"aaaaaa","bbbbbbbb" 2222,"ccccccccc"," ddddddd dd" 33333,"eeeeeeee","ffffffffffffff"文件被拆分成两份后,第一个分片显示内容如下:1111,"aaaaaa","bbbbbbbb" 2222,"ccccccccc"," d第二个分片显示内容如下:dddddd dd" 33333,"eeeeeeee","ffffffffffffff"因为第二个分片第一行ddddd后面的换行符包含在一个双引号之间,导致GDS无法分辨该换行符是字段中的换行符还是行中的分割符,因此第一个分片会成功导入两条数据,第二个分片导入失败。转载来自:https://bbs.huaweicloud.com/blogs/269400
  • [POC&交付] GaussDB(DWS) 实践系列 - DWS集群NBU备份恢复操作步骤
    1、GaussDB(DWS)NBU备份介绍华为NBU备份的逻辑如下所示:每个数仓节点都有Roach agent进程负责本节点的数据备份;第一个节点额外有一个Roach master进程负责分布式集群备份。每个Media Server(备份介质服务器)安装华为的Roach client 插件。     备份数据流向:在Media Server端安装Roach Client插件(该插件端口可指定)规划集群节点与Media Server之间的映射文件集群内Roach agent组件生成备份内容到内存,根据映射关系socket传输到远端Roach Client。NBU服务器侧Roach Client插件接收备份数据,调用XBSA接口发送给Media Server。Master Server根据StorageGroup策略分发数据到对应的Media Server,存储到磁带或磁盘 2、备份恢复操作步骤:  2.1 前置操作需要保证集群内节点ping通 NBU 集群内所有集群,沙箱环境内Ruby用户下要能ping通NBU机器;NBU服务器、集群内节点以及涉及的中转节点,都应保证是万兆网络链接,否则会影响性能验证验证前进入沙箱临时调整gsql禁免密guc参数:       su – Ruby       gs_guc set -Z coordinator -I all -N all -h 'local all all trust'       gs_guc set -Z datanode -I all -N all -h 'local all all trust'需提前安装好NBU环境,包括NBU Media Server等;NBU Media Server机器上需要对外开放通信端口,用于沙箱内集群各节点和NBU Media Server之间TCP通信传输备份文件;已安装配置roach client插件已配置NBU参数和策略2.2  集群备份操作步骤云数仓备份功能可基于两种方式实施:方式一:DWS管控面启动Roach client并确保NBU配置正确;进入DWS管控面,点击备份集群,打开管控界面NBU开关,打开方式为:: F12进入浏览器console后,输入如下指令         window.configData.snapshotSwith = 'true'         window.configData.nbuServerConfig = 'true'进入集群,点击快照,点击自动快照状态,修改快照策略,选择备份设备为NBU、备份服务器IP为NBU Media Server ip,按行输入,不要有空行。备份服务器端口即为roach client插件开放的端口,NBU策略根据实际配置输入,与创建的policy保持一致。配置策略完成后,进入对应集群控制界面,点击更多,会弹出下拉菜单,点击创建快照即可,然后输入快照名称,点击确定,即可创建快照。设置自动快照备份后,即会周期触发增量备份(默认周期为8小时) 方式二:命令行(可根据需要配置为备份作业)执行全量备份命令:       python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --parallel-process 3 --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888注意:--media-destination为NBU策略名、metadata-destination、parallel-process、nbu-media-list、client-port根据实际配置进行更改。 其中metadata-destination值为元数据存放路径parallel-process为设置的并行参数, 至少为单个节点主DN个数 + CN个数,nbu-media-list值为media server ip的记录清单,client-port为roach_client插件开放的端口执行增量备份命令:     python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata  --parallel-process 3 --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888 --prior-backup-key 20200912_083324备份说明:全量备份会将源数据完整备份,而增量备份仅将上次备份后所做的更改进行备份,这里的上次备份可以是全量备份,也可以是全量备份后的增量备份。需要注意的是,增量备份的基础始终是全量备份。如果一次全量备份之后进行了全量恢复,则不能再基于该全量备份进行增量备份,必须要重新进行全量备份,然后基于新的全量备份进行增量备份。增量备份分为累积增量备份和差分增量备份:指定的--prior-backup-key参数值始终为全量备份的backup key,那么增量备份就是累积增量备份,累积增量备份均是基于最近一次全量备份2.3  集群恢复操作步骤执行全量/增量恢复命令:       python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --backup-key xxxxxx --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888根据指定的backup key和系统中相关的全量/增量备份文件执行全量/增量恢复启动集群       python $GPHOME/script/GaussRoach.py -t start2.4  后置操作执行结束后,需要还原gsql禁免密配置:su - Rubygs_guc set -Z coordinator -I all -N all -h 'local   all    all    sha256'gs_guc set  -Z datanode -I all -N all -h 'local   all    all    sha256'想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/267403
  • [技术干货] GaussDB(DWS)通信相关视图参数使用一:comm_quota_size
    【摘要】 有大流量产生的stream作业可以通过相关参数调节其性能。数据库环境压力比较小或者环境资源比较充足的时候,可以通过调节参数提升有大流量产生的stream作业性能,或者在合适的环境下调节其性能,首先介绍几个必要视图。        1、pg_stat_activity        显示数据库连接查询相关信息,主要查询结果有:当前数据库的所有连接(包括开始时间、连接参数、客户端信息),执行SQL(包括start时间、执行状态、query_id、pid)。        通过此视图可查看相应query的主要信息,query_id、执行时间等。        2、pgxc_thread_wait_status        可以查看集群全局各个节点上所有SQL语句产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态,从而更容易定位进程停止响应问题以及类似现象的原因。        通过此视图可查看DN之间的等待关系,判断目标query是在收发数据还是在等待。        3、pg_comm_recv_stream/ pg_comm_send_stream/ comm_quota_size        pg_comm_recv_stream/ pg_comm_send_stream        展示单个DN上所有的通信库接收/发送流状态,可以查询DN间数据收发数据流量大消息,收集相关性能信息        comm_quota_size:DN间每个连接可连续发送包的总大小。        通过以上两视图可以查询目标query每个DN之间的数据传输情况,DN之间每次的数据传输大小上限为comm_quota_size大小,如每次传输数据量已到达comm_quota_size限制,在环境压力不是很大,OS资源充足时可以调大comm_quota_size参数,以提升数据库的性能。备注:如环境中作业比较多,调节此参数势必会影响其他类型的作业,所以环境资源紧张时权衡利弊。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/268499
  • [集群&DWS] GaussDB(DWS)数据库智能监控系统应用场景分析
    摘要:与互联网产品的立项模式类似,当我们定义设计一款新产品时,首先需要对用户做需求分析,归纳整理综合分析用户的需求,定义我们的产品定位,功能,业务逻辑,使用界面等等。因此,为了设计好数据库智能监控系统,我们需要对数据库监控系统的目标用户做需求分析,收集用户诉求,挖掘用户潜在需求,绘制典型用户画像。最后,设计数据库监控系统的实现架构,将典型用户的各种需求纳入到产品的设计架构管道中。数据库智能监控系统的用户        实际应用场景中,数据库监控系统的用户可能会有很多种不同的角色。不同公司因为组织架构不同,可能存在更细分或者更聚合的用户角色。但是总的来说可以归纳整理为如下三种用户类型:应用开发(APP DEV)运维工程师(SRE)数据库管理员(DBA)   应用开发工程师角色:主要负责开发云应用中的业务SQL,对云服务的功能和性能负责。同时需要保证写出的SQL高效优质,不会对集群造成额外的资源消耗和时间消耗。因此,应用开发工程师,需要能够对新开发的SQL进行监控,了解该新增查询语句的执行效率以及资源消耗情况。运维工程师角色:主要负责保证数据库集群的长期稳定运行。需要分别从资源消耗和系统负载两个角度对数据库系统进行评估。需要能够配置数据库的告警场景,并且可以看到实时或预测的数据库告警信息,将发现的问题报告给数据库管理员角色做进一步处理。总的来说,运维工程师角色会监控大量的数据库集群,他不会对每一个集群做非常深入的分析,而是更多的会以问题发现者的角色出现。数据库管理员角色:主要负责定位数据库问题的根因并且提供相应的解决方案。数据库管理员需要是数据库领域的专家,熟悉数据库的方方面面,他可以从多个维度分析数据库监控数据,定位数据库故障,并提供解决方案。         需要说明的是,以上三种角色并不是指实际生产环境中的岗位,而是为了方便分析用户需求而归纳总结出来的典型角色符号。实际生产环境中,可能出现三种角色为同一个人的场景,或者SRE岗位会身兼SRE与DBA角色的场景。我们这里将用户区分为三种角色,主要是为了方便我们做需求分析并且构建对应的人物画像,从而进一步锁定对应角色人物所需要的工具。最终,呈现给大家一个思路清晰的数据库监控系统开发概念脉络。 数据库智能监控系统工具及应用场景        通过上面的抽象和梳理,我们发现在数据库监控运维过程中三种角色分别对应着不同的需求,而不同的需求必将导致不同工具或者同一个工具的不同侧重点。下面我们围绕三种角色,分别展开详细介绍其将要用到的工具:应用开发角色,他们只关心自己写的SQL是否高效,是否有利用到集群的各种优化特性,是否占用了集群的过多资源?因此,他需要一个能够让他评估其所写SQL执行效率的工具,也就是WebSQL工具,允许用户简单的连接到数据库,并且执行SQL语句。WebSQL可以返回SQL语句的执行结果,也可以返回其执行计划,帮助应用开发角色,了解其SQL语句的执行效率。同时,用户的SQL语句并不是简单的单条语句执行的,而是需要将其放在整个作业流中去执行的。那么衡量其在作业流中的执行时间和资源消耗的基线就变得非常重要。因此,我们就需要查询监控可以针对特性的SQL记录其执行时间和资源的消耗,并且计算最大值,最小值和平均值,作为比对基线,来进一步帮助用户评估其SQL的执行效率。在用户现场,因为资源隔离需求,用户的作业是需要绑定到某个工作负载队列执行的,那么工作敷在队里的资源配置,以及工作负载队列的负载水平等数据又变得非常重要,新加的SQL语句是否会造成工作负载队列的超载?当前工作敷在队列的资源是否合理,这个都需要应用开发角色在新开发的应用上线前有个直观的了解。系统运维角色角色(SRE),他们关心云上数量庞大的数据库系统的长稳运行,基于这个需求,我们打算提供三个方面的工具来解决问题。        健康指数指标,该指标是一个复合指标,该指标主要由两方面的指标支撑,资源消耗指数和数据库系统负载指数。而这两种指标又有其更下一层的原子指标和延伸指标支撑。集群健康指数的计算需要设计一套相应的数学模型,以该模型为基础我们就可量化系统的健康指数,从而可以使系统管理员非常简单的从云上数以百计的数据库中快速发现有问题的数据库。        除了健康指数这样需要系统管理员亲自去查看的被动指标以外,DMS还会进一步提供覆盖全面的告警能力。DMS将从三个层次上提供数据库的告警能力,(1)在dms-agent端,通过日志分析的手段,实时分析dms-agent所处节点上,操作系统以及数据库的日志,当发现威胁关键词后,立刻触发告警,通过相应渠道上报到告警平台;(2)在DMS服务端,因为DMS拥有数据库集群的全部监控数据,通过数据分析手段和数据库专业知识,我们将能设计相应的告警规则,周期性的对数据库集群做检查,发现问题后直接触发告警;(3)对于DMS采集的数据库集群指标数据,能够作为阈值告警的指标,全部对接CES,通过CES服务做阈值告警。以上三种告警的配置和展示都需要在DMS的前端页面上呈现。        人工智能与云计算有的天然的联系,当数据库上云后,人工智能与数据库运维的交叉节点AIOps就顺理成章的出现了。因为DMS拥有数据集群的全部监控数据,因此使用历史监控数据对集群的工作模式做判别,推荐最优化的配置参数;对数据库磁盘的空间增长趋势做预测,提前通知用户扩容或运维需求等等。在人工智能的加持下这一切都变成为可能。 数据库管理员角色(DBA),数据库管理员一直都是数据库的大管家,在传统的数据中心里,他们负责数据库的性能优化,也负责数据库的长稳运行,有时候甚至也要帮助应用开发工程师优化SQL。但是在云时代,数据库管理员的工作分工会变得更精细,应用开发和系统管理员分担了数据库管理的一部分工作,从而使得数据库管理员角色职责变的更纯粹。数据库管理员作为一个数据库领域的专家,他将负责定位数据库问题的根因,以及提供解决问题的方法。系统管理员+数据库管理员两个角色最终就形成了发现问题,分析问题,解决问题的任务闭环。因此,在云上,SRE岗位往往会包含SRE+DBA两个角色的职责。        DBA是一个数据库专家,也是一个使用数据库工具定位各种数据库问题的大师。针对问题根因定位,他将需要故障分析工具和故障自愈工具两类工具。其中,故障分析工具,将会提供各种监控数据和数据的不同可视化形式,为数据库管理员快速定位问题根因提供帮助。故障自愈类工具,则是将数据库管理员过去定位问题,解决问题经验的固化。未来随着我们对DBA工作方法的进一步了解,将会有越来越多的自愈类工具。        数据库管理员另一类重要的职责就是提供故障的解决方案,这一块是运维系统非常重要的一环。再好的故障定位工具,定位到的问题,如果最后没有解决方案,那么最终还是不能真正帮助到用户。因此,我们需要建立一套问题根因-解决方案的专业搜索引擎,帮助用户也是帮助我们加速解决问题的流程,缓解一线客户支持工作人员的工作强度。        本文是介绍云上的数据库监控运维体系设计的核心概念的三篇文章之二,尝试从概念和逻辑上推导了基于用户角色的数据库智能监控系统的可能应用场景。有了这个基本框架,则我们后续所需要做的工作和工具都变得清晰可见。愿我们的期待早日成为显示,让云端的数据库运维工作变得更轻松与智能。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~转载来自:https://bbs.huaweicloud.com/blogs/269120
  • [POC&交付] GaussDB(DWS)--基于用户的空间管理方法
    在数据仓库的日常管理过程中,空间管理是一个必要的且重要的事情。从技术上讲,可以防止空间爆满导致集群不可用的情况发生;从业务发展角度讲,可以根据空间的使用趋势评估未来业务的发展趋势,评估什么时候扩容、扩多大等。本文介绍一种基于用户或租户的空间管理方式。1、基本管理机制在GaussDB(DWS)中存储资源管理在多租户场景下用于限定不同用户可以使用的空间配额,防止用户使用存储空间过大导致业务执行受阻。GaussDB(DWS)通过在创建用户时指定存储空间的大小实现对存储资源的管理。存储空间资源分为三种类型:永久表空间(Perm Space),临时表空间(Temp Space)和算子下盘空间(Spill Space)。存储空间管理支持对组用户和业务用户的存储空间管理, 当业务用户对应的组用户存在空间限制时,则业务用户的空间也受到该组用户的空间限制。更严格的来说,GaussDB(DWS)最终管理的表owner的可用空间。假设我们设置XXX_DATA(Schema)的所有表的owner为OWER_USER,我们对OWNER_USER用户设置可用的永久空间(Perm Space)为100TB,这样就可以达到控制XXX_DATA(Schema)的空间为100TB。注意:虽然我们指定了一个表的owner,但是,更新数据的时候不一定使用表的owner去更新。例如:XXX_DATA的owner为OWNER_USER,实际更新数据的时候通常使用的是BAT_USER。也就是说,我们不关心哪个用户对数据进行了更新,只需要关心表owner的存储资源即可。2、Schema与用户的关系当前的存储资源管理方式存在着schema与用户多对多的关系,这使得存储资源的管理变得复杂。例如,XXX平台拥有Schema1_data和Schema2_data两个schema;XXX平台有Depart1业务用户,Depart2业务用户和Depart3业务用户三类用户且这三类用户绑定了两个租户。这三类用户都拥有在两个schema的建表权限,这样就会得到一个多对多的结果。这种多对多的关系在日常管理中会给我们带来很多麻烦,如下图:3、日常管理规范及保障机制建立建表规范为了避免这种复杂的关系给我们带来麻烦,我们需要制定建表规范:每一个schema的普通表(不包括temp table)的owner必须为同一个用户。例如:XXX_DATA(Schema)的table owner必须为OWNER_USER1。建立建表检查机制建立检查机制,保障规范的可行性:每次上线或变更都检查table owner,如果table owner与规范规定的用户不一致,则进行必要的整改。以上是基于用户或租户的管理方式,未来GaussDB(DWS)也会推出基于Schema的空间管理方式,满足更多的客户的不同的需求,敬请关注。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~转载来自:https://bbs.huaweicloud.com/blogs/267586
  • [SQL] GaussDB(DWS)数据类型之DATE类型
    【摘要】 本文章主要介绍了GaussDB(DWS)数据类型中的DATE类型在不同数据库模式下且在不同应用场景下的行为表现及对比。GaussDB(DWS)中有三种模式,分别是Oracle模式,TD模式和MySQL模式。不同的类型在不同的模式下,也有不同的行为表现。接下来便对GaussDB(DWS)中的日期DATE类型进行详细介绍。DATE类型的取值范围:GaussDB(DWS)在存储DATE类型时,不支持年月日全部为零或部分为零的场景,且取值范围在三种模式下是不同的:在Oracle模式下,DATE类型的取值范围是公元前4713年1月1日到公元294277年1月1日。在MySQL模式和TD模式中,DATE类型的取值范围是公元前4713年到公元5874897年。用例说明:1. 不同模式下DATE类型的行为Oracle模式    a. DATE类型的表现    GaussDB(DWS)中DATE类型存储时不带时分秒,由于在Oracle模式下的DATE类型需要带有时分秒,使得GaussDB(DWS)在Oracle模式下存在带时分秒的和不带时分秒的两种DATE类型,所以为了容易区分,在显示时不带时分秒的DATE类型用列名date表示;带时分秒的DATE类型用同样带时分秒的TIMESTAMP类型的列名timestamp表示。postgres=# select date '4713-01-01 BC'; timestamp ------------------------ 4713-01-01 00:00:00 BC (1 row) postgres=# select date '294277-01-01'; timestamp ----------------------- 294277-01-01 00:00:00 (1 row)    b. Oracle模式下得到只含有年月日的DATE类型的方法    如果想要在Oracle模式下将日期转成只有年月日的DATE类型,有方法可以实现么?事实上也是有的。GaussDB(DWS)提供了两种方式,一种是通过在Oracle模式下使用date函数:date函数的参数至少需要包含年月日,并将日期中的年月日提取并输出;另一种则是通过cast函数进行转换,但转换时应将date加上双引号,否则转换后的数据还是会含有时分秒部分。postgres=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) postgres=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) postgres=# select cast('2008-05-24 10:40:21.100050' as date); timestamp --------------------- 2008-05-24 10:40:21 (1 row)    c. DATE类型操作符操作符实例结果+select date ‘2020-08-13’ + interval ‘7’;2020-08-20 00:00:00select date '2020-08-13' + time '12:11:13';2020-08-13 12:11:13-select date '2001-10-01' - date '2001-09-28';3 daysselect date '2001-10-01' - interval '5' month;2001-05-01 00:00:00select date '2001-10-01' - time '12:11:13';2001-09-30 11:48:47MySQL模式和TD模式: DATE类型只有年月日。    a. DATE类型的表现    MySQL模式与TD模式下DATE类型无差异。mysql_db=# select date '5874897-01-01'; date --------------- 5874897-01-01 (1 row) td_db=# select date '5874897-01-01'; date --------------- 5874897-01-01 (1 row)    b. MySQL模式与TD模式下得到只含有年月日的DATE类型的方法    由于在MySQL模式或TD模式下,DATE类型只有年月日,故使用to_date函数和date函数所得到的结果都只有年月日,同时cast函数进行类型转换时,date加不加引号所得到的结果也是一致的。td_db=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) td_db=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) td_db=# select cast('2008-05-24 10:40:21.100050' as date); date ------------ 2008-05-24 (1 row) mysql_db=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) mysql_db=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) mysql_db=# select cast('2008-05-24 10:40:21.100050' as date); date ------------ 2008-05-24 (1 row)    c. DATE类型操作符操作符实例结果+select date ‘2020-08-13’ + interval ‘7’;2020-08-20 00:00:00select date '2020-08-13' + time '12:11:13';2020-08-13 12:11:13-select date '2001-10-01' - date '2001-09-28';3select date '2001-10-01' - interval '5' month;2001-05-01 00:00:00select date '2001-10-01' - time '12:11:13';2001-09-30 11:48:47与Oracle模式的差异:当DATE类型的值进行相减时返回值不带day,只有数值。2. 不同模式下的DATE类型相关函数结果的行为:GaussDB(DWS)中存在与DATE类型相关的函数:to_date:将文本类型的值转换为指定格式的时间戳,若参数只有一个时,默认格式为DATE类型的格式。to_char:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt指定的格式转换为VARCHAR类型。可选参数fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合;常见的模板有:HH、MM、SS、YYYY、MM、DD。模板可以有修饰词;常用的修饰词是FM,可以用来抑制前导的零或尾随的空白。返回值类型:varcharcurrent_date:获取当前日期。date_part:获取给定日期时间中的指定域值。isfinite:测试给定日期是否为有效日期。函数实例GaussDB(Oracle)GaussDB(TD)GaussDB(MySQL)to_dateselect to_date(date '2008-05-24 10:40:21');2008-05-24 10:40:212008-05-242008-05-24to_charselect to_char(date '2008-05-24 10:40:21');2008-05-24 10:40:212008-05-24 00:00:00+082008-05-24current_dateselect current_date;2021-04-252021-04-252021-04-25date_partselect date_part('week', date '2008-05-24');212121isfiniteselect isfinite(date '2008-05-24');tttOracle模式:由于Oracle模式中的DATE类型含有时分秒,故to_date和to_char函数得到的结果含有时分秒。TD模式:由于TD模式下的DATE类型只有年月日,故to_date函数得到的结果只有年月日。在TD模式下,to_char函数的输出结果可以由GUC参数convert_empty_str_to_null_td控制,若不设置参数则返回上表中的结果,若设置参数则返回结果与TD数据库中的结果保持一致,为2008/05/24。MySQL模式:由于MySQL模式下DATE类型只有年月日,故to_date函数和to_char函数的返回结果只有年月日。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~转载来自:https://bbs.huaweicloud.com/blogs/266760
  • [技术干货] GDS导入数据到DWS步骤
    准备工作在使用GDS导入数据前,请先完成准备弹性云服务器作为GDS服务器、下载GDS工具包和SSL证书。使用GDS导入数据数据存储在多个服务器上时,需要在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。GDS在各台数据服务器上的安装配置和启动方法相同,这里以一台服务器为例进行说明。步骤1:准备源数据 1.以root用户登录用于存放数据源文件的服务器(又称数据服务器或GDS服务器),创建数据文件存放目录“/input_data”。以IP为192.168.0.90的数据服务器为例。       mkdir -p /input_data 2.使用MobaXterm将数据源文件上传至“/input_data”中。步骤2:安装配置和启动GDS以root用户登录数据服务器192.168.0.90,创建存放GDS工具包的目录/opt/bin/dws。mkdir -p /opt/bin/dws将GDS工具包上传至上一步所创建的目录中。以上传SUSE Linux版本的工具包为例 ,将GDS工具包“dws_client_redhat_x64.tar.gz”上传至“/opt/bin/dws”中。在工具包所在目录下,解压工具包。cd /opt/bin/dws/gdstar -zxvf dws_client_redhat_x64.tar.gz(可选)如果使用SSL加密传输数据,请一并将SSL证书上传/opt/bin/dws目录中。创建用户gds_user及其所属的用户组gdsgrp。此用户用于启动GDS,且需要拥有读取数据源文件目录的权限。groupadd gdsgrpuseradd -g gdsgrp gds_user修改工具包以及数据源文件目录属主为创建的用户gds_user及其所属的用户组gdsgrp。CHOWN -R gds_user:gdsgrp /opt/bin/CHOWN -R gds_user:gdsgrp /input_data切换到用户gds_user。su - gds_user启动GDS。非SSL模式传输数据的情况下,使用如下命令启动GDS。/opt/bin/dws/gds/gds -d /input_data/ -p 192.168.0.90:5000  -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D使用SSL加密方式传输数据时,在确保执行了步骤5后,使用如下命令启动GDS。/opt/bin/dws/gds/gds -d /input_data/ -p 192.168.0.90:5000  -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D --enable-ssl --ssl-dir /opt/bin/dws/gds命令中的斜体部分请根据实际填写。-d dir:保存有待导入数据的数据文件所在目录。本示例中为“/input_data/”。-p ip:port:GDS listen IP和listen端口。默认值为:127.0.0.1,需要替换为能跟DWS通信的万兆网IP。listen端口的取值范围:1024~65535。默认值为:8098。本示例中配置为:192.168.0.90:5000。-H address_string:允许哪些主机连接和使用GDS服务。参数需为CIDR格式。此参数配置的目的是允许DWS集群可以访问GDS服务进行数据导入。所以请保证所配置的网段包含DWS集群各主机。-l log_file:存放GDS的日志文件路径及文件名。本示例中为“/opt/bin/dws/gds/gds_log.txt”。-D:后台运行GDS。仅支持Linux操作系统下使用。--enable-ssl:启用SSL加密方式传输数据。--ssl-dir:SSL证书所在目录。需与步骤6中的证书保存目录保持一致。步骤3:创建GDS外表创建外表product_info_ext用于接收数据服务器上的数据,使用SQL客户端工具连接DWS数据库。12345678910111213141516171819202122232425262728DROP FOREIGN TABLE IF EXISTS product_info_ext; CREATE FOREIGN TABLE product_info_ext (       product_price                integer        not null,       product_id                   char(30)       not null,       product_time                 date           ,       product_level                char(10)       ,       product_name                 varchar(200)   ,       product_type1                varchar(20)    ,       product_type2                char(10)       ,       product_monthly_sales_cnt    integer        ,       product_comment_time         date           ,       product_comment_num          integer        ,       product_comment_content      varchar(200)                 )    SERVER gsmpp_server    OPTIONS(   LOCATION 'gsfs://192.168.0.90:5000/*',   FORMAT 'CSV' ,   DELIMITER ',',   ENCODING 'utf8',   HEADER 'false',   FILL_MISSING_FIELDS 'true',   IGNORE_EXTRA_DATA 'true'   )   READ ONLY   LOG INTO product_info_err    PER NODE REJECT LIMIT 'unlimited';设置数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示:数据源文件格式(format)为CSV。字段分隔符(delimiter)为英文逗号。编码格式(encoding)为UTF-8。数据文件是否包含标题行(header)为默认值false,即导入时数据文件第一行被识别为数据。设置导入容错性如下所示:FILL_MISSING_FIELDS 'true',表示最后一个字段缺失时,把最后一个字段的值设置为NULL,不报错。IGNORE_EXTRA_DATA 'true',数据源文件中字段比外表定义列数多,则忽略行尾多出来的列,不报错。将数据导入过程中出现的数据格式错误信息(LOG INTO error_table_name)写入表err_tpcds_reasons。允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。步骤4:将数据导入到DWS1.在DWS中创建目标表product_info,用于存储导入的数据。1234567891011121314151617181920DROP TABLE IF EXISTS product_info; CREATE TABLE product_info (     product_price                integer        not null,     product_id                   char(30)       not null,     product_time                 date           ,     product_level                char(10)       ,     product_name                 varchar(200)   ,     product_type1                varchar(20)    ,     product_type2                char(10)       ,     product_monthly_sales_cnt    integer        ,     product_comment_time         date           ,     product_comment_num          integer        ,     product_comment_content      varchar(200)                    )  WITH ( orientation = column, compression=middle )  DISTRIBUTE BY hash (product_id);2.将数据源文件中的数据通过外表“product_info_ext”导入到表“product_info”中。1 INSERT INTO product_info SELECT * FROM product_info_ext;步骤5:处理错误表 1.查询错误信息。1   SELECT * FROM product_info_err; 2.处理错误表中的错误信息。步骤6:优化查询效率在数据导入完成后,执行ANALYZE语句生成表统计信息。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。1.对表product_info执行VACUUM FULL。12 VACUUM FULL product_info;  VACUUM2.更新表product_info的统计信息。12 ANALYZE product_info;  ANALYZE步骤7:停止GDS 1.以gds_user用户登录安装GDS的数据服务器。 2.停止GDS。   查询GDS进程号。其中GDS进程号为128954。         ps -ef|grep gds12    gds_user 128954      1  0 15:03 ?        00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /opt/bin/dws/gds/gds_log.txt -D    gds_user 129003 118723  0 15:04 pts/0    00:00:00 grep gds    使用“kill”命令,停止GDS。其中128954为上一步骤中查询出的GDS进程号。          kill -9 128954https://bbs.huaweicloud.com/forum/thread-72416-1-1.html转载来自:https://bbs.huaweicloud.com/blogs/266986
  • [集群&DWS] GaussDB(DWS)memcheck版本编译及运行配置
    GaussDB(DWS)在特定场景下,运行memcheck版本可以快速发现、定位和解决内存相关问题,十分便捷。但在本地编译运行时,如果环境配置不当,会导致很多问题,本文将介绍GaussDB(DWS)memcheck版本编译及运行相关配置。编译本地编译需要设置ulimit -v unlimited选项,Cmack执行需要增加选项-DENABLE_MEMORY_CHECK=ON,例如: cmake /data1//gaussdb/Build/Cmake/ -DENABLE_MEMORY_CHECK=ON运行运行配置需要较大虚拟内存,需配置ulimit -v unlimited此外,还需要进行Asan配置:ASAN_OPTIONS="ASAN_OPTIONS=halt_on_error=0:disable_coredump=0:unmap_shadow_on_exit=1:log_path=$HOME/memchk/asan/runlog:alloc_dealloc_mismatch=1:fast_unwind_on_fatal=1:detect_leaks=1"各参数含义:  # halt_on_error=0; 检测内存错误后继续运行  # detect_leaks=1;使能内存泄露检测  # malloc_context_size=15  : 内存错误发生时,显示的调用栈层数为15  # log_path=/home/xos/asan.log : 内存检查问题日志存放文件路径  # suppressions=$SUPP_FILE  : 屏蔽打印某些内存错误配置完成后,可正常执行:make fastcheck p=34567 若未进行正确的选项配置,例如halt_on_error,则可能出现起集群过程中检测到内存泄露直接退出。可能会出现提示:请配置LD_PRELOAD环境变量,或者直接core dump, 或者提示本该属于leak检查的内存映射段被其他dso占用了,都需要配置正确的LD_PRELOAD环境变量。例如:export LD_PRELOAD=/root/local/lib64/libasan.so转载来自:https://bbs.huaweicloud.com/blogs/266554
  • [开发应用] 【GAUSSDB 产品】 函数授权问题
    使用dbadmin用户创建了函数months_between,现有用户test也需要使用该函数,将months_between函数的使用权限赋予用户test,执行命令如下:GRANT ALL PRIVILEGES ON FUNCTION months_between(timestamp,timestamp) TO test;授权语句执行成功,test用户使用该函数时,报错:No function matches the given name  and argument types.You might need to add explicit type casts.执行的调用语句:SELECT months_between(sysdate,sysdate);该执行语句在dbadmin用户下执行成功。请问,授权语句该如何写?
总条数:2749 到第 页
上滑加载中