如何判断一个多核机器(Linux)是否为NUMA结构
Redhat 或者Centos系统中可以通过命令# grep -i numa /var/log/dmesg 查看输出结果:
如果输出结果为:
No NUMA configuration found
说明numa为disable,如果不是上面的内容说明numa为enable
Linux上MySQL优化提升性能,可以优化关闭NUMA特性如下:
这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。
为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该选项更好,更彻底。
然后我们看看内存方面,我们有哪些可以优化的。
i)
我们先看看numa
非一致存储访问结构
(NUMA
:
Non-Uniform
Memory
Access)
也是最新的内存管理技术。它和对称多处理器结构
(SMP
:
Symmetric
Multi-Processor)
是对应的。
我们可以直观的看到:SMP访问内存的都是代价都是一样的;但是在NUMA架构下,本地内存的访问和非
本地内存的访问代价是不一样的。对应的根据这个特性,操作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:
--interleave=nodes
--membind=nodes
--cpunodebind=nodes
--physcpubind=cpus
--localalloc
--preferred=node
简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非
是设置为--interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内
存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用SWAP的方式来获得内存。
所以最简单的方法,还是关闭掉这个特性。
关闭特性的方法,分别有:可以从BIOS,操作系统,启动进程时临时关闭这个特性。
a)
由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。
b)
在操作系统中关闭,可以直接在/etc/grubconf的kernel行最后添加numa=off,如下所示:
kernel
/vmlinuz-2632-220el6x86_64
ro
root=/dev/mapper/VolGroup-root
rd_NO_LUKSUTF-8
rd_LVM_LV=VolGroup/root
rd_NO_MD
quiet
SYSFONT=latarcyrheb-sun16
rhgb
crashkernel=auto
rd_LVM_LV=VolGroup/swap
rhgb
crashkernel=auto
quiet
KEYBOARDTYPE=pc
KEYTABLE=us
rd_NO_DM
numa=off
另外可以设置
vmzone_reclaim_mode=0尽量回收内存。
c)
启动MySQL的时候,关闭NUMA特性:
numactl
--interleave=all
mysqld
当然,最好的方式是在BIOS中关闭。
ii)
我们再看看vmswappiness。
vmswappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vmswappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。
具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive
内存交换出去,还是释放数据的cache。
1最为激动人心的新特性:内存数据库
在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法来解决这类问题,比如说乐观并发控制,应用程序缓存,分布式等。但成本依然会略高。而随着这些年硬件的发展,现在服务器拥有几百G内存并不罕见,此外由于NUMA架构的成熟,也消除了多CPU访问内存的瓶颈问题,因此内存数据库得以出现。
内存的学名叫做Random Access Memory(RAM),因此如其特性一样,是随机访问的,因此对于内存,对应的数据结构也会是Hash-Index,而并发的隔离方式也对应的变成了MVCC,因此内存数据库可以在同样的硬件资源下,Handle更多的并发和请求,并且不会被锁阻塞,而SQL Server 2014集成了这个强大的功能,并不像Oracle的TimesTen需要额外付费,因此结合SSD AS Buffer Pool特性,所产生的效果将会非常值得期待。
2利用SSD对高使用频率数据进行缓存处理
用户可以指定一块SSD(或SSD阵列)作为内存扩展。SQL Server 2014能够自动对数据进行缓存处理,且不必担心数据丢失风险。
3更多在线维护操作
在SQL Server 2014中,我们可以重建一套单分区在线索引,并随意向其中添加或清除DBA指定的锁定分区。对于全天候工作负载而言,这意味着数据库管理员能够在低锁定、低CPU以及内存占用的前提下完成维护工作。扩展事件也迎来新增强,可以利用它监控当前网络中的带宽使用大户并将其关闭。下面是语法的使用方式:
ALTER INDEX MyIndex ON MyTable
REBUILD PARTITION = 3
WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5, ABORT_AFTER_WAIT = BLOCKERS)))
4AlwaysOn可用组支持更多次级服务器
如果迫切需要向外扩展读取效果,SQL Server 2014准备了多达八套次级服务器的支持能力(由上版本的四套上调至八套)。当然,我们需要使用付费的企业版才能拥有对应授权,如果已经决定将数据副本保存到其它报告或商务智能服务器中,那么此次功能提升将大大简化日常工作。
5AlwaysOn AG可读取次服务器更加可靠
在SQL Server 2014中,即使主服务器无法正常工作,次服务器也将继续在线并允许用户访问。
6将Azure虚拟机作为AlwaysOn AG副本
7故障转移集群支持集群化共享分卷
8在Azure中实际智能备份
在这项新功能的帮助下,SQL Server会根据情况判断是否需要执行全局或者差异化备份,决定多久生成一次事务日志等。此举对于某些将服务器交由虚拟机供应商托管、手中拥有大量免费带宽资源的客户来说极具吸引力——尤其是那些在Windows Azure虚拟机中托管SQL Server的用户。
9
内部SQL Server搭配Azure存储中的数据/日志文件
· 昂贵的内部授权许可
· 昂贵的云对接带宽成本
· 向微软支付数据存储费用
· 更低的备份速度(因为无论实际数据走向如何,大家的数据都必须采取由Azure存储向本地内部存储传输的路线;值得庆幸的是,微软禁止用户从本地将数据再度传回Azure存储、从而产生二次带宽使用成本)
具体语法如下:
CREATE DATABASE foo
ON (NAME = foo_dat, FILENAME = ‘https://internetstoragewindowsnet/data/foomdf’ )
LOG ON (NAME = foo_log, FILENAME = ‘https://internetstoragewindowsnet/data/foologldf’);
10
Hekaton:专用内存内OLTP列表
如果应用程序正面临严重的并发问题,即成千上万并发连接造成可怕的数据锁定状况,Hekaton带来一种神奇的解决方案。其具体原理相当复杂,它所引发的部分负面影响如下:
· 需要改变自己的数据模式。举例来说,它不支持标识字段——需要利用GUID作为集群化主键。
· 需要变更现有代码。Hekaton与已存储程序协作良好,而且能够将某些已存储程序编译为本地代码。
· 整个处理流程在内存中进行。如果发现自己的Hekaton表格体积暴增,这就意味着可供其它表格使用的缓存空间已经大幅削减。如果大家的内存空间已然告罄,整套系统将陷入瘫痪。
其它出色改进:
· 可更新的集群化列式存储索引;
· 基数估计值更合理、查询性能也因此提升;
· IO迎来资源监管工具;
· Sysprep(系统准备工具)显著增强;
· 提供向Azure虚拟机中部署数据库的引导机制;
· 职责分离机制得到强化,现在无权读取数据的数据库管理员或者审计人士终于获得了数据管理权——但无法管理服务器;
· Windows Server 2012 R2协作改进——支持ReFS、VHDX容量在线调整、存储分层以及SMB(即服务器信息块)改进。
0条评论