[转帖]金仓数据库KingbaseES V8R6 中unlogged表

数据库,kingbasees,v8r6,unlogged · 浏览次数 : 0

小编点评

**普通表与unlogged表的性能比较** | 特性 | 普通表 | unlogged表 | |---|---|---| | 数据变更记录写入到 wal 文件中 | 是 | 否 | | 插入数据速度 | 慢 | 快 | | 数据持久化 | 可以 | 不可以 | | 表体变更记录 | 可以 | 不能 | **测试结果** 测试结果表明,新建的 unlogged表插入数据的速度比普通表快了 4 倍以上。这是因为 unlogged表不记录数据变更记录,因此需要从数据表中读取数据进行插入。 **如何查看当前数据库中所有的 unlogged 表** 可以使用以下查询: ```sql SELECT n.nspname as schema_name, c.relname as table_name FROM pg_catalog.pg_namespace n, pg_catalog.pg_class c WHERE c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u'; ``` **如何将 unlogged 表修改为普通表** 可以使用以下语句: ```sql ALTER TABLE public.h_unloggod SET LOGGED ;(1 row) ```

正文

KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged。和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中。在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比普通表快几倍。

这个特性类似于oracle表的nologging特性。

下面分别测试普通表和unlogged表对于数据插入速度的区别

  1. test=# \dt+
  2. List of relations
  3. Schema | Name | Type | Owner | Size | Description
  4. --------+-----------------------------+-------+------------+------------+-------------
  5. public | ee | table | system | 8192 bytes |
  6. public | f | table | system | 8192 bytes |
  7. public | h | table | system | 104 kB |
  8. public | hH | table | system | 8192 bytes |
  9. public | kong | table | system | 16 kB |
  10. public | newspace | table | system | 48 kB |
  11. test=# \timing
  12. Timing is on.
  13. test=# create table h_loggod as select * from h ;
  14. SELECT 1000
  15. Time: 19.280 ms

可以看到在新建普通表并插104kb的数据耗时19.2毫秒

新建一张unlogged表并插入104kb数据进行测试

  1. test=# create unlogged table h_unloggod as select * from h ;
  2. SELECT 1000
  3. Time: 4.653 ms

可以看到同样大小unlogged表的插入速度为4.6毫秒,性能提高了近4倍。

注意unlogged意思是表不被归档保护,所以这时候如果数据库出现断电等异常故障,这个表数据库是不被保护了,这又是老生常谈的话题,效率与安全往往不可兼得。

如何查看当前数据库中所有的unlogged表

  1. test=# select n.nspname as schema_name,c.relname as table_name from pg_catalog.pg_namespace n, pg_catalog.pg_class c where c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u';
  2. schema_name | table_name
  3. -------------+------------
  4. public | h_unloggod
  5. (1 row)

如果需要将unlogged表修改为普通表,则执行如下语句

  1. test=# select 'ALTER TABLE'||' '||concat(n.nspname,'.' ,c.relname)||' '||'SET LOGGED ;' AS convert_logged_sql from pg_catalog.pg_namespace n, pg_catalog.pg_class c where c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u';
  2. convert_logged_sql
  3. --------------------------------------------
  4. ALTER TABLE public.h_unloggod SET LOGGED ;
  5. (1 row)

总结

如果需要加快业务上某些大表的insert速度可以开启这个特性,但是不能保证数据的安全性,不过我们可以在DML 执行完毕后,对unlogged表更为logged属性。

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树数据库组成59295 人正在系统学习中

与[转帖]金仓数据库KingbaseES V8R6 中unlogged表相似的内容:

[转帖]金仓数据库KingbaseES V8R6 中unlogged表

KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged。和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中。在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比普通表快几倍。 这个特性类似于or

[转帖]金仓数据库KingbaseES V8R6 索引膨胀

索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂、合并等,导致索引访问效率降低、维护成本增加。另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有序结构,只有符合顺序的ITEM才能插入对应的PAGE中,不像HEAP TUPLE,只要有空间就可以插

[转帖]金仓数据库KingbaseES V8R6索引坏块故障处理

案例说明: 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决。本案例复现了此类故障解决过程。 适用版本: KingbaseES V8R3/R6 一、创建测试环境 # 表结构信息prod=# \d+ test1 Table "public.test1" Column|

[转帖]金仓数据库KingbaseES 数据库参数优化

目录 一、数据库应用类型 二、主要参数 max_connections shared_buffers effective_cache_size maintenance_work_mem checkpoint_completion_target wal_buffers default_statisti

[转帖]金仓数据库KingbaseES误删除系统超级用户(superuser)权限的恢复方式

`https://blog.csdn.net/arthemis_14/article/details/129879269` 在使用KingbaseES数据库的时候,系统默认存在一个跟系统初始化用户同名的Superuser(默认是system用户,可更改)。 这个Superuser的存在其实对于权限的

[转帖]金仓数据库KingbaseES数据目录结构

KingbaseES数据库结构 [kingbase@postgresV8]$ tree -LP2data/.├── data│ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的所有关系.比如表、索引...│ ├── current_logfiles. # 记录当前被日志收集器写入的

[转帖]金仓数据库KingbaseES表空间介绍

1、表空间的概念 KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。 2、表空间的作用 通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。 如果初始化集簇所在的分区或者卷用光了空间,

[转帖]金仓数据库KingbaseES表空间(tablespace)知多少

金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等。一旦表空间被创建,那么就可以在创建数据库对象时通过名称来引用他。 一个数据库可以有一个或多个表空间,创建数据库时自动创建系统表空间sys_defau

[转帖]金仓数据库KingbaseES分区表 -- 声明式创建分区表

https://www.modb.pro/db/638045 1. 创建分区表同时创建分区 1.1 准备环境 # 创建分区表同时创建分区 create table tb1(id bigint,stat date,no bigint,pdate date,info varchar2(50)) part

[转帖]如何通过JMeter测试金仓数据库KingbaseES并搭建环境

1.安装JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,主要用于对软件的压力测试,它最初被设计用于Web应用测试,但后来扩展到其它测试领域。它可测试静态、动态资源,如静态文件、Java小服务程序、CGI脚本、Java对象、数据库等等。JMeter可以用于对