PostgreSQL修炼之道之数据库优化(十八)

news2024/11/25 4:26:48

12.1 数据库优化准则和方法

12.1.1 数据库优化准则

        数据库优化的思路有很多种。比较常用的是下面两种优化思路。

  1. 第一种思路:有人说过,“The fastest way to do something is don't do it”,意思是说,“做得最快的方法就是不做”。从这个思路上来说,把一些无用的步骤或作用不大的步骤去掉就是一种优化。
  2. 第二种思路:做同样一件事情,要想更快有多种方法,最简单的方法就是换硬件,让数据库跑在更快的硬件上。但换硬件一般都是最后的选择,除此之外,最有效的方法是优化算法,如让SQL走到更优的执行计划上。

在数据库优化中,主要有以下优化指标。

  • 响应时间:衡量数据库系统与用户交互时多久能够发出响应。
  • 吞吐量:衡量在单位时间内可以完成的数据库任务。进行数据库优化时,笔者都是围绕着上述指标进行优化的。数据库优化工作中,第一项就是确定优化目标。
  • 性能目标:如CPU利用率或IOPS需要降到多少。
  • 响应时间:需要从多少毫秒降到多少毫秒。
  • 吞吐量:每秒处理的SQL数或QPS需要提高到多少。

一个已运行的数据库系统,如果前期设计不合理、性能不高,后期在优化时会非常困难,有可能永远无法达到高性能,因此,在新建一套数据库系统前,首要的事应该是设计优化。良好的设计能最大限度地发挥系统的性能。

12.1.2 优化方法

        优化的第一件事是确定目标,那么要如何确定一个合理的目标呢?这就需要使用测试工具。熟练使用常用的测试工具是做数据库优化的基础。下面是一些常用的测试工具。

  • memtest86+:内存测试工具。
  • STREAM:内存测试工具。
  • sysbench:综合测试工具,可以测试CPU、I/O、数据库等。
  • pgbench:PostgreSQL自带的测试工具,可以仿真TPC-B的测试模型。
  • fio:最强大的免费I/O测试工具。
  • orion:Oracle的I/O测试工具,测试裸设备的I/O能力,功能比fio要少,但使用简单。

熟练掌握以上几种测试工具的使用方法,对数据库的优化很有帮助。

        在数据库优化中,首先需要了解一些常用硬件的相关知识,熟悉这些硬件的特性和性能,才能知道目前数据库系统使用的硬件是否到达了瓶颈、更换硬件是否能提高数据库的性能。

12.2 硬件知识

CPU、内存、网络、硬盘的响应时间和吞吐量都是不一样的,了解这些知识,有助于理解如何优化硬件。

 12.2.1 CPU及服务器体系结构

服务器系统可以分为以下几种体系结构。
(1)SMP/UMA -Symmetric Multi Processing/Uniform Memory
Architecture

  • 优点:服务器中多CPU对称工作,无主次关系。各CPU共享相同的物理内存,访问内存任何地址所需的时间相同,因此程序设计较为简单。
  • 缺点:因多CPU无主次关系,需要解决内存访问冲突,所以硬件实现成本高。

(2)NUMA-Non-Uniform Memory Access

  • 优点:多CPU模块,每个CPU模块具有独立的本地内存(快),但访问其他CPU内存(慢),硬件实现成本低。
  • 缺点:全局内存访问性能不一致;设计程序时需要特殊考虑。

(3)MPP-Massive Parallel Processing·

  • 优点:由多个SMP服务器通过节点互联网络连接而成,每个节点都可访问本地资源(内存、存储等),完全无共享(Share-Nothing)。最易扩展,软件层面即可实现。
  • 缺点:数据重分布;程序设计复杂。

 12.2.2 内存

        内存是CPU与外部沟通的桥梁。CPU运算时所需的数据都临时保存在内存中,计算机的所有程序也都运行在内存中,内存通常也用于硬盘等外部存储器的数据缓存。
