一、           MUMA架构优化

目前的商用服务器答题可以分为三类:

                   对称多处理器结构(Symmetric Multi-Processor,SMP):在一台计算机上汇集了一组处理区(多CPU),各个CPU之间共享内存子系统和总线结构。所有的CPU都可以平等地访问内存、I/O和外设。对SMP服务器进行扩展的方式有增加内存、使用更快的CPU、增加CPU扩充I/O,以及增加更多的磁盘等。

                   非一致存储访问结构(Non-Uniform Memory Access,MUMA):把一个服务器分成多个节点,每个节点拥有多高CPU,节点内部使用公有的内存对于本届电所有的CPU都是相同的,而对于其他节点中所有CPU都是不通的。因此每个CPU可以访问整个系统内存,但是访问本届电的内存速度最快,访问非本届电的内存速度较慢(需要经过互联模块),即CPU访问内存的速度与节点距离有关,距离成为Node Distance。

1.   显示当前NUMA节点情况。

[root@EMPBJDBServB~]# numactl --hardware

available: 8 nodes (0-7)                      ——————当前节点有8个node

node 0 cpus: 0 1 2 3 4 5 6 7 64 65 66 67 6869 70 71

node 0 size: 32743 MB                       ——————node0内存大约为32G

node 0 free: 18572 MB

node 1 cpus: 8 9 10 11 12 13 14 15 72 73 7475 76 77 78 79

node 1 size: 32768 MB

node 1 free: 23453 MB

node 2 cpus: 16 17 18 19 20 21 22 23 80 8182 83 84 85 86 87

node 2 size: 32768 MB

node 2 free: 23279 MB

node 3 cpus: 24 25 26 27 28 29 30 31 88 8990 91 92 93 94 95

node 3 size: 32768 MB

node 3 free: 22283 MB

node 4 cpus: 32 33 34 35 36 37 38 39 96 9798 99 100 101 102 103

node 4 size: 32768 MB

node 4 free: 23631 MB

node 5 cpus: 40 41 42 43 44 45 46 47 104105 106 107 108 109 110 111

node 5 size: 32768 MB

node 5 free: 23718 MB

node 6 cpus: 48 49 50 51 52 53 54 55 112113 114 115 116 117 118 119

node 6 size: 32768 MB

node 6 free: 22356 MB

node 7 cpus: 56 57 58 59 60 61 62 63 120121 122 123 124 125 126 127

node 7 size: 32768 MB

node 7 free: 22234 MB

node distances:

node  0   1   2  3   4   5  6   7

0:  10  12 11  11  11 12  12  12

1:  12  10 11  11  12 12  11  12

2:  11  11 10  12  12 11  12  12

3:  11  11  12  10 12  12  12  11

4:  11  12 12  12  10 12  11  11

5:  12  12 11  12  12 10  11  11

6:  12  11 12  12  11 11  10  12

7:  12  12 12  11  11 11  12  10

节点之间距离是指从1节点访问0节点上的内存需要付出的代价的一种形式。

2.   MUMA的内存分配策略有以下4种

缺省default:总是在本地节点分配(分配在当前进程运行的节点上)

绑定bind:强制分配到指定节点上

交叉interleave:在所有节点或者指定节点上交叉分配内存

优先preferred:在指定节点上分配,失败则在其他节点上分配

3.   显示当前系统NUMA策略

[root@EMPBJDBServB~]# numactl --show

policy: default

preferred node: current

physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 3839 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6465 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 9091 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

cpubind: 0 1 2 3 4 5 6 7

nodebind: 0 1 2 3 4 5 6 7

membind: 0 1 2 3 4 5 6 7

因为NUMA默认的内存分配策略是有线在进程锁在CPU的本地内存中分配,会导致CPU节点之间不均衡,当某个CPU节点内存不足时,会导致SWAP产生,而不是从远程节点分配内存,这就是SWAP INSANITY现象。

因为MySQL是但进程多线程数据库,为了防止SWAP INSANITY现象,所以如果单机只运行一个MySQL实例,可以选择关闭MUMA。关闭MUMA方式有两种:

修改/etc/grub.conf文件,在kernel那行追加numa=off

