广告
返回顶部
首页 > 资讯 > 数据库 >如何进行数据库性能调优
  • 726
分享到

如何进行数据库性能调优

2024-04-02 19:04:59 726人浏览 安东尼
摘要

如何进行数据库性能调优,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱

如何进行数据库性能调优,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

前言

微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱 。我也非常认可,让我们来一层一层拨开外面它神秘的面纱。

六大因素

下面祭出的是我们在给客户分析数据库性能问题最常用的图。

如何进行数据库性能调优

看完这个图,你是不是对性能调优有了个基本的概念了。通常来讲,我们会依照下面的顺序来进行分析:

  • 硬件能力

  • 系统规模

  • 数据库内部因素

  • 软件环境

这4个的顺序可以有所调整或者交换,但是对于系统的性能优化一定要从全局出发切勿一来就深入到某一个SQL语句的优化,因为可能你花费大量的时间把一个sql从20s 优化到1s,但是整个系统的卡慢仍然存在。

实战案例

不废话了,开整开整,直接上干货。

时间:2018年1月某天

事件:某医院客户 下午4点 突然出现大面积的卡慢。整个系统出现严重问题,信息中心电话打爆,医院工程师手足无措。

万幸的是我们给数据库装了‘摄像头’,下面就从监控录像来看看发送了什么。然后加以解决。

硬件能力

CPU

在问题发生时间段内CPU使用率在20%以下,正常。

如何进行数据库性能调优

Memory

从下面的图像显示,内存使用正常。

页生命周期

如何进行数据库性能调优

可用内存

如何进行数据库性能调优

IO

io队列平均值很低,15.48 左右有个瞬时的高点,可留意这段时间有没有批量的写入。

如何进行数据库性能调优

总的来看,硬件资源是足够的。

系统规模

问题发生时,每秒的批请求数并不是一个上升趋势,反而有所下降。这是因为系统的拥堵,等待 ,影响了系统的吞吐量。

如何进行数据库性能调优

数据库内部因素

等待

如何进行数据库性能调优

慢语句

如何进行数据库性能调优

从会话和慢语句的趋势图可以看到,问题发生的时间和客户描述完全吻合,我们可以断定本身事故的确是慢在数据库。

什么导致的慢

检查者个时间段运行中的语句,可以发现下午15.58左右,数据库中开始出现越来越多的CMEMTHREAD等待。

如何进行数据库性能调优

一直到1900页16.08分的时候,出现了***达100个并发同时出现CMEMTHREAD等待。

如何进行数据库性能调优

什么是CMEMTHREAD等待

微软官方的描述:在任务正在等待线程安全的内存对象时发生。 当多个任务尝试从同一个内存对象分配内存导致争用时,等待时间可能会增加。

这个描述很晦涩,感觉还是完全不知道等待类型是怎么回事,应该怎么处理这类问题。

实际上,从官方描述来看是内存争用的问题,但是实际上这个问题的关键在于多个任务的争用,实际上是并发的执行的问题。

场景

  1. 出现在数据库编译或重编译时,将即席执行计划ad hoc plans 插入到计划缓存中的时候

  2. NUMA架构下,内存对象是按照节点来分区的

内存对象有三种类型的(Global,Per  Numa node,Per CPU)。 SQL  Server将允许对内存对象进行分段,以便只有同一节点或CPU上的线程具有相同的底层CMemObj,从而减少来自其他节点或cpu的线程交互,从而提高性能和可伸缩性。减少内存的并发争用。

SELECT  type, pages_in_bytes,  CASE  WHEN (0x20 = creation_options & 0x20) THEN 'Global PMO. Cannot be partitioned by CPU/NUMA Node. TF 8048 not applicable.'  WHEN (0x40 = creation_options & 0x40) THEN 'Partitioned by CPU.TF 8048 not applicable.'  WHEN (0x80 = creation_options & 0x80) THEN 'Partitioned by Node. Use TF 8048 to further partition by CPU'  ELSE 'UNKNOWN'  END  from sys.dm_os_memory_objects  order by pages_in_bytes desc

如果你发现,Partitioned by Node 的内存开销是排在前面的,可以使用TRACE FLAG 8048来减少CMEMTHREAD等待。

如何进行数据库性能调优

从图中可以看到,客户的 Partitioned by Node 是比较靠后的,排在14位。

3. 补丁

这类场景是最常见的。如果在系统中发现出现大量的CMEMTHREAD等待,优先考虑数据库是不是已经安装***的补丁。

