
cuug-北京神脑咨询,专注于oracle dba就业培训和ocp、ocm高端认证培训,甲骨文授权合作wdp中心,oracle评选的金牌名师亲自讲课,ocp讨论3组:101-5267-481,验证:ocp
能力说明:
具备数据库基础知识,了解数据库的分类,具备安装MySQL数据库的能力,掌握MySQL数据类型知识,基本了解常用SQL语句,对阿里云数据库产品有基本认知。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第23讲:缓冲区管理器内容1 : 缓冲区概述内容2 : 缓冲区管理器结构内容3 : 缓冲区管理器锁内容4 : 缓冲区管理器如何工作内容5 : 环形缓冲区内容6 : 脏块写缓冲区概述· 缓冲区结构(存放各种类型的数据块) 数据文件页—表和索引块 可用空间地图块 可见性地图块 缓冲区数组索引--buffer_ids· Buffer Tag结构 RelFileNode (分别为表对象oid、数据库oid、表空间oid) 页面的fork number (分别为0、1、2) 页面number 示例: 缓冲区标记{(16821、16384、37721)、0、7} 1、标识第七个块中的页 2、其关系的OID和fork号分别为37721和0(0即为存放表数据的文件) 3、该块存放在OID为16384的数据库中,表空间的OID为16821· Backend进程读数据块到缓冲区· 写脏块 下面进程工作时会导致脏块写: · Checkpointer · background writer缓冲区管理器结构· 管理器结构· 第一层(Buffer Table) 在这一层内置的hash函数将buffer_tags映射到插槽,插槽中记录了buffer_tags和描述层的buffer_id的映射关系。· 第二层(Buffer Descriptor) 描述层包含了很多重要的信息,包括buffer_tag与缓冲池插槽id的映射关系,访问次数统计,锁等信息。 · Tag · buffer_id · refcount (被进程访问过一次加一,被时钟扫描过后减一,为零时可用) · usage_count · context_lock and io_in_progress_lock · Flags dirty bit valid bit io_in_progress bit · freeNext· Buffer Descriptors Layer (Loading the first page) 先请求一个缓冲区空间,buffer table层把描述层的buffer_id与buffer_tag进行映射;然后在描述层把buffer_tag与缓冲区id进行映射;最后把数据块读到相应的缓冲区槽中。· 第三层(Buffer Pool) 缓冲池是存储数据文件页(如表和索引)的简单数组。缓冲池数组的索引称为buffer_ids。 缓冲池被分割成大小为8 KB的插槽,等于页面大小。因此,每个槽可以存储整个页面。缓冲区管理器锁· Buffer Manager Locks 缓冲区管理器为许多不同的目的使用许多锁 锁是缓冲区管理器同步机制的一部分;它们与任何SQL语句和SQL选项都不相关· Buffer Table 层的锁 BufMappingLock保护整个缓冲表的数据完整性。它是一个轻量锁,可以在共享和独占模式下使用。在缓冲区表中搜索条目时,后端进程保存共享的BufMappingLock。当插入或删除条目时,后端进程持有独占锁。· Buffer Descriptor 层锁 每个缓冲区描述符使用两个轻量级锁 · content_lock · io_in_progress_lock· content_lockcontent_lock是一种典型的强制访问限制的锁。它可以用于共享和独占模式。当执行下列操作之一时,将获取独占内容锁:· dml操作· 物理删除元组或压缩存储页上的可用空间(vacuum和HOT处理)· 冻结存储页中的元组· io_in_progress_lock io_in_progress锁用于等待缓冲区上的I/O完成。当PostgreSQL进程从存储器加载/写入页面数据时,该进程在访问存储器时持有相应描述符的独占io_in_progress锁。· spinlock 下面显示如何固定缓冲区描述符: 1、获取缓冲区描述符的自旋锁。 2、将其refcount和usage_count的值增加1。 3、松开旋转锁。 下面显示如何将脏位设置为“1”: 1、获取缓冲区描述符的自旋锁。 2、使用按位操作将脏位设置为“1”。 3、松开旋转锁。缓冲区管理器如何工作· 访问已存放在缓冲区中的数据块· 加载数据块到空的缓冲池插槽· 加载数据块到一个需要释放的缓冲池插槽· 缓冲区块替换机制 替换页面算法 · 时钟扫描(8.1开始及以后的版本) · LRU算法(8.1以前的版本)· 时钟扫描算法 缓冲区描述符显示为蓝色或青色框,框中的数字显示每个描述符的使用计数,每扫描一次则减一,缓冲区每被访问过一次则加一。Ring Buffer· Ring Buffer· Bulk-reading 需要大块的缓冲池时,如果扫描缓冲池时其大小超过(共享缓冲区/4)四分之一的空间时,还没有找到足够的缓冲池,则分配256KB环形缓冲区。· Bulk-writing 执行下面列出的SQL命令时。在这种情况下,环缓冲区大小为16MB。 COPY FROM command. CREATE TABLE AS command. CREATE MATERIALIZED VIEW or REFRESH MATERIALIZED VIEW command. ALTER TABLE command.· Vacuum-processing 当自动真空机进行真空处理时。在这种情况下,环缓冲区大小为256 KB。脏块写· Flushing Dirty Pages 检查点进程和后台写入进程将脏页刷新到存储区,检查点与后台写进程分离。 检查点进程将检查点记录写入WAL段文件,并在检查点启动时刷新脏页。 后台写进程的作用是减少检查点密集写的影响。后台写进程持续一点一点地刷新脏页,对数据库活动的影响最小。 默认情况下,后台写入程序每200毫秒唤醒一次(由bgwriter_delay定义),并最多刷新为100页(由bgwriter_lru_maxpages 定义)共享池缓冲区参数设置· 共享缓冲区相关参数 shared_buffers参数设置 show shared_buffers; Alter system set shared_buffers=256M; wal_buffers参数设置 show wal_buffers; Alter system set wal_buffers =4M; effective_cache_size 参数设置 show effective_cache_size; 提供可用于磁盘高速缓存的内存量的估计值。它只是一个建议值,而不是确切分配的内存或缓存大小。它不会实际分配内存,而是会告知优化器内核中可用的缓存量。在一个索引的代价估计中,更高的数值会使得索引扫描更可能被使用,更低的数值会使得顺序扫描更可能被使用。在设置这个参数时,还应该考虑PostgreSQL的共享缓冲区以及将被用于PostgreSQL数据文件的内核磁盘缓冲区。默认值是4GB。以上就是【PostgreSQL从小白到专家】第23讲 - 缓冲区管理 的内容,欢迎一起探讨交流钉钉交流群:35,82,24,60,往期视频及文档内容联系CUUG
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第22讲:CLOG作用与管理内容1: PostgreSQL CLOG概述内容2: CLOG作用与管理内容3: 诊断当前用到的CLOG块内容4: 删除不需要的CLOG文件CLOG概述CLOG用来记录事务号的状态,主要是用来判断行的可见性。每个事务状态占用两个bit位。事务的状态有4种:IN PROGRESS,COMMITTED,ABORTED和SUB_COMMITTED。CLOG由一个或多个8KB页组成。CLOG在逻辑上形成一个数组,数组的每个元素对应事务ID号和事务状态。一个事务占用2个bit位,一个字节可以存放4个事务状态,一个页块可以存放8192*4=32768个事务状态。当数据库库启动时,这些文件会被加载到内存中。CLOG的信息同样会被记录到wal日志中,当数据库异常中断时,CLOG的信息会从wal日志还原。CLOG存放在缓存中,当checkpoint时开始刷新到CLOG文件中。当数据库库关闭库后,CLOG会被写入到$PGDATA/pg_xact子目录中,文件命名为0000,0001,00002......,单个文件最大为256K。Commit Log· CLOG工作方式· CLOG如何维护数据库正常关闭或者检查点发生时,clog数据写入pg_xact目录下的文件中命名习惯:0000 0001 ……数据库启动时从pg_xact文件中加载数据由Vacuum 进程定期处理诊断当前用到的CLOG块· 计算当前使用的CLOG数据块位置一个事务占用2个bit位,一个字节可以存放4个事务状态,一个页块可以存放8192*4=32768个事务状态。1、查看当前的TXID号SELECT txid_current();txid_current--------------6232、计算记录在哪个CLOG块中select 623/(8192*4) block;block-------0删除不需要的CLOG文件· 删除CLOG文件当发生急性冻结时会更新pg_database.datfrozenxid的值,此时,如果某些CLOG文件不包含包含最小pg_database.datfrozenxid以及之前的信息,会尝试删除不必要的clog文件。因为这些CLOG文件中记录的事务所修改的行已经被冻结,那么在进行行可见性规则判断时就不需要获得该事务的状态。以上就是【PostgreSQL从小白到专家】第22讲 - "CLOG作用与管理" 的内容,欢迎一起探讨交流,往期视频及文档,联系CUUG
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第21讲:行可见性规则内容1:PostgreSQL事务id介绍内容2:PostgreSQL DML操作原理内容3:事务快照在可见性规则中的作用内容4:T_xmin状态对于可见性规则判断的重要度内容5:常见的行可见性规则的介绍内容6:实现闪回功能TXID介绍· 事务id(txid)当一个事务开始时,PostgreSQL中的事务管理系统会为该事务分配一个唯一标识符,即事务ID(txid).PostgreSQL中的txid被定义为一个32位的无符号整数,也就是说,它能记录大约42亿个事务。通常txid对我们是透明的,但是我们可以利用PostgreSQL内部的函数来获取当前事务的txid。事务ID用来标识一个事务的先后顺序,该顺序决定了锁申请的优先权,已经访问一张表时对行的可见性规则判断。testdb=# SELECT txid_current();txid_current--------------100(1 row)Tuples Structure· 元组(行)结构t_xmin保存插入此元组的事务的txid,它的状态是行可见性判断关键的依据。t_xmax保存删除或更新此元组的事务的txid。如果此元组未被删除或更新,则t_xmax设置为0,这意味着无效,它的状态也是行可见性判断关键的依据。DML操作原理· Insertion· Deletion· Update执行第一个更新命令时,通过将txid 100设置为t_xmax,逻辑上删除Tuple_1,然后插入Tuple_2。然后,将元组1的t_ctid重写为指向元组2。当执行第二个UPDATE命令时,与第一个UPDATE命令一样,Tuple_2在逻辑上被删除,Tuple_3被插入。事务状态· 四种事务状态IN_PROGRESSCOMMITTEDABORTEDSUB_COMMITTEDCommit Log· 事务状态记录方式事务快照· 事务快照概述事务快照是一个数据集,用于存储有关单个事务在某个时间点上是否所有事务都处于活动状态的信息。在这里,活动事务表示它正在进行或尚未启动。txid_current_snapshot的文本表示为“xmin:xmax:xip_list”,组件描述如下:Xmin:最早仍在活动的txid。所有以前的事务要么提交并可见,要么回滚并停止。Xmax:第一个尚未分配的txid。截至快照时,所有大于或等于此值的txid尚未启动,此不可见。xip_list:快照时的活动txid。该列表仅包含xmin和xmax之间的活动txid。testdb=# SELECT txid_current_snapshot();txid_current_snapshot-----------------------100:104:100,102(1 row)例如,在快照'100:104:100,102'中,xmin是'100',xmax是'104',xip_list是'100,102'。可见性规则世界观· 事务快照在可见性规则中的意义富有哲理性的判断规则:过去发生过的为可见,将来未发生的为不可见。行可见性判断重要因素· 可见性判断的重要因素可见性检查规则是一组规则,关键的判断因素有:t_xmin、t_xmax、clog和获取的事务快照确定每个元组是否可见。T_xmin的三种状态ABORTED、IN_PROGRESS、COMMITTED是判断的第一前提条件。ABORTED状态· t_xmin =ABORTEDt_xmin =ABORTED,则判断此行不可见/* t_xmin status = ABORTED */Rule 1: IF t_xmin status is 'ABORTED' THENRETURN 'Invisible'END IFIN_PROGRESS状态· t_xmin=IN_PROGRESSt_xmin=IN_PROGRESS,当前事务可见,其它事务不可见/* t_xmin status = IN_PROGRESS */IF t_xmin status is 'IN_PROGRESS' THENIF t_xmin = current_txid THENRule 2: IF t_xmax = INVALID THENRETURN 'Visible'Rule 3: ELSE /* this tuple has been deleted or updated by the current transaction itself. */RETURN 'Invisible'END IFRule 4: ELSE /* t_xmin ≠ current_txid */RETURN 'Invisible'END IFEND IFCOMMITTED状态· t_xmin=COMMITTEDt_xmin=COMMITTED,此状态判断时还得看t_xmax的值,如果t_xmax的值为0,则此行可见;如果不为0,那么判断时还得看t_xmax的状态是当前事务还是非当前事务,判断规则就比较复杂。/* t_xmin status = COMMITTED */IF t_xmin status is 'COMMITTED' THENRule 5: IF t_xmin is active in the obtained transaction snapshot THENRETURN 'Invisible'Rule 6: ELSE IF t_xmax = INVALID OR status of t_xmax is 'ABORTED' THENRETURN 'Visible'ELSE IF t_xmax status is 'IN_PROGRESS' THENRule 7: IF t_xmax = current_txid THENRETURN 'Invisible'Rule 8: ELSE /* t_xmax ≠ current_txid */RETURN 'Visible'END IFELSE IF t_xmax status is 'COMMITTED' THENRule 9: IF t_xmax is active in the obtained transaction snapshot THENRETURN 'Visible'Rule 10: ELSERETURN 'Invisible'END IFEND IFEND IF可见性判断概述· 可见性判断示例R6判断规则· T3 时根据规则6进行判断Rule6(Tuple_1)⇒Status(t_xmin:199) = COMMITTED ∧ t_xmax = INVALID⇒VisibleT_xmin=commit,并且t_xman=0,该行对于所有的事务均可见R7与R2判断规则· T5时事务ID为200的根据规则7、2进行判断Rule7(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = IN_PROGRESS ∧ t_xmax:200 = current_txid:200 ⇒ InvisibleRule2(Tuple_2): Status(t_xmin:200) = IN_PROGRESS ∧ t_xmin:200 = current_txid:200 ∧ t_xmax = INVAILD⇒ Visible此时块中包含两行数据,对于事务id=200来说,它的判断规则是:第一行数据根据规则7判断,t_xmin=commit,同时(t_xmax=200)= IN_PROGRESS,并且t_xmax:200为当前事务id,则第一行判断为不可见。第二行根据规则2判断, t_xmin=commit,同时(t_xmax=200)为当前事务id,并且t_xmax为无效,则该行可见。testdb=# -- txid 200testdb=# SELECT * FROM tbl;name------HydeR8与R4判断规则· T5时事务ID为201的根据规则8、4进行判断Rule8(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = IN_PROGRESS ∧ t_xmax:200 ≠ current_txid:201 ⇒ VisibleRule4(Tuple_2): Status(t_xmin:200) = IN_PROGRESS ∧ t_xmin:200 ≠ current_txid:201 ⇒ Invisible此时块中包含两行数据,对于事务id=201来说,它的判断规则是:第一行数据根据规则8判断,t_xmin=commit,同时(t_xmax=200)= IN_PROGRESS,并且t_xmax:200不是当前事务id,则第一行判断为可见。第二行根据规则2判断, (t_xmax=200)状态为IN_PROGRESS,同时t_xmin不是当前事务id,则该行不可见。testdb=# -- txid 201testdb=# SELECT * FROM tbl;name--------JekyllR10与R6判断规则· T7时事务ID为201的根据规则10、6进行判断(READ COMMITED)Rule10(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = COMMITTED ∧ Snapshot(t_xmax:200) ≠ active ⇒ InvisibleRule6(Tuple_2): Status(t_xmin:200) = COMMITTED ∧ t_xmax = INVALID ⇒ VisibleT7时事务id为200的提交了事务,对于事务id=201来说,它的判断规则是:第一行根据规则10判断,t_xmin=commit,同时(t_xmax=200)= COMMITTED ,并且Snapshot(t_xmax:200) 状态为非活动,则第一行判断为不可见。第二行根据规则6判断, (t_xmax=200)状态为COMMITTED ,同时t_xmax为无效,则该行可见。testdb=# -- txid 201 (READ COMMITTED)testdb=# SELECT * FROM tbl;name------HydeR9与R5判断规则· T7时事务ID为201的根据规则9、5进行判断(REPEATABLE READ)Rule9(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = COMMITTED ∧ Snapshot(t_xmax:200) = active ⇒ VisibleRule5(Tuple_2): Status(t_xmin:200) = COMMITTED ∧ Snapshot(t_xmin:200) = active ⇒Invisible如果事务的隔离级别是可重复读,那么其判断规则就会发生变化,T7时事务id为200的提交了事务,对于事务id=201来说,它的判断规则是:第一行根据规则9判断,t_xmin=commit,同时(t_xmax=200)= COMMITTED ,并且Snapshot(t_xmax:200) 状态为活动,则第一行判断为可见。第二行根据规则5判断, t_xmax=200状态为COMMITTED , Snapshot(t_xmin:200) 为活动,则该行不可见,通过该规则,不会导致幻读发生。testdb=# -- txid 201 (REPEATABLE READ)testdb=# SELECT * FROM tbl;name--------Jekyll提高判断效率· Hint Bits由于进行行可见性判断时都要查看存储在clog中t_xmin和t_xmax的状态,为了解决对clog频繁访问这个问题,PostgreSQL使用了提示位,如下所示:#define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */#define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */#define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */#define HEAP_XMAX_INVALID 0x0800 /* t_xmax invalid/aborted */实现闪回功能PostgreSQL由于数据的更新时新旧数据都保留在数据块中,那么如果要实现像Oracle一样的闪回查询功能应该是可以实现的,只要在判断时先判断该查询是否是闪回查询,然后再根据一个针对闪回查询的可见性规则判断就可以实现。如果实现闪回查询,那么涉及到Vacuum操作时需要考虑更多的因素,需要有一个参数来设置块中被删除的行保留的时间长度。以上就是【PostgreSQL从小白到专家】第21讲 - 行可见性规则 的内容,欢迎一起探讨交流,往期视频及文档,联系CUUG
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第20讲:事务概述与隔离级别内容1:ACID四大特性内容2:PostgreSQL事务隔离级别内容3:MVCC介绍内容4:Clog与事务状态内容5:事务快照内容6:可重复读隔离级别特点内容7:读提交隔离级别特点内容8:可串行化隔离级别特点ACID概述· ACID四大特性:--> Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。--> Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,这包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。--> Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。--> Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。PostgreSQL支持的事务隔离级别· 下表描述了PostgreSQL实现的事务隔离级别MVCC概述· 事务id(txid)并发控制是一种在数据库中并发运行多个事务时保持一致性和隔离性的机制,这是ACID的两个属性。 并发控制技术: --> 多版本并发控制(MVCC) --> 严格的两阶段锁(S2PL) --> 乐观并发控制(OCC)· MVCC特点 每次写操作都会创建数据项的新版本,同时保留旧版本。当事务读取一个数据项时,系统会选择其中一个版本以确保单个事务的隔离。MVCC的主要优点是“读不阻止写,写不阻止读,相反,例如,基于S2PL的系统必须在写卡器写入项时阻止读卡器,因为写卡器获取项的独占锁。PostgreSQL和一些rdbms使用MVCC的一个变体,称为快照隔离(Snapshot Isolation,SI)。MVCC实现对比· 事务id(txid)PostgreSQL通过应用可见性检查规则来选择项目的适当版本 由于PostgreSQL数据块中包含了未删除和已删除的行的数据,所以在读取数据块中行的时候,需要一套规则来判断哪些行能够被哪些事务所看得见,我们成为行可见性规则Oracle使用回滚段来选择项目的适当版本 Oracle专门创建了一个回滚表空间,用来存放修改前的行的数据,而表的数据块中没有包含删除行的数据,所以不需要行可见性规则来判断。事务状态· Transaction Status 四种事务状态: --> IN_PROGRESS --> COMMITTED --> ABORTED --> SUB_COMMITTEDCommit Log· Clog 工作原理事务快照· 内置函数txid_current_snapshot及其文本表示格式 testdb=# SELECT txid_current_snapshot(); txid_current_snapshot ----------------------- 100:104:100,102 (1 row)· txid_current_snapshot的文本表示为“xmin:xmax:xip_list”,组件描述如下 Xmin:最早仍在活动的txid。所有以前的事务要么提交并可见,要么回滚并停止。 Xmax:第一个尚未分配的txid。截至快照时,所有大于或等于此值的txid尚未启动,因此不可见。 xip_list:快照时的活动txid。该列表仅包含xmin和xmax之间的活动txid。例如,在快照'100:104:100,102'中,xmin是'100',xmax是'104',xip_list是'100,102'。· Examples of transaction snapshot representation事务管理器· 不同隔离级别的事务快照状态并发UPDATE时防止更新的数据丢失· 并发UPDATE操作,隔离级别不同如何保护已修改的数据不丢失 1)如果A事务回滚,则b事务能够更新成功 2)B事务如果查询了表,则再次更新时失败,如果没有,则会更新成功防止更新的数据丢失· 读提交事务隔离级别(事务A和B同时修改同一行)· 可重复读事务隔离级别(事务A和B同时修改同一行)· 可重复读事务隔离级别(事务B在提交前执行了查询)· 可重复读事务隔离级别(事务B在提交前没有执行查询)可串行化快照隔离· SSI(可串行化快照隔离)实施的基本策略 写入倾斜计划及其优先级图· 在PostgreSQL中实现SSI SIREAD locks:SIREAD锁在内部称为谓词锁,三个部分组成,由一对对象和(虚拟)txid 组成。 rw-conflicts:rw-conflicts是SIREAD锁的三个组成部分中的一个和读写SIREAD锁的两个txid· SSI 怎样造成的 事务提交失败的原因是要保护事务A修改的结果,因为事务B是在可串行化事务隔离级别,所以无法看到事务A修改后的结果· 其它造成的场景 注意事务提交的不同顺序· 假阳性可串行化快照隔离异常 两个事务分别查询和更新各自的行,所以不会影响,都能够提交成功。· 假阳性可串行化快照隔离异常(1) – Using sequential scan 表没有索引,导致顺序扫描,两个事务操作时发生交叉访问同一个块· 假阳性可串行化快照隔离异常(2) – Index scan using the same index page如果表比较小,导致root和leaf索引块同属于一个块,两个事务也发生交叉访问同一个索引块· 假阳性可串行化快照隔离异常(3) – Index scan using the difference index page 插入新数据,导致root和leaf索引块不属于一个块,不会造成交叉访问以上就是 第20讲- 事务与隔离级别 的内容,欢迎一起探讨交流,往期视频,联系cuug
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第19讲:冻结TXIDS内容1:PostgreSQL TXID介绍内容2:PostgreSQL TXID使用原理使用内容3:冻结TXID来解决TXID环绕问题内容4:如何冻结TIXDTXID介绍· 事务id(txid)当一个事务开始时,PostgreSQL中的事务管理系统会为该事务分配一个唯一标识符,即事务ID(txid).PostgreSQL中的txid被定义为一个32位的无符号整数,也就是说,它能记录大约42亿个事务。通常txid对我们是透明的,但是我们可以利用PostgreSQL内部的函数来获取当前事务的txid。testdb=# BEGIN;BEGINtestdb=# SELECT txid_current();txid_current--------------100(1 row)请注意,BEGIN命令没有指定txid。在PostgreSQL中,当第一个命令在BEGIN命令执行之后执行时,事务管理器会分配一个tixd,然后它的事务开始。TXID使用原理· TXID结构TxID=2的32次方=42亿前21亿个TxID是“过去的”后21亿个TxID是“未来的”TXID环绕· TXID环绕假设元组tuple_1的txid为100,即tuple_1的t_xmin为100。服务器已经运行很长一段时间了,Tuple_1没有被修改。当前的txid是21亿+100,执行SELECT命令。此时,Tuple_1可见,因为txid 100是过去的。接着,又执行相同的SELECT命令,此时当前的txid就变成是21亿+101了,根据行可见性规则判断Tuple_1就不再可见,因为txid 100变成是未来的了。冻结TXID· 解决TXID环绕问题的方法—冻结TXID解决事务环绕问题的方法是冻结,其做法是把21亿以前事务所修改的行做一个标记位(即冻结),根据行可见性规则,凡是被标识位冻结行在判断的时候就不依赖t_xmin了,让行数据变成可见。若TXID使用过一轮以后,被冻结的行如果被新事务修改,则原来的标记位就会消除(即解冻),此时此行是否可见,就要根据行可见性规则进行判断。冻结处理· 冻结处理有两种模式lazy mode (惰性模式)eager mode (急切模式)· Lazy Mode冻结极限txid定义如下:freezeLimit_txid=(OldestXmin-vacuum_freeze_min_age)AutoVacuum操作会进行冻结操作,每分钟都会执行一次,被选中的表都会进行vacuum操作,包含冻结txid内容。· Eager Mode当满足以下条件时,执行紧急模式:pg_database.datfrozenxid<(OldestXmin-vacuum_freeze_table_age)· pg_database.datfrozenxid 和pg_class.relfrozenxid(s)之间的冻结对比· 如何显示被冻结的对象信息testdb=# VACUUM table_1;VACUUMtestdb=# SELECT n.nspname as "Schema", c.relname as "Name", c.relfrozenxidFROM pg_catalog.pg_class cLEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespaceWHERE c.relkind IN ('r','')AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast'AND pg_catalog.pg_table_is_visible(c.oid)ORDER BY c.relfrozenxid::text::bigint DESC;Schema | Name | relfrozenxid------------+-------------------------+--------------public | table_1 | 100002000public | table_2 | 1846pg_catalog | pg_database | 1827pg_catalog | pg_user_mapping | 1821pg_catalog | pg_largeobject | 1821· 显示被冻结的数据库信息testdb=# SELECT datname, datfrozenxid FROM pg_database WHERE datname = 'testdb';datname | datfrozenxid---------+--------------testdb | 1821(1 row)· 使用VM提高冻结效率以上就是Part 19 - 冻结TXIDS 的内容,欢迎一起探讨交流,往期视频,联系cuug
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。第18讲:Vacuum空间管理工具内容1:什么是 autovacuum?内容2:为什么需要 autovacuum?内容3:调整Autovacuum内容4:记录autovacuum内容5:什么时候在表上做autovacuum?什么是 autovacuum?Autovacuum是启动PostgreSQL时自动启动的后台实用程序进程之一在生产系统中不应该将其设置为关闭autovacuum = on # ( ON by default )track_counts = on # ( ON by default )为什么需要 autovacuum?需要vacuum来移除死元组防止死元组膨胀更新表的统计信息进行分析,以便提供优化器使用autovacuum launcher使用Stats Collector的后台进程收集的信息来确定autovacuum的候选表列表记录autovacuumlog_autovacuum_min_duration-1 :表示不记录0 :表示记录所有的'250ms' # Or 1s, 1min, 1h, 1d :表示记录真空操作时间大于此值的操作什么时候做autovacuum?1、Autovacuum操作的实际内容:1)vacuum; 2)Analyze2、Autovacuum vacuum触发条件(如果由于更新和删除,表中氖导仕涝槭擞行с兄担蚋帽斫晌猘utovacuum的候选表):Autovacuum VACUUM thresold for a table = autovacuum_vacuum_scale_factor * number of tuples + autovacuum_vacuum_threshold3、Autovacuum ANALYZE触发条件(自上次分析以来插入/删除/更新总数超过此阈值的任何表都有资格进行autovacuum分析)Autovacuum ANALYZE threshold for a table = autovacuum_analyze_scale_factor * number of tuples + autovacuum_analyze_threshold举个栗子:Employee = 1000行以上述数学公式为参考:Table:employee成为autovacuum Vacuum的候选者,当下面的条件满足时:Total number of Obsolete records = (0.2 * 1000) + 50 = 250Table:employee 成为 autovacuum ANALYZE 候选者,当下面的条件满足时:Total number of Inserts/Deletes/Updates = (0.1 * 1000) + 50 = 150Is A Problem?· 这是不是一个问题?1:Table1= 100行其触发分析和vacuum的阈值分别是:60和702:Table2=100万行其触发分析和vacuum的阈值分别是:100050和200050如果两张表都做同样数量的dml操作,T1 触发Autovacuum是T2的2857倍!!!pg_stat_user_tables· 如何确定需要调整其autovacuum setting的表?为了单独调整表的autovacuum,必须知道一段时间内表上的插入/删除/更新数。SELECT n_tup_ins as "inserts",n_tup_upd as "updates",n_tup_del as "deletes",n_live_tup as "live_tuples", n_dead_tup as "dead_tuples"FROM pg_stat_user_tablesWHERE schemaname = 'scott' and relname = 'employee';inserts | updates | deletes | live_tuples | dead_tuples---------+---------+---------+-------------+-------------30 | 40 | 9 | 21 | 49表autovacuum setting的设置可以通过设置单个表的存储参数来重写此行为,这样会忽略全局设置。postgres=# alter table percona.employee set (autovacuum_vacuum_threshold = 100);postgres=# alter table percona.employee set (autovacuum_vacuum_scale_factor=0);postgres=#postgres=# \d+ percona.employeeTable "percona.employee"Column | Type | Collation | Nullable | Default | Storage | Stats target | Description--------+---------+-----------+----------+---------+---------+--------------+-------------id | integer | | | | plain | |Options: autovacuum_vacuum_threshold=100, autovacuum_vacuum_scale_factor = 0只要有超过100条过时的记录,运行autovacuum vacuum.autovacuum_max_workers· 一次可以运行多少个autovacuum过程1、在可能包含多个数据库的实例/群集上,一次运行的autovacuum进程数不能超过下面参数设置的值:autovacuum_max_workers = 3 (Default)2、启动下一个autovacuum之前的等待时间:autovacuum_naptime= 1min(autovacuum_naptime/N)其中N是实例中数据库的总数· 真空IO是密集型的吗?1、autovacuum可以看作是一种清洁工作2、是一个IO密集型操作3、设置了一些参数来最小化真空对IO的影响· 以下是用于调整autovacuumIO的参数autovacuum_vacuum_cost_limit : autovacuum可达到的总成本限制(结合所有autovacuum作业)autovacuum_vacuum_cost_delay : 当一个清理工作达到autovacuum_vacuum_cost_limit指定的成本限制时,autovacuum将休眠数毫秒vacuum_cost_page_hit : 读取已在共享缓冲区中且不需要磁盘读取的页的成本.vacuum_cost_page_miss : 获取不在共享缓冲区中的页的成本.vacuum_cost_page_dirty : 在每一页中发现死元组时写入该页的成本.上面参数默认的值考虑如下:autovacuum_vacuum_cost_limit = -1 (So, it defaults to vacuum_cost_limit) = 200autovacuum_vacuum_cost_delay = 20msvacuum_cost_page_hit = 1vacuum_cost_page_miss = 10vacuum_cost_page_dirty = 20· 让我们想象一下1秒后会发生什么。(1秒=1000毫秒)在读取延迟为0毫秒的最佳情况下,autovacuum可以唤醒并进入睡眠50次(1000毫秒/20毫秒),因为唤醒之间的延迟需要20毫秒。1 second = 1000 milliseconds = 50 * autovacuum_vacuum_cost_delay由于在共享缓冲区中每次读取一个页面的相关成本是1,因此在每个唤醒中可以读取200个页面(因为上面把总成本限制设置为200),在50个唤醒中可以读取50*200个页面。绻诠蚕砘撼迩姓业搅怂芯哂兴涝榈囊常⑶襛utovacuum代价延迟为20毫秒,则它可以在每一轮中读取:((200/ vacuum_cost_page_hit)*8)KB,这需要等待autovacuum代价延迟时间量。因此,考虑到块大小为8192字节,autovacuum最多可以读取:50*200*8kb=78.13mb/s(如果在共享缓冲区中已经找到块)。如果块不在共享缓冲区中,需要从磁盘提取,则autovacuum可以读取:50*(200/ vacuum_cost_page_miss)*8)KB=7.81 MB/秒。现在,为了从页/块中删除死元组,写操作的开销是:vacuum_cost_page_dirty,默认设置为20一个auto vacuum每秒最多可以写/脏:50*(200/ vacuum_cost_page_dirty)*8)KB=3.9mb/秒。· 谨慎设置autovacuum_max_workers通常, autovacuum_vacuum_cost_limit成本平均分配给实例中运行的所有autovacuum过程的autovacuum_max_workers数。因此,增加autovacuum_max_workers可能会延迟当前运行的autovacuum workers的autovacuum执行。而增加autovacuum_vacuum_cost_limit可能会导致IO瓶颈。可以通过设置单个表的存储参数来重写此行为,这样会忽略全局设置。以上就是Part 18 - Tuning Autovacuum 的内容,往期视频,联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 15:数据文件与块存储结构内容1:表的OID与数据文件对应关系内容2:PostgreSQL数据文件存储方式内容3:数据文件、空闲空间地图和可见性地图内容4:块空间使用方法对象OID与数据文件对应关系· PG数据库的一张表或者索引对应一个数据文件。与Oracle集中式的存储方式不同,各有优缺点· 作为数据库对象的表和索引在内部由各个oid管理,而这些数据文件则由变量relfilenode管理。· 表和索引的relfilenode值开始时基本上(但并不总是)与相应的oid匹配sampledb=# SELECT relname, oid, relfilenode FROM pg_class WHERE relname = 'sampletbl';relname | oid | relfilenodesampletbl | 18740 | 18740(1 row)· 相关表的数据文件路径:$ cd $PGDATA$ ls -la base/16384/18740-rw------- 1 postgres postgres 8192 Apr 21 10:21 base/16384/18740· TRUNCATE、REINDEX、CLUSTER等操作会造成relfilenode号的改变,因为先删除原来的数据文件,再创建一个新的会更快。sampledb=# SELECT relname, oid, relfilenode FROM pg_class WHERE relname = 'sampletbl';relname | oid | relfilenodesampletbl | 18740 | 18812(1 row)· 使用内置函数pg_relation_file path查看表的文件路径:sampledb=# SELECT pg_relation_filepath('sampletbl');pg_relation_filepathbase/16384/18812(1 row)· 文件尺寸超过1GB后,新文件的产生规则:$ cd $PGDATA$ ls -la -h base/16384/19427*-rw------- 1 data/base/16384/19427-rw------- 1 data/base/16384/19427.1相关联的其它数据文件· 空闲空间地图和可见性地图(‘_fsm’和‘_vm’):$ cd $PGDATA$ ls -la base/16384/18751*-rw------- 1 base/16384/18751-rw------- 1 base/16384/18751_fsm-rw------- 1 base/16384/18751_vm· 当insert操作时空闲空间文件用来查看哪些数据块有空闲空间存放新行· 当进行vacuum操作时可见性地图文件用来提高操作的效率· 相关的三类文件在内部称为每个关系的分岔(fork);数据文件的fork号为0、空闲空间文件fork号为1,可见性地图文件的fork号为2。数据块内部结构· 数据文件内部布局固定长度的页(或块),默认值为8192字节(8kb)页面的内部布局取决于数据文件类型· 表中的页包含以下三种数据:header data -由page header data结构定义的头数据在页面的开头分配。它的长度为24字节,包含有关该页的一般信息。结构的主要变量如下页所述。line pointer(s) -行指针为4字节长,并保存指向每个堆行的指针。它也被称为项指针。行指针形成一个简单的数组,它起到元组索引的作用。每个索引从1开始按顺序编号,称为偏移量编号。当一个新的行被添加到页面中时,一个新的行指针也被推到数组中以指向新的行heap tuple(s) -堆元组(行)是记录数据本身。它们从页面底部开始按顺序堆叠。因为PostgreSQL需要同时了解并发控制(CC)和WAL。INSERT操作· Writing Heap Tuples:UPDATE操作· 更新一行记录:update操作时,数据库的操作过程是先delete后insert,被删除的行空间不会立刻释放,vacuum操作时会释放。读操作· Reading Heap Tuples:以上就是Part 15 - PostgreSQL 数据文件和块存储结构 的内容,欢迎进群一起探讨交流钉钉交流群:35,82,24,60,钉钉群专门有视频讲解,往期教程联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 14:PostgreSQL检查点内容1:检查点触发机制内容2:检查点作用内容3:检查点如何工作内容4:检查点如何调整检查点处理过程· 检查点触发机制在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动: 检查点间隔时间由checkpoint_timeout设置(默认间隔为300秒(5分钟)) 在9.5版或更高版本中,pg_xlog中WAL段文件的总大小(在10版或更高版本中为pg_WAL)已超过参数max_WAL_size的值(默认值为1GB(64个16MB文件))。 PostgreSQL服务器在smart或fast模式下关闭。 手动checkpoint。检查点作用· 为什么需要检查点所有的数据库几乎都有检查点机制,为什么需要检查点呢,有以下几个作用:1、定期保存修改过的数据块(保护劳动果实)检查点发生时,检查点进程会把共享缓冲区中的脏块(被修改过的块)写入磁盘,永久保存,否则如果发生主机断电等故障,内存中的数据块就会丢失,该检查点的发生频率由checkpoint_timeout控制,定期发生。2、做为实例恢复时起始位置如果发生实例崩溃,那么下一次启动时则需要进行实例恢复,数据库根据最近一次检查点的位置作为起始位置开始recovery。3、做为介质恢复时起始位置每次进行物理备份时都会发生一个检查点,用来判断将来进行恢复时的起始位置,因为备份时数据文件是有先后顺序,备份出来的数据文件是不一致的,将来恢复出来后需要应用归档日志把他们变成同步,开始备份的位置就是将来recovery的位置。XLOG 写记录· 检查点工作流程检查点记录位置· 控制文件控制文件中记录了检查点的相关信息 Latest checkpoint location –最新检查点记录的LSN位置。 Prior checkpoint location –先前检查点记录的LSN位置。pg_control File· 控制文件控制文件中记录的检查点相关信息postgres> pg_controldata /usr/local/pgsql/datapg_control 最后修改: 2022/10/25 10:36:29最新检查点位置: 0/65441F8最新检查点的 REDO 位置: 0/65441F8最新检查点的重做日志文件: 000000010000000000000006最新检查点的 TimeLineID: 1最新检查点的PrevTimeLineID: 1... snip ...Database Recovery· 利用检查点做为recovery的起始位置检查点调整检查点发生的间隔时间决定了实例恢复需要的时长,checkpoint_timeout设置的值应该根据业务的需求设置,以实例崩溃时,下一次打开数据库时长的容忍度而设置。间隔时间短,则实例恢复需要的时间就短,可提高数据库的可用性,但是会增加I/O操作,降低数据库状态性能,检查点发生时属于密集型I/O操作,会占用大量系统资源。间隔时间长,则实例恢复需要的时间就长,会降低数据库的可用性,但是会减少I/O操作,提高数据库状态性能。checkpoint_completion_target数据库中一个至关重要的参数,主要与参数checkpoint_timeout(checkpoint_timeout)配合使用,值越小意味着检查点要越快完成,要求写得要快。控制每次检查点发生时i/o的吞吐量,值越高,则i/o占用的资源越少,数据库性能越好;值越低,则i/o占用的资源越多,影响数据库性能,但是提高检查点完成速度。往期视频和教程,联系cuug
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 12:PostgreSQL WAL作用与管理内容1:WAL物理与逻辑结构内容2:WAL数据内部布局内容3:WAL数据写进程内容4:WAL管理内容5:WAL归档日志WAL概述· 没有WAL的插入操作· 有WAL的插入操作· Insert操作与recovery· 使用WAL进行数据库恢复事务日志与WAL文件· 事务日志与WAL 段文件使用内置函数pg_xlogfile_name(9.6或更早版本)或pg_walfile_name(10或更高版本),我们可以找到包含指定LSN的WAL段文件名。WAL日志内部布局· WAL内部布局· 三类XLOG 数据部分记录 (version 9.5 or later)写XLOG记录· 写XLOG记录WAL写处理· WAL 写进程1、At commit2、When wal buffer full3、writes periodically写XLOG记录· Checkpoint 处理概述pg_control File· pg_control File30即使pg_控制文件存储超过40个项目,需要的三个项目如下所示:State –最新检查点启动时数据库服务器的状态。总共有七种状态:“启动”是系统正在启动的状态;“关闭”是系统通过shut down命令正常关闭的状态;“生产中”是系统正在运行的状态;依此类推。Latest checkpoint location –最新检查点记录的LSN位置。Prior checkpoint location –先前检查点记录的LSN位置。· 9.7.2. pg_control Filepg_control文件存储位置:postgres> pg_controldata /usr/local/pgsql/datapg_control version number: 937Catalog version number: 201405111Database system identifier: 6035535450242021944Database cluster state: in productionpg_control last modified: Mon Apr 27 15:16:38 2020Latest checkpoint location: 0/C000F48Prior checkpoint location: 0/C000E70... snip ...Database Recovery· 数据库实例恢复开始位置( 检查点)· 数据库WAL日志记录· 利用wal进行数据库恢复WAL 文件管理· WAL 日志切换WAL 满足以下条件发生日志切换:1、WAL segment has been filled up. 2、The function pg_switch_wal has been issued.3、archive_mode is enabled and the time set to archive_timeout has been exceeded.(基于主备复制需求)· 创建新的WAL日志文件· WAL日志文件删除与回收(基于一个checkpoint完成过程)· 文件管理WAL段文件的数量主要由以下三个参数控制:1、checkpoint_segments (9.5版本后被废弃)2、checkpoint_completion_target (默认为0.5)3、WAL_keep_segments((2+checkpoint_completion_target)×checkpoint_segments+1)数据库归档· 归档日志连续归档是在WAL段切换时将WAL段文件复制到归档区域的功能,由archiver(后台)进程执行。其中,占位符%p是复制的WAL段,而%f是存档日志。ALTER SYSTEM SET archive_command = 'cp %p /home/postgres/archives/%f';ALTER SYSTEM SET archive_mod = on;WAL 文件管理· 发生切换时归档· 设置wal相关参数 设置wal目录最大可用尺寸(默认值为1024MB):max_wal_size 设置wal文件最大可用尺寸(默认值为16MB):wal_segment_size 设置wal缓冲区尺寸(默认值512KB):wal_buffers以上就是Part 12 - PostgreSQL wal作用与管理 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,钉钉群有专门讲解公开课往期课程及视频,联系cuug
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 11:PostgreSQL控制文件作用与管理内容1:PostgreSQL控制文件位置内容2:PostgreSQL控制文件内容内容3:PostgreSQL控制文件维护内容4:PostgreSQL控制文件备份内容5:PostgreSQL控制文件恢复11.1、控制文件位置控制文件位置与大小逻辑位置:存放在pg_global表空间中物理位置与名字:$PGDATA/global/pg_control控制文件的物理大小是8K控制文件内容尽量保持小于512个字节11.2、控制文件内容· initdb时生成的静态信息pg_control version number: 1201Catalog version number: 201909212Database system identifier: 6744130188358323871Maximum data alignment: 8Database block size: 8192Blocks per segment of large relation: 131072WAL block size: 16384Bytes per WAL segment: 16777216Maximum length of identifiers: 64Maximum columns in an index: 32Maximum size of a TOAST chunk: 1996Date/time type storage: 64-bit integersFloat4 argument passing: by valueFloat8 argument passing: by value· postgresql.conf中的配置信息wal_level setting: replicawal_log_hints setting: onmax_connections setting: 1000max_worker_processes setting: 8max_wal_senders setting: 10max_prepared_xacts setting: 0max_locks_per_xact setting: 64track_commit_timestamp setting: off· write-ahead logging以及checkpoint的动态信息Latest checkpoint location: 2E/CD32D270Latest checkpoint's REDO location: 2E/CD32D270Latest checkpoint's REDO WAL file: 000000110000002E000000CDLatest checkpoint's TimeLineID: 17Latest checkpoint's PrevTimeLineID: 17Latest checkpoint's full_page_writes: onLatest checkpoint's NextXID: 0:538902Latest checkpoint's NextOID: 385511Latest checkpoint's NextMultiXactId: 5……Time of latest checkpoint: Sat 18 Jul 2020 10:11:14 PM EDTFake LSN counter for unlogged rels: 0/3E8Backup start location: 0/0Backup end location: 0/0End-of-backup record required: no11.3、控制文件维护1、固定部分初始化数据库时产生,固定不变2、有些信息随时更新如果发生检查点、备份、日志切换等操作,则自动更新3、postgres.conf相关参数被更新如果配置文件中重要的相关参数被修改,则也会自动更新4、数据库备份时会一起备份5、不能手动修改该文件6、启动和恢复数据库时需要,当前没有避免发生单一故障点而设计的保护策略11.4、控制文件备份备份方式(与数据库备份一起备份,一起恢复,不能单独备份)1、tar命令tar -jcv -f baseline.tar.bz2 $PGDATA2、pg_basebackup命令pg_basebackup -D bk1 -Ft -z –P3、pg_rman命令pg_rman backup --backup-mode=full -B /home/postgres/pg_rman_bk/ -C -P11.5、控制文件恢复重建控制文件Pg10版本以前版本使用pg_resetxlog工具Pg10及以后版本使用pg_resetwal工具pg_resetwal工具需要下面四个参数:· 1、-l XLOGFILE force minimum WAL starting location for new transaction log( XLOGFILE强制新事务日志的最小WAL起始位置)定位办法:pg_wal下面创建的最大的日志文件,编号+1cd /usr/local/pg12.2/data/pg_wal/ll-rw------- 1 postgres postgres 270 Mar 21 09:40 00000010.history-rw------- 1 postgres postgres 16777216 Jul 19 06:19 0000001100000038000000C4-rw------- 1 postgres postgres 16777216 Jul 19 06:16 0000001100000038000000C5-rw------- 1 postgres postgres 16777216 Jul 19 06:17 0000001100000038000000C6-rw------- 1 postgres postgres 16777216 Jul 19 06:17 0000001100000038000000C7确定-l 的参数值为:-l 0000001100000038000000C8· 2、-O OFFSET set next multitransaction offset在pg_multixact/members下面,取最大值加1然后乘以65536.转换成16进制为100000,然后末尾添加4个0-O=0x1000000000步骤:1、进入相应目录cd $PGDATA/pg_multixact/members/2、查看文件ll-rwxr-x--- 1 postgres postgres 8192 Jul 18 22:11 00003、计算结果-O=0x1000000000· 3、-m =MXID,MXID set next and oldest multitransaction ID在pg_multixact/offsets下面,找到最大的文件编号,+1 后面跟上4个0如:0000-m =0x00010000,0x00010000步骤:1、进入相应目录cd $PGDATA/pg_multixact/offsets2、查看文件-rwxr-x--- 1 postgres postgres 8192 Jul 19 05:57 00003、计算结果-m=0x00010000,0x00010000· 4、-x XID set next transaction ID在pg_xact下面,找到最大的文件编号,+1 后面跟上5个0如:0000-x = 0x000100000步骤:1、进入相应目录cd $PGDATA/pg_xact/2、查看当前文件lltotal 140-rwxr-x--- 1 postgres postgres 139264 Jul 18 23:21 00003、计算-x值-x=0x000100000执行重建控制文件语句:cd $PGDATA/globaltouch pg_controlpg_resetwal -l 0000001100000038000000CC -O 0x1000000000 \-m 0x00010000,0x00010000 -x 0x000100000 -f $PGDATApg_controldata启动数据库:pg_ctl start以上就是Part 11 - PostgreSQL控制文件作用与管理 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,钉钉群有专门讲解公开课往期课程及视频,联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 10:PostgreSQL数据库管理内容1:PostgreSQL数据库结构内容2:PostgreSQL数据库级权限管理内容3:PG数据库级环境参数设置内容4:PostgreSQL数据库级属性修改10.1、数据库结构数据库集簇逻辑结构每个数据库存储的对象(表、索引、视图等等)是独立的、私有的,每个数据库类似于每个房间,从房间中取东西,就需要到房间里面;同理,要访问某个数据库中的对象,就需要登录到指定的数据库中。PostgreSQL数据库结构数据库集群是由PostgreSQL服务器管理的数据库的集合。PostgreSQL中的“数据库集群”一词并不意味着“一组数据库服务器”。PostgreSQL服务器在单个主机上运行,并管理单个数据库群集。 数据库是数据库对象的集合。在关系数据库理论中,数据库对象是用来存储或引用数据的数据结构。堆(heap)表是一个典型的例子,它有很多类似于索引、序列、视图、函数等等。在PostgreSQL中,数据库本身也是数据库对象,在逻辑上彼此分离。所有其他数据库对象(如表、索引等)都属于各自的数据库。PostgreSQL数据库属主· Postgres中的数据库属主属于创建者,只要有createdb的权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。· 数据库在创建后,允许public角色连接,即允许任何人连接。· 数据库在创建后,不允许除了超级用户和owner之外的任何人在数据库中创建schema。· 数据库在创建后,会自动创建名为public的schema,这个schema的all权限已经赋予给了public角色,即允许任何人在里面创建对象,但对己存在的其它用户的表不具有任何权限。10.2、数据库权限CREATE:可以在指定数据库创建schema的权限CONNECT:可以连接到指定数据库的权限TEMPORARY:可以创建临时表的权限ALL:指定数据库所有的权限语法:GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE 数据库名称 [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]由于数据库在创建后,允许public角色连接,即允许任何人连接。所以如果要取消某个用户对指定数据库连接的权限,需要先取消public的连接权限,再取消该用户的连接权限。--授权用户连接数据库的权限grant connect on database db_name to user_name;--撤销用户连接数据库的权限revoke connect on database db_name from public;revoke connect on database db_name from user_name;--查看哪些用户有某个数据库的connect权限select datname,datacl from pg_database where datname='db_name';10.3、数据库环境设置PostgreSQL参数设置分为实例级、数据库级、用户级和会话级,而有些参数可以在所有级别中设置,优先级顺序为会话级>用户级>数据库级>实例级。数据库参数配置语法:ALTER DATABASE 名称 SET 配置参数 { TO | = } { 值 | DEFAULT }ALTER DATABASE 名称 SET 配置参数 FROM CURRENTALTER DATABASE 名称 RESET 配置参数ALTER DATABASE 名称 RESET ALL配置示例(一):--设置数据库搜索路径:alter database postgres set search_path to "$user", public, schema_name;--配置连接某个库时可使用的工作内存alter database postgres set work_mem = '8MB'; --配置连接某个库时可使用的维护内存alter database postgres set maintenance_work_mem TO '256MB';配置示例(二):--配置连接某个库后使用的时区alter database postgres set TimeZone to cet;alter database postgres set DateStyle to SQL, DMY;(重新登录生效)--配置连接某个库后执行语句最多时长(执行1秒超时)alter database postgres set statement_timeout =1000;--配置连接某个库后默认的客户端编码,配置客户端编码为gbk,适用于数据库编码为utf8,应用程序编码为gbk的应用alter database postgres set client_encoding to gbk;配置示例(三):--配置某个库使用日志记录级别(设置后,对这个数据库的访问不记录日志)alter database postgres set log_statement=none;--配置连接某个库后的wal日志写盘级别(设置后,该库的更新操作只要求本地提交)alter database postgres set synchronous_commit to local;--配置连接某个库后禁用某个规划器(禁用indexonlyscan扫描)alter database postgres set enable_indexonlyscan to off;配置示例(四):--配置连接某个库后执行出错时中断连接(对新会话生效)alter database postgres set exit_on_error to on;--重新连接后select pg_backend_pid();--执行错误会导致连接中断select * from d1;配置示例(五):--查看所有个性化配置\drds--查询数据库的连接数限制只能查看数据字典表select datname,datconnlimit from pg_database--设置某个个性化设置为默认值ALTER DATABASE postgres reset exit_on_error;--设置所有个性化设置为默认值ALTER DATABASE postgres reset ALL;10.4、数据库属性修改数据库的属性我们可以进行修改,修改范围是数据库名字、属主、表空间。ALTER DATABASE 名称 RENAME TO 新的名称ALTER DATABASE 名称 OWNER TO { 新的属主 | CURRENT_USER | SESSION_USER }ALTER DATABASE 名称 SET TABLESPACE 新的表空间示例:--修改数据库名字ALTER DATABASE newdb2 RENAME TO newdb3;--修改数据库属主ALTER DATABASE newdb3 OWNER TO u1;--修改新表空间的名字ALTER DATABASE newdb3 SET TABLESPACE new_tbl;以上就是Part 10 - PostgreSQL数据库管理 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,钉钉群有专门讲解公开课往期课程,联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 9:实例连接访问控制内容1:PG实例访问控制概述内容2:pg_hba.conf 文件内容3:pg_hba.conf 名单格式内容4:pg_hba.conf 常见配置实例9.1、PG实例访问控制概述实例访问控制就像是一道防火墙,用它来控制来自于不同主机、不同用户是否允许访问指定的数据库、以及验证方式。9.2、pg_hba.conf文件客户端认证是由一个配置文件(通常名为pg_hba.conf并被存放在数据目录中)控制(HBA表示基于主机的认证)。在initdb初始化数据目录时,它会安装一个默认的pg_hba.conf文件。不过我们也可以把认证配置文件放在其它地方。pg_hba.conf文件的常用格式是一组记录,每行一条。空白行将被忽略, #注释字符后面的任何文本也被忽略。记录不能跨行。一条记录由若干用空格/或制表符分隔的域组成。如果域值用双引号包围,那么它可以包含空格。在数据库、用户或地址域中 引用一个关键字(例如,all或replication) 将使该词失去其特殊 含义,并且只是匹配一个有该名字的数据库、用户或主机。9.3、pg_hba.conf名单格式TYPE:指定连接类型 local:表示本地连接,只对Unix/Linux系统有效,使用socket方式登录 host:表示主机通过TCP/IP连接 hostssl:表示主机连接需要SSL加密方式连接DATABASE:指定连接的数据库 all:表示所有的数据库 db_name:表示指定的数据库 replication:表示主备复制时的连接 USER:指定连接的用户 all:表有所有用户 ? user_name:表示指定的用户 +group_name:表示一组用户 @file_name:表示文件中包含的用户列表 ADDRESS:指定连接的客户端 127.0.0.1/32:表示本地客户端主机 0.0.0.0/0:表示所有客户端主机 host_name:表示指定的主机名(hosts文件中包含) ip_addr/net_mask:表示指定的ip地址或者网段pg_hba.conf 示例:host all +g1 0.0.0.0/0 md5 #g1组host all u1 192.168.18.0/24 md5 #某个网段METHOD:指定验证方式trust:信任客户端连接,无需提供密码 scram-sha-256:这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。 md5:它能防止口令嗅探并且防止口令在服务器上以明文存储,但是无法保护攻击者想办法从服务器上窃取了口令哈希的情况。 password:方法password以明文形式发送口令,因此它对于口令“嗅探”攻击很脆弱。 ident:该模式下系统会将请求发起者的操作系统用户映射为PostgesSQL数据库内 部用户,并以该内部用户的权限登录,且此时无需提供登录密码。操作系统用户 与数据库内部用户之间的映射关系会记录在pg_ident.conf文件中。 peer:该模式使用连接发起端的操作系统名进行身份验证。仅限于Linux、BSD、 Mac OS X和Solaris,并且仅可用于本地服务器发起的连接。reject:该模式表示拒绝所有请求。9.4、pg_hba.conf常见配置实例常见配置实例TYPE DATABASE USER ADDRESS METHOD"local" is for Unix domain socket connections onlylocal all all trustIPv4 local connections:host all all 127.0.0.1/32 trustIPv6 local connections:host all all ::1/128 trustAllow replication connections from localhost, by a user with thereplication privilege.local replication all trusthost replication all 127.0.0.1/32 trusthost replication all ::1/128 trusthost all +g1 192.168.18.0/24 md5host all cuug 0.0.0.0/0 identmap=cuug以上就是Part 9 - PostgreSQL实例连接访问控制 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,往期视频文档可以联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 8:PG对象管理内容1:PostgreSQL 对象权限概述内容2:PostgreSQL 对象权限授权内容3:PostgreSQL 查看对象权限内容4:PostgreSQL 对象权限回收8.1、对象权限概述1、每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限2、在数据库中所有的权限都和角色挂钩3、对超级用户postgres不做权限检查,其它用户走ACL(Access ControL List)4、对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL对象级别的权限表级对象权限控制列级别权限控制序列权限控制类型域的权限控制(域简单来说就是自定义的带约束的数据类型)FDW权限控制FS权限控制函数权限控制\h GRANT显示所有可设置的访问权限对象权限列表rolename=xxxx -- privileges granted to a role =xxxx -- privileges granted to PUBLIC r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) * -- grant option for preceding privilege /yyyy --role that granted this privilege对象权限含义SELECT:允许从指定表,视图或序列的任何列或列出的特定列进行SELECT。也允许使用COPY TO。在 UPDATE或DELETE中引用现有列值也需要此权限。对于序列,此权限还允许使用currval函数。对于大对象,此权限允许读取对象。INSERT:允许将新行INSERT到指定的表中。如果列出了特定列,则只能在INSERT命令中为这些列分配(因 此其他列将接收默认值)。也允许COPY FROM。UPDATE:允许更新指定表的任何列或列出的特定列,需要SELECT权限。DELETE:允许删除指定表中的行,需要SELECT权限。TRUNCATE:允许在指定的表上截断数据。REFERENCES:允许创建引用指定表或表的指定列的外键约束。TRIGGER:允许在指定的表上创建触发器。CREATE:对于数据库,允许在数据库中创建新的schema、table、index。CONNECT:允许用户连接到指定的数据库。在连接启动时检查此权限。TEMPORARY、TEMP:允许在使用指定数据库时创建临时表。EXECUTE:允许使用指定的函数或过程以及在函数。USAGE:对于schema,允许访问指定模式中包含的对象;对于sequence,允许使用currval和nextval函数。对于类型和域,允许在创建表,函数和其他模式对象时使用类型或域。ALL PRIVILEGES:一次授予所有可用权限。8.2、对象权限授权对象权限授权 每种类型的对象权限都不一样,详细可参考:https://www.postgresql.org/docs/9.6/static/sql-grant.html基本语法参考(表对象):GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]授权示例授权单个权限给用户GRANT SELECT ON tab_name TO role_name;授权多个/所有权限给用户GRANT SELECT, UPDATE, INSERT ON tab_name TO role_name; GRANT ALL ON tab_name TO role_name;授权某模式下所有表的查询权限给用户GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO role_name;授权列权限给用户GRANT SELECT (col1), UPDATE (col1) ON tab_name TO role_name;授权所有权限给所有用户GRANT ALL ON tab_name TO public;8.3、查看对象权限查看对象权限查看对象权限数据字典表information_schema.table_privileges显示对象的访问权限列表\z或\dp [tablename]查看对象权限示例查看对象权限数据字典表select grantor,grantee,privilege_type,is_grantable from information_schema.table_privileges where table_name='t1';查看对象权限示例显示对象的访问权限列表\z或\dp [tablename]8.4、对象权限回收回收示例回收单个权限REVOKE SELECT ON tab_name FROM role_name;回收多个/所有权限REVOKE SELECT, UPDATE, INSERT ON tab_name FROM role_name; REVOKE ALL ON tab_name FROM role_name;回收某模式下所有表的查询权限REVOKE SELECT ON ALL TABLES IN SCHEMA schema_name FROM role_name;回收列权限REVOKE SELECT (col1), UPDATE (col1) ON tab_name FROM role_name;回收所有权限REVOKE ALL ON tab_name FROM public;回收示例(特例) 任何用户对public模式都有all的权限,为了安全可以禁止用户对public 模式的create权限。REVOKE CREATE ON SCHEMA public FROM public;属主可以取消自己在指定表上的某些权限REVOKE UPDAE ON tab_name FROM role_name;REVOKE ALL ON tab_name FROM role_name;属主可以授权自己在指定表上的某些权限GRANT ALL ON tab_name TO role_name;以上就是Part 8 - PG对象权限管理 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,往期视频联系cuug咨询老师观看下载 从零开始学,一学就会,赶紧加入吧!
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 7:PG用户与schema关系内容1:PostgreSQL Schema概述内容2:PostgreSQL 用户与Schema内容3:PostgreSQL schema管理内容4:PostgreSQL public schema内容5:PostgreSQL 模式使用建议7.1、Schema概述什么是schema(模式)? 用户对象的集合叫做模式。比如:scott用户下有表emp、dept、salgrade等,还有几个索引,还有一些约束等等,那么scott用户下所有对象的集合就叫scott模式。可以把用户下拥有的对象根据业务分类,不同的对象存放在不同的模式下。新建的数据库默认会创建不同的模式来管理对象。比如:information_schema、pg_catalog、pg_temp_1、pg_toast、pg_toast_temp_1、public 等。不同的schema下可以有相同名字的表、函数等对象,互相之间是不冲突的。只要有权限,每个schema的对象是可以互相调用的。7.2、用户与模式对应关系一个用户可以创建与拥有多个模式。一个模式只能属于一个用户。普通用户创建模式时需要授权在指定的数据库下创建模式的权限。GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }ON DATABASE database_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ] 创建用户示例7.3、管理模式授权GRANT CREATE ON DATABASE testdb TO u1;创建模式create schema sport; create schema art;查看模式testdb=> \dn List of schemas Name | Ownerart | u1public | postgressport | u1授权某个模式下的对象访问权限给其它用户,则需要先授权访问该模式的权限给其它用户GRANT USAGE ON SHEMA sch_name TO role_name;GRANT SELECT ON sch_name.tab_name TO role_name;删除模式,模式只能由其拥有者或超级用户删除drop schema schema_name;删除模式时同时删除所依赖的对象drop schema chema_name cascade;7.4、Public模式初始化数据库时会自动创建一个Public模式,共享给所有用户使用,任何用户都可以把对象创建在该模式下,由于PostgreSQL下一个用户对应多个模式,创建用 户时没有创建对应的默认模式,而对象都是基于模式管理的,所以创建一个公用 的模式public。基于数据库安全考虑,可以删除public模式(可选)。7.5、模式使用建议Oracle数据库一个用户对应一个模式,且名字一样。PostgreSQL数据库可以规划成一个用户对应多个模式。基于简化管理的目的,可以规划成一个用户对应一个与用户名一样的模式。以上就是Part 7 - PG用户与模式 的内容,大家可以进群一起探讨,钉钉交流群:35,82,24,60,往期视频可以联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 6:PG用户与角色管理内容1:PostgreSQL 创建用户内容2:PostgreSQL 创建角色内容3:PostgreSQL 权限介绍内容4:PostgreSQL 给用户授权内容5:PostgreSQL 给角色授权内容6:PostgreSQL 回收权限6.1、用户角色概述用户与角色:? 数据库用户用来访问、管理数据库中的对象(表、索引…)? 数据库角色用来管理数据库访问权限,简化权限的管理? 用户和角色在整个数据库集簇中是全局性的,不是针对某个单一数据库,只要有足够的权限,用户可以访问所有数据库的对象。? 数据库用户可以分为两类:超级用户--postgres普通用户--根据需要创建 用户与角色的区别:? user:拥有login登陆数据库权限的role? role:可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限? group:不拥有replication/noreplication、connectionlimit属性的role? 在PG8.1之前,user与group是不同类型的实体,现在可以被看作是role,任意一个role均可自由的在user与group间转换6.2、创建用户创建用户? 方式1:在系统命令行使用create user命令create user username create user -U postgres -p 7788 user1 (--forwindows)? 方式2:在psql命令行使用create user(role)指令CREATE user[ROLE] rolename;CREATE USER name [[WITH] option[...]]这里的option可以是:SUPERUSER | NOSUPERUSER |CREATEDB | NOCREATEDB |CREATEROLE | NOCREATEROLE |CREATEUSER | NOCREATEUSER |INHERIT | NOINHERIT#角色是其他角色的成员,这些子句决定新角色是否从那些角色中“继承”特权 |LOGIN | NOLOGIN |REPLICATION | NOREPLICATION |BYPASSRLS | NOBYPASSRLS#决定是否一个角色可以绕过每一条行级安全性(RLS)策略。|CONNECTIONLIMIT connlimit |[ENCRYPTED | UNENCRYPTED] PASSWORD 'password' |VALIDUNTIL 'timestamp' | INROLE role_name [,...] |INGROUP role_name[,...] | ROLErole_name[,...]|ADMINrole_name[,...]#ADMIN子句与ROLE相似,让它们能够把这个角色中的成员关系授予给其他人。|USER role_name[,...] |SYSID uid创建用户示例:CREATE USER u1 SUPERUSER PASSWORD 'u1';--创建一个具有超级用户权限的用户CREATE USER u2 CREATEDB PASSWORD 'u2';--创建一个具有建库权限的用户CREATE USER u3 LOGIN;--创建一个具有登录权限的用户,默认值CREATE ROLE u4 encrypted PASSWORD '123456' VALIDUNTIL '2018-08-16';--创建一个带有加密密码且具有有效时间的用户注:属性LOGIN、SUPERUSER和CREATEROLE被视为特殊权限,它们不会像其它数据库对象的普通权限那样被继承。6.3、创建角色CREATE ROLE name [[WITH]option[...]] 这里的option可以是:SUPERUSER | NOSUPERUSER|CREATEDB | NOCREATEDB|CREATEROLE | NOCREATEROLE|CREATEUSER | NOCREATEUSER|INHERIT | NOINHERIT|LOGIN | NOLOGIN|REPLICATION | NOREPLICATION|CONNECTIONLIMIT connlimit|[ENCRYPTED | UNENCRYPTED] PASSWORD 'password'|VALIDUNTIL 'timestamp' | INROLE role_name[,...]|INGROUP role_name[,...] | ROLE role_name[,...]|ADMIN role_name[,...] | USER role_name[,...] | SYSID uid创建角色示例CREATE ROLE manager;--创建一个角色CREATE ROLE dev createdb;--创建一个具有建库权限的角色CREATE ROLE r1 LOGIN;--创建一个具有登录权限的角色,类似于用户CREATE ROLE u4 encrypted PASSWORD ‘123456’ VALIDUNTIL ‘2018-08-16’;--创建一个带有加密密码且具有有效时间的角色6.4、查看用户与角色查看用户与角色信息postgres=#\du 指令显示用户和角色属性通过数据库字典表来查看用户信息postgres=# \d pg_user通过数据库字典表来查看通过数据库字典表来查看角色信息postgres=# \d pg_roles通过数据库字典表来查看角色信息6.5、修改用户和角色修改用户属性postgres=# \h alter user命令:ALTER USER描述:更改数据库角色语法:ALTER USER role_specification [ WITH ] 选项 [ ... ]选项可以是SUPERUSER | NOSUPERUSER| CREATEDB | NOCREATEDB| CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN| REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT 连接限制| [ ENCRYPTED ] PASSWORD '口令' | PASSWORD NULL | VALID UNTIL '时间戳'ALTER USER 名称 RENAME TO 新的名称……修改用户示例ALTER USER u2 RENAME TO u22; --修改用户的名字ALTER USER u22 PASSWORD ‘u22’; --修改用户的密码ALTER USER u22 CREATEROLE; --修改用户的权限ALTER USER u22 IN DATABASE testdb RESET ALL; --修改数据库testdb中的参数重设 为默认值修改角色示例ALTER ROLE dev RENAME TO dev1; --修改角色的名字ALTER ROLE dev1 SUPERUSER; --修改角色的权限ALTER ROLE dev1 LOGIN; --修改角色的权限6.6、删除用户删除用户方法:? 方式1:在系统命令行使用drop user命令删除用户 drop user –U postgres –p 7788 username;? 方式2:在psql命令行使用drop删除drop role rolename; 或 drop user username;DROP ROLE IF EXISTS role_name;注意事项:1、只用超级用户能够删除超级用户2、只有具有create role权限的用户能删除非超级用户3、删除用户前,需要先删除依赖该用户的对象、权限等信息 4、任何属于该组角色的对象都必须先被删除或者将对象的所有者赋予其它角色, 任何赋予该组角色的权限也都必须被撤消。5、删除组role只会删除组的role本身,组的成员并不会被删除 删除用户与角色示例:DROP USER u22;DROP USER IF EXISTS u3;DROP ROLE IF EXISTS u4;注意:删除用户和角色所用命令可以通用6.7、启用角色赋予的权限启用某个角色权限:分配给用户的角色在用户登录时其权限不会自动生效,需要启用该角色。命令:Set role manager;注意:此时登陆的用户名变成manager。在此期间创建的对象也是属于manager。6.8、权限管理权限管理? 每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限? 在数据库中所有的权限都和角色挂钩? 对超级用户postgres不做权限检查,其它用户走ACL(Access ControL List)? 对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL权限管理结构层次图以上就是Part 6 - PG用户与角色管理 的内容,欢迎进群一起探讨交流,钉钉交流群:35,82,24,60,钉钉群专门讲解,往期视频也可联系cuug咨询老师
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 3:PG建库与使用内容1:创建PostgreSQL数据库内容2:启动和关闭PostgreSQL数据库内容3:使用PostgreSQL数据库1、创建数据库集簇数据库集簇初始化流程:--创建目录(以下操作都以postgres用户执行)mkdir /usr/local/pg12.2/data--初始化数据库集簇initdb -D $PGDATA -W --data-checksums #复制时需要--启动数据库集簇pg_ctl -D $PGDATA startpostgresql.conf配置文件:vi $PGDATA/postgresql.conflisten_addresses = '*' # 监听所有地址连接port = 1922 # 监听端口2.1、数据库打开与关闭--启动数据库集簇pg_ctl -D $PGDATA start--关闭数据库集簇pg_ctl -D $PGDATA stop2.2、数据库连接--登录数据库psql -U postgres--退出数据库\q3、数据库使用--登录到数据库后查看帮助help--执行pgsql命令\l--执行标准sql命令select * from tab_name;相关阅读:从小白到专家 PG技术大讲堂 - Part 1:PG简介从小白到专家 PG技术大讲堂 - Part 2:PG源代码安装以上就是Part 3 - PG建库与使用的内容,大家练习的时候如果遇到困难,可以进群一起探讨,钉钉交流群:358,22,460
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 2:PG源代码安装步骤1创建用户与环境配置步骤2系统内核参数配置步骤3PostgreSQL 安装1、创建用户与环境配置创建用户:groupadd postgres# useradd -g postgres postgres环境变量配置(.bash_profile)export PGPORT=1922export PG_HOME=/usr/local/pg12.2export PATH=$PG_HOME/bin:$PATHexport PGDATA=$PG_HOME/dataexport LD_LIBRARY_PATH=$PG_HOME/libexport LANG=en_US.utf82、内核参数配置vi /etc/sysctl.confkernel.shmmax = 68719476736(默认) #最大共享内存段大小kernel.shmall = 4294967296(默认) #可以使用的共享内存的总量kernel.shmmni = 4096 #整个系统共享内存段的最大数目kernel.sem = 50100 64128000 50100 1280 #每个信号对象集的最大信号对象数fs.file-max = 7672460 #文件句柄的最大数量。net.ipv4.ip_local_port_range = 9000 65000 #应用程序可使用的IPv4端口范围net.core.rmem_default = 1048576 #套接字接收缓冲区大小的缺省值net.core.wmem_default = 262144 #套接字发送缓冲区大小的缺省值net.core.wmem_max = 1048576 #套接字发送缓冲区大小的最大值sysctl -p #配置生效3、安装方式-linux二进制安装包安装https://ftp.postgresql.org/pub/source通过yum安装yum search postgresql && yum install postgresql通过源码编译安装https://www.postgresql.org/ftp/source/重要的依赖:readline,flex,bison3.1、依赖包检查编译前依赖包,以RedHat/CentOS为例:最小依赖:gcc、gcc-c++、zlib-devel、readline-devel其他依赖:perl-ExtUtils-Embed、pam-devel、libxml2-devel、libxslt-devel、openldap-devel、python-devel、openssl-devel、cmake3.2、源代码安装源代码安装步骤--使用postgres用户安装$ cd /soft/postgresql-12.2$ ./configure --prefix=/usr/local/pg12.2$ make$ make installConfigure常用配置选项:prefix:指定安装路径with-openssl:对openssl进行扩展支持with-python:对python进行扩展支持with-perl:对perl进行扩展支持with-libxml:对xml进行扩展支持3.3、配置可选项配置示例:./configure --prefix=/usr/local/pg12.2 --with-pgport=1922 --with-openssl --with-perl --with-tcl --with-python --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=16 --with-blocksize=8 --enable-dtrace --enable-debug注意:--with-blocksize如果数据库需要经常做插入的操作,数据量增长非常快,尽量把此参数设大一点;经常做小数据查询、更新且内存不是非常大的时候可以设小一点,默认8K即可。生产环境不要加--enable-dtrace --enable-debug3.4、编译可选项编译与安装:gmakeworld包括第三方插件全部编译gmakecheck-world需要使用普通用户执行,可选,耗时较长gmakeinstall包括第三方插件全部安装gmakeworld安装包含了文档,所有的contirb安装前先创建好/usr/local/pg12.2目录,同时授权postgres用户可读写权限以上就是Part 2 - PG源代码安装的内容,大家熟练操作起来吧,如果遇到困难,可以进群一起探讨
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。Part 5:PG数据库结构内容1:PostgreSQL逻辑结构内容2:PostgreSQL物理结构内容3:PostgreSQL表空间结构1.1、数据库集簇逻辑结构数据库集簇逻辑结构 :1.2、对象标识符PostgreSQL中的所有数据库对象都由各自的对象标识符(oid)在内部管理。这些对象标识符是无符号的4字节整数。数据库对象和相应的oid之间的关系存储在适当的系统目录中,具体取决于对象的类型。数据库的oid存储在pg_database中。数据库的oid与对应的数据库目录名是一致的2、数据库集簇物理结构每个数据库是base子目录下的子目录;数据库目录名与相应的oid相同。例如,当数据库sampledb的OID为16384时,其子目录名为16384。cd $PGDATAls -ld base/16384drwx------ 213 postgres postgres 7242 8 26 16:33 163842.1、其它目录结构数据库集群的布局的主要文件和子目录如下所示:3、TablespacesPostgreSQL TablespacesPostgreSQL中的表空间是基本目录之外的附加数据区域,此功能已在版本8.0中实现。初始化数据库后默认的表空间有pg_default、pg_global。pg_global表空间的物理文件位置在数据目录的global目录中,它用来保存系统表。pg_default表空间的物理文件位置在数据目录的base子目录中,是template0和template1数据库的默认表空间。创建数据库时,默认从template1数据库进行克隆,因此除非特别指定了新建数据库的表空间,否则默认使用template1使用的表空间,即pg_default表空间。PostgreSQL表空间物理文件位置创建表空间时产生的目录命名规则PG 'Major version' 'Catalogue version number'例如:sampledb=# create tablespace new_tblspc location '/home/postgres/tblspc';$ ls -l /home/postgres/tblspc/ total 4drwx------ 4 postgres postgres PG_12_201909212新建表空间的目录由pg_tblspc子目录中的软链接寻址,链接名与表空间的OID值相同如果在表空间下创建一个新的数据库(OID是90209),那么它的目录将在版本特定的子目录下创建ls -l /home/postgres/tblspc/PG_12_201909212 total 4drwxr-x---. 2 postgres postgres 4096 Mar 30 09:27 90209在base目录下创建的数据库上创建新表指定到新建的表空间testdb=# create table test1 (id int) tablespace new_tblspc;testdb=# SELECT pg_relation_filepath('test1'); pg_relation_filepathpg_tblspc/90208/PG_12_201909212/16385/90210 #在新表空间目录下创建数据库目录以上就是Part 5 - PG数据库结构 的内容,大家可以进群一起探讨,QQ交流群:75202 7153钉钉交流群:3582 2460,1月13日晚上8点会有公开课专门讲解此内容
图片PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助。Part 1:PG简介PostgreSQL的特点 PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高 的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix( AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。 作为一种企业级数据库,PostgreSQL以它所具有的各种高级功能而自豪,像多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在 线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。它支持国际 字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。权限值最大单个数据库大小 不限最大数据单表大小 32 TB单条记录最大 1.6 TB单字段最大允许 1 GB单表允许最大记录数 不限单表最大字段数 250-1600(取决于字段类型)单表最大索引数 不限功能与兼容性 PostgreSQL对SQL标准高度兼容,它实现的功能完全遵守于ANSI-SQL:2008标准。目前完全支持子查询(包括在FROM中的子查询)、授权读取和可序列化的 事务隔离级别。同时PostgreSQL也具有完整的关系数据库系统的目录功能,它支持单数据库的多模式功能,每一个目录可通过SQL标准中定义的字典信息模式 进行访问。 Data集成性功能包括(复合)主键、含有严格约束或级联更新和删除功能的外键、录入检查约束、唯一性约束和非空约束。 PostgreSQL也具有很多扩展模块和更高级的功能。其中有为方便使用的通过序列实现的自增字段、 允许返回部分记录集的LIMIT/OFFSET选项,也支持复合、唯一、部分和函数式索引,索引并支持B-Tree、R-Tree、Hash或GiST存储方式。 高度可定制性 PostgreSQL的存储过程开发可以使用众多的程序语言,包括Java、Perl、Python、Ruby、Tcl、C/C++和自带的PL/pgSQL,其中的PL/pgSQL与Oracle的 PL/SQL很相似,内置了数百个函数,功能从基本的算术计算和字符串处理到加 密逻辑计算并与Oracle有高度兼容性。 由于有很多的存储过程语言可以使用,这样也产生了很多的库接口,这样允许各 种编译型或是解释型的语言在PostgreSQL进行使用,包括Java(JDBC)、ODBC、Perl、Python、Ruby、C、C++、PHP、Lisp、Scheme和Qt等。 最重要的一点,PostgreSQL的源代码可以自由获取,它的授权是在非常自由的开源授权下,这种授权允许用户在各种开源或是闭源项目中使用、修改和发布 PostgreSQL的源代码。用户对源代码的可以按用户意愿进行任何修改、改进。版本介绍1.0 (1995-0A) 10 (2017-10-05)6.0 (1997-01-29) 11 (2018-10-18)7.0 (2000-05-08) 12 (2019-10-03)8.0 (2005-01-19) 13 (2020-09-24)9.0 (2010-09-20) 14 (2021-09-30)9.5 (2016-01-07) 15 (2022-05-20)9.6 (2016-09-29) 学习资源官网 https://www.postgresql.org中文社区 http://www.postgres.cn功能表 https://www.postgresql.org/about/featurematrix/官方下载 https://www.postgresql.org/download/在线文档 https://www.postgresql.org/docs/官方代码库 https://git.postgresql.org/gitweb/?p=postgresql.git官方邮件列表 https://www.postgresql.org/list/在线其它学习资源 https://www.postgresql.org/docs/online-resources/在线其它学习资源 https://db.cuug.com客户群图片图片软件下载FreeBSD https://www.postgresql.org/download/freebsd/OpenBSD https://www.postgresql.org/download/openbsd/RedHat https://www.postgresql.org/download/linux/redhat/Debian https://www.postgresql.org/download/linux/debian/Ubuntu https://www.postgresql.org/download/linux/ubuntu/SuSE https://software.opensuse.org/search?q=postgresqlmacOSEDB https://www.enterprisedb.com/downloads/postgres-postgresql-downloadsSolaris https://www.postgresql.org/ftp/binary/WindowsHGDB http://www.highgo.com/content.php?catid=72#fl1源码包 https://www.postgresql.org/ftp/source/图片基于PG的国产数据库• 华为GaussDB• 人大金仓KingBase • 阿里Polardb-postgres • 腾讯TDSQL-postgres • 瀚高HighgoDatabase国产数据库400多家,90%基于PostgreSQL开发开源国产 创新中国PostgreSQL助飞中国数据库企业
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第8题 Choose two. Identify two ways to significantly improve data security. A) Configure mysqld to run as the system admin account, such as root. B) Use a private network behind a firewall. C) Configure mysqld to use only networked disks. D) Configure MySQL to have only one administrative account. E) Configure mysqld to use only local disks or attached disks and to have its own account in the host system.
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第7题 Choose the best answer. You want to log only the changes made to the database objects and data on the MySQL system. Which log will do this by default? A) slow query log B) binary log C) error log D) general query log E) audit log
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第6题 Choose the best answer. You are having performance issues with MySQL instances. Those servers are monitored with MySQL Enterprise Monitor. Using Query Analyzer, where do you begin to look for problem queries? A) Sort the "Exec" column and check for SQL queries with low Query Response Time index (QRTi) values. B) Look for queries with low total latency times in the Latency section in the times series graph. C) Sort the "Exec" column and check for SQL queries with high Query Response Time index (QRTi) values. D) Look for queries with big prolonged spikes in row activity/access graph in the times series graph.
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第5题 Choose four. A newly deployed replication master database has a 10/90 read to write ratio. The complete dataset is currently 28G but will never fluctuate beyond +-10%. The database storage system consists of two locally attached PCI- E Enterprise grade disks (mounted as /data1 and /data2) The server is dedicated to this MySQL Instance. System memory capacity is 64G. The my.cnf file contents are displayed here: [mysqld] datadir=/data1/ innodb_buffer_pool_size=28G innodb_log_file_size=150M Which four changes provide the most performance improvement, without sacrificing data integrity? A) innodb-doublewrite=off B) innodb_log_group_home_dir=/data2/ C) innodb_log_file_size=1G D) innodb_undo_directory=/dev/shm E) log-bin=/data2/ F) innodb_flush_log_at_trx_commit=0 G) sync_binlog=0 H) innodb_buffer_pool_size=32G I) disable-log-bin
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第4题 4、Choose two. User fwuser@localhost is registered with the MySQL Enterprise Firewall and has been granted privileges for the SAKILA database. Examine these commands that you executed and the results: mysql> SELECT MODE FROM INFORMATION_SCHEMA.MYSQL_FIREWALL_USERS WHERE USERHOST = 'fwuser@localhost' ; MODE ------------- PROTECTING mysql> SELECT RULE FROM INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST WHERE USERHOST = 'fwuser@localhost'; You then execute this command: mysql> CALL mysql.sp_set_firewall_mode('fwuser@localhost' , 'RESET') ; Which two are true? A) The fwuser@localhost account is removed from the mysql.user table. B) The information_schema.MYSQL_FIREWALL_WHITELIST table is truncated. C) The whitelist of the fwuser@localhost account is truncated. D) The mysql.firewall_users table is truncated. E) The firewall resets all options to default values. F) The fwuser@localhost account mode is set to DETECTING. G) The fwuser@localhost account mode is set to OFF.
3、Choose the best answer. Examine this statement, which executes successfully: You want to improve the performance of this query: SELECT Name FROM world.city WHERE Population BETWEEN 1000000 AND 2000000; Which change enables the query to succeed while accessing fewer rows? A) ALTER TABLE world.city ADD INDEX (Name) ; B) ALTER TABLE world.city ADD SPATIAL INDEX (Name) ; C) ALTER TABLE world.city ADD FULLTEXT INDEX (Name) ; D) ALTER TABLE world.city ADD FULLTEXT INDEX (Population) ; E) ALTER TABLE world.city ADD SPATIAL INDEX (Population) ; F) ALTER TABLE world.city ADD INDEX (Population) ;
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第2题 2、Choose two. Which two actions can obtain information about deadlocks? A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. B) Enable the innodb_status_output_locks global parameter. C) Enable the innodb_print_all_deadlocks global parameter. D) Run the SHOW ENGINE INNODB STATUS command from the mysql client. E) Use the sys.innodb_lock_waits view.
Mysql 8.0 OCP认证考试原题题库整理(CUUG内部资料)-第1题 1、Choose the best answer. Examine these statements and output: mysql> GRANT PROXY ON accounting@localhost TO ' '@'%' ; mysql> SELECT USER(), CURRENT_USER(), @@proxy_user; Which statement is true? A) The user failed to define a username and the connecting username defaulted to ' '@'%'. B) The user is authorized as the rsmith@localhost user. C) The user is authenticated as the anonymous proxy user ' '@'%'. D) The user is logged in with --user=accounting as an option. E) The user is authorized as the accounting@localhost user.
时间:2020年8月15日, 南京 地点:阿里云南京分公司 地址:南京市玄武区珠江路498号INNO未来城二楼(星巴克未来城店旁2号门入) 网上现场直播待定 论坛简介: 了解高校在数据库人才培养方面的困境、企业在数据库人才方向的用人需求等,探讨高校、企业的对接入口和方式。 会议由CCF南京、CUUG、国产数据库和开源社区联盟以及各行业数据库专家共同策划组织,联合百家名企与百家高校,为高校应用型人才培养提供指导方向,联合企业走进高校,成立《开源数据库工作室》,免费授课,培养数据库人才,让学生能够高端、高薪、高起点就业。 论坛程序(北京时间) 2020年8月15日上午9:00 - 9:20 论坛开场致词 阿里数据库专家周正中 探探科技首席数据库专家张文升 CCF南京孙国梓 CUUG总经理刘建国 2020年8月15日上午 9:20 - 9:40 南航国产数据库研制及经验分享 秦小麟教授(南京航空航天大学数据管理与知识工程研究所所长) 2020年8月15日上午 9:40 - 10:00 阿里云解决方案与人才培养计划 周正中校长 2020年8月15日上午 10:10 - 10:30 武汉大学《开源数据库人才教育》经验分享 彭煜玮副教授 2020年8月15日上午 10:30 - 10:50 南京航空航天大学计算机科学与技术学院/人工智能学院 院长 陈兵教授 2020年8月15日上午 10:50 - 11:10 迪思杰战略部署与DSG学院&高校合作同盟计划 韩宏坤总裁 2020年8月15日上午 11:10 - 11:30 亚信数据库创新实验室与高校开源数据库实验室战略结盟 姜明俊总监 2020年8月15日上午 11:30 - 12:00 校企合作、企企合作签约仪式 特邀嘉宾: 秦小麟 教授 CCF高级会员,CCF数据库专委会委员,南京航空航天大学教授、博士生导师,曾任南京航空航天大学计算机科学与工程系副主任,信息科学与技术学院副院长、院长等,现任数据管理与知识工程研究所所长。自1988年以来一直从事计算机方面的教学和科研工作,重点研究数据管理和数据库管理系统技术。先后主持国家、省部级科研项目30余项,研制出多个数据库管理系统的原型系统,包括安全DBMS、时空DBMS、实时DBMS、嵌入式DBMS等。获得省部级科技进步奖9项,发表学术论文250余篇,出版教材5部。 报告题目:南航国产数据库研制及经验分享 报告摘要:南航研制DBMS的概况、简要介绍实现的一些原型系统,重点介绍时空数据、具有可生存性的安全数据库。 周正中 阿里数据库专家 阿里云数据库专家、PG中国社区大学校长,TruX实验室副主任。他的主要研究方向包括:软件调试,软件安全,代码搜索,软件工程中的机器学习和自然语言处理,以及网络安全。 报告题目:阿里云解决方案与人才培养计划 报告摘要:沉淀阿里云十年、百万用户最全面的业务场景,结合阿里巴巴集团技术创新能力,提供云原生、数据智能、零售、金融、制造等多个领域的解决方案。以及阿里人才培养方案,阿里巴巴是怎么面试的、阿里巴巴闻味官是怎么回事、阿里巴巴职级怎么设置、阿里巴巴内部怎么晋升、阿里巴巴如何做培训的、阿里巴巴管理三板斧是什么。 彭煜玮 副教授 目前的研究方向包括:制造业大数据、族谱数据、数据水印、时空数据库、PostgreSQL等。 CCF专业会员,CCF数据库专委会委员,SIGMOD中国分部执行委员,PostgreSQL中国用户会常务委员。 报告题目:武汉大学《开源数据库人才教育》经验分享 报告摘要:作为全球技术最先进、功能最丰富的开源数据库——PostgreSQL,凭借着强大的性能,易用性等等一系列优点,一直是热爱开源数据库技术人员讨论的热点,也是发展趋势最快的,越来越多的企业也在使用PG作为IT底层基础设施。 CCF南京和PostgreSQL中文社区秉承为企业和社会培养PostgreSQL数据库人才的服务宗旨,举办了本次走进南京的活动,向即将步入社会的学生群体分享最前沿的pg数据库技术,讲述数据库技术发展现状和趋势以及院校人才培养规划的相关建议。 主办单位: 中国计算机学会 承办单位: CCF南京会员活动中心 协办单位: 阿里云 开源中国 开源&国产数据库联盟 CUUG(中国UNIX用户协会) 北京神脑资讯技术有限公司
国际形势、国内趋势,现在中国数据库市场暗流涌动,这次盛会,让处于中国数据库一线的专家们为你解惑释疑。 此次大会由中国计算机学会、开源中国、开源&国产数据库联盟、神脑资讯(CUUG)等单位主办,特邀阿里云、腾讯、迪思杰、亚信科技、苏宁易购、人大金仓、南大通用等企业代表,特邀北京大学、武汉大学、南京财经大学等院校代表,共同探讨国产数据库的发展,为各行各业提供去‘O’的全面解决方案,为现在身为DBA或者即将走上这条路的人士提供指导方向。 参会嘉宾: 周正中 (网名:德哥、阿里云数据库专家、PG 中国社区大学校长) 秦小麟 (南京航空航天大学数据管理与知识工程研究所所长,江苏省政协常委) 彭煜玮 (武汉大学计算机学院教授,CCF 数据库专委会委员) 孙国梓 (南京邮电大学教授,CCF 南京副主席) 韩宏坤 (迪思杰(北京)数据管理技术有限公司总裁) 张文升 (PG 中国社区核心成员,著有《PostgreSQL 实战》和《PostgreSQL 内幕探索》畅销书籍) 陈河堆 (中兴通讯数据库平台负责人,PG 中国社区核心成员,著有《深入浅出 PostgreSQL》畅销书籍) 姜明俊 (亚信科技数据库技术创新实验室总监,PG 中国社区核心成员) 陈华军 (苏宁易购 IT 总部资深技术经理,PG 中国社区核心成员) 梁红凤 (北京人大金仓信息技术股份有限公司副总裁) 杜国旺 (南大通用副总裁,首席战略官) 陈卫星 (北京神脑资讯技术有限公司(CUUG)总裁) 刘建国 (北京神脑资讯技术有限公司(CUUG)总经理) 会议方式: 线下:阿里云创新中心基地 报名方式:https://jinshuju.net/f/gvUtP5 线上:同步直播 直播地址:https://wx.vzan.com/live/tvchat-778077007 参会人员奖项: 一等奖:PG中级认证课程(价值6800元) 5名 二等奖:PG高级课程(价值5800) 5名 三等奖:《PostgreSQL 实战》《深入浅出PostgreSQL》作者现场签名 各10本 四等奖:峰会精美纪念品 30名 五等奖:峰会纪念T恤 400名 报名方式、直播地址、主题分享、会议抽奖等内容会在群内公布 QQ群1:913256657
1、Toast简介 2、Toast的存储方式 3、Toast4种压缩策略 4、Toast表的计算方式 5、Toast表的优点与缺点 6、与Oracle大对象存储方式对比 由于PG数据库不支持一行的数据跨越多块存储,Toast技术解决了大字段值的存储问题,类似于Oracle的大对象储存方式,本次技术沙龙全方面介绍Toast技术特点与应用场景。 道可道,非常道;名可名,非常名。 时间:2020-07-26 20:00-21:00 主讲:CUUG陈卫星老师 地址:腾讯课堂搜索‘cuug’
继11g和12c之后,OCP 19c考试题库解析已于2020年7月17日在腾讯课堂免费直播,此为国内首家19c的题库解析。 、**、 CUUG的OCP考试题库,从2018年开始讲解,当时052考试题一变再变,让很多考生考试失利,所以我们专门收集整理了最新版本的考题,并由老师给出答案,并在腾讯课堂上免费发布,开始讲解的内容为oracle 11g版本的052、053等科目。 随着11g版本的“退出”,继续讲解oracle 12c版本的题库解析,包括071、062、063等科目的考试原题。 现在,CUUG已经开始了OCP 19c题库解析。希望对大家考19c OCP有帮助。 时间:每周五晚上8点-9点 、、 CUUG的OCP考试题库解析,已经讲了94期(截止2020年7月17日),即将满百期,有想进一步了解OCP考试的同学,请联系我们。
1、TXIDS使用规则概述 2、为什么要冻结TXIDS 3、冻结模式触发机制 4、冻结机制对于可见性规则、CLOGs的影响 TXIDS冷冻机制是PG特有事务id的管理机制,能够实现无限制的循环使用事务id号,该机制比Oracle的SCN号管理机制更为先级。本次网上技术沙龙深入浅出的剖析TXIDS冷冻原理与管理。 时间:2020-07-04 20:00-21:00 地址:https://ke.qq.com/course/1466978
十四、PostgreSQL 12.2企业级应用系列公开课:调优系列公开课(一) 1、如何获得慢查询的SQL语句2、常见参数设置因子与应用案例2.1、shared_buffers2.2、wal_buffers2.3、work_mem2.4、maintenance_work_mem2.5、fsync2.6、synchronous_commit2.7、checkpoint_timeout,checkpoint_completion_target2.8、default_statistics_target3、pg_stat_statements部署与使用3.1、查看TOP 5 最耗时sql语句3.2、查看执行次数最多的sql语句3.3、.... 本课程做为PG调优线上技术沙龙的第一篇,抛砖引玉的解释数据库调优的基础框架。后续的公开课将Oracle的调优思路与PG的相互借鉴,起到触类旁通的作用。 时间:2020-06-13 20:00-21:00 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PostgreSQL的PGCA和PGCE认证,可以联系CUUG咨询老师。
十三、PostgreSQL 12.2 PG&Oracle 备份&恢复炫技表演赛 1、PG&Oracle逻辑备份与恢复技术大比拼 2、PG&Oracle物理备份与恢复技术联赛 3、PG&Oracle闪回技术大拼杀 没有比较就没有伤害,知己知彼方能运筹帷幄,在国产化和开源数据库大浪潮的趋势下,早做准备,从容应对。 时间:2020-06-06 20:00-21:00 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。
十二、PostgreSQL Foreign Data Wrappers(FDW)精讲 1、FDW简介 2、FDW工作原理 3、FDW部署 4、PG与PG/MYSQL/ORACLE等数据库访问。 本次线上技术沙龙对FDW进行精细解剖,阐述FDW工作原理与其它类似数据库之间数据访问的优势对比。为将来从Orcle迁移到PG提供了一个很好的解决方案。 时间:2020-05-30 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。
十、PostgreSQL 12.2 IN/EXISTS/ANY/ALL/JOIN百花争鸣 1、IN/EXISTS/ANY/ALL哪个好? 2、相同业务IN/EXISTS/ANY/ALL/INNER JOIN解决方案对比。 3、相同业务NOT (IN/EXISTS/ANY/ALL)解决方案对比。 4、数据量的增长对性能带来的严重影响如何解决? 5、我们是否应该意识到更多的复杂性? 6、给开发人员的建议! 这是针对PostgreSQL数据库编写SQL查询的开发人员提出的最常见的问题之一。数据量的增长对性能带来的挑战是非常残酷的,我们该如何应对? 本次公开课目的不是为了支持任何一种特殊的查询方式,而是为了阐明哪里出了问题,应该考虑什么。 时间:2020-05-16 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
九、PostgreSQL 12.2 并行查询调优 1、PG并行概述 2、TPC-H测试环境搭建 3、Parallel Aggregation描述 4、分配多少workers最佳? 5、PG并行工作机制? 6、为什么没有使用并行查询? 7、Nested loop joins、Hash Join、Merge Join并行处理方式 8、Partition-wise join并行处理案例 9、Parallel Append操作机制 10、相关重要参数 从9.5开始PG就开始支持并行查询,并且在新的版本中不断在增强,本次技术公开课着重给大家阐述并行实现的原理,以及在不同运行阶段的并行特点,同时还展示了不同状态下的性能对比。Oracle也只到了11g以后对并行进行了全面的支持,而PG从很早开始就支持并行查询,真是可喜可贺。 时间:2020-05-09 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
八、PostgreSQL 12.2 数据库事务隔离级别及其应用场景 1、ACID及各种事务隔离级别概述 2、多版本并发控制(MVCC)技术介绍及变体 3、脏读和幻读的现象及解决方式 4、可重复读及应用场景 5、序列读及应用场景 6、如何使用PG的可见性规则与快照隔离(SI)技术解决问题 现实生活多样的应用场景中如果解决不好各种事务的隔离级别,让人容易导致抑郁、猜疑、夫妻关系不和等等症状。数据库技术也可以悬壶济世。 时间:2020-05-02 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
七、PostgreSQL 12.2企业级应用系列公开课 Autovacuum调优 1、什么是 autovacuum? 2、为什么需要 autovacuum? 3、记录autovacuum操作日志 4、什么时候在表上做autovacuum? 5、如何确定需要调整其autovacuum setting的表? 6、一次可以运行多少个autovacuum过程最优? 7、实际应用案例 PostgreSQL数据库的性能可能会受到死元组的影响,因为它们会继续占用空间并导致膨胀。本次公开课探讨postgres的autovacuum内部原理,以及如何维护高性能PostgreSQL数据库。 时间:2020-04-25 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
六:PostgreSQL 12.2企业级应用公开课(6):可见性验证 1、Transaction ids Structure 2、Tuples Structure 3、dml操作PG操作原理 4、Transaction Status有哪些 5、什么是Transaction Snapshot 6、行可见性检查规则 由于PG数据库在update的时候是把原来的行逻辑上删除,重新插入新行,这样子就导致块中包含有很多不可用的行,我们在查询的时候PG通过什么样的规则去判断哪些行可见,哪些行不可见呢本课我们进行深入的研究。 首宜求其旨意,次必寻其脉络,然后乃可以探骊得珠也。 本课适合PG管理员和PG开发工程师。 时间:2020-04-16 20:00-21:00 地址: 视频: 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
五、PostgreSQL 12.2企业级应用公开课(5):单表查询成本估算算法 1、Sequential Scan成本估算算法 2、Index Scan成本估算算法 2.1、索引cpu成本、表cpu成本和索引IO成本算法 2.2、Selectivity算法 2.3、indexCorrelation与表之间的关系 本课程阐述PostgreSQL优化器的成本估算原理、估算公式、算法等深层的知识点,为将来调优打下坚实的理论基础,同时通过本课程能够对Oracle优化器也会产生更多了解,相互映衬,是学习数据库不可或缺的硬核技术 时间:2020-04-11 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频:联系CUUG咨询老师要下载链接 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。
三、PostgreSQL 12.2企业级应用公开课(3):流复制高级配置 1、PG流复制异步配置 2、PG主备切换 3、PG流复制同步配置 4、一主二备同步和异步配置方式 5、PG流复制日常维护 时间:2020-03-28 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频:联系cuug咨询老师要下载链接 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训考试机构,如想考PG认证,可以联系CUUG咨询老师。
二、PostgreSQL 12.2企业级应用公开课(2):Point-in-Time Recovery (PITR) 1、基于target_name恢复 2、基于target_time恢复 3、基于target_xid恢复 4、基于target_lsn恢复 时间:2020-03-21 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频:联系www.cuug.com咨询老师要下载链接 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训考试机构,如想考PG认证,可以联系CUUG咨询老师。
一、PostgreSQL 12.2企业级应用公开课(1):备份恢复 1、pg_dump备份以及进行选择性恢复 2、pg_dumpall备份与恢复 3、COPY备份与恢复 4、pg_basebackup与恢复 5、PG快照备份与恢复 时间:2020-03-14 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频:联系www.cuug.com咨询老师要下载链接 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训考试机构,如想考PG认证,可以联系CUUG咨询老师。
四、PostgreSQL 12.2企业级应用公开课(4):HA(双机热备)实现方案 1、PG 高可用性概述 2、PGPOOL-II安装与配置 3、PGPOOL+流复制实现HA 4、HA故障切换与主备维护 5、HA性能测试 时间:2020-04-04 20:00-21:00 地址:https://ke.qq.com/course/1466978 视频:联系CUUG咨询老师要下载链接 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训考试机构,如想考PG认证,可以联系CUUG咨询老师。
Choose the best answer. Exanine the desciption of the EMPLOYEES table: Nane Null Type EMP_ID NOT NUL NUMBER EMP_NAME VARCHAR2 (40) DEPT_ID NUMBER(2) SALARY NUMBER(8,2) JOIN_DATE DATE Which query is valid? A) SELECT dept_id, join_date, SUM(salary) FROM employees GROUP BY dept_id,join_date; B) SELECT depe_id,join_date, SUM(salary) FROM employees GROUP BY dept_id: C) SELECT dept_id,MAX (AVG (salary)) FROM employees GROUP BY dept_id; D) SELECT dept_ id,AVG (MAX (salary)) FROM employees GROUP BY dapt_id; Anser:A (解析:sum 函数如果遇到空值会跳过,不会造成最后的值为空。 其它的查询会出现错误: SQL> select avg(max(sal)) from emp2 group by deptno; AVG(MAX(SAL)) 3616.66667 SQL> select deptno,avg(max(sal)) from emp2 group by deptno; select deptno,avg(max(sal)) from emp2 group by deptno * 第 1 行出现错误: ORA-00937: 不是单组分组函数 )
Examine these facts about a database: The database default tablespace to EXAMPLE. DEFERRED_SEGMENT_CREATION is TRUE (原来为 FALSE,题目有错) Examine these commands: SQL> CREATE USER user1 IDENTIFIED BY oracle_4U PASSWORD EXPIRE; User created. SQL>ALTER USER user1 IDENTIFIED BY oracle; User altered. SQL>GRANT CREATE SESSION TO user1; Grant succeeded. SQL>GRANT CREATE TABLE TO user1 WITH ADMIN OPTION; Grant succeeded. Which four are true? A)User1 can connect to the database instance. B)User1 can create in the EXAMPLE tablespace. C)User1 must change the password at first login. D)User1 can grant the CREATE SESSION privilege to other users. E)User1 can grant the CREATE TABLE privilege to other users. F)User1 can REVOKE the CREATE TABLE privilege from users that were granted the privilege by SYS . G)User1 can REVOKE the CREATE SESSION privilege from users that were granted the privilege by SYS . Answer: ABEF 赵: A 对,create session 就是允许使用这个用户在服务器上创建 session。就是允许这个用户登录。 C 错,已测试。PASSWORD EXPIRE 使密码过期,用户 user1 刚创建时用了 EXPIRE,在下次登录时必须修改密码。但是接下来通过 alter 命令行修改了他的密码,所以下次 USER1 登录数据库时就不必再修改密码了。 D 错,授权给 user1 用户 create session 权限 时没有用 with admin option。所以他不能将这个权限授给他人。 F 对,有 WITH ADMIN OPTION 权限的用户,可以收回其他用户的系统权限。 G 错,授权 create session 时没有用 WITH ADMIN OPTION,不能收回其他用户的系统权限。
In one of your databases: 1.USER1 and USER2 have no system privileges. 2.ROLE1 only has these privileges: ?CREATE SESSION ?CREATE TABLE ?CREATE VIEW Examine these commands: SQL> conn / as sysdba Connected. SQL> GRANT create table, role1 TO user1 WITH ADMIN OPTION; Grant succeeded. SQL> conn user1/oracle_4U Connected. SQL> GRANT role1 TO user2; Grant succeeded. Which command would you execute and as which user, to revoke the create table privilege from USER2? A)REVOKE CREATE TABLE FROM user2 as USER1 B)REVOKE CREATE TABLE FROM user1 as SYS C)REVOKE CREATE TABLE FROM role1 as USER1 D)REVOKE CREATE TABLE FROM role1 as SYS E)REVOKE CREATE TABLE FROM user2 as SYS Answer: D 赵:和上题的区别是比上题多了一个选项 A。
In one of your databases: 1.USER1 and USER2 have no system privileges. 2.ROLE1 only has these privileges: ?CREATE SESSION ?CREATE TABLE ?CREATE VIEW Examine these commands: SQL> conn / as sysdba Connected. SQL> GRANT create table, role1 TO user1 WITH ADMIN OPTION; Grant succeeded. SQL> conn user1/oracle_4U Connected. SQL> GRANT role1 TO user2; Grant succeeded. Which command would you execute and as which user, to revoke the create table privilege from USER2? A)REVOKE CREATE TABLE FROM user2 as SYS B)REVOKE CREATE TABLE FROM role1 as SYS C)REVOKE CREATE TABLE FROM role1 as USER1 D)REVOKE CREATE TABLE FROM user1 as SYS Answer: B 只有 sys 用户才能够从 role 中 revoke 权限,而 user1 只能把 role 授权给其它用户,或者从其它用户回收 role。
Examine these facts about a databases: 1.USERS is the database default tablespace. 2.USER1,USER2,and USER3 have the CREATE SESSION privilege 3.They also have UNLIMITED QUOTA on the default tablespace USERS. 4.They have no other provileges. Examine these commands: SQL>conn / as sysdba Connected. SQL>GRANT CREATE TABLE TO user1 WITH ADMIN OPTION Grant succeeded SQL>conn user1/oracle_4U Connected. SQL>GRANT CREATE TABLE TO user2; Grant succeeded. SQL>GRANT CREATE TABLE TO user3 WITH ADMIN OPTION; Grant succeeded. Which two are true? A)If sys revokes CREATE TABLE from USER1,it is not revoked from USER2 and USER3 B)Any user with CREATE TABLE WITH ADMIN OPTION can revoke CREATE TABLE from USER1 C)If sys revokes CREATE TABLE from USER1,it is revoked from USER2 but not from USER3 D)Only sys and USER1 can revoke CREATE TABLE from USER3 E)Only sys can revoke CREATE TABLE from USER1. Answer: AB 赵:注意与上题的区别是,中间切换到了 user1 对 user2 和 user3 进行的授权,而不是 SYS 直接授权的。 经测试,SYS 和 USER1 可以收回 USER3 的 CREATE TABLE 权限,但 USER2 不能收回 USER3 的建表权。 USER3 可以收回 USER1 和 USER2 的 CREATE TABLE 权限。此题 D 选项虽是对的,但是其中用了 ONLY,没有 B 选项好。
2023年09月
2023年08月
2023年07月
2023年06月
2023年05月
2023年04月
2023年03月
2023年02月
2023年01月
2022年12月
2021年01月
2020年12月
2020年08月
2020年07月
-------------------------