TOP

【转】4G内存下MySQL修改配置文件以优化效率(来自discuz)
2019-08-20 16:35:27   字体:【 】  浏览:289次   评论:0

 摘要:公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库。

在Apache, 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进行说明:

[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的值。

 


Tags:内存 MySQL 修改 配置 文件 优化 效率 来自 discuz 责任编辑:如果有如果的话
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇远程读取数据库的写法。 下一篇【转】8G内存下MySQL的优化详细方..

  • 问题事件名称:APPCRASH应用程序名:httpd.exe应用程序版本:2.4.23.0应用程序时间戳:577703ab故障模块名称:ntdll.dll重新注册Window动态库就可以了。运行中输入cmd,在命令提示符下输入:for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1注意,是在命令提示符下,不是在“运行框”中!!环境变量在path中加入如下路径,就好了D:\wamp\php..

  • 到php.ini配置文件里面找到 allow_url_fopen = On 把Off设置为On即可 语法:file_get_contents(path,include_path,context,start,max_length) file_get_contents() 函数把整个文件读入一个字符串中。 和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。 file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用..

  • 网站常见安全问题记录(持续更新)Apache说明 初衷:本文档用于记录所遇到的网站安全问题,并分类汇总,方便后期遇到类似问题,能够快速找到解决方案,提高效率,让程序员有更多的时间去把妹,LOL...记录规范:标题必须清晰明了,方便用户快速查找,拒绝标题党;问题放到正确的分类中;记录问题的时候先阐述问题,再列出解决方法,尽量做到有图有真相;如果有对应的资料,可以附..

  • $_SERVER 是PHP预定义的超全局变量。所谓“超全局变量”,即在脚本全部作用域中都可以使用,$_SERVER保存关于报头、路径和脚本位置的信息。工作中经常忘记,在此整理记录下,加深印象。测试是在Windows下进行的,环境为Apache/2.4.23 (Win32)+PHP/5.6.27-nts,访问域名为http://www.example.com/index....,文件目录在E:/WWW/example/。主要内容详解$_SERVER["SCRIPT_N..

  • 系统环境:Windows Server 2008 R2 + Sql Server 2008 R2 问题描述:Windows Server 2008 R2系统内存占用率过大,而在任务管理器中各进程内存占用总和都远不到此占用率。相关现象:1. 内存占用率90%以上2. 任务管理器中所有进程内存和较低,远不到90%,有二十多G的内存偏差 分析过程: 首先怀疑SQL&..

  • ALTER TABLE zysjyj DROP aid;ALTER TABLE zysjyj ADD aid int(10) NOT NULL FIRST;ALTER TABLE zysjyj AUTO_INCREMENT=10000;ALTER TABLE zysjyj MODIFY COLUMN aid int(10) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(aid);

-->

发布者

如果有如果的话 如果有如果的话
等级:普通会员
积分:0 个
性别:保密
rug@qq.com
42 身份还未认证 邮箱还未认证 手机还未认证 给它发送短消息 搜寻它在mysql发布的全部文章 38

最新文章

网站服务地区

城口县网站建设
泸州市网站建设
安顺市网站建设
长宁区网站建设
宁波市网站建设
海淀区网站建设
石嘴山市网站建设
苏州市网站建设
高雄市网站建设
嘉义县网站建设
承德市网站建设
南通市网站建设
澳门市花地玛堂区网站建设
长治市网站建设
宁德市网站建设
永川市网站建设
鞍山市网站建设
白沙黎族自治县网站建设
咸阳市网站建设
葵青区网站建设
澳门市风顺堂区网站建设
张掖市网站建设

本月热门

相关文章