《mysql性能优化实践ppt课件.ppt》由会员分享,可在线阅读,更多相关《mysql性能优化实践ppt课件.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 Mysql性能优化实践搜狐畅游mysql dba 王洪权summarryNuma架构对架构对Mysql 使用使用swap产生的影响产生的影响硬件优化硬件优化操作系统优化操作系统优化网络优化网络优化重要性能参数调整重要性能参数调整为什么会产生swap 程序运行需要大量内存,内存在系统中是一个非常重要的资源,为程序运行需要大量内存,内存在系统中是一个非常重要的资源,为了满足程序的需求,在面临内存空间紧张的时候,系统就虚拟了一步分了满足程序的需求,在面临内存空间紧张的时候,系统就虚拟了一步分内存,这部分内存被映射到内存,这部分内存被映射到swap上。上。SWAP问题在系统中产生swap的场景1.C
2、p 大文件2. Mysqldump 等3 磁盘临时表的创建,排序调整方法 如何降低mysql 对swap的使用1./proc/sys/vm/swappiness (将该值设置为0)-临时/etc/sysctl.conf上添加vm.swappiness=0(永久)2. innodb_flush_method 参数设置为 O_DIRECT 操作系统采用xfs时候,/etc/fstab设置noatime,nodiratime,nobarrier3. Mysql中使用Memlock参数(ulimit l unlimited) 需要以root身份启动mysql ,不推荐这么做4. /usr/bin/nu
3、mactl -interleave all $cmd 或者直接关闭numa=off5 echo 3 /proc/sys/vm/drop_caches (会释放操作系统的cache,但是不是最终办法)NUMA的内存分配策略 NUMA的内存分配策略有四种:1.缺省(default):总是在本地节点分配(分配在当前进程运行的节点上);2.绑定(bind):强制分配到指定节点上;3.交叉(interleave):在所有节点或者指定的节点上交织分配;4.优先(preferred):在指定节点上分配,失败则在其他节点上分配。针对numa架构的内存分配策略我们做的改进1.BIOS中关闭对numa的支持2.O
4、S内核,启动时设置numa=off3.可以用numactl命令将内存分配策略修改为interleave(交叉),SMP VS MUMA 在内存分配上的区别Numastat查看内存使用情况root # numastat node0 node1numa_hit 317326395 418309015numa_miss 10041750 20604904numa_foreign 20604904 10041750interleave_hit 184644 184008local_node 316614387 417251784other_node 10753758 21662135通过numactl
5、查看分配内存的物理CPU查看numa开启时候内存分配情况Numa上的扩展MySQL对大内存的管理效率不佳,所以对多处理机大内存的主机应该采用MySQL多实例,单实例无法充分发挥性能,并不随着硬件的提升性能线性增加,甚至可能下降。参考Percona的白皮书,讲的比较详细。 http:/ back方式2.RAID卡关闭读cache:RAID卡上的cache容量有限,我们选择direct方式读取数据,从而忽略读cache。关闭预读:由于预读效果不佳,直接读取磁盘关闭磁盘Cache:RAID卡缓存已经缓冲了写操作,所以关闭磁盘cache条带:默认512K目前线上 64K3.LinuxIO调度:/sys
6、/block/sdb/queue/scheduler,默认cfq,调整为deadline (也可以在grub.conf 中添加elevator=deadline)减少预读:/sys/block/sdb/queue/read_ahead_kb,默认128,调整为16增大队列:/sys/block/sdb/queue/nr_requests,默认128,调整为512NUMA策略:numactl -interleave=all 或 -cpunodebind=0 -localalloc 或者直接关闭numa=off操作系统优化采用64位redhat操作系统,因为32位操作系统在寻址内存大小上有限制。选
7、择xfs文件系统 挂载的时候设置 LABEL=/home /home xfs defaults,noatime,nodiratime,nobarrier 1 2注意这里设置nobarrier 直接在磁盘上操作,避免操作系统的cache,网络优化增加本地端口,以应对大量连接echo 1024 65000 /proc/sys/net/ipv4/ip_local_port_range增加队列的连接数echo 8192 /proc/sys/net/ipv4/tcp_max_syn_backlog 设置mysql连接请求队列中允许存放的最大请求数back_log = 150设置连接超时时间echo 60
8、 /proc/sys/net/ipv4/tcp_fin_timeoutMysql编译优化采用自行编译的mysql 性能上更加稳定,这部分由大牛金荣介绍一下他的经验 innodb innodb_flush_method 设置为O_DIRECT脏数据页的刷新Innodb_max_dirty_pages_pct (根据业务的场景设置不同,根据脏页产生量)innodb_io_capacity (根据磁盘的IO)Innodb_adptive_flushing (ON)Innodb_adaptive_flushing_method (设置为2 采用estimate方式刷新 ,)innodb_adaptiv
9、e_checkpoint (设置为2采用estimate方式刷新 XTRDB)innodb_flush_neighbor_pages (设置为1默认,如果采用SSD fusion 对于随机IO支持足够,可以设置成0) 性能参数调整innodb_read_io_threads = 1 (因为innodb对于预读支持不是很好所以在这里设置为1)innodb_write_io_threads = 16 (脏页写的线程数,加大该参数的值,可以加大脏页写入的效率,提升写入的性能)innodb_flush_log_at_trx_commit (设置为2 参数有0 1 2因为我们开启了bbwc) 0 每次提交的时候不写日志文件,每秒会写入到文件,并刷新到磁盘 1 每次提交的时候写日志文件,并刷新到磁盘 2 每次提交的时候写日志文件,但是不刷新到磁盘,每秒会刷新到磁盘。多实例混跑,DNS自动摘除Mysql架构分享Q&A