`
丢死人了
  • 浏览: 5205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MySQL数据库的优化(上)单机MySQL数据库的优化

阅读更多

 

  公 司网站访问量越来越大, MySQL 的压力越来越大了,第一步自然想到的是 MySQL 系统参数的优化,我们不可能指望 MySQL 默认的系统参数能够让 MySQL运行得非常顺畅。在Apache(Nginx)、PHP、 MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知 识,同时还需要长时间的观察统计并且根据经验 进行判断,然后设置合理的参数。

下 面我们了解一下MySQL优化的一些建议,单机MySQL的优化我分为三个部分,一是服务器物理硬件的优化,二是MySQL安装时的编译优化,三是自身配 置文件my.cnf的优化;如果单机的优化也解决不了你的数据库的压力的话,那这个时候就只有考虑采用集群架构的方法,这个我在后面也会重点说明。

单机MySQL数据库的优化

一、服务器硬件对MySQL性能的影响

  1. 磁 盘寻道能力(磁盘I/O),我们现在上的都是SAS15000转的硬盘。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以, 通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访 问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID1+0磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快;
  2. CPU 对于MySQL应用,推荐使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我现在比较喜欢DELL R710,也在用其作Linuxakg 虚拟化应用;
  3. 物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到高端服务器基本上内存都超过了32G。我们工作中用得比较多的数据库服务器是HP DL580G5DELL R710,稳定性和性能都不错;特别是DELL R710,我发现许多同行都是采用它作数据库的服务器,所以重点推荐下。

二、MySQL的线上安装

我 建议采取编译安装的方法,这样性能上有较大提升,服务器系统我建议用64bit的Centos5.5,源码包的编译参数会默认以Debgu模式生成二进制 代码,而Debug模式给MySQL带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用“—without-debug”参数禁用Debug模式。

而如果把—with-mysqld-ldflags—with-client-ldflags二个编译参数设置为—all-static的话,可以告诉编译器以静态方式编译和编译结果代码得到最高的性能。使用静态编译和使用动态编译的代码相比,性能差距可能会达到5%至10%之多。我参考了简朝阳先生的编译参数,特列如下,供大家参考

./configure –prefix=/usr/local/mysql –without-debug –without-bench –enable-thread-safe-client –enable-assembler –enable-profiling –with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static –with-    charset=latin1 –with-extra-charset=utf8,gbk –with-innodb –with-csv-storage-engine –with-federated-storage-engine –with-mysqld-user=mysql –without-embedded-server –with-server-suffix=-community –with-unix-socket-path=/usr/local/mysql/sock/mysql.sock

当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对 MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。

 

下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明:

#vim /etc/my.cnf以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。

[mysqld]

port = 3306 

serverid = 1  

socket = /tmp/mysql.sock 

skip-locking 

#避免MySQL的外部锁定,减少出错几率增强稳定性。

skip-name-resolve 

#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

back_log = 384 

#back_log 参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自 己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。

key_buffer_size = 384M 

#key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!

         max_allowed_packet = 4M

         thread_stack = 256K  

         table_cache = 614K  

         sort_buffer_size = 6M 

#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。

read_buffer_size = 4M 

#读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。

join_buffer_size = 8M 

#联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。

         myisam_sort_buffer_size = 64M  

         table_cache = 512  

         thread_cache_size = 64  

         query_cache_size = 64M 

# 指定MySQL查询缓冲区的大小。可以通过在MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够 的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓 冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。

         tmp_table_size = 256M  

         max_connections = 768 

#指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。

         max_connect_errors = 1000  

         wait_timeout = 10 

#指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。

         thread_concurrency = 8 

#该参数取值为服务器逻辑CPU数量*2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4*2=8;这个目前也是双四核主流服务器配置。

         skip-networking 

#开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

         table_cache=1024    

#物理内存越大,设置就越大.默认为2402,调到512-1024最佳

         innodb_additional_mem_pool_size=4M 

#默认为2M

         innodb_flush_log_at_trx_commit=1 

#设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1

         innodb_log_buffer_size=2M     

#默认为1M

         innodb_thread_concurrency=8       

#你的服务器CPU有几个就设置为几,建议用默认一般为8

         key_buffer_size=256M    

#默认为218,调到128最佳

         tmp_table_size=64M 

#默认为16M,调到64-256最挂

         read_buffer_size=4M 

#默认为64K

         read_rnd_buffer_size=16M 

#默认为256K

         sort_buffer_size=32M 

#默认为256K

         thread_cache_size=120 

#默认为60

         query_cache_size=32M  

※值得注意的是:

很多情况需要具体情况具体分析

一、如果Key_reads太大,则应该把my.cnf中Key_buffer_size变大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。

二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。

很多时候我们发现,通过参数设置进行性能优化所带来的性能提升,可能并不如许多人想象的那样产生质的飞跃,除非是之前的设置存在严重不合理的情况。我们不能将性能调优完全依托于通过DBA在数据库上线后进行的参数调整,而应该在系统设计和开发阶段就尽可能减少性能问题。

以上是笔者针对单机MySQL数据库提出的优化方法,如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的集群方案了,我们应该如何优化呢?

 

查看原文

分享到:
评论

相关推荐

    征途单机版MYSQL数据库

    在深入研究和优化"征途单机版MYSQL数据库"时,你需要考虑以下几个方面: 1. **数据模型优化**:检查数据库的表结构,确保它们符合第三范式,减少冗余数据,提高查询效率。 2. **索引策略**:根据查询需求创建合适的...

    pbootcms数据sqlite转mysql数据库

    标题 "pbootcms数据sqlite转mysql数据库" 涉及的是一个常见的数据库迁移过程,从SQLite数据库系统转换到MySQL数据库系统。这个过程在网站或应用的开发和维护中经常遇到,尤其是在更换数据库服务或者需要更强大的...

    WoW服务器(MySql)数据库通用查看修改器

    WoW服务器(MySql)数据库通用查看修改器(savetoXmldat) Rains工作组(QQ群29482702,Author石雨QQ233685340) //修改mysql任意数据库 //能对MYSQL数据库用户密码加密查看(xor加密方式) //需要.net1.1或者以上...

    mysql学习用数据库dbt3

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,广泛应用于各种规模的企业、网站和应用程序中。DBT3(Decision Bench for TPC-T Benchmark)是针对数据库性能评估的一个基准测试套件,它模拟了复杂的决策...

    MySQL数据库架构优化方案.docx

    MySQL数据库架构优化方案 在面对日益增长的业务负载时,数据库架构的优化至关重要。本文将探讨如何通过一系列策略减轻MySQL数据库的压力,以提高系统性能。 一、引入读写分离,优化初见成效 针对业务库负载突然...

    MySQL数据库安全体系详解.pptx

    综上所述,MySQL数据库安全体系涵盖了从单点到集群的多层次安全措施,结合备份策略、事务处理机制和复制技术,为数据提供全面的保护。在实际应用中,需要根据业务需求和风险承受能力来权衡各种安全配置的优缺点,以...

    mysql 单机数据库优化的一些实践

    本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正。 1、表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能。...

    大芒果_魔兽世界_mysql_数据库_详解.docx

    《大芒果_魔兽世界_MySQL_数据库_详解》 《大芒果_魔兽世界_MySQL_数据库_详解》是一份关于魔兽世界游戏数据库的详细解释,涵盖了游戏账号、角色数量、道具及任务物品等多方面的知识点。下面将对这些知识点进行详细...

    问道1.60纯净数据库MYSQL

    在“问道1.60纯净数据库MYSQL”中,所有与游戏相关的数据,如角色信息、道具、地图、任务、社交关系等,都存储在MySQL数据库中。 压缩包中的文件名揭示了数据库的不同部分。例如: 1. `dl_adb_all.sql`:可能代表...

    MySQL数据库基础教程.ppt

    MySQL数据库基础教程主要介绍了数据库的基本概念以及MySQL的特点和使用。MySQL是一个快速、多用户、多线程的数据库服务器,尤其适合于Web应用程序的开发。它可以在多种操作系统上运行,包括Linux、FreeBSD和Windows...

    征途专用数据库mysql 6.0.11 alpha

    1. **查询性能优化**:MySQL 6.0系列在查询处理上做了大量工作,通过优化查询解析器、执行器和索引结构,提高了查询效率,这对于处理海量游戏数据至关重要。例如,InnoDB存储引擎的改进,使得读写操作更为迅速,特别...

    坦克大战,没有mysql数据库

    《坦克大战:无MySQL数据库实现解析》 在游戏开发领域,数据库系统通常扮演着至关重要的角色,用于存储玩家数据、游戏进度、排行榜等关键信息。然而,“坦克大战,没有mysql数据库”这一主题提示我们,这款经典游戏...

    redis.rar单机版redis,使用MySQL数据库,里面有批处理的SQL,性能十分卓越,单机版经供参考,抛转引玉

    总结来说,这个"redis.rar"压缩包提供了一个单机版的Redis实例,结合MySQL数据库和批处理SQL,为快速搭建高性能的键值存储和关系数据库环境提供了便利。通过深入理解Redis和MySQL的特性,以及如何将它们有效地结合...

    MySQL数据库架构与运维实践.docx

    本文将深入探讨MySQL数据库的架构及其运维实践,结合私有云RDS的实践案例,解析数据库管理和优化的关键点。 首先,文章介绍了乐视数据库平台的情况,涵盖多种类型的数据库,包括MySQL、Oracle、MongoDB和Redis等。...

    老黄历数据库资源,mysql格式可直接使用

    标题中的“老黄历数据库资源,mysql格式可直接使用”表明这是一个包含老黄历数据的数据库,以MySQL的格式提供,意味着数据已经被整理成适合在MySQL数据库系统中存储和查询的结构。这样的数据库通常用于开发与黄历...

    数据库优化分享.rar

    3. **分布式数据库**:当单机数据库无法满足需求时,可采用分布式数据库,如ShardingSphere、Cassandra等,实现水平扩展。 四、缓存策略 1. **使用缓存**:引入Redis、Memcached等缓存系统,将热点数据放在内存中...

    MySQL(网络数据库指南)

    **msAccess**是Microsoft Office套装软件的一部分,是一款优秀的单机版数据库系统。它的特点包括: - 运行在Windows平台上。 - 操作简便。 - 缺少SQL界面。 - 在网络支持方面相对较弱。 - 安全措施有限。 ##### ...

    新浪:基于MySQL的分布式数据库实践1

    分布式数据库实践是指在多个服务器上部署和管理数据库,以提高数据库的性能、可扩展性和可靠性。在这个实践中,新浪使用了基于MySQL的分布式数据库实践,实现了高性能、可扩展的数据库系统。 首先,在设计分布式...

    mysql数据在linux环境下各种安装

    在Linux环境下安装MySQL数据库是一项重要的任务,特别是在服务器管理和运维中。MySQL是一种广泛使用的开源关系型数据库管理系统,其在Linux上的安装过程可以根据不同的需求选择不同的模式,包括单机版、主备模式、双...

Global site tag (gtag.js) - Google Analytics