VastBase——全局性能调优

news2024/12/27 14:22:35

目录

一、系统资源调优

1.内存和CPU

2.网络

3.I/O

二、查询最耗性能的SQL

三、分析作业是否被阻塞


背景:影响性能的因素

  • 系统资源

    数据库性能在很大程度上依赖于磁盘的I/O和内存使用情况。为了准确设置性能指标,用户需要了解Vastbase部署硬件的基本性能。CPU、硬盘、磁盘控制器、内存和网络接口等这些硬件性能将显著影响数据库的运行速度。

  • 负载

    负载等于数据库系统的需求总量,它会随着时间变化。总体负载包含用户查询、应用程序、并行作业、事务以及数据库随时传递的系统命令。比如:多用户在执行多个查询时会提高负载。负载会显著地影响数据库的性能。了解工作负载高峰期可以帮助用户更合理地利用系统资源,更有效地完成系统任务。

  • 吞吐量

    使用系统的吞吐量来定义处理数据的整体能力。数据库的吞吐量以每秒的查询次数、每秒的处理事务数量或平均响应时间来测量。数据库的处理能力与底层系统(磁盘I/O、CPU速度、存储器带宽等)有密切的关系,所以当设置数据库吞吐量目标时,需要提前了解硬件的性能。

  • 竞争

    竞争是指两组或多组负载组件尝试使用冲突的方式使用系统的情况。比如,多条查询视图同一时间更新相同的数据,或者多个大量的负载争夺系统资源。随着竞争的增加,吞吐量下降。

  • 优化

    数据库优化可以影响到整个系统的性能。在执行SQL制定、数据库配置参数、表设计、数据分布等操作时,启用数据库查询优化器打造最有效的执行计划。

一、系统资源调优

1.内存和CPU

查看内存状况:执行top命令,查看内存占用情况。执行该命令后,按Shift+M键,可按照内存大小排序。

前五行是系统整体的统计信息。

第一行是任务队列信息,同 uptime 命令的执行结果。

01:06:48    当前时间
up 1:22    系统运行时间,格式为时:分
1 user    当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

如果“id”低于10%,即表明CPU负载较高,可尝试通过降低本节点任务量等手段降低CPU负载。

分析时,请主要关注Vastbase进程占用的内存百分比(%MEM)和操作系统的剩余内存。

以root用户执行free命令查看cache的占用情况。

若cache占用过高,请执行如下命令开启自动清除缓存功能。

sh Vastbase-server/src/bin/scripts/run_drop_cache.sh

其中,Vastbase-server为仓库代码,下载地址openGauss-server: openGauss kernel ~ openGauss is an open source relational database management system.

若用户内存占用过高,需查看执行计划,重点分析是否有不合理的join顺序。

例如,多表关联时,执行计划中优先关联的两表的中间结果集比较大,导致最终执行代价比较大。

1.根据查询结果中“Cpu(s)”分析是系统CPU(sy)还是用户CPU(us)占用过高

  • 如果是系统CPU占用过高,需要查找异常系统进程进行处理。

  • 如果是“USER”为vastbase的Vastbase进程CPU占用过高,请根据目前运行的业务查询内容,对业务SQL进行优化。请根据以下步骤,并结合当前正在运行的业务特征进行分析,是否该程序处于死循环逻辑。

2.分析进程中的线程

top -H -p 3875

使用gstack查看进程内各线程的函数调用栈。查找上一步骤中占用CPU较高的线程ID对应的线程号。

表明线程ID为3890的线程他的对应的线程号是10

2.网络

通过sarifconfig命令查看Vastbase内节点网络使用情况,分析是否存在由于网络导致的性能瓶颈。

执行ifconfig命令查看服务器网络连接。

  • errors表示收包错误的总数量。

  • dropped表示数据包已经进入了Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃的总数量。

  • overruns表示Ring Buffer队列中被丢弃的报文数目,由于Ring Buffer(aka Driver Queue)传输的IO大于kernel能够处理的IO导致。

