CPU调优

首先要清楚数据库应用的分类,一般分为两类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online Analytical Processing,在线分析处理),这是两种完全不同的数据库应用。OLAP多用在数据仓库或数据集市中,一般需要执行复杂的SQL语句来进行查询;OLTP多用在日常的事物处理应用中,如银行交易、在线商品交易、Blog、网络游戏等应用。相对于OLAP,数据库的容量较小。

InnoDB存储引擎一般都应用于OLTP的数据库应用,这种应用的特点如下所示:

  1. 用户操作的并发量大。
  2. 事务处理的时间一般比较短。
  3. 查询的语句较为简单,一般都走索引。
  4. 复杂的查询较少。

可以看出,OLTP的数据库应用本身对CPU的要求并不高,因为复杂的查询可能需要执行比较、排序、连接等非常耗CPU的操作,这些操作在OLTP的数据库应用中很少发生。因此,可以说OLAP是CPU密集型的操作,而OLTP是IO密集型的操作。建议在采购设备时,应将更多的注意力放在提高IO的配置上。

此外,为了获得更多内存的支持,CPU必须支持64位的应用,否则无法支持64位操作系统的安装。因此,为新的应用选择64位的CPU是必要的前提。现在4核的CPU已经非常普遍,而今年Intel和AMD又都推出了6核的CPU,将来随着操作系统的升级,我们还可能看到128核的CPU,这都需要数据库更好地对其进行支持。

从InnoDB存储引擎的设计架构上来看,其主要的后台操作都是在一个单独的MASTER THREAD中完成的,因此并不能很好地支持多核的应用。当然,开源社区已经通过多种方法来改变这种局面,新的InnoDB Plugin版本在各种测试下已经显示对多核CPU的处理性能有了极大的提高。因此,如果你的CPU支持多核,InnoDB Plugin是更好的选择。另外,如果你的CPU是多核的,你可以通过修改参数innodb_read_io_threads和innodb_write_io_threads来增大IO的线程,这样也能更充分利用CPU的多核性能。

在当前的MySQL版本中,一条SQL查询语句只能在一个CPU行工作,并不支持多CPU的处理。OLTP的数据库应用操作一般都很简单,因此对OLTP应用的影响并不是很大。但是,多个CPU或多核CPU对处理大并发量的请求还有非常有帮助的。

内存的重要性

内存的大小最能直接反应数据库的性能。InnoDB存储引擎既缓存数据,又缓存索引,并将其缓存于一个很大的缓冲池中,我们将这个缓冲池称为InnoDB Buffer Pool,它的大小直接影响了数据库的性能。

Percona公司的CTO Vadim对此做了一次测试,以此反应内存的重要性,结果如图所示。

在上述的测试中,数据和索引总大小为18GB,然后将缓冲池的大小分别设为2GB、4GB、6GB、8GB、10GB、12GB、14GB、16GB、18GB、20GB、22GB,再进行sysbench的测试。可以发现,随着缓冲池的增大,测试结果TPS(Transaction Per Second)会线性增长。当缓冲池增大到20GB和22GB,数据库的性能有了极大的提高,因为这时缓冲池的大小已经大于数据文件本身的大小,所有对数据文件的操作都可以在内存中进行,因此这时的性能应该是最优的,再调大缓冲池并不能再提高数据库的性能。所以,应该在开发应用前预估“活跃”数据库的大小可能会是多少,并以此确定数据库服务器内存的大小。当然,要使用更多的内存,还必须使用64位的操作系统。

如何判断当前数据库的内存是否已经达到瓶颈了呢?可以通过查看当前服务器的状态,比较物理磁盘的读取和内存读取的比例来判断缓冲池的命中率,通常InnoDB存储引擎的缓冲池的命中率不应该小于99%,如:

show global status like 'innodb%read%'\G

上述参数的具体含义如下所示:

Innodb_buffer_pool_reads:表示从物理磁盘读取页的次数。

Innodb_buffer_pool_read_ahead:预读的次数。

Innodb_buffer_pool_read_ahead_evicted:预读的页,但是没有被读取就从缓冲池中被替换的页的数量,一般用来判断预读的效率。

Innodb_buffer_pool_read_requests:从缓冲池中读取页的次数。

Innodb_data_read:总共读入的字节数。

Innodb_data_reads:发起读取请求的次数,每次读取可能需要读取多个页。

以下公式可以计算各种对缓冲池的操作:

从上面的例子看,缓冲池命中率=66946 /(66946+0+713)=99.92%,可见当前内存的压力并不是很大。

