针对操作系统性能瓶颈的判断和排查是数据库优化工作的一项重要技能,尤其是针对实例整体优化

操作系统的性能瓶颈排查无外乎四个方面

CPU、内存、磁盘、网络

针对这四个方面整理了一些相关心得和大家分享。

在判断系统瓶颈之前首先我们要知道操作系统资源的极限值在哪里

收集系统信息

首先CPU

我们更关心的时CPU处理线程数和使用率可以通过lscpu 收集cpu相关信息

比如:cpu型号 ,物理核数、NUMA节点数、厂商等等信息

[kingbase@localhost bin]$ lscpu

Architecture: x86_64

CPU op-mode(s): 32-bit, 64-bit

Byte Order: Little Endian

CPU(s): 1

On-line CPU(s) list: 0

Thread(s) per core: 1

Core(s) per socket: 1

座: 1

NUMA 节点: 1

厂商 ID: GenuineIntel

CPU 系列: 6

型号: 126

型号名称: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz

步进: 5

CPU MHz: 1190.387

BogoMIPS: 2380.77

超管理器厂商: KVM

虚拟化类型: 完全

L1d 缓存: 48K

L1i 缓存: 32K

L2 缓存: 512K

L3 缓存: 6144K

NUMA 节点0 CPU: 0

Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt arch_capabilities

磁盘

磁盘我们需要区分

磁盘的类型(不同磁盘类型针对的数据库参数配置和磁盘调度规则不一样)

相关指令和方法