分析时,如果发现上述三个值持续增长,则表示网络负载过大或者存在网卡、内存等硬件故障。

排查网络状态使用netstat -anp | grep命令

标记所在情况;
一个叫“redis-server”的进程,正在监听127.0.1:6379/0.0.0.:2222端口等等,“LISTEN”表示监听 PID:代表该进程的id 38464 

检查特定程序的网络链接情况

netstat -anp | grep vastbase

查看端口 : 例如 5432端口我们看下

netstat -anp | grep 5432

3.I/O

使用iostat命令查看I/O情况。此命令主要关注单个硬盘的I/O使用率和每秒读取、写入的数量。

iostat -xm 1   #1为间隔时间

 “rMB/s”为每秒读取的MB数,“wMB/s”为每秒写入的MB数,“%util”为硬盘使用率。

 使用pidstat命令查看I/O情况。此命令主要关注单个进程每秒读取、写入的数量。

pidstat -d 1 10     #1表示查看时间间隔1秒,10表示查看次数10次

 “kB_rd/s”为每秒读取的kB数,“kB_wr/s”为每秒写入的kB数。

检查磁盘空间使用率,建议不要超过60%

df -T

若I/O持续过高,建议尝试以下方式降低I/O。

  • 降低并发数。

  • 对查询相关表做VACUUM FULL

​vacuum full tablename;

建议用户在系统空闲时进行VACUUM FULL操作,VACUUM FULL操作会造成短时间内I/O负载重,反而不利于降低I/O。

 

二、查询最耗性能的SQL

登录数据库后:查询最耗性能的SQL

SELECT current_timestamp - query_start AS runtime, datname, usename, query FROM pg_stat_activity where state != 'idle' ORDER BY 1 desc;

查询后会按执行时间从长到短顺序返回查询语句列表,第一条结果就是当前系统中执行时间最长的查询语句。返回结果中包含了系统调用的SQL语句和用户执行SQL语句,请根据实际找到用户执行时间长的语句。

若当前系统较为繁忙,可以通过限制current_timestamp - query_start大于某一阈值来查看执行时间超过此阈值的查询语句

SELECT query FROM pg_stat_activity WHERE current_timestamp - query_start > interval '1 days';

 设置参数track_activities为on。当此参数为on时,数据库系统才会收集当前活动查询的运行信息。

 SET track_activities = on;

 查看正在运行的查询语句

SELECT datname, usename, state FROM pg_stat_activity;

查询结果为如下

datname  | usename | state  |
----------+---------+--------+
    postgres |   vastbase   | idle   |
    postgres |   vastbase   | active |
(2 rows)

如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。

如果仅需要查看非空闲的查询语句,则使用如下命令查看:

SELECT datname, usename, state FROM pg_stat_activity WHERE state != 'idle';

分析长时间运行的查询语句状态

  • 若查询语句处于正常状态,则等待其执行完毕。

  • 若查询语句阻塞,则通过如下命令查看当前处于阻塞状态的查询语句:

SELECT datname, usename, state, query FROM pg_stat_activity WHERE waiting = true;

查询结果中包含了当前被阻塞的查询语句,该查询语句所请求的锁资源可能被其他会话持有,正在等待持有会话释放锁资源。

只有当查询阻塞在系统内部锁资源时,waiting字段才显示为true。尽管等待锁资源是数据库系统最常见的阻塞行为,但是在某些场景下查询也会阻塞在等待其他系统资源上,例如写文件、定时器等。但是这种情况的查询阻塞,不会在视图pg_stat_activity中体现。

 

 三、分析作业是否被阻塞

数据库系统运行时,在某些业务场景下查询语句会被阻塞,导致语句运行时间过长,可以强制结束有问题的会话。

看阻塞的查询语句及阻塞查询的表.模式信息。

