文章目录

  • 前言
    • 1.锁的介绍
    • 2.权限的介绍
  • 一、DWS锁机制介绍&排查处理方法
    • 1.华为云数仓DWS的概念
    • 2.事务隔离性问题分析
    • 3.数据库并发场景
    • 4.锁机制
      • 4.1 MVCC介绍
      • 4.2 MVCC+锁的由来
      • 4.3 锁的原理
      • 4.4 表级锁的介绍
      • 4.4 锁机制的处理方法
        • 4.4.1 判断是否等待
        • 4.4.2 找到持锁线程
        • 4.4.3 终止异常语句
        • 4.4.4 业务开发建议
  • 二、DWS权限管理机制
    • 1.系统权限与对象权限
    • 2.用户与角色
      • 2.1 用户与角色的概念
      • 2.2 预置角色
      • 2.3 权限查看
      • 2.4 常见场景
      • 2.5 报错处理
        • 2.5.1 问题一
        • 2.5.1 问题二
      • 2.6 小结
  • 总结
    • 1.开发者论坛
    • 2.GaussDB(DWS)智能客服
      • 2.1 PC端使用
      • 2.2 微信公众号使用

前言

1.锁的介绍

锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。innodb存储引擎会在行级别上对表数据上锁,这固然不错,不过innodb存储引擎也会在数据库内部其他多个地方使用锁,从而允许对多种不同资源提供并发访问。操作缓存池的LRU列表,删除,添加,移动LRU列表中的元素,为了保证一致性,必须有锁的介入,数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。

2.权限的介绍

为了保证数据库的安全,数据库的管理员会对需要操作数据库的人员分配账号与可操作的权限范围,让其仅能够在自己权限范围内操作。

本文讲解的华为云之锁与权限为您的数仓保驾护航主要从以下两方面介绍

  • DWS锁机制介绍&排查处理方法
  • DWS权限管理机制

一、DWS锁机制介绍&排查处理方法

1.华为云数仓DWS的概念

数据仓库服务,Data Warehouse Service,简称GaussDB(DWS),是一种基于公有云基础架构和平台的在线数据处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务。GaussDB(DWS)是基于华为云原生融合数据仓库GaussDB产品的服务,兼容标准ANSI SQL 99和SQL 2003,为各行业PB级海量大数据分析提供有竞争力的解决方案。

2.事务隔离性问题分析

事务隔离性问题:如果不考虑事务的隔离性,会出现以下问题:

  • 脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。
  • 不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update的数据。
  • 幻读:指一个线程中的事务读取到了另外一个线程中提交的insert的数据。在一次的事务操作中,先读取了几行数据后,另一个事务又增加或删除了数据,在此之后,此事务又去读取数据,发现数据凭空生成或消失,跟幻觉一样,即幻读。

3.数据库并发场景

数据库并发场景有三种,分别为:

  • 读-读:不存在任何问题,也不需要并发控制,因为读数据并不影响其他业务操作。
  • 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读。
  • 写-写:有线程安全问题,可能会存在更新丢失问题,比如库存业务,两个业务查询数据相同,一个库存加一,另一个库存加二,这样双写只能有一方成功,另外一个会被覆盖。

4.锁机制

4.1 MVCC介绍

目前较为常见的三种并发控制机制:

  • 悲观锁:当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观锁。
  • 乐观锁:乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。
  • 多版本并发控制(MVCC):MVCC会保存某个时间点上的数据快照。这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。

4.2 MVCC+锁的由来

4.3 锁的原理

  • 自旋锁(Spin Lock):是一种和硬件结合的互斥锁,借用了硬件提供的原子操作的原语来对一些共享变量进行封锁,通常适用于临界区比较小的情况。特点是:封锁时间很短、无死锁检测机制和等待队列、事务结束时不会自动释放SpinLock。
  • 轻量锁(Lightweight Lock):负责保护共享内存中的数据结构,有共享和排他两种模式,类似Oracle中的latch。特点是:封锁时间较短、无死锁检测机制、有等待队列、事务结束时会自动释放。
  • 常规锁(Regular Lock):就是通常说的对数据库对象的锁。按照锁粒度,可以分为表锁、页锁、行锁等;按照等级,pg锁一共有8个等级。特点是:封锁时间可以很长、有死锁检测机制和等待队列、事务结束时会自动释放。

