30分钟带你熟练性能优化的那点儿事儿(案例说明)

【Unity】Gif图片播放插件(支持UI及模型纹理渲染两种模式) unity本身不支持GIF格式文件直接渲染, 因此一般的做法是通过加载图片,通过代码控制其循环播放、停止等,模拟动画效果,本文简单介绍一下某个现有开源工具,感谢开源作者。 阅读详情

前言

  性能优化是数据库运维人员和中、高级软件开发人员的必备技能,很多时候老司机和新司机的区别就在写出的东西是否优化。

  博主接触过近千家客户的系统,这些系统都存在着各种各样的性能问题。那么如何透彻的了解我们的数据库性能问题?今天就用一个案例来说明性能优化的那点儿事儿。

  PS:很多技术人员对优化有一套自己的理解,在阅读本文前请放下你自己的理解。

  正所谓:跟着博主不迷路,博主带你上高速!

   点开案例跟着博主的思路看看优化这些事儿 : 本文案例Demo

  

 

了解系统环境

  优化首先要知道数据库在一个什么样的硬件/软件环境下运行?配置是怎么样的?内存、CPU这些是否能完全被应用?数据库体量多大?

  首先我们先看一下系统的配置:

  软件层面,我们要知道我们的操作系统版本,SQL Server版本,以及对应版本的硬件限制(如32位系统不开AWE无法使用超过4G内存、server 2008 标准版最大支持32G内存等)


 

  本例中我们可以看出,系统环境没有异常问题,SQL Server的补丁不是最新的,CPU资源不充足,可能CPU会成为系统的瓶颈。

全局层面看性能

  全局层面看问题主要指综合服务器的各种指标表象定位系统的瓶颈或问题,在性能优化中最忌讳的就是看到一个指标马上就下手,针对一个指标的判断是盲目的,很可能使问题偏离本身的根本原因,也可能使优化根本无法解决根本问题而只是表象得到了缓解。

 

性能计数器

  CPU:在大量时间内CPU的使用率达到100%,说明CPU已经成为瓶颈。

  

  内存:内存计数器生命周期在11点时已经降到0,惰性写入器也彪高,说明内存也存在压力,而且比较严重。

  

  磁盘:磁盘的平均队列很高(一般系统最佳情况队列应该低于2),并且读队列和写队列都很高。由于内存存在压力,所以现在无法判断磁盘的压力是由于内存不足引起的还是磁盘速度不能满足需要。

  

 

 

   其他计数器:

  可以看到系统中全表扫面的次数比较多,这表明很多查询没有应用索引。

  

  系统在11点左右和11点24左右发生大量锁等待,并且等待时间很长(超过150s)

    

  通过很多类计数器能综合看出系统的问题。这里不一一细说了

  

 

系统等待

  等待是另一个可以全局层面看系统的指标,系统运行的卡慢问题很大部分是因为等待而引起的,那么等待的类型也是可以很直观的反映出系统的问题。

  几个主要等待:  

  ASNC_NETWORK_IO:一般反应出有部分查询可能返回大量数据,请加查具体的等待语句是否需要返回如此多的数据。

  WAITFOR :可能是配置了CDC发布订阅或程序中使用了语句waitfor delay

  CXPACKET:CPU的调度等待。

  LCK_M_U :更新语句之间的语句阻塞。

  WRITELOG:说明程序中有循环的插入跟新操作而频繁的写入日志,磁盘速度不能满足写入频率而造成。

  

 

 

综合分析

  综合系统等待和性能计数器,我们基本可以判定出来系统存在以下问题:

  系统的CPU、内存、磁盘均存在较大的压力,尤其CPU负荷接近100%,系统中存在大量表扫面可能缺失比多索引。系统中有的语句可能要返回大量的不必要数据,系统锁情况严重,等待时间很长,语句执行时间也必然很长。

  语句执行的整体情况:由于上述的问题影响,那么系统中必然存在大量的长时间语句!

  

 