SELECT w.query as waiting_query,
w.pid as w_pid,
w.usename as w_user,
l.query as locking_query,
l.pid as l_pid,
l.usename as l_user,
t.schemaname || '.' || t.relname as tablename
from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid
and not l1.granted join pg_locks l2 on l1.relation = l2.relation
and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid
where w.waiting;

该查询返回线程ID.用户信息.查询状态,以及导致阻塞的表.模式信息。

使用如下命令结束相应的会话。其中,139834762094352为线程ID。

SELECT PG_TERMINATE_BACKEND(139834762094352);

 显示类似如下信息,表示结束会话成功。

pg_terminate_backend
----------------------
    t
(1 row)

显示类似如下信息,表示用户正在尝试结束当前会话,此时仅会重连会话,而不是结束会话。

FATAL:  terminating connection due to administrator command
FATAL:  terminating connection due to administrator command
The connection to the server was lost. Attempting reset: Succeeded.

vsql客户端使用PG_TERMINATE_BACKEND函数终止本会话后台线程时,客户端不会退出而是自动重连。

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

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

相关文章

玉米病害-目标检测数据集(包括VOC格式、YOLO格式)

玉米病害-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1gNanETxflJwb1SaKut_rQw?pwddio2 提取码:dio2 数据集信息介绍: 共有 5046 张图像和一一对应的标注文件 标注文…

年轻人喝不起蜜雪冰城了

文|琥珀食酒社 作者 | 璇子 告诉你一个残酷的消息 年轻人连卖1块钱冰杯的雪王 都快喝不起了 最近3个月 蜜雪冰城关店3808家 差不多每天要关店43家 Coco奶茶呢 90天关店的数量 比开店的数量多2倍还不止 表面看这是行业太卷 奶茶品牌们在垂死挣扎 但其实…

二、编辑器拓展

一、实现Scene窗口弹出菜单 一、InitializeOnLoadMethod 完成事件监听 设置自定义菜单

嵌入式Qt移植之编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

嵌入式Qt移植之编译Qt项目 交叉编译器的安装可以参考 http://t.csdnimg.cn/UeHtq 使用交叉编译好的qmake编译Qt项目 将交叉编译工具链的路径添加到环境变量PATH中 !export 交叉编译器位置 查找qmake位置 find -name qmake 进入一个Qt项目,使用qmake生成Make…

反射机制简单基础

前序 在我们没有学习框架之前我们都是通给new来创建对象,如:创建一个我们已知的对象 Car carnew Car(); 调用类中的成员变量和成员方法都是对象直接调用。 在学习了mybatis框架后,我们了解到可以通过类名,能动态得到类中定义的…

【AI学习】在魔塔社区玩Ollama:部署GLM4和CodeGeeX4

看到文章《Ollama可以玩GLM4和CodeGeeX4了,快来魔搭玩起来》,参考的运行了一遍,折腾了一个晚上加一个上午,终于搞定了。本来很简单的事情,对这个代码小白,还是有点坑。。 GPU要明显快很多,CPU的…

谷歌chrome浏览器显示“版本太旧”又无法更新情况下,如何关闭“Chrome版本太旧”提示,包括直接启动Google浏览器,或者通过其他应用启动

问题描述 由于在无互联网环境使用Google浏览器,所以无法进行升级,但每次启动都会有如下提示,作为有强迫症的我实在无法接受。 解决方案 1、修改属性(通过快捷方式启动有效) 通过右键在快捷方式后添加启动参数 右键“Google Chrome”图标…

C的温故而知新:位操作(C Primer Plus第十五章)

第十五章:位操作 这一章的篇幅不是很长,但既然能单独作为一章来讲的话,应该蛮重要的,但是我貌似没有总结出多少需要注意、加强记忆的东西,可见在JAVA的日常开发过程中基本不太遇见有关位操作的内容,所以我…

一起学Java(9)-[日志篇]教你掌握Java日志框架的演进和设计逻辑

