mysql配置要点_Mysql学习MySQL优化配置文件my.ini(discuz论坛)
发布日期:2021-06-24 14:54:01 浏览次数:2 分类:技术文章

本文共 4903 字,大约阅读时间需要 16 分钟。

《MysqL学习MysqL优化配置文件my.ini(discuz论坛)》要点:

本文介绍了MysqL学习MysqL优化配置文件my.ini(discuz论坛),希望对您有用。如果有疑问,可以联系我们。

PHP,MysqL的体系架构中,MysqL对于性能的影响最大,也是关键的核心部分.对于Discuz!论坛程序也是如此,MysqL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MysqL也是优化难度最大的一个部分,不但需要理解一些MysqL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数. 下面我们了解一下MysqL优化的一些基础,MysqL的优化我分为两个部分,一是服务器物理硬件的优化,二是MysqL自身(my.cnf)的优化.

一、服务器硬件对MysqL性能的影响①磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变.MysqL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知.所以,通常认为磁盘I/O是制约MysqL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MysqL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MysqL在RAID-5磁盘阵列上的效率不会像你期待的那样快.

②cpu 对于MysqL应用,推荐使用S.M.P.架构的多路对称cpu,例如:可以使用两颗Intel Xeon 3.6GHz的cpu,现在我较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于MysqL.

③物理内存对于一台使用MysqL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了16G.

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

下面,我们根据以上硬件配置结合一份已经优化好的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 = 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控制台观察,如果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数据库服务器则不要开启该选项!否则将无法正常连接!

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的值.

数量.增加该值增加 MysqLd 要求的文件描述符的数量.这个数字应该增加,否则,你将经常看到 too many connections 错误. 默认数值是100,我把它改为1024 .

增加该值.默认数值是131072(128k),我把它改为16773120 (16m)

增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多.如果你使它太大,系统将开始换页并且真的变慢了.默认数值是8388600(8m),我的MysqL主机有2gb内存,所以我把它改为 402649088(400mb).

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.

关闭它前在一个交互连接上等待行动的秒数.一个交互的客户被定义为对 MysqL_real_connect()使用 client_interactive 选项的客户. 默认数值是28800,我把它改为7200.

增加这值加速order by或group by操作.默认数值是2097144(2m),我把它改为 16777208 (16m).

数量.增加该值能增加MysqLd要求的文件描述符的数量.MysqL对每个唯一打开的表需要2个文件描述符.默认数值是64,我把它改为512.

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

MysqL的搜索功能

用MysqL进行搜索,目的是能不分大小写,又能用中文进行搜索

只需起动MysqLd时指定 --default-character-set=gb2312

关闭它之前在一个连接上等待行动的秒数. 默认数值是28800,我把它改为7200.

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

max_connections=1024 默认为1210

thread_cache_size=120 默认为60

query_cache_size=64M

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

转载地址:https://blog.csdn.net/weixin_33478634/article/details/113634873 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python中mysql操作命令_mysql记录操作
下一篇:mysql命令面板数据更改_宝塔面板数据库自动停止的解决方案

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月17日 18时42分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章