解决问题

  问题的定义是很重要的一步,从全局的多项指标综合分析,让所有问题无所遁形。定位问题后我们先来看一下解决这些问题的基本步骤。

  本案例是自己模拟的一个情况,所以虽然在表象上来看资源压力很大,但实际在运行的语句不多,场景也有限,但在生产系统如果存在这样的表象,那么说明你的系统性能问题非常严重急需一次详细的优化了。

  那么下面也介绍一下生产系统遇到这样的问题应该怎么优化,有哪些必要的步骤。

步骤一 针对系统问题对数据库进行全面的优化,提升整体效率

  很多人优化可能直奔语句,认为语句就可以解决性能的所有问题,其实这样的观点是不全面的,系统的配置,数据库的配置,索引的规划等都是解决性能的必要步骤。

  例如:系统中的语句都是最佳的,数据库运行还是很慢,可能就是因为你的CHECKDB配置的问题,也有可能因为你自动收缩没有关闭而导致的性能问题。

 

优化操作系统配置

  针对服务器进行配置检查,查看是否有配置不合理或可以优化的配置项,比如是否配置了虚拟内存?服务器层面是否限制的资源使用?服务器是否高性能模式运行?

 

优化数据库层面的配置

  针对数据库参数进行合理配置使硬件充分发挥硬件功能,优化不合理配置,降低对数据库造成冲击的可能性。比如:最大并行度?最大内存?

  

 

 

是否大量缺失索引

  大量索引缺失必然导致语句性能不佳,并且消耗大量的系统资源,很可能就会造成上面服务器高压力的表象

  

 

删除无用索引

  针对数据库中无用的索引进行删除。提升更新操作的时间。

 

删除重复索引

  针对数据库中重复的索引进行删除。提升更新操作的时间。

  

 

对重点语句建索引

  针对系统中消耗大的语句或执行次数多的语句进行分析,评估语句性能问题,并建立合适的索引提,降低语句的资源消耗,升语句运行效率。

 

解决阻塞

  解决语句间的阻塞,这需要分析语句的阻塞链,到底语句被什么样的操作阻塞了,为什么会阻塞?

  很多新手经常问的问题:为什么我有的时候查很快有的时候查就很慢? 答:大多数情况就是你的语句被阻塞了。

  

 

优化TempDB

  针对TempDB调优,减少TempDB资源争用导致的压力。本例中可以死看到有TempDB的争用等待,所以对TempDB的优化也是必要的。

 

 

优化日志碎片

  针对日志增大,带来的日志碎片问题进行优化。

清除索引碎片

  检查系统的索引维护情况,并针对碎片过大的表进行碎片清除操作。主要体现在系统中有老化的索引,索引的老化导致索引的性能不高或失效。

 

一阶段预期效果

 

  一阶段的优化是对性能的整体提升,性能提升也会很明显,针对不同系统提升一般在2-3倍。

步骤二 处理热点问题

  处理热点问题主要是在阶段一的基本优化后针对重点的语句进行调优,可能包含创建索引,修改写法,查询提示,计划向导等等。

  在语句调优中请主要关注:是否有缺失索引,是否存在隐式转换,语句的执行时间、CPU、逻辑读写量、物理读写量、占用TempDB空间等信息。

 

  例:这样一条语句经过第一阶段的优化并没有太大的提升,而且资源消耗依然很大,那么我们可以针对这条语句进行详细的二阶段优化。

 
 

简单的优化一下

   

  只是简单的改了下语句的写法时间有7秒变成1秒,内存消耗从300+MB 变成 1MB

 

 

二阶段预期效果

    阶段二的优化属于细致的优化步骤,要针对更为具体的语句、具体的情况。经过本阶段优化可以使系统中大部分语句从写法、配置、运行指标都趋于优化值。

 

步骤三 针对业务

  这个步骤需要配合开发人员,到底哪些功能依然慢?执行了哪些语句?是领导用的功能?还是一般可以慢的功能?如果大领导用的功能,那可能你就需要多花些心思了。这部分这里就不展开说了。

 

三阶段预期效果

    第三阶段属于最细致的阶段,可以结合业务真正点对点的消灭系统中存在问题。

导图

  针对性能优化奉上几个图希望能帮助数据库从业者梳理一下优化的思路(个人思路仅供参考,不完善的地方也请见谅)

  