2008  r2: FIX: SQL Server 2008 R2 perfORMs poorly when most threads wait for  the CMEMTHREAD wait type if the threads use table variables or temp  tables to load or update rowsets

2012 ,2014 当您执行许多特殊查询在 SQL Server 2012年或 SQL Server 2014 CMEMTHREAD 等待。

软硬件环境

如何进行数据库性能调优

目前数据库的版本是 11.0.5556.0 而前面提到的补丁,安装后的版本是:11.0.5623.0

代码设计

是什么语句产生了等待。

都是类似下面的语句,***时,并发超过100。

SELECT

* INTO #Tmp from TB where 1=2

特点如下:

1.语句简单 开销都小于5不会产生并行。

2.都采用了select into #temptable的形式。

就像上面分析的一样,CMEMTHREAD等待是一个并发问题,而不是一个内存问题。在其他方案行不通的时候,我们可以通过调整此类语句的写法,减少CMEMTHREAD等待.

业务模型及架构

目前系统是单机运行的状态,这其实是很少见的。存在少量OLAP 和OLTP业务混合的情况。后续我们会给客户规划 读写分离 或者负载均衡的解决方案。

解决方案

安装***的补丁

至少需要安装前面发的解决等待问题的FIX。建议是直接安装到目前为止***的2012 SP4补丁。

修改参数

optimize for ad hoc workloads 从0修改为1 。针对将即席执行计划ad hoc plans 插入到计划缓存中的时候场景,减少ad hoc 查询占用的内存。

增加TEMPDB数据文件的个数

select * into #temptable 会产生大量的闩争用,防止在CMEMTHREAD 等待消除后,出现大量的pagelatch 闩锁争用。我经历过很多案例,解决了前面的一个拥堵之后,后面有产生了新的等待,导致性能更差了。请记住优化是一个长期的,循序渐进的过程。

如何进行数据库性能调优

迁移TEMPDB数据文件的位置

目前部分tempdb文件放在S,一般分放在D盘。建议都迁移到S盘(存储上面),增加tempdb的响应速度。如果可能的话,使用SSD来***化tempdb的性能,将会是不错的选择。

优化程序的代码

修改代码通常都是放在***面的,因为要牵涉的情况比较多。前面的手段80%的情况下,都可以解决问题。剩下的20%,我们需要,检查程序中的逻辑,看看这些的语句都是什么业务产生的。什么条件会触发这类业务.对应下面类似的语句都使用存储过程,或者参数化后的方式,减少编译和重编译的次数。另外此类语句都会并发创建临时表,可能通过调整tempdb的设置,加快此类语句的执行速度,减少同一时间此类语句的并发数量。

优化效果

经过前面的几个优化手段,第二天开始,没有再出现过一次CMEMTHREAD的等待。

等待

如何进行数据库性能调优

慢语句

如何进行数据库性能调优

关于如何进行数据库性能调优问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行数据库性能调优