1、grep ^ /sys/block/*/queue/rotationa

0 固态 1 机械

2、lsblk -d -o name,rota

0 固态 1机械

磁盘的读写速度(磁盘读写速度其实需要结合数据库实际blocks配置和读写比例判断,我更习惯通过8k块的随机读写来判断)

磁盘读写速度可以通过DD 、fio等工具判断,这里我提供的时fio的判断方式

fio -filename=/data1/linuxcool -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=8k -size=10G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

最终结果主要关心iops和每秒读写

网络

网络需要确认的就是网络带宽,有两个部分1、服务器网卡速率. 2、交换机带宽

1、ethtool 网卡 可以查看速率

2、lspci -vvv | grep -i ethernet  10-Gigabit 是万兆  Gigabit 是千兆

交换机需要和客户确认,最终网络带宽以两项中的最小速率为准。

内存需要收集的就是内存大小,通过free -g top都可以查看这里就不过多讲解

在了解了服务器各个硬件的整体情况之后,下一步就是如何判断数据库运行期间的资源瓶颈可能在哪里。

瓶颈判断

--cpu瓶颈判断方法

cpu判断是否有瓶颈可以通过 top 、htop 、mpstat

首先可以通过top 执行查看CPU整体的使用情况

%Cpu(s): 1.7 us, 1.3 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

关注点包括

us 普通用户cpu使用百分比

sy 系统用户cpu使用百分比

id 空闲cou百分比

wa 等待百分比

然后通过通过 top 1 或者htop 查看各个processor 的使用情况如下。 查看指标和top类似

如果发现有个别processor 使用率不正常,可以使用mpstat查看

[kingbase@localhost bin]$ mpstat -P 0 2 4

Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 2023年06月16日 x86_64 (1 CPU)

11时27分31秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

11时27分33秒 0 1.51 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 97.49

11时27分35秒 0 2.02 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97

11时27分37秒 0 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99

11时27分39秒 0 1.51 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 97.49

平均时间: 0 1.51 0.00 0.76 0.00 0.00 0.00 0.00 0.00 0.00 97.73

一般确认CPU存在问题的情况如下

1、us+sy使用率90%以上但是 wait占比超高95% ,说明cpu 队列中有严重的等待

2、sys使用超过了95%,数据库用户使用率只有5%不到,说明操作系统正在频繁的进行操作。严重损耗了COU资源

针对这些情况,我们下一步可以通过perf top 查看以下系统现在的热点函数,根据热点函数确认系统正在进行的操作,然后进行进一步优化。

--IO是否有瓶颈判断方法

IO判断指令也有很多,但是指标基本一样,这里以iostat为例

iostat -x 1   --每隔1秒钟打印IO情况

比较重要的参数分析指标:

• %util:io 的使用率,主要看是否已经接近或者超过 100%

如果%util 接近 100%,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈。

• svctm: 时间,主要说明磁盘本身的读写性能快慢,比如 tpcc 测试一般盘阵服务时间在 0.25ms 左右。如 果太大那就是磁盘性能问题,不过 CPU/内存的负荷也会对其有点影响。

• await: 主要说明平均每次 IO 响应时间,一般小于 5ms。

– 其中 svctm 一般要小于 await (因为等待时间会算入 svctm),await 的大小一般取决于服务时间 (svctm)

以及 I/O 队列的长度(avgqu-sz)和 I/O 请求的发出模式。

– 如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;

– 如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。

– 如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 IO 调度的

elevator 算法,优化应用,或者升级 CPU。

– 例如:对于 tpcc 一般采用 deadline 方式比较合适(IO 调度算法默认是 cfq)

针对机械盘建议采用 deadline 算法。

固态盘采用NOOP算法。

iotop指令可以看到当前操作系统有哪些线程再进行io操作,再iostat确认IO到瓶颈后,我们可以通过iotop查看具体的操作。

常用指令 :iotop -o

相同功能指令还有

pidstat -dl -U kingbase -p ALL 1

pidstat -d -l -p ALL 1 |grep kingbase

--网络情况分析方法

sar -n DEV 1 --查看网络传输速率等信息

sar -n EDEV 1  --查看网络传输失败情况

主要分析:

• 查看 rxbyt/s 和 txbyt/s 的收发字节数是否已经达到了瓶颈。需要注意的是,网络的性能取决于源端和目 的端以及中间设备(网线、路由器、交换机等)的整体表现。例如:源端和目的端都是千兆网卡,但是 它们之间的交换机为百兆,则两端的网络传输上限只能是百兆。为了更准确的了解网络性能的真实表 现,可以通过 scp 或者 iperf 来做测试。

--内存瓶颈分析方法

在操作系统层面 我们主要分析是否是用到了swap

常用指令top

主要分析:

• swap 是否被使用,如果使用了那就会拖累性能,消耗 cpu 和 io 时间。 例如:测试 tpcc 时有几个 g 的 swap 使用,导致峰值上不去,然后调整了 shared_buffers,变小 一些, 然后就不用交换分区了,然后峰值就上去了。原因是一些临时的数据可能比较多的情 况,然后放不下内存就用了交换分区。

• 空闲内存是否比较少,一般来说如果空闲内存/物理内存 >70%,内存性能优,如果小于 20%,则性能 差,需要添加内存。

• 如果内存用的很少,查询比较慢, 而且数据量很大,并且很多 io,那可以考虑调大 shared_buffers, 提高 命中率。

数据库层面给也有相关视图

针对命中率的视图可以查看

全局对象的sys_stdio_user_tables和 sys_stdio_user_indexes

如果确认了慢sql可以查看 sys_stat_statements

这里主要以介绍操作系统层面性能问题查看方法为主,数据库层面如何排查性能问题将会在后续文章中整理

kingbaseES 优化之操作系统瓶颈排查的更多相关文章

  1. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  2. MongoDB优化之三:如何排查MongoDB CPU利用率高的问题

    遇到这个问题,99.9999% 的可能性是「用户使用上不合理导致」,本文主要介绍从应用的角度如何排查 MongoDB CPU 利用率高的问题. Step1: 分析数据库正在执行的请求 用户可以通过 M ...

  3. jmeter性能压测瓶颈排查-网络带宽

    问题: 有一台机器做性能压测的时候,无论开多少个线程,QPS一直压不上去,而服务器和数据库的性能指标(主要是CPU和内存)一直维持在很低的水平. 希望帮忙排查一下原因. 过去看了下进行压测的接口代码, ...

  4. KingbaseES 数据库连接断开问题排查思路

    用户在使用数据库过程中,经常会发现如果会话空闲一段时间,会话有可能断开,需要重连.这个问题影响因素很多,包括数据库参数设置.操作系统参数.防火墙等.以下介绍KingbaseES针对该问题的排查思路. ...

  5. android app性能优化大汇总(UI渲染性能优化)

    UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...

  6. Android UI性能优化详解

    设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...

  7. 《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇

    平均负载 指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,即平均活跃进程数 可运行状态:正在使用CPU或者正在等待CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态 (Run ...

  8. 鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法

    TaiShan特战队六月底成立,至今百日有余,恰逢1024程序员节,遂整理此文,献礼致敬!希望能为广大在鲲鹏处理器上开发软件.性能调优的程序员们,提供一点帮助.从今天开始,将陆续推出性能调优专题文章. ...

  9. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  10. I/O优化篇

    转载:http://blog.csdn.net/gzh0222/article/details/9227393 很不错 1.系统学习 IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后, ...

随机推荐

  1. 【Unity3D】Bloom特效

    1 Bloom 特效原理 ​ Bloom 特效是指:将画面中较亮的区域向外扩散,造成一种朦脓的效果.实现 Bloom 特效,一般要经过 3 个阶段处理:亮区域检测.高斯模糊.Bloom 合成. ​ 本 ...

  2. spring boot+sqlite+mybatis实现增删改查例子

    主要是更换了下sqlite的数据源而已,其他代码不变. 我都贴一下吧,这个算是比较通用的基础增删改查代码. 1.创建test.db 可以使用Idea自带的Database插件配置,也可以命令行创建,具 ...

  3. Oracle 中LONG RAW BLOB CLOB类型介绍

    说明: RAW: 未加工类型,可存储二进制数据或字节符 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列[不建议使用] LONG ...

  4. 解决Oracle创建空间索引报错ORA-29855,ORA-13249,ORA-29400,ORA-01426

    问题描述 公司这边用了Oracle Spatial来存储GIS数据信息,今天在某表上创建空间索引时报了下面的错: 此处举例说明: 假如有表TEST,其中有一列SHAPE存储维度信息. CREATE I ...

  5. 溯源反制-Mysql蜜罐

    东西比较老,类似的文章网上已经很多,原理主要是通过服务端的load data动作可以主动向客户端获取文件. 看过hfish等自带的mysql蜜罐读取/etc/passwd,感觉还差点实用性.这次文章主 ...

  6. ASP.NET Core MVC应用模型的构建[1]: 应用的蓝图

    我个人觉得这是ASP.NET Core MVC框架体系最核心的部分.原因很简单,MVC框架建立在ASP.NET Core路由终结点上,它最终的目的就是将每个Action方法映射为一个或者多个路由终结点 ...

  7. live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板

    前言   在pc上搭建流媒体服务器软件,打开视频接受推流,使用live555方案.   live555介绍   Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输 ...

  8. 单继承,多继承,菱形继承---day21

    1.单继承 # ### 继承:一个类除了自身所有用的属性方法之外,还获取了另外一个类的成员属性和方法 ''' 一个类继承另外一个类,那么该类就是子类(衍生类),被继承的这个类就叫做父类(基类,超类) ...

  9. django自定义模型管理器Manager及方法

    django自定义模型管理器Manager及方法 自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Ma ...

  10. 【Azure Redis 缓存】Azure Cache for Redis 如何迁移

    Azure Cache for Redis 如何迁移 [Azure Redis 缓存]Azure Cache for Redis有默认备份可以用于恢复么?一文中,介绍了使用RDB文件的方式来迁移Red ...