3、服务器性能剖析
性能优化简介
**我们将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间,这是一个非常重要的原则。**我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行sql语句,所以他关注的任务是查询或者语句,如SELECT、UPDATE、DELETE等。数据库服务器的性能用查询的响应时间来度量。单位是每个查询花费的时间。
假如你认为性能优化是降低CPU利用率,那么可以减少对资源的使用。但是资源是用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度。很多时候将使用老版本InnoDB引擎的Mysql升级到新版本后,CPU利用率会上升很厉害,这并不代表性能出现了问题,反而说明新版本对资源的利用率上升了。
如果把性能优化仅仅看成是提升每秒查询量,这其实只是吞吐量优化,吞吐量的提升可以看作性能优化的副产品。对查询的优化可以让服务器每秒执行更多的查询,因为每秒查询执行的时间更短了。
如果优化的目标是降低响应时间,那么就需要理解为什么服务器执行查询需要这么多时间,然后去减少或者消除那些对获得查询结果来说不必要的工作。也就是说,先要搞清楚时间花在哪。这就引申出优化的第二个原则:无法测量就无法有效地进行优化。所以第一步应该测量时间花在什么地方。
通过性能剖析进行优化
性能剖析是测量和分析时间花费在哪的主要方法。性能剖析一般有两个步骤:
- 测量任务所花费的时间
- 对结果进行统计和排序,将重要的任务排在前面
理解性能剖析
Mysql的性能剖析(profile)将最重要的任务展示在最前面,但有时候没显示出现的信息也很重要。
值得优化的查询
性能剖析不会自动给出哪些查询值得花时间去优化。这里需要强调两点:
1. 一些只占总响应时间比重很小的查询是不值得优化的2. 如果优化的成本大于收益,应该停止优化
异常情况
某些任务即使没出现在性能剖析输出的前面也需要优化。比如某些任务执行次数很少,但每次执行都非常慢,严重影响用户体验。因为其执行频率低,所以总的响应时间占比并不突出。
未知的未知
一款好的性能剖析工具会显示可能得丢失时间,丢失的时间是指任务的总时间和实际测量的时间之间的差。这可能是有些任务没有测量到,也可能是由于测量的误差和精度问题的缘故。
被掩藏的细节
性能剖析无法显示所有响应时间的分布。只相信平均值是非常危险的,他会隐藏很多信息。
对应用程序进行性能剖析
对任何需要消耗时间的任务都可以做性能剖析,当然也包括应用程序。实际上应用程序一般比剖析数据库服务器容易。虽然性能问题大多数情况下都和数据库有关,但应用导致的性能问题也不少。一般建议对系统进行性能剖析还是自上而下进行。性能瓶颈可能有很多影响因素:
- 外部资源,比如调用了外部的web服务
- 应用需要处理大量的数据,比如分析一个超大的xml文件
- 在循环中执行昂贵的操作,比如滥用正则
- 使用了低效的算法,比如使用暴力搜索算法来查询列表中的项
剖析Mysql查询
对查询进行性能剖析有两种方式,每种方式都有各自的问题。可以剖析整个数据库服务器,这样可以分析出哪些查询是主要的压力来源。
剖析服务器负载
服务器端的剖析很有价值,因为在服务器端可以有效地审计效率低下的查询。定位和优化慢查询能够显著提升应用性能,也能解决某些特定的难题。还可以降低服务器的整体压力,这样所有的查询都将因为减少了对共享资源的争用而收益。降低服务器的负载也可以推迟或避免升级更昂贵硬件的需求,还可以发现和定位糟糕的用户体验,比如某些极端情况。
捕获Mysql的查询到日志文件中
在Mysql中慢查询日志最初只是捕获比较慢的查询,而性能剖析却需要针对所有的查询。而且在Mysql5.0及以前的版本中,慢查询日志的响应时间的单位是秒,粒度太粗了。在Mysql5.1的更新版本中,慢日志的功能已经被加强了,可以通过设置long_query_time为0来捕获所有的查询,而且查询的响应时间单位已经做到微秒级。
在Mysql的当前版本中,慢查询日志是开销最低,精度最高的测量查询时间的工具。
Mysql的另一种查询日志就是通用日志,但很少用于分析和剖析服务器性能。通用日志在查询请求到服务器时进行记录,所以不包含响应时间和执行计划等重要信息。
分析查询日志
剖析单条查询
在定位到需要优化的单条查询后,可以针对此查询获取更多的信息,确认为什么会花费这么长时间,以及需要如何去优化。下面介绍几种方法1是如何显示查询的执行情况的:
使用SHOW PROFILE
SHOW PROFILE 命令是在Mysql5.1版本后引入的,默认是禁用的,可以通过命令修改
SET profiling = 1;
然后在服务器上执行的所有语句都会测量器耗费的时间和其他一些查询执行状态变更相关的数据。
当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表,并且给查询赋予一个从1开始的整数标识符。在执行完一条查询语句后我们可以使用以下命令来查看剖析报告。剖析报告给出了查询执行的每个步骤及其花费时间。看结果很难直接确定是哪个步骤花费的时间最多因为输出是按照执行顺序而不是花费时间排序。如果不使用SHOW PROFILE 而直接查询 INFORMATION_SCHEMA 中对应的表,则可以根据自己的需要进行指定的查询。
SHOW PROFILE FOR QUERY ID;
使用SHOW STATUS
Mysql的SHOW STATUS 命令返回了一些计数器,既有服务器级别的全局计数器,也有基于某个连接会话级别的计数器。如果执行SHOW GLOBAL STATUS 则可以查看服务器级别的从服务器启动时开始计算的查询次数统计。
SHOW STATUS的大部分结果都只是一个计数器,可以显示某些活动如读锁引的频繁程度,但无法给出消耗了多少时间。
使用慢查询日志
使用Performance Schema
使用性能剖析
当获得服务器或者查询的剖析报告后,怎么使用呢?好的报告能将潜在的问题显示出来,但最终的解决方案还需要用户决定。优化查询时用户需要对服务器如何执行查询有较深的了解,这里的用户当然是指研发啦。
诊断间歇性问题
间歇性的问题比如系统偶尔停顿或者慢查询,很难诊断。有些幻影问题只在没有注意到的时候才发生,而且无法确认如何重现,诊断这样的问题往往要花很多的时间。
尽量不要使用试错的方式来解决问题,因为结果可能会变得更坏。
单条查询问题还是服务器问题
发现问题后首先要确认这是单条查询的问题还是服务器的问题。如果服务器上所有的程序都变慢,有突然都变好,每一条查询也都变慢了,那么慢查询可能就不一定是原因,而是由于其他问题导致的结果。反过来说,如果服务器整体运行没有什么问题,只有某些查询偶尔变慢,就需要将注意力放到这条特定的查询上面。
使用SHOW GLOBAL STATUS
这个方法实际上就是以较高的频率比如一秒一次执行这个命令捕获数据。
使用SHOW PROCESSLIST
这个方法是通过不停的捕获SHOW PROCESSLIST 的输出,来观察是否有大量线程处于不正常的状态或者有其他不正常的特征。
使用查询日志
如果要通过查询日志发现问题,需要开启慢查询日志并在全局级别设置long_query_time为0,并且要确认所有的连接都采用了新的设置。
捕获诊断数据
当出现间歇性问题时,需要尽可能多地收集所有数据,而不只是问题出现时的数据。
诊断触发器
触发器非常重要,这是在问题出现时能够捕获数据的基础。有两个常见的问题可能导致无法达到预期的结果:误报或者漏检。误报是指收集了很多诊断数据,但期间其实没有发生问题。而漏检是指在问题出现时没有捕获到数据。所以在开始收集数据前要确认触发器能够真正的识别问题。
需要收集什么样的数据
在需要的时间段内尽可能收集所有能收集的数据。包括系统状态、CPU利用率、磁盘使用率和可用空间、ps的输出采样,内存利用率以及可以从Mysql获得的信息。
解释结果数据
当我们收集完所需要的数据后,那么我们接下来要怎么做呢?第一,检查问题是否真的发生了,因为有很多误报的情况。第二,是否有非常明显的跳跃性变化。查看异常的查询或事务行为。
相关文章:
3、服务器性能剖析
性能优化简介 **我们将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间,这是一个非常重要的原则。**我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行sql语句,所以他关注的任务是查询或者语句…...
xxl-job 分布式任务调度框架
文章目录 分布式任务调度XXL-Job 简介XXL-Job 环境搭建XXL-Job (源码说明)配置部署调度中心docker安装 Bean模式任务(方法形式)-入门案例任务详解任务详解-执行器任务详解-基础配置任务详解-调度配置任务详解-基础配置任务详解-阻塞处理策略任务详解-路由策略 路由策略路由策略…...
软件使用-stm32入门
这节主要是介绍大家使用两个软件。这两个软件也是比较常用的,里面也有很多有意思的功能,可以给大家介绍一下。 1. FlyMcu 软件 这个软件可以通过串口给 STM32 下载程序,如果你没有 STLINK,就可以用这个软件通过串口下载程序。 …...
使用MAT分析内存泄漏(mac)
前言 今天主要简单分享下Eclipse的Memory Analyzer在mac下的使用。 一、Mat(简称)干什么的? 就是分析java内存泄漏的工具。 二、使用步骤 1.下载 mac版的现在也分芯片,别下错了。我这里是M2芯片的,下载的Arch64的。 …...
【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied
问题描述 在Linux系统上运行npm run serve命令时,控制台报错: sudo npm run serve project50.1.0 serve vue-cli-service serve sh: 1: vue-cli-service: Permission denied错误截图如下: 原因分析 该错误是由于vue-cli-service文件权限不…...
LeetCode的几道题
一、捡石头 292 思路就是: 谁面对4块石头的时候,谁就输(因为每次就是1-3块石头,如果剩下4块石头,你怎么拿,我都能把剩下的拿走,所以你就要想尽办法让对面面对4块石头的倍数, 比如有…...
NLP/Natural Language Processing
一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向,也就是人们常说的「自然语言处理」,就是研究如何让计算机读懂人类语言,即将人的自然语言转换为计算机可以阅读的指令。它研…...
【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题
作品展示-屋顶分合(0-9之间随机抽取7个不重复分合) 背景需求: 大班幼儿学分合题,通常区角里会设计一个“房屋分合”的样式 根据这种房屋样式,设计0-9内的升序分合题模板 素材准备 WORD样式 代码展示: 2-9…...
uni-app 微信小程序 电子签名及签名图片翻转显示功能
文章目录 1. 需求背景2. 开始撸2.1 点击 重写 进入签名页面(上图一)2.2 书写签名,点击确认返回,及图片翻转显示(上图二,三) 3. 图片进行翻转,返回翻转后的图片 1. 需求背景 接的一个…...
MySQL 8.0关键字和保留字
官网地址: https://dev.mysql.com/doc/refman/8.0/en/keywords.html 可以粘贴出去自己排版整理 {accessible} {account} {action} {active} {add} {admin} {after} {against} {aggregate} {algorithm} {all} {alter} {always} {analyse} {analyze} …...
PyLMKit(3):基于角色扮演的应用案例
角色扮演应用案例RolePlay 0.项目信息 日期: 2023-12-2作者:小知课题: 通过设置角色模板并结合在线搜索、记忆和知识库功能,实现典型的对话应用功能。这个功能是大模型应用的基础功能,在后续其它RAG等功能中都会用到这个功能。功…...
JAVA全栈开发 集合详解(day14+day15汇总)
一、数组 数组是一个容器,可以存入相同类型的多个数据元素。 数组局限性: 长度固定:(添加–扩容, 删除-缩容) 类型是一致的 对象数组 : int[] arr new int[5]; … Student[] arr …...
Linux Spug自动化运维平台本地部署与公网远程访问
文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…...
zookeeper集群和kafka集群
(一)kafka 1、kafka3.0之前依赖于zookeeper 2、kafka3.0之后不依赖zookeeper,元数据由kafka节点自己管理 (二)zookeeper 1、zookeeper是一个开源的、分布式的架构,提供协调服务(Apache项目&…...
Java——》JSONObjet 数据顺序
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
【个人记录】NGINX反向代理grpc服务
最开始使用proxy_pass去代理了grpc服务,结果请求时候报错提示: rpc error: code Unavailable desc connection error: desc "error reading server preface: http2: frame too large"后来才知道代理grpc服务需要使用grpc_pass,…...
【小白推荐】安装OpenCV4.8 系统 Ubuntu 22.04LST Linux.
先看一下目录,知道大致的流程! 文章目录 安装OpenCV安装依赖下载源码配置与构建安装 测试编写CMakeListx.txt编写测试代码 安装OpenCV 安装依赖 sudo apt update && sudo apt upgrade sudo apt install cmake ninja-build build-essential lib…...
使用Docker Compose搭建CIG监控平台
CIG简介 CIG监控平台是基于CAdvisor、InfluxDB和Granfana构建的一个容器重量级监控系统,用于监控容器的各项性能指标。其中,CAdvisor是一个容器资源监控工具,用于监控容器的内存、CPU、网络IO和磁盘IO等。InfluxDB是一个开源的分布式时序、时…...
前端文本省略号后面添加复制文字
前端文本省略号后面添加复制文字 1、效果图 2、代码展示 <div class"link-content-wrap" click"copyLinkText"><div class"link-content">{{ shareResult.url || }} </div><span class"show-ellipsis" click&…...
【算法】动态规划中的路径问题
君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,如果给算法的难度和复杂度排一个排名,那么动态规划算法一定名列前茅。今天,我们通过由简单到困难的两道题目带大家学会动…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