本文链接: https://www.lsjlt.com/news/67802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行数据库性能调优
    如何进行数据库性能调优,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱 ...
    99+
    2022-10-19
  • 如何进行Linux设备IO研究与数据库性能调优
    本篇文章给大家分享的是有关如何进行Linux设备IO研究与数据库性能调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何在Linux系统里对数据库及设备IO库进行调优?数据库...
    99+
    2023-06-16
  • 如何进行生产数据库性能优化的分析
    这期内容当中小编将会给大家带来有关如何进行生产数据库性能优化的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。需求:在钉钉群个人简介页面需要显示钉钉群名称和简介,每个群...
    99+
    2022-10-19
  • 如何进行C++代码的性能调优?
    如何进行C++代码的性能调优C++作为一种高性能的编程语言,被广泛运用在许多性能要求较高的领域,如游戏开发、嵌入式系统等。然而,在编写C++程序时,我们常常会面临性能瓶颈的挑战。为了提高程序的运行效率和响应时间,我们需要进行代码的性能调优。...
    99+
    2023-11-02
    C++ 性能调优 代码调优
  • PostgreSQL数据库性能调优的注意点以及pg数据库性能优化方式
    目录PostgreSQL 优化思路一、排序二、索引三、连接查询方式四、多表联查时PostgreSQL提供了一些性能调优的功能1.使用EXPLAIN2.及时更新执行计划中使用的统计信息3.明确用join来关联表4.关闭自动...
    99+
    2023-03-15
    PostgreSQL性能调优 PostgreSQL性能优化 PostgreSQL数据库
  • PHP与数据库性能调优的集成
    随着互联网技术的飞速发展,数据库是网站开发中必不可少的一部分。而PHP是目前最常用的服务器端语言之一,它的高效性能和便捷的开发方式已经被广泛认可。但是,即使是最流行的技术也有其局限性,数据库性能问题是PHP开发人员必须面对的挑战之一。 那么...
    99+
    2023-05-17
    调优 PHP 数据库性能
  • 数据库如何进行优化
    这篇文章主要介绍了数据库如何进行优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库优化的方式:1、选取最适用的字段属性;2、使用连接来代替子查询;3、使用联合来代替手动...
    99+
    2023-06-14
  • PostgreSQL数据库性能调优的注意点及pg数据库性能优化方法是什么
    本篇内容主要讲解“PostgreSQL数据库性能调优的注意点及pg数据库性能优化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL数据...
    99+
    2023-03-20
    postgresql 数据库
  • 怎么进行Spark的性能调优
    怎么进行Spark的性能调优,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0、背景集群部分 spark 任务执行很慢,且经常出错,参数改来改去怎么都无法优化其性能和解决频繁随机...
    99+
    2023-06-19
  • 如何优化MySQL数据库性能
    本篇内容介绍了“如何优化MySQL数据库性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL 性能...
    99+
    2022-10-18
  • 如何调优mysql数据库
    如何调优mysql数据库?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、排除缓存干扰在MySQL8.0之前,数据库存在缓存。因为存在缓存,所以同一个sql的执...
    99+
    2023-06-15
  • MySQL中如何优化数据库性能
    这篇文章给大家介绍MySQL中如何优化数据库性能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  关键参数一:back_log  要求 MySQL 能有的连接数量。当主要MySQL线程...
    99+
    2022-10-18
  • 如何优化MySQL数据库的性能?
    如何优化MySQL数据库的性能?在现代信息时代,数据已经成为企业和组织的重要资产。作为最常用的关系型数据库管理系统之一,MySQL在各行各业都广泛地应用着。然而,随着数据量的增长和负载的增加,MySQL数据库的性能问题也逐渐凸显。为了提高系...
    99+
    2023-10-22
    索引优化 查询优化 缓存优化
  • 如何对MySQL进行性能调优和故障排查?
    如何对MySQL进行性能调优和故障排查?一、引言MySQL是目前使用最广泛的关系型数据库管理系统之一,它在许多应用场景中都扮演着重要的角色。但是,随着数据量逐渐增大和业务需求的增长,MySQL的性能问题和故障排查变得越来越常见。本文将介绍如...
    99+
    2023-10-22
    MySQL 性能调优 故障排查
  • 如何在PHP项目中进行性能调优和资源优化?
    如何在PHP项目中进行性能调优和资源优化?随着互联网的高速发展,越来越多的应用程序采用了PHP作为开发语言。由于PHP的易用性和灵活性,许多开发人员选择使用它来构建自己的网站和应用程序。然而,由于PHP的动态特性和解释性质,一些开发人员可能...
    99+
    2023-11-03
    性能调优 PHP项目 资源优化
  • 分析数据库实例性能调优利器Performance Insights
    这篇文章主要讲解了“分析数据库实例性能调优利器Performance Insights”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析数据库实例性能调优利...
    99+
    2022-10-19
  • 怎么配置php.ini进行PHP性能调优
    这篇文章主要介绍“怎么配置php.ini进行PHP性能调优”,在日常操作中,相信很多人在怎么配置php.ini进行PHP性能调优问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么配置php.ini进行PHP性...
    99+
    2023-06-29
  • Golang开发建议:如何进行有效的性能调优
    在Golang开发中,性能调优是非常重要的一个方面。无论你是在开发一个Web应用、一个分布式系统还是一个底层工具,提高Golang程序的性能需要进行有效的性能调优,这将直接影响到应用的响应速度和稳定性。本文将向你介绍一些关于Golang性能...
    99+
    2023-11-23
    Golang性能调优 有效性能优化 Golang开发建议
  • 如何使用MySQL进行日志分析和性能调优?
    如何使用MySQL进行日志分析和性能调优?导语:MySQL是一种常见且强大的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。本文将介绍如何使用MySQL的日志功能进行分析,并提供一些性能调优的方法和示例代码。一、MySQL的日志功能...
    99+
    2023-10-22
    MySQL 性能调优 日志分析
  • 如何实现Mysql数据库性能优化
    这篇文章主要为大家展示了“如何实现Mysql数据库性能优化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现Mysql数据库性能优化”这篇文章吧。对表进行水...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作