[root@localhost~]# more /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grubafter making changes to this file

# NOTICE: You have a /boot partition.  Thismeans that

#         all kernel and initrd paths are relative to /boot/, eg.

#         root (hd0,0)

#         kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root

#         initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux(2.6.32-358.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-358.el6.x86_64 roroot=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MDrd_LVM_LV=VolGroup/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM

_LV=VolGroup/lv_root  elevator=deadline KEYBOARDTYPE=pc KEYTABLE=usrd_NO_DM rhgb quiet muma=off

initrd /initramfs-2.6.32-358.el6.x86_64.img

或者通过mumactl命令将NUMA内存分配策略修改为interleave。

修改mysqld_safe启动脚本,在cmd="$NOHUP_NICENESS"后添加如下信息

cmd="/usr/bin/numactl--interleave all $cmd"

,启动MySQL时指定内存分配策略为interleave

                   海量并行处理结构(Massive Parallel Processing,MPP):解决了NUMA架构增加CPU并不能线性提升性能的问题,由于MPP由多个SMP服务器通过一定的节点互联网进行连接,每个节点值访问子集的本地资源(内存、存储等),不防问其他节点的资源,是一种share nothing的架构,因而理论上可以无线扩展。MPP架构中,每个节点的CPU不能访问其他节点的内存,此时节点之间的信息交换是通过节点互联网络实现的,这个过程称为data redistribution。但是MPP服务器需要复杂的机制来调度和平衡各个节点的负载和并行处理。目前基于MPP技术的服务器通过例如数据库软件等系统软件来屏蔽底层的复杂性。

二、           应用优化

1.   使用连接池

对于访问数据库来说,简历连接的代价比较昂贵,因此,我们要有必要建立“连接池”以提供高性能访问的性能。

2.   减少对MySQL的访问

避免对同一数据做重复检索

应用中需要理清对数据库的访问逻辑。能够一次连接就能图去除所有结果,就不用两次连接,这样可以大大减少对数据库无谓的重复访问。

使用查询缓存

MySQL的查询缓存是在4.1版本后新增的功能,它的作用是存储select查询的文本以及相应的结果。如果随后收到一个相同的查询,服务器会从查询缓存中重新得到查询结果,而不再需要解析和执行查询。

查询缓存的使用对象是更新不频繁的表,当表更改后,查询缓存值的相关条目被清空。

 

查询缓存相关的参数主要有以下几个:

         mysql> show variables like'%query_cache%';

+------------------------------+---------+

| Variable_name                | Value   |

+------------------------------+---------+

| have_query_cache             | YES     | ——在服务器上安装时是否已经配置了高速缓存

| query_cache_limit            | 1048576 |

| query_cache_min_res_unit     | 4096   |

| query_cache_size             | 1048576 |——表明缓存大小,单位MB

| query_cache_type             | OFF     |——变量值从0到2,含义分别为:0或者off(缓存关闭)、1或者on(缓存打开,使用SQL_NO_CACHE提示的select除外)、2或者demand(只有带SQL_CACHE的SELECT语句提供高速缓存)

| query_cache_wlock_invalidate | OFF     |

+------------------------------+---------+

6 rows in set (0.00 sec)

MySQL查询缓存的性能监控参数

mysql> show status like 'Qcache%';

+-------------------------+---------+

| Variable_name           | Value   |

+-------------------------+---------+

| Qcache_free_blocks      | 1      |                        ——查询缓存的空闲内存空间总数

| Qcache_free_memory      | 1031368 |                     ——查询缓存的空闲内存数

| Qcache_hits             | 0       |                      ——缓存采样数数目

| Qcache_inserts          | 0       |                       ——被加入到缓存中的查询数目

| Qcache_lowmem_prunes    | 0      |                   ——因为缺少内存而被从缓存中删除的查询数目

| Qcache_not_cached       | 2      |                     ——没有被缓存的查询数目(不能或者由于QUERY_CHACHE_TYPE)

| Qcache_queries_in_cache | 0       |                          ——在缓存中已注册的查询数目

| Qcache_total_blocks     | 1      |                         ——查询缓存中块的总数目

+-------------------------+---------+

8 rows in set (0.00 sec)

增加cache层