DWS最常见的锁是Relation级别的常规锁(表级锁),业务在并发设计不合理或调度混乱时容易出现等锁报错或者由于等锁导致语句执行慢的问题。

4.4 表级锁的介绍

锁级别 名称 用途 冲突关系
1 AccessShareLock SELECT 8
2 RowShareLock SELECT FOR UPDATE/FOR SHARE 7/8
3 RowExclusiveLock INSERT/UPDATE/DELETE/ANALYZE 5/6/7/8
4 ShareUpdateExclusiveLock VACUUM (非FULL) 4/5/6/7/8
5 ShareLock CREATE INDEX 3/4/6/7/8
6 ShareRowExclusiveLock 一一 3/4/6/7/8
7 ExclusiveLock 一一 2/3/4/6/7/8
8 AccessExclusiveLock DROP/ALTER/REINDEX/NACUUM FULL 1/2/3/4/6/7/8

表级锁要等到事务结束之后释放,当两个事务产生锁冲突时,未拿到锁的线程会等待,超过lockwait_timeout参数设置的时间后报错。

表级锁的特点之一是有等待队列。 因此当出现等锁事件时,锁等待队列可能会放大这种等锁情况带来的影响,因此要尽量避免互斥语句的并发操作。

4.4 锁机制的处理方法

锁机制的处理方法的流程主要有:判断是否等待、找到持锁线程、终止异常语句。

4.4.1 判断是否等待

判断是否等待的处理方法主要有以下三种:

  • 业务语句报错:Lock wait timeout
  • 查看活跃视图pgxc_stat_activity的waiting字段,如果为t,表示在cn上等锁
  • 通过等待视图pgxc_thread_wait_status中的wait_status字段判断,如果为acquire lock且wait_event为relation,说明在等锁

4.4.2 找到持锁线程

判断是否等待的处理方法主要有以下三种:

  • 缩短报错时间,在语句执行前设置:
set max_query_retry_times=0;
set lockwait_timeout= 5;
  • 通过pgxc_lock_conflicts查看冲突关系
