1、现象概述和初步分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />mysql

在生产系统中最近常常发现数据库CPU冲高的现象,冲高的时间不定最长状况有达到过2、30分钟的状况,甚至会较严重的影响数据库服务器的运行和稳定。每次出现这种状况的,如下的sql语句出现的几率较大:sql

select count(*) from ( select * from xxx) as new数据库

根据上述现象,咱们初步把测试重点放在了引发该语句的商户查询模块上,针对这一模块进行了屡次压力测试,但不管是10个并发甚至更多,数据库的CPU利用率一直很低,没法重现CPU冲高的状况。缓存

面对这样的测试结果,咱们考虑到:若是该问题与这一语句和模块相关,那么在现实生产环境中,必然有其它因素影响了这一模块的性能。通过进一步的分析,咱们把关注点转向了MySQL的查询缓存方面。服务器

2、针对Mysql缓存的分析并发

在这里咱们首先对MySQL查询缓存进行简单的解释:oracle

从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,从此对于一样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。框架

能够想见,在相对简单的测试环境中,缓存的命中率是很高的,而因为在生产环境存在着对表的更新,因此每每致使查询缓存不能命中,所以当执行这条语句的时候,它所须要的结果再也不缓存中就必须从新进行查询动做。sqlserver

而根据监控的日志,在这些sql语句的出现问题时时也每每伴有对这些表的updata语句。因此以往咱们的测试手段其实是忽视了这个问题,所以没能将问题重现。针对这个问题咱们改变了测试的方法。性能

3、针对Mysql缓存的性能测试

首先在mysql中手动执行sql语句,并在每次执行sql语句以前执行命令:flush tables来清空缓存,这样就可以真实的反映sql语句的性能。select count(*) from (select * from xxx) as new其平均执行的时间为18.22秒,说明这个SQL的确存在性能问题,而其等价写法select count(*) from xxx的平均执行时间仅在0.05秒左右或更低,两者相差居然达到数百倍之多。

(注:咱们的程序中SQL语句采用此种写法,是由于程序框架自动生成的标准SQL语句,为了适应一些特殊状况,因此采用这种统一写法。在大型商业应用的开发过程当中,咱们都是在oracle进行标准下开发,完成后再移植到mysql下面的)

为了验证咱们对于查询缓存影响的推论,咱们将数据库中关于缓存的一项设置为0,即query_cache_size=0,那么这样在进行压力测试的时候每个并发用户的每一次操做都不会从查询缓存中直接返回结果。如下是在1个并发用户的状况下,关闭查询缓存的状况下,执行的状况,从性能上看1个并发用户的平均响应时间是7.454秒,具体以下:

Transaction Summary

Total Passed: 2,988

Total Failed: 0

Total Stopped: 0

Transaction Name

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />SLAStatus

Minimum

Average

Maximum

Std. Deviation

90 Percent

Pass

Fail

Stop

Service Level Agreement Legend:

Pass

Fail

No Data

在并发测试同时对操做系统进行监控,和咱们所预料到的同样,此次即便在只有1个并发用户的状况下也出现了CPU冲高的状况,同时在这种状况下磁盘的压力很大,每秒写磁盘的峰值甚至可以达到数十M,虽然这是一个查询语句,可是因为使用了中间表所以可能mysql将中间表做为临时表进行了存储,而这些数据量就是在写临时表时候产生的。

4、针对Oracle和SqlServer的性能测试

因为根据以往咱们对oracle和sqlserver的开发经验,这种写法是不存在问题的,为了更全面的分析问题,咱们将存贮在mysql下的表导入到oracle10G中,使用一样的查询进行测试比对,咱们发现两种sql写法的执行效果是没有明显的效率差异,其单个用户的查询时间在百分之几秒级别(大概在0.015-0.05秒之间),在sqlserver2000中,发现两种不一样写法的执行时间都很是的接近而且高效(执行时间均在50毫秒左右)。这个问题在咱们已经测试的三种数据库中,仅在Mysql数据库中存在。

注:这次测试的三种数据库版本分别为:

mysql5.0.48

oracle 10g

sqlserver 2000

5、结论及解决建议

所以,通过上面的分析,咱们基本能够判断该问题的产生是因为在缓存没法命中的状况下,Mysql的查询优化器在执行这种sql语句的时候并无使用最优化或最聪明的执行方式,该SQL语句在MYSQL数据库中的执行效率存在问题。

咱们能够换另一种sql写法,应该可以提升效率至数百倍,有可能消除CPU冲高的现象。

最后通过咱们向mysql厂商求证,的确innodb引擎对select count(*) from (select * from xxx) as new 结构的sql执行是存在性能问题的,而若是采用myisam引擎就不会存在性能问题。

