公司网站访问量越来越大(每天超过10万PV),MySQL自然成为瓶颈。关于MySQL的优化,最基础的就是MySQL系统参数的优化。MySQL对web架构的性能影响最大,也是关键的核心部分。MySQL设置是否优化得当,将直接影响到网页的速度和负载能力!同时,MySQL也是最难优化的部分。不仅需要了解一些MySQL的专业知识,还需要长期的观察统计,以经验为基础。判断,然后设置合理的参数。下面我们来看一下MySQL优化的一些基础知识,MySQL本身(my.cnf)的优化。我们介绍了一些对性能有很大影响的参数。由于my.cnf文件的优化设置与服务器硬件配置密切相关,我们指定一个常见的2U服务器硬件环境:CPU:2IntelXeon2.4GHz内存:4GBDDR硬盘:SCSI。下面结合上面的硬件配置结合优化后的my.cnf进行讲解:[mysqld]port=3306serverid=1socket=/tmp/mysql.sockskip-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_pa??cket=4Mthread_stack=256Ktable_cache=128Ksort_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=64Mtable_cache=512thread_cache_size=64query_cache_size=64M#指定MySQL查询缓冲区的大小。在MySQL控制台可以观察到,如果Qcache_lowmem_prunes的值很大,说明缓冲区经常不足;如果Qcache_hits的值很大,说明查询缓冲区使用非常频繁。如果该值较小,会影响效率,那么可以考虑不使用查询缓冲区;Qcache_free_blocks,如果值很大,说明缓冲区中有很多碎片。tmp_table_size=256Mmax_connections=768#指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现TooManyConnections错误消息,则需要增大此参数的值。max_connect_errors=10000000wait_timeout=10#指定一次请求的最大连接时间,4GB左右内存的服务器可以设置为5-10。thread_concurrency=8#该参数的值为服务器的逻辑CPU数*2。本例中服务器有2个物理CPU,每个物理CPU都支持H.T超线程,所以实际值为4*2=8skip-networking#启用该选项可以完全关闭MySQL的TCP/IP连接方式。如果WEB服务器通过远程连接访问MySQL数据库服务器,则不要启用该选项!否则将无法正常连接!table_cache=1024#物理内存越大,设置越大。默认为2402,调整为512-1024***innodb_additional_mem_pool_size=4M#默认为2minnodb_flush_log_at_trx_commit=1#设置为0是等innodb_log_buffer_size队列满了再统一存储,默认为1innodb_log_buffer_size=2M#默认is1Minnodb_thread_concurrency=8#你的服务器有多少个CPU?设置为几个。建议使用默认值。一般是8key_buffer_size=256M#默认为218,调整为128***tmp_table_size=64M#默认为16M,调整为64-256,最重要的是read_buffer_size=4M#默认为64Kread_rnd_buffer_size=16M#默认是256Ksort_buffer_size=32M#默认是256Kthread_cache_size=120#默认是60query_cache_size=32M注意:1.如果Key_reads过大,应该增加my.cnf中的Key_buffer_size,保持Key_reads/Key_read_requests至少大于1/100,越小越好。其次,如果Qcache_lowmem_prunes很大,需要增大Query_cache_size的值。
