ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:27.21KB ,
资源ID:26682965      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26682965.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(mysql性能优化之参数配置.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

mysql性能优化之参数配置.docx

1、mysql性能优化之参数配置1、目的:通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。2、服务器参数:32G内存、4个CPU,每个CPU8核。3、MySQL目前安装状况。MySQL目前安装,用的是MySQL默认的最大支持配置。拷贝的是my-f.编码已修改为UTF-8.具体修改及安装MySQL,可以参考帮助文档。4、修改MySQL配置打开MySQL配置文件f4.1MySQL非缓存参数变量介绍及修改4.1.1修改back_log参数值:由默认的50修改为500.(每个连接256kb,占用:125M)back_log=500 back_lo

2、g值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。将会报:unauthenticateduser|xxx.xxx.xxx.xxx|NULL|Connect|NULL|login|NULL.back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat/proc/sys/net/ipv

3、4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。查看mysql当前系统默认back_log值,命令:showvariableslikeback_log;4.1.2修改wait_timeout参数值,由默认的8小时,修改为30分钟。(本次不用) wait_timeout=1800(单位为妙) interactive_timeout=1800我对wait-timeout这个参数的理解:MySQL客户端的数据库连接闲置最大时间值。说得比较通俗一点,就是当你的MySQL连接闲置超过一定时间后将会被强行关闭。MySQL默认的wait-timeo

4、ut值为8个小时,可以通过命令showvariableslikewait_timeout查看结果值;。设置这个值是非常有意义的,比如你的网站有大量的MySQL链接请求(每个MySQL连接都是要内存资源开销的),由于你的程序的原因有大量的连接请求空闲啥事也不干,白白占用内存资源,或者导致MySQL超过最大连接数从来无法新建连接导致“Toomanyconnections”的错误。在设置之前你可以查看一下你的MYSQL的状态(可用showprocesslist),如果经常发现MYSQL中有大量的Sleep进程,则需要修改wait-timeout值了。interactive_timeout:服务器关闭

5、交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义).这两个参数必须配合使用。否则单独设置wait_timeout无效4.1.3修改max_connections参数值,由默认的151,修改为300

6、0(750M)。max_connections=3000max_connections是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以通过conn%通配符查看当前状态的连接数量,以定夺该值的大小。MySQL服务器允许的最大连接数16384;查看系统当前设置的最大连接数:showvariableslikemax_connections;4.1.4修改max_user_connections值,由

7、默认的0,修改为800 max_user_connections=800max_user_connections是指每个数据库用户的最大连接针对某一个账号的所有客户端并行连接到MYSQL服务的最大并行连接数。简单说是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。目前默认值为:0不受限制。这儿顺便介绍下Max_used_connections:它是指从这次mysql服务启动到现在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。如果在过去某一个时刻,MYSQL服务同时有1000个请求连接过来,而之后再也没有出现这么大的并发请求时,则Max_used

8、_connections=1000.请注意与showvariables里的max_user_connections的区别。默认为0表示无限大。查看max_user_connections值showvariableslikemax_user_connections;4.1.5修改thread_concurrency值,由目前默认的8,修改为64 thread_concurrency=64thread_concurrency的值的正确与否,对mysql的性能影响很大,在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值,会导致mysql不能充分利用多cpu(或多核),

9、出现同一时刻只能一个cpu(或核)在工作的情况。thread_concurrency应设为CPU核数的2倍.比如有一个双核的CPU,那thread_concurrency应该为4;2个双核的cpu,thread_concurrency的值应为8.比如:根据上面介绍我们目前系统的配置,可知道为4个CPU,每个CPU为8核,按照上面的计算规则,这儿应为:4*8*2=64查看系统当前thread_concurrency默认配置命令:showvariableslikethread_concurrency;4.1.6添加skip-name-resolve,默认被注释掉,没有该参数。skip-name-r

