码迷,mamicode.com
首页 > 数据库 > 详细

PostgreSQL unlogged表

时间:2019-11-02 20:06:05      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:cat   RoCE   索引   表数   type   文件中   data   font   row   

PostgreSQL有一种介于正常表和临时表之间的类型表,称之为unlogged表,在该表新建的索引也属于unlogged,该表在写入数据时候并不将数据写入到持久的write-ahead log文件中,在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比正常表快几倍。

分别测试正常表和unlogged表数据插入速度区别

uber_geocoder=# \dt+
                                      List of relations
          Schema          |          Name          | Type  |  Owner   |  Size  | Description 
--------------------------+------------------------+-------+----------+--------+-------------
 uber_geocoder_tw_15q3_v2 | compiling_info         | table | postgres | 16 kB  | 
 uber_geocoder_tw_15q3_v2 | data_process_reports   | table | postgres | 16 kB  | 
 uber_geocoder_tw_15q3_v2 | info                   | table | postgres | 16 kB  | 
 uber_geocoder_tw_15q3_v2 | twn_addr_compact       | table | postgres | 774 MB | 
(4 rows)

uber_geocoder=# \timing 
Timing is on.
uber_geocoder
=# create table twn_addr_compact_loggod as select * from twn_addr_compact ; SELECT 258902 Time: 977250.581 ms

可以看到在新建正常表并插770M的数据的情况下耗时近16分钟

新建一张unlogged表并插入770M数据进行测试

uber_geocoder=# create unlogged table twn_addr_compact_unloggod as select * from twn_addr_compact ;
SELECT 258902
Time: 300683.321 ms

可以看到在同等条件下unlogged表的插入速度为5分钟,性能提高了三倍。

 感兴趣的可以将postgres进程kill掉,然后再启动数据库,就会发现我们刚才创建的unlogged表数据丢失。

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

uber_geocoder=# 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.relpersistence = u;
       schema_name        |        table_name         
--------------------------+---------------------------
 edbstore                 | emp
 uber_geocoder_tw_15q3_v2 | twn_addr_compact_unloggod
(2 rows)

如果需要批量将unlogged表修改为正常的表,则执行如下

uber_geocoder=# 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.relpersistence = u;
                             convert_logged_sql                              
-----------------------------------------------------------------------------
 ALTER TABLE edbstore.emp SET LOGGED ;
 ALTER TABLE uber_geocoder_tw_15q3_v2.twn_addr_compact_unloggod SET LOGGED ;
(2 rows)

 

PostgreSQL unlogged表

标签:cat   RoCE   索引   表数   type   文件中   data   font   row   

原文地址:https://www.cnblogs.com/ilifeilong/p/11783565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!