内存从硬件上分为以下几种。

  • SRAM:静态随机存储器。随机是指数据不是线性依次存储的,而是自由指定地址进行数据读写的。CPU的cache一般使用这种存储方式,特点是速度快但造价高,不能大规模使用。
  • DRAM:动态随机存储器。动态是指存储阵列需要不断刷新来保证数据不丢失。造价比SRAM低得多,但速度也慢一些。
  • SDRAM:同步动态随机存储器,同步是指工作时需要同步时钟,内部命令的发送与数据的传输都以它为基准。
  • DDR SDRAM:双倍数据传输率的SDRAM,DDR是“Double Data Rate”的缩写。普通的SDRAM在一个时钟周期内只传输一次数据,即它在时钟的上升期进行数据传输;而DDR内存则在一个时钟周期的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。DDR内存又分DDR1、DDR2、DDR3、DDR4几种,分别对应第一代、第二代、第三代、第四代DDR。目前主流的内存为DDR4内存。

12.2.3 硬盘

硬盘按接口可以分为以下3种。

  • ATA系列:包括较早的硬盘接口,比如IDE(Integrated DriveElectronics)、PATA(Parallel ATA)及SATA(Serial ATA)。
  • SCSI系列:包括早期的并行SCSI和现在使用较广泛的SAS(串行SCSI)。
  • FC接口:支持FC协议接口的硬盘。

FC接口的硬盘一般只在专用存储上使用,通常见到的硬盘都是SATA或SAS接口的。
硬盘按存储介质来区分,可以分为以下两种。

  1. HDD:普通机械硬盘。
  2. SSD:固态硬盘。

机械硬盘和SSD硬盘都有SATA和SAS接口的这两种。

硬盘通常通过SAS或SATA接口的卡连接到主机上。SAS卡既能接SAS硬盘,也能接SATA硬盘,但SATA卡只能接SATA硬盘。
目前SAS的接口速度一般是3Gb/s或6Gb/s。

12.3 文件系统及I/O调优

        目前PostgreSQL数据库还不支持直接在裸设备上存储数据,也就是说,PostgreSQL的数据必须存储在文件系统上,故而选择一个合适的文件系统对PostgreSQL数据库来说非常重要。


12.3.1 文件系统的崩溃恢复

        文件系统中除记录文件内容信息外,还记录了一些元数据(如目录树、文件名、文件的块分配列表),以及和文件相关的一些属性(如文件名、文件的创建时间等),还有磁盘的空间分配信息(如哪些块已被分配、哪些块是空闲的)。
        在写一个文件时,除了写文件的内容信息外,还会写一些元数据。为了保证数据的可靠性,在出现宕机等异常情况后,文件系统除了要保证元数据本身一致,还要求文件内容的数据与元数据之间也是一致的。
        元数据一致性当然是最重要的,不能将同一个数据块分配给两个文件,这会导致一个文件的内容被另一个文件覆盖。分配出去的数据块必须有文件在使用,否则会导致明明现有文件并未占用多少空间,但文件系统上却没有空间了。
        当向一个文件的末尾添加数据时,文件会扩大,如果元数据记录了该文件的扩大,但新数据没有实际写入,就会导致新扩大的数据块中存在垃圾数据,这有可能导致问题产生。
        早期的文件系统并不能保证元数据与数据的一致性,如Windows下的FAT文件系统和Ext2文件系统。当一个操作需要多次写元数据或一次写元数据一次写数据时,操作中的多个步骤通常不是原子性的,要保证一致性就必须要有类似数据库中的事务的概念。要有事务就需要有日志,也就是说,要通过日志来保证整个操作的一致性。
        所以现在流行的文件系统都被设计成有日志的,如Ext3、Ext4及Windows下的NTFS文件系统。
        但写日志相当于原先的一次写变成了两次写,可能会降低写的性能。为了降低对性能的影响,多数文件系统通常只是把元数据写入日志,而实际数据块内容的变更并不会写入日志。
        如果一个文件已被写过,再写以前的数据块时,不会分配新的数据块;关于空间分配的元数据也不会被更新,通常只更新文件上的时间戳。对于数据库来说,这种情况下通常不会产生不一致,所以数据库使用重写会更安全一些,PostgreSQL中WAL日志的写就是这样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 集群实验~~双主双从搭建

