<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[VPS主机上MySQL数据库的优化]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 21 Feb 2012 01:28:36 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	概述：在linux vps主机上配置mysql数据库，由于默认使用yum安装的数据库启动了InnoDB引擎，同时其/etc/my.cnf配置都我们的vps主机不是很适合，本文详细讲解如何配置适合自己vps主机的mysql配置文件<br/><br/>目的:优化vps主机上的mysql数据库，使之更合适vps主机这样的环境<br/><br/>query_cache_size = 268435456<br/>query_cache_type=1<br/>query_cache_limit=1048576查看mysql-server静态参数值命令<br/>mysql>show variables;<br/>或者mysqladmin -uroot variables<br/>mysql服务器的参数很多，如果需要了解某个参数的详细定义，可以使用mysqld –verbose –help &#124; more<br/>查看mysql-server动态状态信息命令<br/><br/>mysql>show status;<br/><br/>或者mysqladmin -uroot status<br/>其中show status分为show [session&#124;global]status;可以根据需要加上参数“session”或者”global”来显示session级（当前统计）的统计结果和global级（自数据库上次启动至今）的统计结果，如果不写，默认为”session”<br/><br/>1、查看和修改默认的存储引擎，关闭不需要的存储引擎<br/>在我们使用vps主机过程中，很多用户只使用MyISAM一个引擎，关闭那么没有使用的InnoDB MEMORY等其他引擎<br/>查看当前系统有哪些引擎<br/><br/>mysql>SHOW ENGINES &#92;G<br/>或者第二种方法<br/>mysql>SHOW VARIABLES LIKE 'have%';查看默认引擎<br/><br/>mysql> show variables like 'table_type';<br/>+---------------+--------+<br/>&#124; Variable_name &#124; Value&nbsp;&nbsp;&#124;<br/>+---------------+--------+<br/>&#124; table_type&nbsp;&nbsp;&nbsp;&nbsp;&#124; MyISAM &#124;<br/>+---------------+--------+<br/>1 row in set (0.00 sec)<br/>或者<br/>mysql> show variables like 'storage_engine';<br/>+----------------+--------+<br/>&#124; Variable_name&nbsp;&nbsp;&#124; Value&nbsp;&nbsp;&#124;<br/>+----------------+--------+<br/>&#124; storage_engine &#124; MyISAM &#124;<br/>+----------------+--------+<br/>1 row in set (0.00 sec)mysql默认的存储引擎是MyISAM,修改默认的存储引擎可以修改/etc/my.cnf参数文件，在[mysqld]字段里面增加default-storage-engine=innodb，这里假设设置默认为innodb，根据自己的需要进行设置,关闭不需要的存储引擎，可以修改/etc/my.cnf参数文件，在[mysqld]字段里面增加–skip-innodb。<br/>2、调节key_buffer_size大小<br/><br/>mysql> show variables like 'key_buffer_size';<br/>+-----------------+-----------+<br/>&#124; Variable_name&nbsp;&nbsp; &#124; Value&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+-----------------+-----------+<br/>&#124; key_buffer_size &#124; 402653184 &#124;<br/>+-----------------+-----------+<br/>1 row in set (0.00 sec)<br/> <br/>mysql&gt;<br/>从上面可以看到,key_buffer_size为：384M,可以修改/etc/my.cnf参数文件，在[mysqld]字段里面增加key_buffer_size = 384M，当然也可以使用mysql>set grobal key_buffer_size=512M修改。<br/>此参数是用来<strong>设置索引块</strong>（Index Blocks)缓存的大小，它被所有的线程共享，只适合MyISAM存储引擎。3、调节table_cache设置<br/>这个参数表示数据库用户打开表的缓存数量，每个连接进来，都会至少打开一个表缓存，如此，table_cache与max_connections有关，<br/>查看当前的table_cache值<br/><br/>mysql> show variables like 'table_cache';<br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; table_cache&nbsp;&nbsp; &#124; 4096&nbsp;&nbsp;&#124;<br/>+---------------+-------+<br/>1 row in set (0.00 sec)从上面可以看到,table_cache为：4096,可以修改/etc/my.cnf参数文件，在[mysqld]字段里面增加table_cachee = 4096<br/><br/>4、调节query_cache设置<br/><br/>Query Cache 在提高数据库性能方面具有非常重要的作用，其设定也非常简单，仅需要在配置文件写入两行： query_cache_type 和 query_cache _size，而且 MySQL 的 query cache 非常快！而且一旦命中，就直接发送给客户端，节约大量的 CPU 时间。<br/><br/>当然，非 SELECT 语句对缓冲是有影响的，它们可能使缓冲中的数据过期。一个 UPDATE 语句引起的部分表修改，将导致对该表所有的缓冲数据失效，这是 MySQL 为了平衡性能而没有采取的措施。因为，如果每次 UPDATE 需要检查修改的数据，然后撤出部分缓冲将导致代码的复杂度增加。<br/><br/>query_cache_type ：0 代表不使用缓冲， 1 代表使用缓冲，2 代表根据需要使用。<br/><br/>设置 1 代表缓冲永远有效，如果不需要缓冲，就需要使用如下语句：<br/><br/>SELECT SQL_NO_CACHE * FROM my_table WHERE …<br/><br/>如果设置为 2 ，需要开启缓冲，可以用如下语句：<br/><br/>SELECT SQL_CACHE * FROM my_table WHERE …<br/><br/>用 SHOW STATUS 可以查看缓冲的情况：<br/><br/>mysql> show status like 'Qca%';<br/>+-------------------------+----------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+-------------------------+----------+<br/>&#124; Qcache_queries_in_cache &#124; 8 &#124;<br/>&#124; Qcache_inserts &#124; 545875 &#124;<br/>&#124; Qcache_hits &#124; 83951 &#124;<br/>&#124; Qcache_lowmem_prunes &#124; 0 &#124;<br/>&#124; Qcache_not_cached &#124; 2343256 &#124;<br/>&#124; Qcache_free_memory &#124; 33508248 &#124;<br/>&#124; Qcache_free_blocks &#124; 1 &#124;<br/>&#124; Qcache_total_blocks &#124; 18 &#124;<br/>+-------------------------+----------+<br/>8 rows in set (0.00 sec)如果需要计算命中率，需要知道服务器执行了多少 SELECT 语句：<br/><br/>mysql> show status like 'Com_sel%';<br/>+---------------+---------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+---------+<br/>&#124; Com_select &#124; 2889628 &#124;<br/>+---------------+---------+<br/>1 row in set (0.01 sec)在本例中， MySQL 命中了 2,889,628 条查询中的 83,951 条，而且 INSERT 语句只有 545,875 条。因此，它们两者的和和280万的总查询相比有很大差距，因此，我们知道本例使用的缓冲类型是 2 。<br/><br/>而在类型是 1 的例子中， Qcache_hits 的数值会远远大于 Com_select 。 Qcache_not_cached是可以记录DML语句的数量的<br/><br/><br/>Tags - <a href="http://www.dzhope.com/tags/vps/" rel="tag">vps</a> , <a href="http://www.dzhope.com/tags/mysql%25E4%25BC%2598%25E5%258C%2596/" rel="tag">mysql优化</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] VPS主机上MySQL数据库的优化]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>