• [技术干货] GaussDB(DWS)锁机制
    MVCC介绍 目前较为常见的三种并发控制机制:  悲观锁:当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观锁。 乐观锁:乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。 多版本并发控制(MVCC):MVCC会保存某个时间点上的数据快照。这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。 MVCC+锁的由来锁的原理自旋锁(Spin Lock):是一种和硬件结合的互斥锁,借用了硬件提供的原子操作的原语来对一些共享变量进行封锁,通常适用于临界区比较小的情况。特点是:封锁时间很短、无死锁检测机制和等待队列、事务结束时不会自动释放SpinLock。 轻量锁(Lightweight Lock):负责保护共享内存中的数据结构,有共享和排他两种模式,类似Oracle中的latch。特点是:封锁时间较短、无死锁检测机制、有等待队列、事务结束时会自动释放。 常规锁(Regular Lock):就是通常说的对数据库对象的锁。按照锁粒度,可以分为表锁、页锁、行锁等;按照等级,pg锁一共有8个等级。特点是:封锁时间可以很长、有死锁检测机制和等待队列、事务结束时会自动释放。 DWS最常见的锁是Relation级别的常规锁(表级锁),业务在并发设计不合理或调度混乱时容易出现等锁报错或者由于等锁导致语句执行慢的问题。 表级锁的介绍表级锁要等到事务结束之后释放,当两个事务产生锁冲突时,未拿到锁的线程会等待,超过lockwait_timeout参数设置的时间后报错。表级锁的特点之一是有等待队列。 因此当出现等锁事件时,锁等待队列可能会放大这种等锁情况带来的影响,因此要尽量避免互斥语句的并发操作。锁机制的处理方法 锁机制的处理方法的流程主要有:判断是否等待、找到持锁线程、终止异常语句。 判断是否等待 判断是否等待的处理方法主要有以下三种: 业务语句报错:Lock wait timeout 查看活跃视图pgxc_stat_activity的waiting字段,如果为t,表示在cn上等锁 通过等待视图pgxc_thread_wait_status中的wait_status字段判断,如果为acquire lock且wait_event为relation,说明在等锁 找到持锁线程 判断是否等待的处理方法主要有以下三种: 缩短报错时间,在语句执行前设置:通过pgxc_lock_conflicts查看冲突关系通过pg_locks查看(https://bbs.huaweicloud.com/blogs/228809)到对应实例节点上查询pg_locks找到持锁与的pid终止异常语句业务开发建议合理安排调度任务,避免在高峰期对同一张表alter或vacuum full等执行时间异常的语句及时处理,或配置异常规则避免语句执行过长出现等锁报错不要慌,根据报错信息和视图找出问题
  • [技术干货] DWS事务隔离性问题分析和数据库并发场景 
    1.华为云数仓DWS的概念 数据仓库服务,Data Warehouse Service,简称GaussDB(DWS),是一种基于公有云基础架构和平台的在线数据处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务。GaussDB(DWS)是基于华为云原生融合数据仓库GaussDB产品的服务,兼容标准ANSI SQL 99和SQL 2003,为各行业PB级海量大数据分析提供有竞争力的解决方案。  2.事务隔离性问题分析 事务隔离性问题:如果不考虑事务的隔离性,会出现以下问题:  脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。 不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update的数据。 幻读:指一个线程中的事务读取到了另外一个线程中提交的insert的数据。在一次的事务操作中,先读取了几行数据后,另一个事务又增加或删除了数据,在此之后,此事务又去读取数据,发现数据凭空生成或消失,跟幻觉一样,即幻读。 3.数据库并发场景 数据库并发场景有三种,分别为:  读-读:不存在任何问题,也不需要并发控制,因为读数据并不影响其他业务操作。 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读。 写-写:有线程安全问题,可能会存在更新丢失问题,比如库存业务,两个业务查询数据相同,一个库存加一,另一个库存加二,这样双写只能有一方成功,另外一个会被覆盖。 
  • [技术干货] GaussDB(DWS)实时数仓的特点和形态
     GaussDB(DWS)实时数仓的特点主要有: 快:实时数仓时序数据单机入库性能支持每秒10万条数据、每秒60万条流数据持续计算入库,并可线性扩展。 易:支持基于SQL完成复杂流式计算语义定义,简化开发。以Druid监控的一个场景为例,仅用150行SQL代码实现了原有1900行Druid脚本同样的功能。 简:实现了1 = N。在一个平台内,同时实现Flink/Spark Streaming(流数据处理)+Druid(流数据预聚合)+InfluxDB(时序数据处理),简化了开发和运维工作。 省:时序数据经过实时数仓的自适应压缩算法,可达40:1的压缩比,将多维度行列存储优化,数据冷热温自动分区,极大地减少存储空间,节省用户成本。 GaussDB(DWS)的形态主要有: 云数仓:高性价比,支持冷热数据分析,存储、计算弹性伸缩,无限算力、无限容量,并按需、按量计价。适用于“库、仓、市、湖”一体化的融合分析业务,是OLAP分析场景的首选。 IoT数仓:在云数仓基础上,提供高效的时序计算和IoT分析能力,支持实时和历史数据关联,内置时序算子,最高40x压缩。适用于物联网IoT等实时分析场景。 实时数仓:在大规模数据查询和分析能力基础上,提供高并发、高性能、低时延、低成本的事务处理能力。适用于HTAP混合负载场景,“一库两用,生产即分析”,支持单机部署和集群部署两种部署方式。 
  • [技术干货] GaussDB(DWS)模式空间管理介绍与使用
     GaussDB(DWS)存储资源管理上还提供了Schema级别的空间管控能力,一方面可以实现单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和用户、队列解耦,实现了空间管控和权限的分离,降低用户使用空间管控的难度。当一个Schema存在空间限制时,在业务执行过程中,如果该Schema下的表数据之和超过空间限制,则会导致业务报错"out of schemas' perm space limit"。 1.修改Schema空间限额
  • [技术干货] GaussDB(DWS)工作负载计划介绍与使用
     1.工作负载计划适用场景 工作负载计划用于自动化的、周期性的对工作负载队列中的资源进行变更,以便实现灵活的负载管理,适应不同的业务需求;以queue_simple和queue_complex为例,每天的0:00-06:00之间交易量大大降低,开始进行批量分析,此时需要重新配置队列的资源占比。 2.启动工作负载计划 3.导入导出工作负载计划 对于有多套集群或者有镜像测试环境的集群,可以在在一套集群中进行配置和测试后将配置导出,然后再导入生产集群或其他集群使用 
  • [技术干货] GaussDB(DWS)工作负载队列介绍与使用
    1.工作负载队列机制介绍 2.并发管控能力 全局并发量:是指GaussDB(DWS)上允许同时运行的作业数量。 局部并发量:又称队列并发量,是指各个队列上允许运行的最大作业并发量。 短查询并发:简单作业并发数,可以通过短查询开关进行控制,默认不限制。  3.CPU管控 GaussDB的CPU资源管理通过控制组(cgroup)实现,cgroup是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制, 可以对CPU,内存等资源实现精细化的控制。 GaussDB支持两层的cgroup架构,包含Class控制组和Workload控制组,支持四个维度隔离: GaussDB与其他程序之间隔离 后台线程与作业线程之间隔离 多租户之间隔离 作业之间隔离 GaussDB支持CPU核数隔离,通过指定cgroup能够使用的CPU核,实现控制组CPU核的隔离。  4.内存管控 默认GaussDB(DWS)使用的内存占主机Linux系统可用内存的80%。 DN实例最大可用内存:max_process_memoryDN=(RAM*0.8)*0.7/(DN_CNT+1) CN实例最大可用内存:max_process_memoryCN = max_process_memoryDN/2 实例动态内存:max_dynamic _memory = max_process_memory- cstore_used_memory-max_shared_memory-udf_reserved_memory 5.空间管控 集群磁盘空间管控 CM检查数据盘空间占用率,超过阈值后设置集群只读default_transaction_read_only=on 只读情况下仅允许只读作业运行,发生写入操作即报错退出 用户空间管控 支持永久/临时/算子三个维度表空间管理 采用单实例空间管控(CN/DN实例各自管控自身磁盘空间),防止空间倾斜 语法:CREATE/ALTER USER…PERM/TEMP/SPILL SPACE schema空间管控 支持schema空间管理 语法:CREATE/ALTER SCHEMA…PERMSPACE 单DN单SQL空间管控 避免单SQL在单DN上插入数据过大,引发DN数据倾斜 6.异常规则 异常动作: Abort:退出操作。 7.工作负载队列案例 8.创建工作负载队列 9.并发管控测试 1、创建测试用户  2、用户队列绑定  3、模拟耗时队列  10.存储空间管控测试 
  • [技术干货] GaussDB(DWS)工作负载管理介绍
     GaussDB(DWS)是一款具备分析及混合负载能力的分布式数据库,支持x86和Kunpeng硬件架构,支持行存储与列存储,提供GB~PB级数据分析能力、多模分析和实时处理能力,用于数据仓库、数据集市、实时分析、实时决策和混合负载等场景,广泛应用于汽车、制造、零售、物流、互联网、金融、政府、电信等行业分析决策系统。 1.工作负载管理满足的主要业务场景1、数据库多用户间的资源隔离通过资源隔离达成多用户间执行业务不干扰2、集群的负载控制资源(CPU、内存、空间、并发)可控,保证集群不过载2.工作负载管理概览
  • [技术干货] .NET Core程序连接集群
    1.创建控制台应用程序 2.添加相关ODBC包  3.创建实体模型 4.初始化ORM 5.CRUD的使用 5.1 插入数据 5.2 查询数据 5.3 更新数据 5.4 删除数据 
  • [技术干货] 本地客户端Data Studio(windows)连接集群
     1.驱动下载 Data Studio是一款运行在Windows操作系统上的SQL客户端工具,有着丰富的GUI界面,能够管理数据库和数据库对象,编辑、运行、调试SQL脚本,查看执行计划等。在GaussDB(DWS) 管理控制台下载Data Studio软件包,解压后免安装即可使用。 因为是.Net 在window上开发所以下载JDBC驱动,进行安装就好了,完成后安装文件夹如下2.在Windows环境使用ODBC连接参考网站:cid:link_0按官方文档配置好后测试连接 
  • [技术干货] GaussDB(DWS)的部署
    GaussDB(DWS)是一款具备分析及混合负载能力的分布式数据库,支持x86和Kunpeng硬件架构,支持行存储与列存储,提供GB~PB级数据分析能力、多模分析和实时处理能力,用于数据仓库、数据集市、实时分析、实时决策和混合负载等场景,广泛应用于汽车、制造、零售、物流、互联网、金融、政府、电信等行业分析决策系统。  1.购买GaussDB(DWS) 1、华为云官网:http://bbs.huaweicloud.com/ 2、搜索DWS 3、点击立即购买 4、选择购买数据仓库集群 5、进行支付 6、数仓初始化 刚买的数据仓库初始化大概需要半小时 7、进绑定IP地址 点击绑定IP 无公网ip可自行购买  完成后如下,如果不使用记得进行删除哦 至此我们就可以通过外网访问数据库了 。
  • [分享交流] 【分享交流】2024年大家对GaussDB(DWS)有哪些期待?
    GaussDB(DWS)开发者一站式平台,旨在为GaussDB(DWS)的开发者们提供最全面的信息资讯。精品技术文章、最佳实践、直播集锦、热门活动、海量案例、智能机器人,海量资源一站式集成,2024年大家对GaussDB(DWS)有哪些期待?
  • [集群购买/创建] GaussDB(DWS)console界面下载客户端失败(国网OBS)
    【问题版本】 HCS821【问题描述】 国网管控面升级后下载客户端失败,报NoSuchBucket【问题影响】 无【问题根因】 国网部署形态,下载客户端都是使用的总部的桶,下载链接中写入了regionId【定位过程】1、console界面点击下载客户端按钮后,报NoSuchBucket和Thespecified bucket does not exist;2、国网局点都是统一用的总部的桶去下载,需要检查hosts配置是否正确;3、若配置正确,本地ping域名和TelnetIP加443端口测试是否通;注意:(若还是无法下载,可能需要清浏览器缓存、更换浏览器、更换电脑尝试)【规避措施1】(一劳永逸)1、国网部署形态,下载客户端都是使用的总部的桶,下载链接中写入了regionId,需要如下操作后才能下载;2、本地hosts文件配置:(注:IP使用总部的OBS桶IP;域名使用网省带自己regionId的域名)XX.XX.XX.XX obs.{regionId}.sgic.sgcc.com.cn2、本地ping域名和TelnetIP加443端口测试通,就可以登录console界面下载;注意:(若修改后无法下载,需要清浏览器缓存、更换浏览器、更换电脑尝试)【规避措施2】(升级console会更换js文件,只适合短期规避)1、修改Console-Static-01/02两节点上的/opt/cloud/static/private/dws/config.js配置文件中的OBS url对应字段dwsMaintenabceBucketURL的值去掉regionId;具体修改为:"dwsMaintenabceBucketURL": "https://obs.sgic.sgcc.com.cn/dws-tool"2、本地hosts文件配置:(注:IP使用总部的OBS桶IP;域名使用总部不带regionId的域名)XX.XX.XX.XX obs.sgic.sgcc.com.cn3、本地ping域名和TelnetIP加443端口测试通,就可以登录console界面下载;注意:(若修改后无法下载,需要清浏览器缓存、更换浏览器、更换电脑尝试)
  • [存储] GaussDB(DWS)告警:创建表失败
    问题背景:在实际生产环境中,遇到“创建表失败”该怎么排查?原理是什么,通过以下内容我们可以有一定的了解检测原理: cm_agent进程会按照默认周期150s的间隔,在集群的CN实例去创建临时表,如果建表失败6次,则会上报创建表失败的告警。 功能实际作用:创建表的DDL正常执行能准确反馈当前集群并无故障,失败告警能反馈一定程度上集群存在瓶颈或者异常。告警ID:1078919300 告警名称:创建表失败 配置信息: 配置文件:cm.conf abnormal_check_create_table = '{ "_name" : "libac_create_table.so", "check_interval" : "150", "check_count" : "6" }' 参数说明: _name 参数说明:异常检测插件的名字CreateTable插件 check_interval 参数说明:cm_agent进行create table检测的时间间隔。 取值范围:非负整型,单位为秒。 默认取值:150 check_count 参数说明:cm_agent触发create table异常告警的create table连续异常次数的阈值。 取值范围:非负整型。 默认取值:6 日志打印: 日志路径:$GAUSSLOG/cm/cm_agent/ 以下日志信息来源实验室环境(不涉及外部IP和主机名称):2023-02-19 10:32:39.303 tid=44230 Ac-create_table-5001 ERROR: Failed to create tmp table (task failed count 3). 2023-02-19 10:32:39.306 tid=44230 Ac-create_table-5001 ERROR: Failed to run the abnormal check handler: plugin="create_table", interval=150, instanceId=5001. 2023-02-19 10:35:10.914 tid=44230 Ac-create_table-5001 ERROR: Execute sql "BEGIN;SET STATEMENT_TIMEOUT = 120000;CREATE TABLE IF NOT EXISTS sys.cm_agent_abnormal_check_tmp_tablen_5001(a int);DROP TABLE IF EXISTS sys.cm_agent_abnormal_check_tmp_table_on_5001;END;" failed with error message: ERROR: dn_6015_6016: canceling statement due to statement timeout 2023-02-19 10:35:10.915 tid=44230 Ac-create_table-5001 ERROR: Failed to create tmp table (task failed count 4). 2023-02-19 10:35:10.917 tid=44230 Ac-create_table-5001 ERROR: Failed to run the abnormal check handler: plugin="create_table", interval=150, instanceId=5001. 2023-02-19 10:37:41.750 tid=44230 Ac-create_table-5001 ERROR: Execute sql "BEGIN;SET STATEMENT_TIMEOUT = 120000;CREATE TABLE IF NOT EXISTS sys.cm_agent_abnormal_check_tmp_tablen_5001(a int);DROP TABLE IF EXISTS sys.cm_agent_abnormal_check_tmp_table_on_5001;END;" failed with error message: ERROR: dn_6003_6004: canceling statement due to statement timeout 2023-02-19 10:37:41.750 tid=44230 Ac-create_table-5001 ERROR: Failed to create tmp table (task failed count 5). 2023-02-19 10:37:41.753 tid=44230 Ac-create_table-5001 ERROR: Failed to run the abnormal check handler: plugin="create_table", interval=150, instanceId=5001. 2023-02-19 10:40:11.961 tid=44230 Ac-create_table-5001 ERROR: Execute sql "BEGIN;SET STATEMENT_TIMEOUT = 120000;CREATE TABLE IF NOT EXISTS sys.cm_agent_abnormal_check_tmp_tablen_5001(a int);DROP TABLE IF EXISTS sys.cm_agent_abnormal_check_tmp_table_on_5001;END;" failed with error message: ERROR: dn_6003_6004: canceling statement due to statement timeout 2023-02-19 10:40:11.961 tid=44230 Ac-create_table-5001 ERROR: Failed to create tmp table (task failed count 6). 2023-02-19 10:40:11.965 tid=44230 Ac-create_table-5001 LOG: [Alarm Module]Component alarm report succeed! Cmd: /opt/huawei/Bigdata/mppdb/snas_cm_cmd alarm 1078919300 0 00080000000011000800060033FI-MPPDB192.168.253.53test-1Cn5001Failed#to#create#table#on#CN#5001, retCmd: 0. 异常原因: 1、集群压力过载。一般来说cm_agent如果30s内没有收到cn的回复,那么创建表就会失败。常见于集群压力比较大,创建表30s内没有执行完,可搜索cma日志关键字recv timeout expired。 2、实例发生异常。如上日志打印信息dn实例异常。 解决方案: 1、因集群压力导致的告警,需要排查具体过载场景,比如长时间CPU高,需要优化业务,咱们DWS有性能监控工具如CPU内存IO和dbmonitor工具可具体作为排查的手段。 2、因实例长时间故障导致的告警,需要及时排查原因和修复实例故障。 调整参数: 说明 不建议调整参数,不建议调整参数,不建议调整参数。因当前参数容忍度评估在合理范围,如实在需调整请参考命令。 gs_guc reload -Z cm -c "abnormal_check_create_table = '{ \"_name\" : \"libac_create_table.so\", \"check_interval\" : \"180\", \"check_count\" : \"10\" }'"
  • [问题求助] explain analyze 在执行查询时,除了显示查询计划外,还会提供哪些额外的信息?
    explain analyze 在执行查询时,除了显示查询计划外,还会提供哪些额外的信息?
  • [问题求助] 在 dws 中,explain verbose 与 explain 有什么不同?
    在 dws 中,explain verbose 与 explain 有什么不同?
总条数:2039 到第
上滑加载中