在应用中,我们可以在应用端加CHACHE层来达到减轻数据库负担的目的。

每天进步一点点————MUMA架构优化和应用优化相关推荐

  1. 系统架构性能问题诊断及优化思路,纯干货!

    来源:http://blog.sina.com.cn/s/blog_493a84550102z8t2.html 今天谈下业务系统性能问题分析诊断和性能优化方面的内容.这篇文章重点还是谈已经上线的业务系 ...

  2. mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...

    摘要: 冲区才用缓冲区,即SQL_CACHE:sort_buffer_size:排序缓冲区.3)分库分表因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响. ...

  3. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略

    DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...

  4. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  5. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这

    优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...

  6. 微信红包系统架构的设计和优化分享

    微信红包系统架构的设计和优化分享 编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10.1亿次,系统整体运行平稳, 在这里我分 ...

  7. 架构升级、性能优化,高德技术专家 infoQ 全球架构师峰会开讲啦

    关于全球架构师峰会(ArchSummit) 全球架构师峰会(ArchSummit)是 InfoQ 中国团队推出的重点面向高端技术管理者.架构师的技术会议,54% 参会者拥有8年以上工作经验.7月12日 ...

  8. android MVP——mvp架构的应用和优化

    MVP架构在android还是很好用的.我也在试着将mvp用在项目中. 下面我就来说说mvp模式的应用和优化. mvp模式的概念 MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Co ...

  9. 【内附独家PPT】CynosDB for MySQL 计算存储分离架构的实现和优化

    3月16日,由腾讯云云+社区主办的腾讯云自研数据库 CynosDB 交流会在北京圆满落幕,本次交流会全方位解读了CynosDB,揭秘技术内幕,解读兼容两大主流开源数据库的一主多读架构.高可用架构及快速 ...

  10. 字节跳动Android三面视频解析:framework+MVP架构+HashMap原理+性能优化+Flutter+源码分析等

    前言 对于字节跳动的二面三面而言,Framework+MVP架构+HashMap原理+性能优化+Flutter+源码分析等问题都成高频问点!然而很多的朋友在面试时却答不上或者答不全!今天在这分享下这些 ...

最新文章

  1. php过滤两个坐标,php判断两个坐标的方位角
  2. sql sever 中如何查看某个表的索引_查看执行计划:explain的type
  3. mysql之间互相订阅_mysql – 开票和订阅的应用程序逻辑?
  4. lduan HyPer-V 虚拟机服务监控及更新(十一)
  5. leetcode116. 填充每个节点的下一个右侧节点指针(层序遍历07)
  6. 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现
  7. C# IIS配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
  8. 计算机网络物理层-编码技术实现
  9. 【C#】ADO .Net Entities Framework使用查询语句时遇到的错误
  10. 【转载】生机勃勃的秋菊freeeim
  11. 基于HTML5实现的超酷摄像头(HTML5 webcam)拍照功能 - photobooth.js
  12. NHMicro业务脚本热部署快速开发框架介绍
  13. 一张图11招学会Python网络黑客
  14. 让wordpress判断是电脑端浏览还是移动端浏览
  15. Qt:QtFileDialog打开文件选择对话框选择文件
  16. 开发低功耗蓝牙4.0血压计连接与收发数据
  17. python opencv 修改局部区域像素值
  18. Android MediaPlayer+SurfaceView播放视频 (异常处理)
  19. (闪存)存储基础知识
  20. seo每天的日常工作内容是哪些?

热门文章

  1. 一个一本正经的科普--5G是什么?
  2. Adobe flash player ActiveX、NPAPI、PPAPI 的区别
  3. 怎么学好高中数学高一数学学习方法有哪些
  4. 电脑安装双系统教程,电脑安装两个系统
  5. C++ 类(继承中的构造和析构)
  6. 令人头秃,SaaS部署和本地部署该怎么选?
  7. [CM311-1A]-买了一个机顶盒准备刷成 Linux 盒子!
  8. RabbitMQ(一) | MQ技术对比,以及对RabbitMQ五种消息模型的使用
  9. 【XJTUSE计算机图形学】第四章 真实感图形学(2)——简单光照明模型
  10. win10 将中文名修改成英文名