Linux下MySQL数据库性能调优方法

以下的环境具备一定的代表性,可以说是中小企业一般配置和工作环境。希望通过本文能让大家理解Linux下MySQL数据库性能调优方法。

硬件准备环境:

硬盘: 16块 SAS 15K RAID5 带512MCache

CPU: AMD 4核两颗

内存: 16G

软件环境:

操作系统: RedHat AS4.6 2.6.9-67.ELsmp MySQL: 5.0

下面分别根据不同场景进行性能调优:

使用场景A: 写操作(插入/查询/删除)密集,而且数据容量远远超硬件准备环境:

硬盘: 16块 SAS 15K RAID5 带512MCache

CPU:    AMD 4核两颗

内存: 16G

软件环境

操作系统: RedHat AS4.6 2.6.9-67.ELsmp

MySQL: 5.0

下面分别根据不同场景进行性能调优:

使用场景A:

写操作(插入/查询/删除)密集,而且数据容量远远超过内存的大小(最小是200G以上,甚至更大到1.5T以上), 每秒需要以千为单位的事务操作

数据可靠性要求不高,允许丢几条记录(硬件出故障时)

优化方式:

在这种情况下,数据库的Cache基本上命中率是非常低的,对数据库的操作基本上就是对磁盘进行操作, 因此侧重点应该是对磁盘相关优化。

首先是考虑数据库存储引擎,由于涉及插入/删除/查询等操作,而且要支持事务,因此考虑使用InnoDB存储引擎,不考虑MyIsam原因是该存储引擎是表级锁,有数据删除时会非常慢。

设置合适的MySQL 参数,由于有16G内存,因此参数设置如下

innodb_buffer_pool_size=8G  innodb_additional_mem_pool_size = 800M,  innodb_log_buffer_size = 4M  innodb_log_file_size = 500M  innodb_log_files_in_group = 4  log-bin 因为使用主备复制,因此需要打开Log-Bin,这里就涉及一个sync-bin的概念,缺省情况下,sync-bin 在MySQL中是关闭的,但存在一个风险,因为写日志没有刷新到硬盘中去的话,日志是写在操作系统的文件系统里的Cache中,这样若机器断电,那么日志信息将部分丢失。为了减少数据丢失,我们测试了sync-bin=1,sync-bin=5和sync-bin=20,三种情况,sync-bin=1的情况下,丢失数据最坏概率是丢一个事务的数据,但性能非常差;设置sync-bin=5的情况下,性能可以提高1倍左右;设置sync-bin=20时,性能比sync-bin=5又可以提高1倍,设置大于20的值,基本上相差不大,性能提高不了多少,最坏20个事务数据丢失是在我们的允许范围之内,因此设置20是个合理的值,这个值具体取决于你的系统能够最坏允许丢少的事务数据。

若你的系统对数据丢失不于考虑,可以关闭sync-bin,这时数据刷新到硬盘完全取决于操作系统的配置,相关的配置参数有如下:

/proc/sys/vm/dirty_ratio 这 个参数控制一个进程在文件系统中的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当一个进程中写缓冲使用到系统内存多少的时候,再有 磁盘写操作时开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降 低其数值,一般缺省是 40。更新方法

echo 30 >/proc/sys/vm/dirty_ratio (或则修改/etc/sysctl.conf文件,增加sys.vm.dirty_ratio=30 重起机器)

/proc/sys/vm/dirty_background_ratio 这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统总内存的百分比,意思是当磁盘的脏数据缓冲到系统内存多少的时候,pdflush开始把脏数据刷新到磁盘。增大会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般缺省是10。

/proc/sys/vm/dirty_writeback_centisecs Pdflush写后台进程每隔多久被唤醒并执行把脏数据写出到硬盘。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:

echo 200 >/proc/sys/vm/dirty_writeback_centisecs  /proc/sys/vm/dirty_expire_centisecs 这个参数声明Linux内核写缓冲区里面的脏数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。

echo 1500 >/proc/sys/vm/ dirty_expire_centisecs 因此若没有调整这些参数,全部以缺省值,而且关闭sync-bin的话,那么最多丢失的数据是:

5秒种(dirty_writeback_centisecs)之内的,小于1.6G的数据(dirty_background_ratio,16G/10=1.6G)

当然,实际上5秒之内不太可能写1.6G的数据,因此最坏就是5秒钟之内的数据丢失。因此若要关闭sync-bin,又不想丢失太多数据的话,可以通过调整dirty_writeback_centisecs这个参数,如调整到200(2秒),这样最多就丢2秒钟的数据。又可以提高数据的写能力。

MySQL里还有一个参数可以调整,提高数据库的写能力,那就是

innodb_flush_log_at_trx_commit 这个参数默认是1,即每次事务Commit时,都刷新日志,以免数据丢失。因为我们的系统允许丢失少量数据,因此可以把innodb_flush_log_at_trx_commit设置为2,允许丢失一个事务的数据,经测试,发现2可以提高25%左右的性能。

另外对于文件系统的mount方式,noatime方式也可以提高部分性能(数据库专用的服务器,一般是noatime)

当数据有删除更新操作后,时间长后一般有碎片,导致索引空间不紧凑,占用更多的硬盘空间,因此会导致查询编码,解决办法是定期执行下面的语句:

ALTER TABLE tbl_name ENGINE=INNODB 另外若sql语句中有sort 和group by之类,需要增大sort_buffer_size

