<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java &#38; Game &#187; mysql</title>
	<atom:link href="http://www.javagg.com/archives/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javagg.com</link>
	<description>java&#38;j2me</description>
	<lastBuildDate>Sat, 02 Jul 2011 08:59:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>用mysqlslap进行mysql压力测试</title>
		<link>http://www.javagg.com/archives/796</link>
		<comments>http://www.javagg.com/archives/796#comments</comments>
		<pubDate>Sun, 30 May 2010 14:03:05 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=796</guid>
		<description><![CDATA[mysqlslap是一个mysql官方提供的压力测试工具,通过模拟多个并发客户端访问mysql来执行测试，使用起来非常的简单。通过mysqlslap &#8211;help可以获得可用的选项。
下面我们就来看看一些比较重要的参数：
&#8211;defaults-file，配置文件存放位置
&#8211;create-schema，测试的schema，MySQL中schema也就是database
&#8211;concurrency，并发数
&#8211;engines，测试引擎，可以有多个，用分隔符隔开。
&#8211;iterations，迭代的实验次数
&#8211;socket，socket，文件位置
&#8211;debug-info，打印内存和CPU的信息
&#8211;only-print，只打印测试语句而不实际执行
&#8211;auto-generate-sql，自动产生测试SQL
&#8211;auto-generate-sql-load-type，测试SQL的类型。类型有mixed，update，write，key，read。
&#8211;number-of-queries，执行的SQL总数量
&#8211;number-int-cols，表内int列的数量
&#8211;number-char-cols，表内char列的数量
&#8211;query=name，使用自定义脚本执行测试，例如可以调用自定义的一个存储过程或者sql语句来执行测试。
测试例子如下：
[root@localhost ~]# /usr/local/mysql/bin/mysqlslap  &#8211;defaults-file=/etc/my.cnf &#8211;concurrency=200 &#8211;iterations=1 &#8211;number-int-cols=1 &#8211;auto-generate-sql &#8211;auto-generate-sql-load-type=write &#8211;engine=myisam,innodb &#8211;number-of-queries=200 -S/tmp/mysql.sock &#8211;debug-info  -uroot -p123
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.087 seconds
        Minimum number of seconds to run all queries: 0.087 seconds
        Maximum number of seconds to run all queries: 0.087 seconds
        Number of [...]]]></description>
			<content:encoded><![CDATA[<p>mysqlslap是一个mysql官方提供的压力测试工具,通过模拟多个并发客户端访问mysql来执行测试，使用起来非常的简单。通过mysqlslap &#8211;help可以获得可用的选项。<br />
下面我们就来看看一些比较重要的参数：<br />
&#8211;defaults-file，配置文件存放位置<br />
&#8211;create-schema，测试的schema，MySQL中schema也就是database<br />
&#8211;concurrency，并发数<br />
&#8211;engines，测试引擎，可以有多个，用分隔符隔开。<br />
&#8211;iterations，迭代的实验次数<br />
&#8211;socket，socket，文件位置<br />
&#8211;debug-info，打印内存和CPU的信息<br />
&#8211;only-print，只打印测试语句而不实际执行<br />
&#8211;auto-generate-sql，自动产生测试SQL<br />
&#8211;auto-generate-sql-load-type，测试SQL的类型。类型有mixed，update，write，key，read。<br />
&#8211;number-of-queries，执行的SQL总数量<br />
&#8211;number-int-cols，表内int列的数量<br />
&#8211;number-char-cols，表内char列的数量<br />
&#8211;query=name，使用自定义脚本执行测试，例如可以调用自定义的一个存储过程或者sql语句来执行测试。<br />
测试例子如下：<br />
[root@localhost ~]# /usr/local/mysql/bin/mysqlslap  &#8211;defaults-file=/etc/my.cnf &#8211;concurrency=200 &#8211;iterations=1 &#8211;number-int-cols=1 &#8211;auto-generate-sql &#8211;auto-generate-sql-load-type=write &#8211;engine=myisam,innodb &#8211;number-of-queries=200 -S/tmp/mysql.sock &#8211;debug-info  -uroot -p123<br />
Benchmark<br />
        Running for engine myisam<br />
        Average number of seconds to run all queries: 0.087 seconds<br />
        Minimum number of seconds to run all queries: 0.087 seconds<br />
        Maximum number of seconds to run all queries: 0.087 seconds<br />
        Number of clients running queries: 200<br />
        Average number of queries per client: 1<br />
Benchmark<br />
        Running for engine innodb<br />
        Average number of seconds to run all queries: 0.551 seconds<br />
        Minimum number of seconds to run all queries: 0.551 seconds<br />
        Maximum number of seconds to run all queries: 0.551 seconds<br />
        Number of clients running queries: 200<br />
        Average number of queries per client: 1<br />
User time 0.03, System time 0.05<br />
Maximum resident set size 0, Integral resident set size 0<br />
Non-physical pagefaults 2826, Physical pagefaults 0, Swaps 0<br />
Blocks in 0 out 0, Messages in 0 out 0, Signals 0<br />
Voluntary context switches 3340, Involuntary context switches 96<br />
对于INNODB引擎，200个客户端同时运行这些SQL语句平均要花0.551秒。相应的MYISAM为0.087秒，测试结果也很简明，就不多少说了。<br />
指定数据库的测试：<br />
&#8211;create-schema，指定数据库名称<br />
&#8211;query，     指定SQL语句，可以定位到某个包含SQL的文件<br />
[root@localhost ~]# /usr/local/mysql/bin/mysqlslap &#8211;defaults-file=/etc/my.cnf &#8211;concurrency=50 &#8211;iterations=1 &#8211;create-schema=test &#8211;query=/root/test.sql -S/tmp/mysql.sock -uroot -p123<br />
Benchmark<br />
        Average number of seconds to run all queries: 0.021 seconds<br />
        Minimum number of seconds to run all queries: 0.021 seconds<br />
        Maximum number of seconds to run all queries: 0.021 seconds<br />
        Number of clients running queries: 50<br />
        Average number of queries per client: 1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/796/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql使用普通用户备份出现的错误</title>
		<link>http://www.javagg.com/archives/726</link>
		<comments>http://www.javagg.com/archives/726#comments</comments>
		<pubDate>Thu, 08 Apr 2010 08:03:00 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[备份]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=726</guid>
		<description><![CDATA[mysql使用普通用户备份出现：
[root@xok.la]# mysqldump -u dbuser -ppass db &#62; db.sql
mysqldump: Got error: 1044: Access denied for user &#8216;dbuser&#8217;@'localhost&#8217; to database &#8216;db&#8217; when using LOCK TABLES
解决一：
加上-skip-lock-tables选项即可。即：
[root@xok.la]# mysqldump -u dbuser -ppass db &#8211;skip-lock-tables &#62; db.sql
解决2：
使用root账户备份。

]]></description>
			<content:encoded><![CDATA[<p>mysql使用普通用户备份出现：</p>
<p>[root@xok.la]# mysqldump -u dbuser -ppass db &gt; db.sql<br />
mysqldump: Got error: 1044: Access denied for user <a href="mailto:'dbuser'@'localhost'">&#8216;dbuser&#8217;@'localhost&#8217;</a> to database &#8216;db&#8217; when using LOCK TABLES<br />
解决一：</p>
<p>加上-skip-lock-tables选项即可。即：<span id="more-726"></span></p>
<p>[root@xok.la]# mysqldump -u dbuser -ppass db &#8211;skip-lock-tables &gt; db.sql<br />
解决2：</p>
<p>使用root账户备份。</p>
<p><a href="http://xok.la/2009/04/mysqldump_got_error_1044_access_denied_when_using_lock_tables.html"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/726/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql中text,longtext,mediumtext字段类型的意思,以及区别</title>
		<link>http://www.javagg.com/archives/721</link>
		<comments>http://www.javagg.com/archives/721#comments</comments>
		<pubDate>Thu, 08 Apr 2010 04:04:51 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=721</guid>
		<description><![CDATA[MySQL支持大量的列类型，它可以被分为3类：数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述，并且总结每个列类型的存储需求，然后提供每个类中的类型性质的更详细的描述。概述有意简化，更详细的说明应该考虑到有关特定列类型的附加信息，例如你能为其指定值的允许格式。 
由MySQL支持的列类型列在下面。下列代码字母用于描述中： 
M
指出最大的显示尺寸。最大的合法的显示尺寸是 255 。
D
适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30，但是应该不大于M-2。
方括号(“[”和“]”)指出可选的类型修饰符的部分。 
注意，如果你指定一个了为ZEROFILL，MySQL将为该列自动地增加UNSIGNED属性。 
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个很小的整数。有符号的范围是-128到127，无符号的范围是0到255。 
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号的范围是-32768到32767，无符号的范围是0到65535。 
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小整数。有符号的范围是-8388608到8388607，无符号的范围是0到16777215。 
INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小整数。有符号的范围是-2147483648到2147483647，无符号的范围是0到4294967295。 
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
这是INT的一个同义词。 
BIGINT[(M)] [UNSIGNED] [ZEROFILL] 
一个大整数。有符号的范围是-9223372036854775808到9223372036854775807，无符号的范围是0到 
18446744073709551615。注意，所有算术运算用有符号的BIGINT或DOUBLE值完成，因此你不应该使用大于9223372036854775807（63位)的有符号大整数，除了位函数！注意，当两个参数是INTEGER值时，-、+和*将使用BIGINT运算！这意味着如果你乘2个大整数(或来自于返回整数的函数)，如果结果大于9223372036854775807，你可以得到意外的结果。一个浮点数字，不能是无符号的，对一个单精度浮点数，其精度可以是]]></description>
			<content:encoded><![CDATA[<p>MySQL支持大量的列类型，它可以被分为3类：数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述，并且总结每个列类型的存储需求，然后提供每个类中的类型性质的更详细的描述。概述有意简化，更详细的说明应该考虑到有关特定列类型的附加信息，例如你能为其指定值的允许格式。 <span id="more-721"></span></p>
<p>由MySQL支持的列类型列在下面。下列代码字母用于描述中： </p>
<p>M<br />
指出最大的显示尺寸。最大的合法的显示尺寸是 255 。<br />
D<br />
适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30，但是应该不大于M-2。<br />
方括号(“[”和“]”)指出可选的类型修饰符的部分。 </p>
<p>注意，如果你指定一个了为ZEROFILL，MySQL将为该列自动地增加UNSIGNED属性。 </p>
<p>TINYINT[(M)] [UNSIGNED] [ZEROFILL]<br />
一个很小的整数。有符号的范围是-128到127，无符号的范围是0到255。 </p>
<p>SMALLINT[(M)] [UNSIGNED] [ZEROFILL]<br />
一个小整数。有符号的范围是-32768到32767，无符号的范围是0到65535。 </p>
<p>MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]<br />
一个中等大小整数。有符号的范围是-8388608到8388607，无符号的范围是0到16777215。 </p>
<p>INT[(M)] [UNSIGNED] [ZEROFILL]<br />
一个正常大小整数。有符号的范围是-2147483648到2147483647，无符号的范围是0到4294967295。 </p>
<p>INTEGER[(M)] [UNSIGNED] [ZEROFILL]<br />
这是INT的一个同义词。 </p>
<p>BIGINT[(M)] [UNSIGNED] [ZEROFILL] </p>
<p>一个大整数。有符号的范围是-9223372036854775808到9223372036854775807，无符号的范围是0到 </p>
<p>18446744073709551615。注意，所有算术运算用有符号的BIGINT或DOUBLE值完成，因此你不应该使用大于9223372036854775807（63位)的有符号大整数，除了位函数！注意，当两个参数是INTEGER值时，-、+和*将使用BIGINT运算！这意味着如果你乘2个大整数(或来自于返回整数的函数)，如果结果大于9223372036854775807，你可以得到意外的结果。一个浮点数字，不能是无符号的，对一个单精度浮点数，其精度可以是<=24，对一个双精度浮点数，是在25 和53之间，这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围，但是显示尺寸和小数位数是未定义的。在MySQL3.23中，这是一个真正的浮点值。在更早的MySQL版本中，FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。 </p>
<p>FLOAT[(M,D)] [ZEROFILL]<br />
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38，0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。 </p>
<p>DOUBLE[(M,D)] [ZEROFILL]<br />
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)（25 < = X < = 53）代表一个双精密浮点数字。 </p>
<p>DOUBLE PRECISION[(M,D)] [ZEROFILL] </p>
<p>REAL[(M,D)] [ZEROFILL]<br />
这些是DOUBLE同义词。 </p>
<p>DECIMAL[(M[,D])] [ZEROFILL]<br />
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列：“未压缩”意味着数字作为一个字符串被存储，值的每一位使用一个字符。小数点，并且对于负数，“-”符号不在M中计算。如果D是0，值将没有小数点或小数部分。DECIMAL值的最大范围与DOUBLE相同，但是对一个给定的DECIMAL列，实际的范围可以通过M和D的选择被限制。如果D被省略，它被设置为0。如果M被省掉，它被设置为10。注意，在MySQL3.22里，M参数包括符号和小数点。 </p>
<p>NUMERIC(M,D) [ZEROFILL]<br />
这是DECIMAL的一个同义词。 </p>
<p>DATE<br />
一个日期。支持的范围是&#8217;1000-01-01&#8242;到&#8217;9999-12-31&#8242;。MySQL以&#8217;YYYY-MM-DD&#8217;格式来显示DATE值，但是允许你使用字符串或数字把值赋给DATE列。 </p>
<p>DATETIME<br />
一个日期和时间组合。支持的范围是&#8217;1000-01-01 00:00:00&#8242;到&#8217;9999-12-31 23:59:59&#8242;。MySQL以&#8217;YYYY-MM-DD HH:MM:SS&#8217;格式来显示DATETIME值，但是允许你使用字符串或数字把值赋给DATETIME的列。 </p>
<p>TIMESTAMP[(M)]<br />
一个时间戳记。范围是&#8217;1970-01-01 00:00:00&#8242;到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值，取决于是否M是14（或省略)、12、8或6，但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的，因为如果你不自己给它赋值，它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。<br />
TIME<br />
一个时间。范围是&#8217;-838:59:59&#8242;到&#8217;838:59:59&#8242;。MySQL以&#8217;HH:MM:SS&#8217;格式来显示TIME值，但是允许你使用字符串或数字把值赋给TIME列。 </p>
<p>YEAR[(2|4)]<br />
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155，和0000（4位年格式），如果你使用2位，1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值，但是允许你把使用字符串或数字值赋给YEAR列。（YEAR类型在MySQL3.22中是新类型。） </p>
<p>CHAR(M) [BINARY]<br />
一个定长字符串，当存储时，总是是用空格填满右边到指定的长度。M的范围是1 ～ 255个字符。当值被检索时，空格尾部被删除。CHAR值根据缺省字符集以大小写不区分的方式排序和比较，除非给出BINARY关键词。NATIONAL CHAR（短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。 </p>
<p>[NATIONAL] VARCHAR(M) [BINARY]<br />
一个变长字符串。注意：当值被存储时，尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ～ 255个字符。 VARCHAR值根据缺省字符集以大小写不区分的方式排序和比较，除非给出BINARY关键词值。 VARCHAR是CHARACTER VARYING一个缩写。 </p>
<p>TINYBLOB </p>
<p>TINYTEXT<br />
一个BLOB或TEXT列，最大长度为255(2^8-1)个字符。<br />
BLOB </p>
<p>TEXT<br />
一个BLOB或TEXT列，最大长度为65535(2^16-1)个字符。 </p>
<p>MEDIUMBLOB </p>
<p>MEDIUMTEXT<br />
一个BLOB或TEXT列，最大长度为16777215(2^24-1)个字符。<br />
LONGBLOB </p>
<p>LONGTEXT<br />
一个BLOB或TEXT列，最大长度为4294967295(2^32-1)个字符。 </p>
<p>ENUM(&#8216;value1&#8242;,&#8217;value2&#8242;,&#8230;)<br />
枚举。一个仅有一个值的字符串对象，这个值式选自与值列表&#8217;value1&#8242;、&#8217;value2&#8242;, &#8230;,或NULL。一个ENUM最多能有65535不同的值。 </p>
<p>SET(&#8216;value1&#8242;,&#8217;value2&#8242;,&#8230;)<br />
一个集合。能有零个或多个值的一个字符串对象，其中每一个必须从值列表&#8217;value1&#8242;, &#8216;value2&#8242;, &#8230;选出。一个SET最多能有64个成员。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/721/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digg用NoSQL替代MySQL</title>
		<link>http://www.javagg.com/archives/668</link>
		<comments>http://www.javagg.com/archives/668#comments</comments>
		<pubDate>Mon, 15 Mar 2010 01:20:21 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=668</guid>
		<description><![CDATA[
继 Twitter和Facebook之后,社交新闻网站Digg决定跟 MySQL说再见，并替换掉它的大部分基础设施组成，Digg将从LAMP（Linux、 Apache、MySQL和Perl/PHP/Python）架构迁移到基于Cassandra的NoSQL架构。
Apache Cassandra是一套开源分布式数据库管理系统，最初由Facebook开发，用于储存特别大的数据。Cassandra是一个混合型的非关系的数据 库，主要特点是它不是一个数据库，而是由一堆数据库节点共同构成的一个分布式网络服务，对Cassandra的一个写操作，会被复制到其它节点上，对 Cassandra的读操作，也会被路由到某个节点上面去读取。
Casandra的使用者现在包括了Rackspace、Digg、Facebook、Twitter、Cisco、Mahalo、Ooyala等等。
开源中国社区为您准备了多款 NoSQL 开源软件，详情请看这里。
本文转自oschina.net     


]]></description>
			<content:encoded><![CDATA[<div>
<p><a href="http://www.oschina.net/news/7440/twitter-users-jump-and-plan-to-give-up-mysql">继 Twitter</a>和Facebook之后,社交新闻网站Digg决定跟 <a href="http://www.oschina.net/p/mysql">MySQL</a>说再见，并替换掉它的大部分基础设施组成，Digg将从LAMP（Linux、 Apache、MySQL和Perl/PHP/Python）架构迁移到基于Cassandra的NoSQL架构。<span id="more-668"></span></p>
<p><a href="http://www.oschina.net/p/cassandra">Apache Cassandra</a>是一套开源分布式数据库管理系统，最初由Facebook开发，用于储存特别大的数据。Cassandra是一个混合型的非关系的数据 库，主要特点是它不是一个数据库，而是由一堆数据库节点共同构成的一个分布式网络服务，对Cassandra的一个写操作，会被复制到其它节点上，对 Cassandra的读操作，也会被路由到某个节点上面去读取。</p>
<p>Casandra的使用者现在包括了Rackspace、Digg、Facebook、Twitter、Cisco、Mahalo、Ooyala等等。</p>
<p>开源中国社区为您准备了多款 NoSQL 开源软件，详情请看<a href="http://www.oschina.net/project/tag/235/nosql">这里</a>。</p>
<p>本文转自oschina.net    <a href="http://www.oschina.net/"><img title="开源中国社区 (http://www.oschina.net)" src="http://www.oschina.net/img/logo.gif" alt="开源中国社区" /></a> </p>
</div>
<p><!-- google_ad_section_end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/668/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyISAM几个容易忽视的配置选项</title>
		<link>http://www.javagg.com/archives/423</link>
		<comments>http://www.javagg.com/archives/423#comments</comments>
		<pubDate>Fri, 09 Jan 2009 07:24:48 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[myisam]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=423</guid>
		<description><![CDATA[MyISAM在读操作占主导的情况下是很高效的。可一旦出现大量的读写并发，同InnoDB相比，MyISAM的效率就会直线下降，而 且，MyISAM和InnoDB的数据存储方式也有显著不同：通常，在MyISAM里，新数据会被附加到数据文件的结尾，可如果时常做一些 UPDATE，DELETE操作之后，数据文件就不再是连续的，形象一点来说，就是数据文件里出现了很多洞洞，此时再插入新数据时，按缺省设置会先看这些 洞洞的大小是否可以容纳下新数据，如果可以，则直接把新数据保存到洞洞里，反之，则把新数据保存到数据文件的结尾。之所以这样做是为了减少数据文件的大 小，降低文件碎片的产生。但InnoDB里则不是这样，在InnoDB里，由于主键是cluster的，所以，数据文件始终是按照主键排序的，如果使用自 增ID做主键，则新数据始终是位于数据文件的结尾。
了解了这些基础知识，下面说说MyISAM几个容易忽视的配置选项：
concurrent_insert：
通常来说，在MyISAM里读写操作是串行的，但当对同一个表进行查询和插入操作时，为了降低锁竞争的频率，根据concurrent_insert的设置，MyISAM是可以并行处理查询和插入的：
当concurrent_insert=0时，不允许并发插入功能。
当concurrent_insert=1时，允许对没有洞洞的表使用并发插入，新数据位于数据文件结尾（缺省）。
当concurrent_insert=2时，不管表有没有洞洞，都允许在数据文件结尾并发插入。
这样看来，把concurrent_insert设置为2是很划算的，至于由此产生的文件碎片，可以定期使用OPTIMIZE TABLE语法优化。
max_write_lock_count：
缺省情况下，写操作的优先级要高于读操作的优先级，即便是先发送的读请求，后发送的写请求，此时也会优先处理写请求，然后再处理读请求。这就造成一 个问题：一旦我发出若干个写请求，就会堵塞所有的读请求，直到写请求全都处理完，才有机会处理读请求。此时可以考虑使用 max_write_lock_count：
max_write_lock_count=1
有了这样的设置，当系统处理一个写操作后，就会暂停写操作，给读操作执行的机会。
low-priority-updates：
我们还可以更干脆点，直接降低写操作的优先级，给读操作更高的优先级。
low-priority-updates=1
综合来看，concurrent_insert=2是绝对推荐的，至于max_write_lock_count=1和low- priority-updates=1，则视情况而定，如果可以降低写操作的优先级，则使用low-priority-updates=1，否则使用 max_write_lock_count=1。
参考资料：
Concurrent Inserts
Table Locking Issues
转：http://blog.csdn.net/phphot/archive/2009/06/04/4242031.aspx
]]></description>
			<content:encoded><![CDATA[<p>MyISAM在读操作占主导的情况下是很高效的。可一旦出现大量的读写并发，同InnoDB相比，MyISAM的效率就会直线下降，而 且，MyISAM和InnoDB的数据存储方式也有显著不同：通常，在MyISAM里，新数据会被附加到数据文件的结尾，可如果时常做一些 UPDATE，DELETE操作之后，数据文件就不再是连续的，形象一点来说，就是数据文件里出现了很多洞洞，此时再插入新数据时，按缺省设置会先看这些 洞洞的大小是否可以容纳下新数据，如果可以，则直接把新数据保存到洞洞里，反之，则把新数据保存到数据文件的结尾。之所以这样做是为了减少数据文件的大 小，降低文件碎片的产生。但InnoDB里则不是这样，在InnoDB里，由于主键是cluster的，所以，数据文件始终是按照主键排序的，如果使用自 增ID做主键，则新数据始终是位于数据文件的结尾。<span id="more-423"></span></p>
<p>了解了这些基础知识，下面说说MyISAM几个容易忽视的配置选项：</p>
<p>concurrent_insert：</p>
<p>通常来说，在MyISAM里读写操作是串行的，但当对同一个表进行查询和插入操作时，为了降低锁竞争的频率，根据concurrent_insert的设置，MyISAM是可以并行处理查询和插入的：</p>
<p>当concurrent_insert=0时，不允许并发插入功能。<br />
当concurrent_insert=1时，允许对没有洞洞的表使用并发插入，新数据位于数据文件结尾（缺省）。<br />
当concurrent_insert=2时，不管表有没有洞洞，都允许在数据文件结尾并发插入。</p>
<p>这样看来，把concurrent_insert设置为2是很划算的，至于由此产生的文件碎片，可以定期使用OPTIMIZE TABLE语法优化。</p>
<p>max_write_lock_count：</p>
<p>缺省情况下，写操作的优先级要高于读操作的优先级，即便是先发送的读请求，后发送的写请求，此时也会优先处理写请求，然后再处理读请求。这就造成一 个问题：一旦我发出若干个写请求，就会堵塞所有的读请求，直到写请求全都处理完，才有机会处理读请求。此时可以考虑使用 max_write_lock_count：</p>
<p>max_write_lock_count=1</p>
<p>有了这样的设置，当系统处理一个写操作后，就会暂停写操作，给读操作执行的机会。</p>
<p>low-priority-updates：</p>
<p>我们还可以更干脆点，直接降低写操作的优先级，给读操作更高的优先级。</p>
<p>low-priority-updates=1<br />
综合来看，concurrent_insert=2是绝对推荐的，至于max_write_lock_count=1和low- priority-updates=1，则视情况而定，如果可以降低写操作的优先级，则使用low-priority-updates=1，否则使用 max_write_lock_count=1。</p>
<p>参考资料：</p>
<p>Concurrent Inserts<br />
Table Locking Issues</p>
<p>转：<a href="http://blog.csdn.net/phphot/archive/2009/06/04/4242031.aspx">http://blog.csdn.net/phphot/archive/2009/06/04/4242031.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/423/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