mysql怎么定位cpu高_Mysql数据库服务器CPU冲高问题定位及分析相关推荐

  1. mysql占用内存过高_mysql数据库占用内存过高解决办法

    top命令查看系统的实时负载, 包括进程.CPU负载.内存使用等等: 直接输入top命令 PID:PID进程 USER:用户 PR:优先级 NI:nice值,负值表示高优先级,正值表示低优先级 VIR ...

  2. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  3. 如何在本机安装mysql_机器人之如何在本机安装MySQL,并配置电脑为数据库服务器...

    本文主要向大家介绍了机器人之如何在本机安装MySQL,并配置电脑为数据库服务器,通过具体的内容向大家展现,希望对大家学习机器人有所帮助. MySQL5.5安装以及如何在本机搭建数据库服务器 1.  启 ...

  4. linux服务器怎么查看cpu配置信息,linux服务器cpu信息查看详解

    在linux系统中,提供了/proc目录下文件,显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以查/proc/cpuinfo.但是此文件输出项较多,不易理解.例如我们想获取, ...

  5. 服务器CPU支持普通主板,服务器CPU和服务器主板与普通的CPU和主板有什么不同?...

    服务器CPU和一般CPU的区别: 一.指令集不同 家用或者用工作用电脑配备的普通CPU,通常为CISC复杂指令集,追求指令集的大而全,尽量把各种常用的功能集成到一块,但是调用速度和命中率相比服务器CP ...

  6. 服务器淘汰cpu组装的电脑,服务器CPU该不该买?

    [前言]在撕逼鱼和某宝上有大量的商家卖服务器CPU主机配置,也经常有小白拿服务器CPU配置来问老哥好不好的问题,今天老哥这篇文章将告诉你服务器CPU到底该不该买?且听老哥分析. [概念]服务器CPU顾 ...

  7. MySQL数据库服务器的默认端口号是什么_MySQL数据库服务器的默认端口号是

    MySQL数据库服务器的默认端口号是 答:3306 设森林F对应的二叉树为B,它有m个结点,B的根为P,P的右子树结点个数为n,森林F中的第一棵树的结点个数是 答:m-n 日本( )原本是一种祈福.驱 ...

  8. mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

    1.MySQL概述 从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案.关系型数据库的选型将以创业公司.互联网行业使用最广泛的MySQL数据为目标,但是MySQL的安装过程 ...

  9. mysql部门人员排序设计_MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

最新文章

  1. 高校新校园网络系统设计方案
  2. Linux下使用nmap扫描局域网存活的IP
  3. 李开复对谈张亚勤:科学家创业需要企业家伙伴,开放心态看待元宇宙 | MEET2022...
  4. 测试时用存储过程来修改测试数据
  5. Eclipse+pydev+手动安装
  6. [软件测试airtest软件安装]——填坑
  7. OpenYurt开箱测评|一键让原生K8s集群具备边缘计算能力
  8. Spring 框架简介及官方压缩包目录
  9. 深入理解C语言系列之C语言语法陷阱(考题常设置的陷阱点、必须避免的错误和缺陷类型)
  10. POJ 1384 Piggy-Bank 背包DP
  11. Win11如何提高游戏性能?Win11提升游戏性能的方法
  12. tensorflowgpu利用率为0_「活动」体验新一代主机 天翼云数十款云产品0元试用
  13. 深入浅出WPF教程笔记_XAML介绍
  14. C++ stl库 手写 源码分析
  15. magicbookpro做php开发,近乎完美!荣耀MagicBook Pro优缺点解读
  16. FinClip如何将H5工程转为小程序
  17. 软件安装教程-Vivado2018.3/ISE14.7/Modelsim10.5/Keil5/AD18/Cadence17.2/CAD2016
  18. 论文阅读:SUPER: A Novel Lane Detection System
  19. css中文本指什么,CSS中的文本属性学习指南
  20. 工作阶段总结记录20221020

热门文章

  1. (蓝桥杯嵌入式)LED模块
  2. TensorFlow基础之模型建立与训练:线性回归、MLP多层感知机、卷积神经网络
  3. 素描滤镜_素描fu依次导出画板
  4. python长沙培训学校,长沙python培训班价格
  5. 企业人的职场晋升“密码”
  6. 移动周刊第 184 期:Android 开发终极指南
  7. element-ui之el-table改造 动态自定义添加列项
  8. 第一代计算机网络那一年,奔腾电脑是哪一年上市的?
  9. 网页在线浏览ppt的实现
  10. Python基础,类的继承,类的多态继承等