即使缓冲池的大小已经大于数据库文件的大小,这也不意味着没有磁盘操作。数据库的缓冲池只是一个用来存放热点的区域,后台的master线程还负责将脏页异步地写入磁盘,每次事务提交时还需要立即写入重做日志文件。

性能调优-CPU方面,内存方面的更多相关文章

  1. 【总结】性能调优:JVM内存调优相关文章

    [总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优

  2. 系统性能调优CPU与内存

    CPU相关术语 处理器:插到系统插槽或者处理器版上的物理芯片,以核或者硬件线程的方式包含了一块或者多块CPU. 核:一颗多核处理器上的一个独立CPU实例.核的使用时处理器扩展的一种方式,有称为芯片级多 ...

  3. spark性能调优 数据倾斜 内存不足 oom解决办法

    [重要] Spark性能调优——扩展篇 : http://blog.csdn.net/zdy0_2004/article/details/51705043

  4. Tomcat性能调优及JVM内存工作原理

    Java性能优化方向:代码运算性能.内存回收.应用配置. 注:影响Java程序主要原因是垃圾回收,下面会重点介绍这方面 代码层优化:避免过多循环嵌套.调用和复杂逻辑.Tomcat调优主要内容如下:1. ...

  5. sql server 性能调优之 逻辑内存消耗最大资源分析1 (自sqlserver服务启动以后)

    一.概述 IO 内存是sql server最重要的资源,数据从磁盘加载到内存,再从内存中缓存,输出到应用端,在sql server 内存初探中有介绍.在明白了sqlserver内存原理后,就能更好的分 ...

  6. Java内存泄露及性能调优实例

    内存泄漏及解决方法 1)系统崩溃前的一些现象 每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4.5s:FullGC的次数越来越多,最频繁时隔 ...

  7. CPU开销sql server 性能调优

    sql server 性能调优 CPU开销分析 一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存 ...

  8. Java性能调优

    一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JV ...

  9. JVM性能调优

    摘自:http://uule.iteye.com/blog/2114697 JVM垃圾回收与性能调优总结 JVM调优的几种策略 一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将 ...

随机推荐

  1. Markdown编辑器——常用语法

    Markdown是什么? 简短来说,他就是一款特别适用于写博客的编辑器.为什么适合呢,因为它特别的方便.以博客园的编辑界面来说,它原本的界面是这样的(有没有一种Word2003的既视感): 但是,当你 ...

  2. windows服务安装记录

    首先打开cmd. 进入这个地址 C:\Windows\Microsoft.NET\Framework\v4.0.30319 执行操作  InstallUtil.exe E:\QueueWinServi ...

  3. 对Integer类中的私有IntegerCache缓存类的一点记录

    对Integer类中的私有IntegerCache缓存类的一点记录 // Integer类有内部缓存,存贮着-128 到 127. // 所以,每个使用这些数字的变量都指向同一个缓存数据 // 因此可 ...

  4. Apache commons StringUtils 在运行时出现NoClassDefError错误的解决方法

    Apache commons StringUtils 在运行时出现NoClassDefError错误的解决方法 在用tomcat运行WEB项目,并且使用了StringUtils包的时候,会出现 jav ...

  5. Java 使用json 做配置文件

    概述 经常会用到通过配置文件,去配置一些参数,java里面本来是有配置文件的,但是导入很麻烦的,自从我用了json之后,从此一切配置文件都见鬼去吧. 1.下载gson解析json文件的jar包     ...

  6. WP8中使用async/await扩展HttpWebRequest

    前文讲到WP8中使用Async执行HTTP请求,用了微软提供的扩展.下面提供了一种方法,自己实现HttpWebRequest的扩展. 随后就可以使用 await HttpWebRequest.GetR ...

  7. html开发基础

    1 Doctype Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档 有和无的区别 BackCompat:标准兼容模式未开启(或叫怪异模式[Quirks mode].混杂 ...

  8. AngularJS入门讲解1:angular基本概念

    AngularJS应用程序主要有三个组成部分: 模板(Templates) 模板是您用HTML和CSS编写的文件,展现应用的视图. 您可给HTML添加新的元素.属性标记,作为AngularJS编译器的 ...

  9. 微信小程序ofo小黄车+thinkphp5.0打造全栈应用

    原文地址:https://www.imooc.com/article/20310 ofo至今还没有微信小程序(很费解),每次用ofo都得去支付宝,很不方便,我用微信用的比较多,无意间在简书上面看到某人 ...

  10. P3622 [APIO2007]动物园

    题目链接 题意分析 这是一道状压\(DP\)的题 一个人只可以欣赏到\(5\)只动物 显然可以状压 我们用\(dp[i][j]\)表示当前\([i,i+4]\)中这\(5\)只动物的状态\(j\) 在 ...