CPU:

  

 

 

  内存:

   

 

 

  磁盘:

  

 

 

  等待:

  

 总结

  在性能优化中最忌讳的就是看到一个指标马上就下手,针对一个指标的判断是盲目的,很可能使问题偏离本身的根本原因,也可能使优化根本无法解决根本问题而只是表象得到了缓解。

  本文只是通过一个例子简述一下优化的基本思路,希望帮助更多数据库从业者,了解性能优化。

  本文只阐述了思路,具体的各部分解决方式请参见我的系列文章:SQL SERVER全面优化-------Expert for SQL Server 诊断系列

  性能的调优是一个持续性的工作,不是一次解决了问题以后就可以高枕无忧了,定期的巡检也是数据库从业者必要的工作之一,做到及早发现及早解决。

[特殊字符] 从零构建携程/飞猪机票价格爬虫:Python异步抓取与反爬对抗实战 在出行决策、竞品分析、价格预测模型训练等场景中,稳定获取携程(Ctrip)和飞猪(Fliggy)的实时机票价格波动数据是刚需。然而,这两大平台均部署了业界顶尖的反爬体系——包括但不限于:动态请求签名(SignToken设备指纹采集(UACanvasWebGL接口参数加密(X-Sign_abtestcookie混淆)频率限制与 IP 封禁(滑动窗口 + 行为检测)目录前言:为什么需要自建机票价格爬虫?一、技术选型与项目架构1.1 核心技术栈1.2 系统架构图(文字描述)1.3 法律与道德声明。 阅读详情

相关推荐

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3908

sql server 性能优化和日常管理维护

课程总结sql server运行过程中对系统资源的使用和由此产生性能问题,介绍数据库规划设计、事务和锁的基本知识,如何处理阻塞和死锁,优化索引和读懂统计信息和执行计划等知识,同时详细介绍SQL 2014新功能特性内存优化表、列存储索引、alwayOn高可用。

HyperLynx VX2.5 实战:5分钟搞定LPDDR4X内存的批量仿真与报告分析

本文详细介绍了如何使用HyperLynx VX2.5进行LPDDR4X内存的批量仿真与报告分析,通过智能网络分组和并行计算技术,5分钟内即可完成全流程验证。文章涵盖工程准备、批量仿真配置、报告解析及典型问题解决方案,帮助工程师高效提升PCB仿真效率,确保移动设备内存接口的稳定性与性能。

weixin_42683394的博客 400

Android性能优化--概览

这个文章主要参考慕课网的《国内Top团队大牛带你玩转Android性能分析与优化》 一,性能优化有那些难题? 性能优化主要有以下3个方面: 性能表现差 APP的自身性能表现差。从APP自身视角来说 主要有: 1.App启动慢,卡顿,丢帧 2.内存占用高,抖动频繁 3.耗电,网络请求慢 4.崩溃率,异常率高 线上问题无从追查 从排查问题的视角来说: 难点主要有: 1.如何保证异...

gs344937933的专栏 920

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1532

STM32F103C8T6键盘DIY全攻略:从电路设计到固件烧录(附避坑指南)

本文详细介绍了基于STM32F103C8T6微控制器的DIY键盘制作全流程,涵盖硬件电路设计、按键矩阵实现、USB HID通信及固件烧录等关键步骤。特别针对常见问题提供避坑指南,帮助开发者高效完成从电路设计到功能实现的完整过程,打造个性化瀚文键盘。

soda5的博客 770

深入探索Android卡顿优化(上)

前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 在上篇,笔者详细分析了目前的App绘制与布局优化的相关优化方案,如果对绘制优化与布局优化还不是非常熟悉的可以仔细看看前几篇文章:Android性能优化之绘制优化、深入探索Android布局优化(上)、深入探索Android布局优化(下)。由于卡顿优化这一主题包含的内容太多,为了更详细地进行讲......

IT元老的博客 7329

嵌入式调光控制库:轻量级软启/渐变/记忆逻辑实现

调光控制是智能照明系统的核心基础功能,涉及亮度调节、人机交互与电气安全多重需求。其底层原理依赖于对相位角或PWM占空比的精确时序控制,并需融合软启动、渐变过渡、状态记忆等工程化逻辑。这类轻量级调光行为逻辑层,不直接操作硬件寄存器,而是以确定性、无动态内存、可配置的方式封装用户意图到目标亮度值(0–100%)的映射过程,显著提升产品鲁棒性与跨平台复用能力。广泛应用于TRIAC交流调光、LED直流PWM驱动及DALI/Matter等智能照明协议网关中,尤其适合资源受限的Cortex-M系列MCU和FreeRTO

weixin_28949937的博客 579

Part 1 App性能概览与平台化实践

Part 1 App性能概览与平台化实践 写在前面的话 主要用于记录慕课网中的Top团队大牛带你玩转Android性能分析与优化课程的笔记,便于以后查看,课程很精彩。自己一边学习一边整理笔记,会慢慢更新的。 一 性能优化中可能遇到哪些难题 1.性能表现差 2.线上问题无从追查 3.性能优化的长期开销大 4.总结 1.性能表现差 app启动慢、卡顿、丢帧、耗电、网络请求慢(用户可以感知到的) ...

zsjlovesm521的博客 785

RK3568平台开发系列讲解(项目篇)手写数字识别

📢 本篇章带大家基于飞桨(PaddlePaddle),完成一个简单的手写数字识别任务。

内核笔记 1181

平头哥面试——芯片工程师面经

有5个成递增关系的32bit地址值,彼此之间的间隔大小不确定,可以把他们当成parameter来输入模块,现有一个32bit输入数据,要求用尽量少资源去的判断这个数处于哪2个地址之间(地址区间),并且输出区间号。a)后续大概会在9月下旬谈具体的薪资,他们现在也没想好今年应届生的薪资该给多少,到时候如果可以签三方的话可能会跳过意向书环节直接发offer,谈薪资肯定是通过电话来。b. 这边的CPU是自己研制的(玄铁),成都这边主要做存储和网络,都有SOC。a. 成都这边的网络部门具体做的业务有哪些?

FPGA/MATLAB学习教程/源码/项目合作开发 2688

android app性能优化_国内Top团队大牛带你玩转Android性能分析与优化

对于Android工程师而言,APP的性能优化是他们经常要面对的问题,具体到内存抖动怎么快速定位、解决?单点用户问题怎么追查?如何保证APP尽可能的高可用?可以说,Android的性能分析与优化是提升技术能力的关键点,也是成为优秀程序员的必要条件。国内Top团队大牛带你玩转Android性能分析与优化一课将带你由表及里学到国内Top团队对性能问题的体系优化方案、手段及保障经验,并从启动速度、内存、...

weixin_39636707的博客 423

3 路由引入

在大型企业网络中,网络规模十分庞大,选用单一的路由协议无法满足网络的需求,因此多种路由协议共存的情况十分常见。或者出于业务逻辑或行政管理的考虑,会在不同的网络结构中设计和部署不同的路由协议,使路由的层次结构更加清晰可控。路由引入是具有方向性的,将路由信息从路由协议A引入到路由协议B(A-to-B),则路由协议B可获知A中的路由信息,但是此时,A还并不知晓B路由协议中的路由信息,除非配置B-to-A的路由引入。表3-1:各种路由协议的优先级。通过路由引入,可以实现路由信息在不同路由协议间传递。

lwljh134的博客 621

【精华】(案例说明)30分钟带你熟练SQL SERVER性能优化的那点儿事儿

前言   性能优化是数据库运维人员和中、高级软件开发人员的必备技能,很多时候老司机和新司机的区别就在写出的东西是否优化。   博主接触过近千家客户的系统,这些系统都存在着各种各样的性能问题。那么如何透彻的了解我们的数据库性能问题?今天就用一个案例来说明性能优化的那点儿事儿。   PS:很多技术人员对优化有一套自己的理解,在阅读本文前请放下你自己的理解。   正所谓:跟着博主不迷路,博主...

SQL专家云 236

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

XcodeGen性能优化案例:将生成时间从5分钟缩短到30秒

你是否也曾经历过这样的场景:团队协作开发时,执行`xcodegen generate`后,终端光标闪烁5分钟毫无反应,整个开发流程被迫中断?当项目规模超过20个模块、包含数百个文件时,XcodeGen默认配置下的项目生成过程往往成为开发效率的瓶颈。本文将通过实战案例,系统拆解如何通过**缓存机制重构**、**文件搜索算法优化**、**并行处理引入**三大核心手段,将5分钟的生成时间压缩至30秒内,...

gitblog_00722的博客 1050

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从10分钟到30秒:typescript-eslint性能优化实战指南

🚀 TypeScript ESLint性能优化是每个大型项目开发者都面临的挑战。当你的代码库从数百行扩展到数万行时,linting时间可能会从几秒飙升到几分钟甚至更长。本文将通过实战案例,分享如何将typescript-eslint的运行时间从10分钟优化到30秒的关键技巧。 ## 为什么TypeScript ESLint会变慢? TypeScript ESLint的性能瓶颈主要来自两个方面

gitblog_00157的博客 956

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Pandas实战:30分钟掌握数据处理核心技能(附案例代码)

本文通过电商销售案例,带大家实战了Pandas的核心操作:从数据读取、清洗、转换到聚合分析,覆盖了数据分析的全流程。其实Pandas的核心就是"数据结构+操作方法",掌握了DataFrame的增删改查、分组聚合等技巧,80%的数据分析场景都能应对。数据合并:用merge()、concat()处理多表数据(如销售数据和用户数据合并);高级筛选:用apply()和lambda函数实现复杂逻辑筛选;时间序列分析:用Pandas的resample()实现按周/季度统计;数据导出。

2301_81348661的博客 1175

30分钟快速验证Realtek网卡性能优化方案

我尝试在平台上跑了几轮测试,发现整个流程非常顺畅,特别是结果可视化的部分,直接就能看到不同配置的性能对比,省去了自己写脚本画图的麻烦。它的容器环境一键部署功能特别适合这种需要快速搭建测试场景的需求,实测从创建项目到完成部署只需要几分钟,大大提升了测试效率。在容器中预装必要的测试工具,如iperf3用于带宽测试,ping用于延迟测试,sysstat用于监控CPU使用率。驱动版本对比测试:准备不同版本的Realtek官方驱动和Linux内核自带驱动,测试不同驱动下的性能差异。

ObsidianRaven13的博客 1080

30分钟上线AI乐器识别应用:Gradio实战案例解析

你是否遇到过这些困境:训练好的机器学习模型难以向非技术人员展示?想快速验证模型交互效果却受制于前端开发?Gradio作为开源机器学习界面库,正解决这些痛点。本文通过「AI乐器识别应用」完整案例,展示如何用Gradio在30分钟内构建专业级交互界面,让技术成果高效触达业务端。 ## 项目背景与核心价值 Gradio是由Hugging Face开发的Python库,通过极简API实现机器学习模型的...

gitblog_01056的博客 567

Spring Batch性能优化:从30分钟到3分钟的蜕变

分区数量不是越多越好,需要根据数据量和服务器资源平衡chunk size需要实际测试确定,太小或太大都会影响性能批量操作能显著减少IO,但要考虑事务边界监控指标对持续优化非常重要错误处理机制能提高作业的健壮性这次优化让我深刻体会到,即使是成熟的框架如Spring Batch,也需要根据实际场景进行调优。合理的架构设计加上细致的性能优化,可以带来数量级的效率提升。整个优化过程我在InsCode(快马)平台。

BlackStone33的博客 431

dupeguru性能优化终极指南:从30分钟到5分钟的惊人提速

想要在短时间内扫描海量文件并找出重复项吗?dupeguru性能优化终极指南将为您揭示从30分钟到5分钟惊人提速的秘密!作为一款强大的跨平台重复文件查找工具,dupeguru在处理大型数据集时可能会遇到性能瓶颈。本文提供完整的性能优化解决方案,帮助您充分利用dupeguru的强大功能,实现闪电般的扫描速度。 ## 🚀 理解dupeguru的性能瓶颈 dupeguru的核心性能瓶颈主要来自几个关

gitblog_01128的博客 734
上一篇: SQL SERVER全面优化-------索引有多重要?
下一篇: SQL SERVER全面优化-------Expert for SQL Server 诊断系列
imJaron
博客等级 码龄11年 121粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值