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

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

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. thinkphp集成editormd一系列实战

    介绍 最近php搞了个博客,需要集成markdown编辑器(富文本的太low了,效率也低),用的是时下比较火的editormd,除了基本的文档编辑我这里还实现了几个自己的需求: 使用ctrl-v实现将 ...

  2. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序

    问题: 最近使用U盘启动盘安装win7,系统弹出提示框: 解决方法: U盘别插在usb3.0的口(蓝色),换成一个usb2.0的口就可以了

  3. ghost方式批量安装win7

    1.   需求介绍: 最近工作中需要给几百台PC安装win7操作系统,同时需要安装系统驱动和一些办公软件.刚开始是使用U盘制作的win7启动盘安装,发现效率太低,因为中间需要人监控安装进度以待安装好系 ...

  4. Xray安全评估工具使用

    xray 是一款功能强大的安全评估工具,主要特性有: 检测速度快.发包速度快; 漏洞检测算法高效. 支持范围广.大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均可以支持 ...

  5. sqlserver数据库jar包下载

    链接:https://pan.baidu.com/s/1mCx5JpVpmU6uUaqMITxP_Q提取码:4piq 说明:若链接失效,联系会及时补上!

  6. 合并区间(区间排序,vector的动态扩容的应用)

    以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入 ...

  7. 【LeetCode二叉树#03】翻转二叉树的几种方法

    翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树. 这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树 ...

  8. X86模拟龙芯与编译 .NET CoreCLR

    目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...

  9. 可视化探索开源项目的 contributor 关系

    引语:作为国内外最大的代码托管平台,根据最新的 GitHub 数据,它拥有超 372,000,000 个仓库,其中有 28,000,000 是公开仓.分布式图数据库 NebulaGraph 便是其中之 ...

  10. Nebula Graph 在大规模数据量级下的实践和定制化开发

    本文作者系微信技术专家李本利 图数据在社交推荐.多跳实时计算.风控和安全等领域有可期待的前景.如何用图数据库高效存储和查询大规模异构图数据,是一个重大挑战.本文描述了开源分布式图数据库 Nebula ...