这个参数 是每客户端连接的,当有sort/group查询时,会分配sort_buffer_size大小的内存,因此若连接很多,则要小心;合适的值可以查看 SHOW GLOBAL STATUS里面Sort_merge_passes的信息以及Created_tmp_tables之类信息相关阅读:

JavaScript 控制文本框的值连续加减

帝国ECMS教程:自定义图片集显示

XHTML入门学习教程:列表标签的使用

PHP CLI模式下的多进程应用

ASP网站数据库被挂木马的处理办法

js实现的日期操作类DateTime函数代码

解决AJAX 跨域访问完整解决方案

优化dedecms栏目列表分页链接

学习ExtJS fit布局使用说明

Java,JavaScript,JScript 区别

js通过googleAIP翻译PHP系统的语言配置的实现代码

C#教程:隐式类型数组

DedeCms模板制作轻松学

XP插入U盘能识别 无盘符显示的故障解决

linux mysql数据库优化_MySQL_Linux下MySQL数据库性能调优方法,以下的环境具备一定的代表性 - phpStudy...相关推荐

  1. 透明大页相关内核参数_Alibaba Cloud Linux 2系统中与透明大页THP相关的性能调优方法...

    免责声明:本文档可能包含第三方产品信息,该信息仅供参考.阿里云对第三方产品的性能.可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺. 概述 本文主要介绍在Alibaba Cloud Li ...

  2. mysql dba工作笔记pdf_社区专家在线:Oracle数据库、MySQL、Db2 等数据库日常运维故障与性能调优在线答疑...

    数据库的重要性毋庸置疑,随着数据量日益增加,数据库的重要性更为凸显.DBA们作为数据库的日程运维管理人员,肩负着数据库运维的重要使命.一名合格的DBA,日常工作中需要掌握多项技能,包括数据库的故障诊断 ...

  3. 服务器优化:Tomcat、JVM性能调优笔记

    找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还 ...

  4. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

  5. SQL PASS北京用户群成功举办第一次线下活动,性能调优PPT分享

    昨天晚上在北京利星行举办了第一场PASS北京用户群的线下活动.     这次活动主要是由微软的大牛,也是MCM的何雷老师进行讲解SQL Server的性能调优.何老师内力深厚,由点带面的将性能调优的方 ...

  6. java tps 优化_高tps下,java性能调优

    之前参与了系统调优,感觉挺有收获了,现在记录一下. 处理xml时,理清楚报文格式,避免使用jdom解析 我们在做压测的时候,发现有一个程序响应非常慢,使用jstack定位到慢的地方:解析xml报文.x ...

  7. 家乐福618保卫战二-零售O2O场景中的万级并发交易情况下的极限性能调优

    本系列简介 这个系列可以帮助普通程序员们深刻的意识到平时工作中到底还有什么不足以及如何进一步进化成真正意义上的架构师.CTO以及后面的道路是如何走的: 这个系列可以帮助企业IT管理者深刻意识到,性能安 ...

  8. 《java性能优化实战》之多线程性能调优

    一.多线程之锁优化 1.1在高并发场景下,当大量线程同时竞争同一个锁资源时,偏向锁就会被撤销,发生 stop the word 后, 开启偏向锁无疑会带来更大的性能开销,这时我们可以通过添加 JVM ...

  9. Java 性能优化系列之4[Java性能调优工具]

    Linux 命令行工具 1.top 命令 实时显示系统中各个进程的资源占用状况. top 命令的输出可以分为两个部分: 前半部分是系统统计信息, 后半部分是进程信息. 在统计信息中: 第1行是任务队列 ...

最新文章

  1. 【iOS-Cocos2d游戏开发之五】【1】多触点与触屏事件详解(单一监听、事件分发)...
  2. 设置访问权限_一项一项教你测等保2.0——Windows访问控制
  3. fguillot json rpc_hyperf与go基于jsonrpc2.0通信
  4. Vue——自定义组件的 v-model
  5. 解决scala对象转化为json对象为{}
  6. python发人人状态
  7. ndoe.js实战之开发微博第一讲之工具准备
  8. Altium AD20导出为PDF、导出BOM表
  9. 拆解百度自动驾驶最新动作:Apollo企业版和Apollo 3.5里的生意经和新风向 | CES 2019...
  10. BT.601与BT.656
  11. 随手记_英语_学术写作_标点符号的使用
  12. UBUNTU上新建GIT库
  13. 如何编译TrueCrypt源码
  14. JAVA汉字转拼音工具类
  15. 成年人的世界,不过如此
  16. 微信JS-SDK分享(TS版)
  17. 【流畅的Python学习笔记】2023.4.21
  18. DFSGSDGHSDGSEDFG
  19. 环境变量:系统变量和用户变量
  20. 海报分享功能实现详解

热门文章

  1. python散点图点的大小-Java 学习之路
  2. 零基础可以学python吗-学Python需要什么基础知识?零基础可以学Python吗?
  3. python语言的理解-初学Python语言者必须理解的下划线
  4. python画圆简单代码-Python画直线 画圆 画矩形代码
  5. python整数类型-Python整数类型及其运算
  6. python怎么导入视频-python中的导入如何使用,以及.和..相对导入的使用
  7. python3基础语法-Python3的一些基础语法介绍和理解
  8. 免费学python的软件-此贴告诉你:为啥shell脚本人,不建议学python
  9. Windows10内置Linux子系统初体验
  10. 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码