在项目开发中,日志记录(Logging)扮演着至关重要的角色。日志是开发人员 调试代码和诊断问题的重要工具。例如:在生产环境中,开发人员通常无法直接调试代码,日志提供了一个详细的执行轨迹,帮助开…

一篇初学者入门Python文件的读取与写入

我们探讨了如何使用第三方库来扩展我们的Python程序能力.在这一篇教程中,我们将聚焦于Python中文件的读取与写入操作.文件操作是编程中重要的基础,能够有效地帮助我们保存和读取数据。 如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料&#x…

建筑项目管理软件市场新风向,10款热门软件解析

1、PingCode PingCode 是一款为研发团队设计的全流程管理软件,连续多年入选中国软件项目管理软件榜单前二,是国内研发管理的热门系统。知名客户包括小红书、长城汽车、清华大学、中国电信等。 主要功能 PingCode 核心能力在于支持软件产品研发全生命周…

比requests还好用的Python高效库,效率提升一倍

Python开发者们最常用的库之一就是requests,它以简单易用的API和强大的功能深受喜爱。然而,随着爬取任务的复杂性增加,requests的局限性逐渐显现。一些更为高效、功能更强大的爬虫库开始进入开发者的视野 那么,有没有比requests更…

西北农林科技大学李毅研究员等人在农学顶刊Agric. Syst.发文:持续的干旱威胁着小麦和玉米生产,并将在未来扩大作物产量差

文章简介 论文名称:Concurrent drought threatens wheat and maize production and will widen crop yield gaps in the future (持续的干旱威胁着小麦和玉米生产,并将在未来扩大作物产量差) 第一作者及单位:Miaolei …

【EMC专题】以太网电路为什么在变压器次级侧加浪涌保护二极管?

以太网广泛应用于工业领域,会受到诸多恶劣条件的影响。一种特别恶劣的条件是 IEC61000-4-5 中强调的瞬态浪涌。浪涌瞬变对这些系统特别危险,因为这代表有较大功率耦合到以太网物理层的发送和接收电路,可能会损坏以太网控制器或 PHY。 以太网物理层包括以太网 PHY(或控制器)…

vue 实现简单AI聊天程序(一) elementui 聊天框编写

这个系列的目标是开发一个AI聊天前端界面后端问答程序, 探索前端界面开发。 尝试后端对接阿里云千问大模型,后续还会更新自己部署的大模型。 这一期用elmentui来开发一个聊天框的前端,根据用户发送的内容,AI会返回一个一模一样的…

中山大学和联想研究院提出文本到服装生成模型GarmentAligner,解决服装生成中语义对齐、数量、位置和相互关系等问题。

中山大学和联想研究院提出一个能够根据文字描述生成服装图像的智能工具GarmentAligner。它可以从已有服装图像中提取出各个组成部分,并记录下它们的位置和数量。接着根据你的描述进行匹配,找出最吻合的服装组件进行组合。而为了确保生成的图像能够准确反…

Nosql数据库redis集群配置详解

一、Redis的安装 环境介绍: 一主双从:10(redis-node1)主,20(redis-node2) 30(redis-node3)从——使用的是红帽9.1系统 源码安装redis [rootredis-node1 ~]# tar zxf red…

【yarn publish : 报错 passed folder/tarball doesn‘t exist 】

当执行yarn publish 时报错,具体命令类似 yarn publish --new-version ${NEW_VERSION} ${my-node-moudle-path}/my-node-modules 报错内容, 网上搜了一圈,基本没有这个报错的相关内容,最后分析并解决了,这里记录分享下…

NoSql数据库 - Redis Cluster集群详解及案例实现

Redis Cluster集群(无中心化设计) 1.1 Redis Cluster 工作原理 在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以保证redis服务的正常使用,但是无法…

查看exe文件所需要依赖库的方法

Windows 1.dumpbin /dependendsv [file_path]; 2.Qt windeployqt.exe打包 在exe的同一目录下生成需要的文件和库;如果不是qt程序结果如下: