十五. 性能优化

优化简介:

  1. PostgreSQL优化一方面是找出系统的瓶颈,提高PostgreSQL数据库整体的性能;
  2. 另一方面,需要合理的结构设计和参数调整,以提高用户操作响应的速度;
  3. 同时还要尽可能的节省系统资源,以便系统可以提供更大负荷的服务。

PostgreSQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。例如:

  • 通过优化文件系统,提高磁盘IO的读写速度;
  • 通过优化操作系统调度策略,提高PostgreSQL的在高负荷情况下负载能力;
  • 优化表结构、索引、查询语句等使查询响应更快。

15.1 优化查询

1、分析查询语句EXPLAIN

【例15.1】使用EXPLAIN语句来分析一个查询语句,执行如下语句:

EXPLAIN ANALYZE SELECT * FROM fruits;

2、索引对查询速度的影响

【例15.2】下面是查询语句中不使用索引和使用索引的对比。首先,分析未使用索引时的查询情况,EXPLAIN语句执行如下:

EXPLAIN  SELECT * FROM fruits WHERE f_name='apple';

然后,在fruits表的f_name字段上加上索引。执行添加索引的语句及结果如下:

CREATE INDEX index_name ON fruits(f_name);

现在,再分析上面的查询语句。执行的EXPLAIN语句及结果如下:

EXPLAIN ANALYZE  SELECT * FROM fruits WHERE f_name='apple';

3、优化子查询

子查询可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然可以使查询语句很灵活,但执行效率不高。执行子查询时,PostgreSQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句从临时表中查询记 录。查询完毕后,再撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

在PostgreSQL中可以使用连接(JOIN)查询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用到索引的话,性能会更好。连接之所以更有效率,是因为PostgreSQL不需要在内存中创建临时表来完成查询工作。

15.2 优化数据库结构

1、将字段很多的表分解成多个表

2、增加中间表

3、增加冗余字段

  • 设计数据库表时尽量遵循范式理论的规约,尽可能少的冗余字 段,让数据库设计看起来精致、优雅。但是,合理的加入冗余字段可以提高查询速度。

4、优化插入记录的速度

  • 删除索引
  • 使用批量插入
  • 删除外键约束
  • 禁止自动提交
  • 使用COPY批量导入

5、分析表的统计信息
PostgreSQL中提供了ANALYZE语句收集表内容的统计信息,然后把结果保存在系统表pg_statistic 里。
【例15.3】使用ANALYZ来分析fruits表,执行的语句:

ANALYZE VERBOSE fruits;

15.3 优化PostgreSQL服务器

1、优化服务器硬件

  • 配置较大的内存。足够大的内存,是提高PostgreSQL数据库性能的方法之一。内存的速度比磁盘I/0快得多,可以通过增加系统的缓冲区容量,使数据在内存中停留的时间更 长,以减少磁盘I/0。
  • 配置高速磁盘系统,以减少读盘的等待时间,提高响应速度。
  • 合理分布磁盘I/O,把磁盘I/O分散在多个设备上,以减少资源竞争,提高并行操作能力。
  • 配置多处理器,PostgreSQL是多线程的数据库,多处理器可同时执行多个线程。

2、优化PostgreSQL的参数

  • maintenance_work_mem:在装载大量的数据的时候,临时增大maintenance_work_mem 配置变量可以改进性能。
  • checkpoint_segments:PostgreSQL里面装载大量的数据可以导致检查点操作比平常更加频繁发生。
  • effective_cache_size:此参数代表PostgreSQL能够使用的最大缓存。
  • max_connections: max_connections的目的是防止max_connections * work_mem超出了实际内存大小。
  • shared_buffers:postgresql通过shared_buffers和内核和磁盘打交道,因此应该尽量大,让更多的数据缓存在shared_buffers 中。
  • work_mem:postgresql在执行排序操作时,会根据work_mem的大小决定是否将一个大的结果集拆分为几个小的和work_mem查不多大小的临时文件。