select * from pgxc_lock_conflicts where relname = 'test';
  • 通过pg_locks查看(https://bbs.huaweicloud.com/blogs/228809)到对应实例节点上查询pg_locks找到持锁与的pid

4.4.3 终止异常语句

Select pg_terminate_backend(pid);
Select pg_cancel_backend(pid);

4.4.4 业务开发建议

  • 合理安排调度任务,避免在高峰期对同一张表alter或vacuum full等
  • 执行时间异常的语句及时处理,或配置异常规则避免语句执行过长
  • 出现等锁报错不要慌,根据报错信息和视图找出“元凶”

二、DWS权限管理机制

1.系统权限与对象权限

1、系统权限
系统权限又称为用户属性,包括:

  • SYSADMIN
  • CREATEDB
  • CREATEROLE
  • AUDITADMIN
  • LOGIN

除SYSADMIN外,不能被GRANT,只能通过ALTER USER的方式修改。

2、对象权限

  • 数据库对象:
CREATE/CONNECT/TEMP
  • 模式对象
CREATE/USAGE/ALTER/DROP
  • 表对象
SELECT/INSERT/UPDATE......
  • 其他对象(函数、视图等)

可以通过GRANT/REVOKE赋予和回收

TIPS:系统权限无法通过role和user的权限被继承。

2.用户与角色

2.1 用户与角色的概念

1、用户
用户是什么

  • 使用数据库系统服务的个体
  • 职责单一,往往附属于某个组织或部门
  • 创建用户后会创建同名schema

用户可以做什么?

  • 使用工具连接数据库
  • 访问数据库对象
  • 执行sq|语句

2、角色

  • 按照责任划分具有不同权限的角色
  • 角色用来作为权限集合的载体
  • 代表一个用户或一组用户的行为约束

3、用户与角色

  • 用户可以被赋予一个或多个角色
  • 用户是实体,角色是行为
  • DWS中,用户和角色使用相同的方式操作

2.2 预置角色

  • gs_role_read_all_stats:是否有权限访问pgxc视图
  • gs_role_signal_backend:是否有权限使用信号函数(pg_terminate_backend)
  • gs_role_analyze_any:是否有权限对任意表做analyze
  • gs_role_vacuum__any:是否有权限对任意表做vacuum

预置角色无法修改,无法删除,无法登录,仅供运维授权使用。

2.3 权限查看

查看系统权限:pg_roles
查看对象权限(以表为例):pg_class.relacl

查询的回显结果为以下形式:

rolename=xxxx/yyyy --赋予一个角色的权限
=xXxx/yyyy --赋予public的权限

xxxx表示赋予的权限,yy表示授予该权限的角色。

2.4 常见场景

对某个schema下的所有表赋予查询权限

GRANT select ON ALL TABLESIN SCHEMA schema_1 TO role_1;

对某个schema下未来创建的表赋权

ALTER DEFAULT PRIVILEGES FOR USER tom IN SCHEMAschema1GRANT select ON TABLES TO jerry;

创建只读用户

--创建只读角色
GRANT usage ON SCHEMA schema_2 TO role_readonly;
GRANT select ON ALL TABLESIN SCHEMA schema2 TO role_readonly;
ALTER DEFAULT PRIVILEGES FOR USER tom IN SCHEMA schema2 GRANT select ON TABLES TO role_readonly;
--创建只读用户
GRANT role_readonly TO user_readonly1, user_readonly2;


将模式的访问权限赋予指定的用户或角色

2.5 报错处理

2.5.1 问题一


将表或视图的访问权限赋予指定的用户或角色。不允许对表分区进行GRANT操作,对表分区进行GRANT操作会引起告警。

2.5.1 问题二


将角色的权限赋予其他用户或角色的语法。

2.6 小结

  • 权限分为系统权限和对象权限,对象权限可以根据角色管理
  • DWS有几个默认角色可以供授权使用
  • 根据报错的具体对象类型,合理配置用户权限

总结

1.开发者论坛

开发者论坛链接:https://bbs.huaweicloud.com/forum/forumdisplay-fid-598.html

2.GaussDB(DWS)智能客服

2.1 PC端使用

GaussDB(DWS)智能客服PC端:https://console.huaweicloud.com/smartadvisor/

搜索DWS

选择数据仓库服务DWS

输入锁就会出现智能提示

点击DWS-一键式锁等待和分布式死锁检测进入文章就会出现相关解决方案

2.2 微信公众号使用

使用方式1:

1.打开GaussDB(DWS)公众号对话框;
2.输入需要查询的问题,如:锁、创建集群、性能问题处理,点击对应链接查看相关内容。

使用方式2:
1.点击GaussDB(DWS)公众号目录栏-联系我们一智能客服,扫码进入提问;
2.选择大数据一数据仓库服务,即可开启提问;
3.输入需要查询的问题,如:数据怎么导入DWS,点击查看全部查看相关内容。


本文整理自华为云社区【内容共创】活动第21期。

查看活动详情:https://bbs.huaweicloud.com/blogs/380503

相关任务详情:任务2.理论+实操,轻松解决云数仓常见问题 一招鲜,锁与权限为您的数仓保驾护航

【云驻共创】华为云之锁与权限为您的数仓保驾护航相关推荐

  1. 【云驻共创】云原生应用架构之企业核心业务未来架构演进路线及华为云方案

    文章目录 前言 一.企业核心业务架构演进 1.企业核心业务应用架构和集成架构发展历程 1.1 企业核心业务应用架构发展历程 1.1.1 单体架构 1.1.1.1 特点 1.1.1.2 优点 1.1.1 ...

  2. 【云驻共创】华为云AI之用Python定制我的《本草纲目女孩》

    文章目录 前言 一.华为云ModelArts-Notebook介绍 1.华为云ModelArts-Notebook 1.1 Jupyter Notebook是什么 1.2 JupyterLab是什么 ...

  3. 【云驻共创】华为云IoT数据分析流程实操

    文章目录 一.数据分析的发展 1.数据分析概念 1.1 数据分析的背景 1.2 数据分析的目的 1.3数据分析的定义 2.物联网数据分析概念 3.华为云IoT数据分析优势 二.华为云IoT数据分析服务 ...

  4. 【云驻共创】华为云HCIA-IoT V2.5培训系列内容之物联网概览

    文章目录 前言 一.物联网发展简史与概述 1.物联网的发展简史 1.1 物联网的起源 1.2 物联网的发展 1.3 物联网大事件 1.3.1 NB-IOT标准的引进 1.3.2 工信部宣布5G商用 1 ...

  5. 【云驻共创】华为云IoTDA服务下的设备管理流程实操

    文章目录 一.当今社会发展趋势 1.社会背景 2.什么是物联网(IoT) 3.什么是华为云(IoTDA) 二.为什么需要设备发放 1.传统模式-存在问题 2.设备发放模式-问题改进 三.设备接入服务的 ...

  6. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

    文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...

  7. 【云驻共创】华为云AI之《情感专家》在线分析影评情感基调

    文章目录 前言 一.Word Embedding 二.BERT原理 1.Pre-training预训练 2.Deep Bidirectional Transformers 3.BERT中的双向表示 4 ...

  8. 【云驻共创】华为云云原生之Istio控制面架构深度剖析

    文章目录 前言 一.Istio的基本概念 1.Istio诞生背景 2.Istio的定义 3.Istio优势 二.Istio整体架构及工作原理 1.Istio整体架构 1.1 控制面Istiod 1.1 ...

  9. 【华为云-云驻共创】Docker是什么?有哪些应用场景?

    文章目录 前言 容器技术的起源 什么是容器? 容器与虚拟机 为什么需要容器? 容器的优势 对于开发人员 - Build Once, Run Anywhere 对于运维人员 - Configure On ...

最新文章

  1. 清华滴滴:出行数据透视中国城市空间发展报告!
  2. Linux下的摄影后期处理软件
  3. CF1012F Passports
  4. 分布式服务框架 dubbo/dubbox 入门示例
  5. WPF 的拖拽操作(DragDrop)
  6. 开始学习3年前的东西——MCMS
  7. #6229. 这是一道简单的数学题(反演 + 杜教筛)
  8. 故障诊断 | 存储Cache丢失导致数据库无法open的案例分享
  9. _mount_vendor
  10. 《人月神话》读后感一
  11. 【MVC】使用FormCollection获取Form表单数据
  12. phpstud使用教程_phpStudy2017使用教程,自定义php版本功能上线!
  13. linux下别名alias的设置
  14. BNU29140 Taikotaiko(概率)
  15. python- 小猫钓鱼纸牌游戏
  16. Ubuntu下使用外置USB无线网卡
  17. 面试官都会问些什么问题?
  18. 怎么使用关键词获取视频列表 API
  19. Excel从数据中挑出几个数值使其和为某一固定值
  20. 计算机辅助翻译技术的好处,计算机辅助翻译原理与实践

热门文章

  1. 几何画板绘制三棱锥的教程
  2. linux系统:can't create transaction lock on /var/lib/rpm/.rpm.lock 错误
  3. 查看进程名称 linux,在Linux系统服务器按名称查找进程的命令
  4. Word 2003 长篇文档排版技巧(一)
  5. SIFT算法基础数学
  6. 基于MATLAB的静电场模拟系统
  7. 大数据全栈技术与商用平台架构设计之路
  8. VCam 能做什么?
  9. 【课程表小程序源码】增加今日课表功能|开源代码
  10. ns2利用god获取邻居列表