10、esolveskip-name-resolve:禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!4.1.7skip-networking,默认被注释掉。没有该参数。(本次无用)skip-networking建议被注释掉,不要开启开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!4.1.8default-storage-engine(设置My

11、SQL的默认存储引擎)default-storage-engine=InnoDB(设置InnoDB类型,另外还可以设置MyISAM类型)设置创建数据库及表默认存储类型showtablestatusliketablename显示表的当前存储状态值查看MySQL有哪些存储状态及默认存储状态showengines;创建表并指定存储类型CREATETABLEmytable(idint,titlechar(20)ENGINE=INNODB;修改表存储类型:AltertabletableNameengine=engineName备注:设置完后把以下几个开启:#Uncommentthefollowingif

12、youareusingInnoDBtablesinnodb_data_home_dir=/var/lib/mysql#innodb_data_file_path=ibdata1:1024M;ibdata2:10M:autoextend(要注释掉,否则会创建一个新的把原来的替换的。)innodb_log_group_home_dir=/var/lib/mysql#Youcanset._buffer_pool_sizeupto50-80%#ofRAMbutbewareofsettingmemoryusagetoohighinnodb_buffer_pool_size=1000Minnodb_add

13、itional_mem_pool_size=20M#Set._log_file_sizeto25%ofbufferpoolsizeinnodb_log_file_size=500Minnodb_log_buffer_size=20Minnodb_flush_log_at_trx_commit=0innodb_lock_wait_timeout=50设置完后一定记得把MySQL安装目录地址(我们目前是默认安装所以地址/var/lib/mysql/)下的ib_logfile0和ib_logfile1删除掉。否则重启MySQL起动失败。4.2MySQL缓存变量介绍及修改数据库属于IO密集型的应用程序

14、,其主职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。本文先从MySQL数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化4.2.1全局缓存启动MySQL时就要分配并且总是存在的全局缓存。目前有:key_buffer_size(默认值:402653184,即384M)、innodb_buffer_pool_size(默认值:134217728即:128M)、innodb_additional_me

15、m_pool_size(默认值:8388608即:8M)、innodb_log_buffer_size(默认值:8388608即:8M)、query_cache_size(6默认值:16M,之前的版本为0)。这些变量值都可以通过命令如:showvariableslike变量名;查看到。4.2.1.1:key_buffer_size,本系统目前为384M,可修改为400Mkey_buffer_size=400Mkey_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MyISAM(MySQL表存储的一种类型,可以XX等查看详情)表性能影响最大的一个

16、参数。如果你使它太大,系统将开始换页并且真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。对于内存在4GB左右的服务器该参数可设置为256M或384M.怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads/key_read_requests应该尽可能的低,比如1:100,1:1000,1:10000。其值可以用以下命令查得:showstatuslikekey_read%;比如查看系统当前key_read和key_read_request值为:+-+-+|Variable_

17、name|Value|+-+-+|Key_read_requests|28535|Key_reads|269|+-+-+可知道有28535个请求,有269个请求在内存中没有找到直接从硬盘读取索引.未命中缓存的概率为:0.94%=269/28535*100%.一般未命中概率在0.1之下比较好。目前已远远大于0.1,证明效果不好。若命中率在0.01以下,则建议适当的减小key_buffer_size值。4.2.1.2:innodb_buffer_pool_size(默认128M)innodb_buffer_pool_size=1024M(1G)innodb_buffer_pool_size:主要针

18、对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptivehash等数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。假设:12G的innodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G的内存。若系统只有16G,而且只运行MySQL,且MySQL只用InnoDB,那么为MySQL开12G,是最大限度

19、地利用内存了。另外InnoDB和MyISAM存储引擎不同,MyISAM的key_buffer_size只能缓存索引键,而innodb_buffer_pool_size却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少InnoDB类型的表的磁盘I/O。当我们操作一个InnoDB表的时候,返回的所有数据或者去数据过程中用到的任何一个索引块,都会在这个内存区域中走一遭。可以通过:(Innodb_buffer_pool_read_requestsInnodb_buffer_pool_reads)/Innodb_buffer_pool_read_requests*100%计算缓存命中率,

20、并根据命中率来调整innodb_buffer_pool_size参数大小进行优化。值可以用以下命令查得:showstatuslikeInnodb_buffer_pool_read%;比如查看当前系统中系统中|Innodb_buffer_pool_read_requests|1283826|Innodb_buffer_pool_reads|519|+-+-+其命中率99.959%=(1283826-519)/1283826*100%命中率越高越好。4.2.1.3:innodb_additional_mem_pool_size(默认8M)innodb_additional_mem_pool_siz

21、e=20Minnodb_additional_mem_pool_size设置了InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQLInstance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。这个参数大小是否足够还是比较容易知道的,因为当过小的时候,MySQL会记录Warning信息到数据库的errorlog中,这时候你就知道该调整这个参数大小了。查看当前系统mysql的error日志cat/var/lib/mysql/机器名.error发现有很多waring警告。所以要调大为20M.根据My

22、SQL手册,对于2G内存的机器,推荐值是20M;32G内存的为100M4.2.1.4:innodb_log_buffer_size(默认8M)innodb_log_buffer_size=20Minnodb_log_buffer_size这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于BinlogBuffer,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入InnofbLogBuffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件(或者同步到磁盘)中。可以通过innodb_log_buf

23、fer_size参数设置其可以使用的最大内存空间。InnoDB将日志写入日志磁盘文件前的缓冲大小。理想值为1M至8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。在f中以数字格式设置。默认是8MB,系的如频繁的系统可适当增大至4MB8MB。当然如上面介绍所说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过32MB注:innodb_flush_log_trx_commit参数对InnoDBLog的写入性能有非常关键的影响,默认值为1。该参数可以设置为0,1,2,解释如下:0:log

24、buffer中的数据将以每秒一次的频率写入到logfile中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何logbuffer到logfile的刷新或者文件系统到磁盘的刷新操作;1:在每次事务提交的时候将logbuffer中的数据都会写入到logfile,同时也会触发文件系统到磁盘的同步;2:事务提交会触发logbuffer到logfile的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。

25、因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。根据MySQL手册,在存在丢失最近部分事务的危险的前提下,可以把该值设为0。4.5.1.5:query_cache_size(默认32M)query_cache_size=40Mquery_cache_size:主要用来缓存MySQL中的ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了QueryCache功能,MySQL在接受到一条select语句的请求后,如果该语句满足QueryCache的要求(未显式说明不允许使用QueryCache,或者已经显式申明需要使用Q

26、ueryCache),MySQL会直接根据预先设定好的HASH算法将接受到的select语句以字符串方式进行hash,然后到QueryCache中直接查找是否已经缓存。也就是说,如果已经在缓存中,该select请求就会直接将数据返回,从而省略了后面所有的步骤(如SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。当然,QueryCache也有一个致命的缺陷,那就是当某个表的数据有任何任何变化,都会导致所有引用了该表的select语句在QueryCache中的缓存数据失效。所以,当我们的数据变化非常频繁的情况下,

27、使用QueryCache可能会得不偿失QueryCache的使用需要多个参数配合,其中最为关键的是query_cache_size和query_cache_type,前者设置用于缓存ResultSet的内存大小,后者设置在何场景下使用QueryCache。在以往的经验来看,如果不是用来缓存基本不变的数据的MySQL数据库,query_cache_size一般256MB是一个比较合适的大小。当然,这可以通过计算QueryCache的命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100)来进行调整。query_cache_type可以设置为0(OFF),

28、1(ON)或者2(DEMOND),分别表示完全不使用querycache,除显式要求不使用querycache(使用sql_no_cache)之外的所有的select都使用querycache,只有显示要求才使用querycache(使用sql_cache)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲.如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;根据命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100)进行调整,一般不建议太大,256MB可能已经差不多了,大型的配置型静态数

29、据可适当调大.可以通过命令:showstatuslikeQcache_%;查看目前系统Querycatch使用大小|Qcache_hits|1892463|Qcache_inserts|35627命中率98.17%=1892463/(1892463+35627)*1004.2.2局部缓存除了全局缓冲,MySql还会为每个连接发放连接缓冲。个连接到MySQL服务器的线程都需要有自己的缓冲。大概需要立刻分配256K,甚至在线程空闲时,它们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需分配大约read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size大小的内存空间.不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。有的是立刻分配成单独的组块。tmp_table_size可能高达MySQL所能分配给这个操作的最大内存空间了注意,这里需要考虑的不只有一点可能会分配多个同一种类型的缓存,例如用来处理子查询。一些特殊的查询的内存使用量可能更大如果在MyISAM表上做成批的插入时需要分配bulk_insert_buffer_size大小的内存;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1