这里写目录标题 搭建mysql集群实现双主双从的同步一、部署环境1.1 分别安装mysql服务并设置域名解析 二、 配置双主MySQL服务器2.1由于是双主,所以master2是master1的从,同时master1又是master2的从所以都要开启二进制和中继日志2.2 重启服务2.3 测试双主…

医院云HIS:运维运营分系统功能简介

一、运维运营分系统简介 一级菜单包括:系统运维、综合监管、系统运营 系统运维包括二级菜单:环境管理、应用管理、菜单管理、接口管理、任务管理、配置管理 综合监管包括二级菜单:综合监管 系统运营包括二级菜单:机构管理、药…

【海明码】一题学会海明码!

一、详细步骤 1、海明码,也称汉明码 2、海明码数据码校验码 3、假设数据码为1100,有4位,即n4 4、由公式2^k>nk1,解得k3,即需3个校验码 5、校验按2^i(即2的i次幂,如1、2、4、8、16、32..…

2入门matlab图像处理图像的基本操作(matlab程序)

学习目标:学习关于图像的基本操作 代码及运行结果 %% 通过抖动来增强图像的色彩对比度 clear all; close all; Iimread(cameraman.tif); %读取灰度图像 BWdither(I); %通过抖动转换为二值图像来增强图像的色彩对比度 subplot(121); imshow(I); subplot(122);…

电气火灾监控系统行业技术应用现状

摘要:我国现有的电气火灾监控系统的应用效果不佳,为了让电气火灾监控系统的发展能满足现代化人们的需要,对此进行分析与研究。网络化时代的到来,电气火灾监控系统将顺应时代潮流,逐步实现系统的网络化、智能化、可视化…

神经网络原理(1)

眼下最热门的技术,绝对是人工智能。 人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能&a…

sql笛卡尔积和自然连接

SQL中的笛卡尔积 即AxB。可以简单理解为两个集合的乘积。 SQL语法 SELECT * FROM tb1 CROSS JOIN tb2; -- 等价于 SELECT * FROM tb1, tb2; -- 等价于 SELECT * FROM tb1 INNER JOIN tb2; -- 这是内连接**CROSS JOIN不能加ON。** 从行和列两个维度来观察上例笛卡尔积的结果集…

Mybatis源码分析_解析大流程梳理_补充 (4)

上一篇&#xff0c;我们这只是粗略的说了一下Mybatis的配置文件解析的大体流程。而这一篇针对上一篇进行补充。 1. <sql> 是如何解析的 我们经常会把一些公用的&#xff0c;重复出现的字段写在<sql>标签中&#xff0c;而通过上图&#xff0c;我们知道sqlElement是…

unity 性能优化学习笔记——静态资源的导入

1 Audio导入设置检查与优化 根据平台选择合理的音频设置&#xff0c;原始音频资源尽量采用未压缩WAV格式 - 移动平台对音乐音效统一采用单通道设置&#xff08;Force to Mono&#xff09;,并将音乐采样频率设置为22050Hz - 移动平台大多数声音尽量采用Vorbis压缩设置&#xff0…

RISC-V处理器的设计与实现(一)—— 基本指令集

本人小白一枚&#xff0c;在学习FPGA的过程中偶然刷到了tinyriscv这个开源项目&#xff0c;并且自己对计算机体系结构的知识也很感兴趣&#xff0c;所以想参考这个开源项目做一个基于RISC-V指令集的CPU&#xff0c;下面是tinyriscv这个开源项目的地址&#xff0c;本项目很多思路…

专属 Python 开发的完美终端工具

概要 Rich 是一个 Python 库&#xff0c;用于在终端中提供富文本格式和精美的格式。 Rich 是一个非常强大的 Python 库&#xff0c;不仅在终端中提供丰富的文本和漂亮的格式&#xff0c;还可以显示表情符号、表格、进度条、标记&#xff0c;甚至语法突出显示的代码。 Rich 是一…

nginx的优化

目录 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 二 nginx的优化之日志分割 三 nginx的优化之页面压缩 四 连接超时 五 nginx的并发设置 七总结:nginx的优化 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 如图所示 第一种方法是关…

什么是 DOM?DOM树如何生成的?

什么是 DOM 文档对象模型(Document Object Model)。它提供了对文档结构化的描述,并将HTML页面与脚本、程序语言联系起来。 在渲染引擎中&#xff0c;DOM有以下几个层面的作用&#xff1a; 从页面来看&#xff0c;DOM就是生成页面的基本数据结构从JS脚本来看&#xff0c;DOM提…

前端 js 操作 Cookie 详细介绍与案例

1 前言 1.1 详细介绍 名称和值&#xff1a;Cookie由一个名称和对应的值组成。名称是一个字符串&#xff0c;用于标识Cookie&#xff0c;而值则是与名称相关联的数据。域名&#xff1a;每个Cookie都与特定的域名相关联。Cookie只会被发送到与其关联的域名下的请求中。路径&…

MybatisPlus多数据源原理与问题简析

文章目录 1. 使用1.1. 引包1.2 增加配置1.3 使用DS注解 2. 源码2.1 Configuration文件, 加载配置与bean注入2.1.1 配置类 2.2 注册DataSource2.2.1 获取所有的DataSource2.2.1.1 构建DataSource 2.2.2 对数据源分组 2.3 切换数据源2.3.1 DynamicDataSourceContextHolder2.3.2 D…

【LLMs 入门实战 】第一式:Vicuna 模型学习与实战

UC伯克利学者联手CMU、斯坦福等&#xff0c;再次推出一个全新模型70亿/130亿参数的Vicuna&#xff0c;俗称「小羊驼」&#xff0c;小羊驼号称能达到GPT-4的90%性能。 欢迎使用小羊驼&#x1f999;环境搭建权重下载下载 Vicuna Weight下载 LLAMA Weight构建真正的 working weigh…

InceptionNext实战:使用InceptionNext实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译&#xff1a;https://wanghao.blog.csdn.net/article/details/131347001?spm1001.2014.3001.5502 官方源码&#xff1a;https://github.com/sail-sg/incept…

Spring Boot详细应用示例:构建一个简单的图书管理系统

文章目录 摘要正文1. 创建Spring Boot项目2. 配置数据库3. 创建实体类4. 创建数据访问层5. 创建业务逻辑层6. 创建控制器层7. 创建前端页面8. 添加身份验证9. 测试运行 小结 摘要 本文将介绍如何使用Spring Boot框架构建一个简单而完整的图书管理系统。通过这个示例&#xff0…

学术小技巧:如何使用easyscholar来提高论文查找效率

0 摘要 easyScholar是一款很好用的科研插件&#xff0c;可以显示会议期刊登记&#xff0c;支持轻量翻译&#xff0c;一键下载等等功能。 1 效果预览 可以直接显示SCI分区&#xff0c;目前中科院SCI分区基础版是免费的&#xff0c;升级版要收费。 目前支持的网站有&#xff1…

【C++】红黑树的插入实现

目录 红黑树的概念红黑树的性质 红黑树节点的定义红黑树的插入操作当p(父节点)在g(祖父节点)左子树grandfather->_left parent当p(父节点)在g(祖父节点)右子树grandfather->_right parent &#x1f4d6; 前言 本篇文章中红黑树的插入用到左单旋和右单旋在AVL树的插入中…