博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL10.5 - 创建索引的思考
阅读量:5754 次
发布时间:2019-06-18

本文共 795 字,大约阅读时间需要 2 分钟。

总体感觉整个索引创建的比较慢,PostgreSQL10没有并行创建索引的功能,所以执行过程中,仅用到了服务器的一个核心来执行计算。索引创建是一个高CPU消耗的工作,CPU基本会跑满,会用到backend的两个work_mem进行排序,并没有什么实质的IO操作,读写操作会在中间和最后分段批量执行。

背景:我现在手头有一个表,原始数据有6000万,表大小为6GB,用来做测试。发现查询效率不高,故增加索引提高查询性能。

环境:Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz, 128GB DDR3,3块1w转做的RAID5。

过程:

1.数据库初始化的时候,所有参数都做了优化,创建索引时,单独在session级别临时调整maintanance_work_mem,work_mem和temp buffer。

2.执行语句

alter table xxx add PRIMARY KEY (col1, col2);

3.这个表添加完主键后,全表大小由6G变成10G,可见索引列比较大。

4.创建索引共花费100分钟,有点慢。

创建索引过程中,观察后台资源产生波动的规律为:单核CPU占用100%没有IO-->中间穿插两次IO出现读并且由单核切换为多核心计算-->最后出现多核与单核交替忙碌+IO读写,猜测应该是计算完成后写入索引到磁盘。阶段截图如下:

结语:总体来讲大的字段创建索引相当慢,拿这个表来说,6G的表数据入库用了10几分钟,但是创建一个4G的索引竟然用了100分钟,PG10并没有什么更好的办法解决这个问题。

本文由【闻术苑】发布于开源中国,原文链接:https://my.oschina.net/javacy/blog/3019438

转载于:https://www.cnblogs.com/xibuhaohao/p/11062828.html

你可能感兴趣的文章
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
修改hosts文件里面的主机名,oralce asm无法启动
查看>>
Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>
MongoDB实战系列之五:mongodb的分片配置
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
Java Tomcat SSL 服务端/客户端双向认证(二)
查看>>
java基础(1)
查看>>