PostgreSQL:十五. 性能优化相关推荐

  1. PostgreSQL on XFS 性能优化 - 1

    概要 XFS文件系统的性能优化主要分4块 1. 逻辑卷/RAID优化部分 2. XFS mkfs 优化部分 3. XFS mount 优化部分 4. xfsctl 优化部分 以上几个部分,建议了解原理 ...

  2. 数据库面试题【十五、优化查询过程中的数据访问】

    访问数据太多导致查询性能下降 确定应用程序是否在检索大量超过需要的数据,可能是太多行或列 确认MySQL服务器是否在分析大量不必要的数据行 避免犯如下SQL语句错误 查询不需要的数据.解决办法:使用l ...

  3. mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法

    1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样 ...

  4. 虚拟机性能测试:十五 性能分析—终极PK(PCMark综合得分)

    1.系统存储--Windows Defender 2.网络浏览与解密 3.网络浏览与解密 4.系统存储--图片导入 5.图片处理 6.图形--DirectX 9 7.系统存储--游戏 8.视频播放与转 ...

  5. 漫步最优化十五——凸函数优化

    你在穿山越岭的另一边,\textbf{你在穿山越岭的另一边,} 而我也在没有尽头的孤独路上前行.\textbf{而我也在没有尽头的孤独路上前行.} 试着体会错误,试着忍住眼泪,\textbf{试着体会 ...

  6. php百度优化,百度技术沙龙第 24 期 PHP 性能优化实践

    本文作者:HelloDeveloper 在 3 月 10 日由 @百度主办.@InfoQ 策划组织和实施的第 24 期百度技术沙龙活动上,来自百度 PHP 高级顾问,PHP 语言开发组成员惠新宸(@l ...

  7. 性能优化的方法论建设

    一. 相关概念 系统性能有两个相关的概念: Throughput ,吞吐量.也就是每秒钟可以处理的请求数,任务数. Latency, 系统延迟.也就是系统在处理一个请求或一个任务时的延迟. 而这两者之 ...

  8. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  9. numa节点_鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法

    鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网.物联网.车联网,从而催生了庞大的计算需求.但是功耗墙问题以功耗和冷却两大限制极大的影响了单核算力的发展.为了满足 ...

最新文章

  1. loadrunner11 linux服务器,Loadrunner怎么执行linux服务器上的shell脚本?
  2. 详解linux下auto工具制作Makefile源码包(制作篇)
  3. 如何查看某oracle实例下面定义了多少jobs
  4. php禁止某个链接,php – 使用htaccess忽略链接的某些部分
  5. Swift - 使用set,get确保索引加减在正常的范围内
  6. 一个简单易用的代码生成工具
  7. java 监听文件内容_java 监听文件内容变化
  8. Oracle使用hs odbc连接mssql2008
  9. oracle存储过程中数组的使用
  10. 网管必学之交换机VLAN的配置
  11. ps 缩放 颜色分类 像素和分辨率学习笔记
  12. mysql maxwait_数据库连接池 maxActive,maxIdle,maxWait参数
  13. 浮点数比较大小常用规则
  14. 利用JAVA的BFS爬虫爬出豆瓣读书的评论和标签
  15. 搭建分布式FastDFS集群
  16. js打印window.print()图片打印
  17. 《Python绝技:运用Python成为顶级黑客》python3实践记录
  18. Eclipse 创建 Hello World 工程
  19. 电源管理芯片的架构与功率
  20. 万物皆可NFT,元宇宙中的NFT到底是什么?

热门文章

  1. static_cast 和 reinterpret_cast区别
  2. 用Docker搭建WordPress博客
  3. 横向排列图片的简单方法
  4. 现在计算机学什么好找工作吗,计算机专业炙手可热,几年之后会不好找工作吗?值得学习吗?...
  5. 新奇小玩意购物网站推荐
  6. python 字符串相似度判断详解
  7. PCB板时钟电路的电磁兼容设计
  8. 计算两个向量的互信息(Mutual Information) matlab程序
  9. Double Q-Learning 阅读记录
  10. openstack命令创建内网+外网+路由+云主机