`
paulfzm
  • 浏览: 884296 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

设置MySQL的系统变量以调优性能

 
阅读更多

请问如何设置MySQL的系统变量以调优性能?

(1)、back_log:
        要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
       back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加 它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统 的限制将是无效的。
        当你观察你的主机进程列表,发现大量 264084 | unauthenticated user |xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout:
        服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size:
       索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你 能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为 402649088(400MB)。

(4)、max_connections:
        允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer:
        每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer:
        每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache:
        为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8) thread_cache_size:
       可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可 以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为80。

(10)、wait_timeout:
        服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

注:参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。

====================================================================================

在Apache, PHP, MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接 影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验 进行判断,然后设置合理的参数。

下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化;二是MySQL自身(my.cnf)的优化。

(1) 服务器硬件对MySQL性能的影响
a) 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量 在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案:
使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快;抛弃传统的硬盘,使用速 度更快的闪存式存储设备。经过Discuz!公司技术工程的测试,使用闪存式存储设备可比传统硬盘速度高出6-10倍左右。
b) CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU。
c) 物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。

(2) MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。
由于my.cnf文件的优化设置是与服务器硬件配置息息相关的,因而我们指定一个假想的服务器硬件环境:
CPU: 2颗Intel Xeon 2.4GHz
内存: 4GB DDR
硬盘: SCSI 73GB


下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明:
# vi /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
指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。
back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。
试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。


key_buffer_size = 256M
# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。
注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
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控制台执行以下命令观察:
# > SHOW VARIABLES LIKE ''%query_cache%'';
# > SHOW STATUS LIKE ''Qcache%'';
# 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。


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


max_connect_errors = 10000000
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数据库服务器则不要开启该选项!否则将无法正常连接 

分享到:
评论

相关推荐

    mysql性能调优参数

    MySQL性能调优参数 MySQL 是一个广泛使用的开源关系型数据库管理系统,在实际应用中,如何提高 MySQL 的性能是一个关键...这些参数都是 MySQL 性能调优的关键参数,合理地设置这些参数可以显著地提高 MySQL 的性能。

    mysql 系统变量中文详细解释

    在MySQL 5.5版本中,系统变量是配置与运行时环境的重要组成部分,它们控制着服务器的行为、资源分配以及各种性能参数。对于数据库管理员来说,理解这些系统变量的意义及其作用至关重要,这有助于优化数据库性能、...

    mysql调优与性能设计

    调整MySQL的系统变量,如innodb_buffer_pool_size、thread_cache_size、max_connections等,可以根据服务器硬件资源和应用负载进行定制,以达到最佳性能。此外,日志文件大小、缓存策略和连接管理也应根据实际情况...

    MySQL性能调优与架构设计

    MySQL性能调优与架构设计是数据库管理领域的重要课题,它涉及到如何最大化地利用MySQL数据库的潜力,提升系统性能,确保数据安全性和高可用性。在实际应用中,MySQL的性能和架构设计对于整个业务系统的效率、稳定性...

    MYSQL性能调优工具介绍与应用

    4. **pt-variable-advisor**:由Percona提供的工具,用于诊断MySQL实例上的变量设置是否合理。它可以检测到那些可能导致性能问题或资源浪费的配置,并提出改进建议。 5. **pt-query-digest**:也是Percona工具套件...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    Linux下的MySQL调优

    系统设置 - **External-locking**:禁用文件系统外部锁,以避免与其他应用程序发生冲突。 - **Table_cache**:调整表缓存的数量,以适应当前的应用程序需求。 - **Thread_cache**:根据系统的并发请求量调整线程...

    MySQL性能调优与架构设计 - 简朝阳.rar_MySQL性能调优与架构设计简朝阳

    《MySQL性能调优与架构设计》是简朝阳先生的一部深度解析MySQL数据库性能优化与架构构建的专业著作。这本书深入探讨了MySQL在实际应用中的各种性能问题,并提供了有效的解决策略,同时对MySQL的架构设计进行了全面的...

    MySQL性能调优与架构设计.pdf(文字版,带目录)

    MySQL性能调优与架构设计是数据库管理领域中的一个重要主题,主要关注如何提升MySQL数据库的运行效率,优化查询性能,以及构建高效稳定的数据架构。简朝阳的这本书提供了详细的指南,包括了理论知识和实践技巧,旨在...

    关于MySQL性能调优你必须了解的15个重要变量(小结)

    以下是关于MySQL性能调优15个重要变量的详细解释: 1. **DEFAULT_STORAGE_ENGINE**: MySQL中的默认存储引擎影响数据库的整体性能。InnoDB是推荐的选择,因为它支持事务处理、并发性,并提供良好的性能。确保所有新...

    数据库+Mysql+性能调用+用于在实践过程中进行Mysql的性能调优

    21. **监控和调优MySQL配置**:持续监控数据库性能,适时调整配置,如内存分配、连接数限制等,以适应系统负载变化。 以上实践旨在帮助开发者在实际开发过程中避免性能陷阱,提高MySQL数据库的运行效率。在使用时,...

    mysql性能调优与架构设计

    2. 系统变量与性能视图:学习如何通过系统变量调整性能,并利用性能视图进行监控。 3. MySQL Tuning Primer:了解如何使用此脚本来自动诊断和调整MySQL配置。 五、高可用与容灾 1. 主从复制:设置和管理MySQL主从...

    分析MySQL复制以及调优原理和方法

    MySQL复制提供了强大的数据冗余和扩展性,但在实际应用中需要根据业务需求和系统状况进行细致的调优,以确保系统的稳定性和效率。通过理解复制原理、掌握配置方法和调优技巧,我们可以更好地管理和维护MySQL集群。

    MySQL数据库调优技术大全

    通过以上详尽的技术介绍,我们可以看出MySQL数据库调优是一项复杂而细致的工作,它不仅涉及到数据库本身的配置和优化,还需要对硬件环境、操作系统以及应用层等方面有深入的理解。希望本文能够帮助大家更好地理解和...

    MySQL内存使用调优.doc

    MySQL 的内存使用对性能至关重要。配置 MySQL 正确地使用内存基本上是肯定的。可以认为 MySQL 的内存消耗有两种范畴:可以控制的和不可控制的。你不能控制 MySQL 使用多少内存来运行服务器、解析查询及管理内部运行...

    关于MySQL调优,4 款 调优工具,你用的哪一个?

    **tuning-primer.sh** 是另一款用于 MySQL 性能调优的脚本工具,它可以全面地分析 MySQL 的性能状况,并提供具体的优化建议。 - **下载与安装**: - **命令**: ```bash [root@localhost ~]# wget ...

Global site tag (gtag.js) - Google Analytics