<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/plinux" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/plinux" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 14 Feb 2012 11:57:50 GMT</lastBuildDate><title>P.Linux Laboratory</title><description>MySQL DBA &amp; Linux SA</description><link>http://www.penglixun.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Tue, 14 Feb 2012 11:57:51 GMT</pubDate><item><title>自己动手实现Multi-Master Replication</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666108/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/diy_multi_master_replication.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;首发：&lt;a href=&quot;http://www.mysqlops.com/2012/02/14/diy_multi_master_replication.html&quot; title=&quot;http://www.mysqlops.com/2012/02/14/diy_multi_master_replication.html&quot; target=&quot;_blank&quot;&gt;http://www.mysqlops.com/2012/02/14/diy_multi_master_replication.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;直到今天为止，MySQL依然只支持一个Slave从一个Master复制数据，虽然也可以做到一主多备(M-&gt;S)，双主复制(M&lt;-&gt;M)等架构，但是局限性依然很大。&lt;br /&gt;
例如最近我们遇到一个问题，需要为线上的集群搭建在线延时备份，即从线上的双主集群中再延伸出一组Slave，以防重要集群主备都宕机。按照现在MySQL的架构，要搭建这种在线备份，只能启动相同数据的实例来实现，假设线上有128个实例在提供服务，那么我就需要128个实例来做这128个实例的复制，这个管理成本是巨大的。&lt;br /&gt;
之前我们也有个方案，利用&lt;acronym title=&quot;Practical Extraction and Report Language&quot;&gt;Perl&lt;/acronym&gt;脚本来做，参见这篇文章：&lt;a href=&quot;http://www.penglixun.com/tech/program/how_to_mysql_multi_master.html&quot; title=&quot;点我阅读&quot; target=&quot;_blank&quot;&gt;点我阅读&lt;/a&gt;。这个方案的最大问题就是管理不方便，没有可以监控的地方，也不能随便停止脚本等等，如果完善这些部分，代码量太大，几乎就实现了一个MySQL Replication，那还不如利用MySQL的管理部分，在MySQL里实现多Master。&lt;/p&gt;
&lt;p&gt;通过研究源码，可以发现，MySQL管理每个复制通道，都是通过一个Master_info类（sql/rpl_mi.h中定义），start_slave/change_master/stop_slave/show_slave/end_slave这些函数都需要传入一个Master_info指针，这就给我们改造多Master提供了很大的便利，基本只需要为每个复制通道传入相应的Master_info即可。&lt;/p&gt;
&lt;p&gt;除了找到函数入口，还需要让语法支持多主，否则CHANGE MASTER TO语句并不能支持多主。我修改了sql_yacc.yy，支持如下语法：&lt;br /&gt;
CHANGE MASTER &amp;#8216;通道标识&amp;#8217; TO，START SLAVE &amp;#8216;通道标识&amp;#8217;，STOP SLAVE &amp;#8216;通道标识&amp;#8217;，SHOW SLAVE &amp;#8216;通道标识&amp;#8217; STATUS。&lt;br /&gt;
这样就可以支持多Master的语法了。&lt;/p&gt;
&lt;p&gt;另一个问题是怎么保存多个通道的信息，默认单通道的情况下，用master.info存Master的信息，用relay-log.info存复制应用的情况。所以存储文件的名称也要修改，我的方式是，master.info和relay-log.info在末尾加上通道标识后缀，例如名为”plx”的通道，会存成master.info.plx和relay-log.info.plx。Relay Log因为有序列，所以增加”-通道标识”在序列前。&lt;br /&gt;
还有一个问题就是，操作命令都是用通道标识来确定一个通道，那么肯定需要持久化正在用的通道名称，以及建立通道后可以用通道名获取相应的Master_info。于是我新建了一个MASTER_INFO_INDEX类（在sql/rpl_mi.h），里面包含一个通道标识和Master_info指针的对应HASH表，以及持久化需要的IO_CACHE，通过master.info.index这个文件来存已有的通道标识。&lt;br /&gt;
命名实例如下：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;-rw-rw&amp;#8212;- 1 mysql mysql 10 Feb 13 20:40 master.info.index&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 76 Feb 14 17:27 master.info.plx1&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 71 Feb 14 17:27 master.info.plx2&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 90 Feb 14 17:25 relay-log.info.plx1&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 90 Feb 14 17:27 relay-log.info.plx2&lt;/p&gt;
&lt;p&gt;-rw-rw&amp;#8212;- 1 mysql mysql      160 Feb 14 10:16 mysql-relay-bin-plx1.000011&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 83765425 Feb 14 17:27 mysql-relay-bin-plx1.000012&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql      106 Feb 14 10:16 mysql-relay-bin-plx1.index&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql      160 Feb 14 10:16 mysql-relay-bin-plx2.000014&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql 83455792 Feb 14 17:27 mysql-relay-bin-plx2.000015&lt;br /&gt;
-rw-rw&amp;#8212;- 1 mysql mysql      106 Feb 14 10:16 mysql-relay-bin-plx2.index&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;下载Patch在此：&lt;a href=&quot;http://bugs.mysql.com/file.php?id=18020&quot; title=&quot;http://bugs.mysql.com/file.php?id=18020&quot; target=&quot;_blank&quot;&gt;http://bugs.mysql.com/file.php?id=18020&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有了多Master以后我们可以做什么呢？下面给两个应用场景。&lt;br /&gt;
第一个是一备多的备份。因为我们采用的分库策略，使我们一个集群会有很多个实例，每个实例里面有几个Schema，但是肯定不会重复。例如第一个实例是1～3号Schema。第二个实例就是4～6号Schema，所以binlog应用到一起并不会冲突数据。这是我们测试的在线备份方案。&lt;br /&gt;
&lt;a href=&quot;http://www.yupoo.com/photos/plinux/84449105/&quot; title=&quot;Multi-Master，多备一&quot;&gt;&lt;img src=&quot;http://pic.yupoo.com/plinux/BK9UUV96/YwYae.png&quot; alt=&quot;Multi-Master，多备一&quot; width=&quot;341&quot; height=&quot;298&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第二个是跨机房的HA。为了容灾或者加速，很多公司都采用在不同机房部署数据库的方式，所以就涉及到数据同步。为了保证每个机房产生的数据不冲突，一般来说我们采用的是auto_increment_increment，auto_increment_offset这两个参数，可以控制步进。例如双MAster，我们会配置主库是奇数序列的ID，备库是偶数序列的ID，这样切换时就算有少量binlog还未应用，也不会导致数据冲突。跨机房以后，例如两个机房都有双Master，两个机房之间数据又需要同步，以前需要借助第三方脚本或者程序，有了多Master，按如下方式搭建，设置步进为4，就可以保证每个机房有双MAster HA，机房之间数据又可以同步。&lt;br /&gt;
&lt;a href=&quot;http://www.yupoo.com/photos/plinux/84449106/&quot; title=&quot;Multi-Master，跨机房HA&quot;&gt;&lt;img src=&quot;http://pic.yupoo.com/plinux/BK9UVsUU/Lt9iW.png&quot; alt=&quot;Multi-Master，跨机房HA&quot; width=&quot;284&quot; height=&quot;265&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;已知缺陷：&lt;br /&gt;
1. 我还没做reset slave &amp;#8216;通道标识&amp;#8217;命令，就是复制通道还不能重置，只能CHANGE MASTER来改，不是做不了，因为暂时我们没这个需求，等稳定了再考虑这个细节。&lt;br /&gt;
2. 数据冲突没有检测。这个是无法解决的，我只是简单的调用了启动Slave的函数来启动多个复制线程，binlog取到本地应用，有数据冲突是不能事先检测的，执行到了才会报出来，可以设置skip-slave-error，对全局有效。其他复制相关的也是全局有效。&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年11月29日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html&quot; title=&quot;如何杀掉空闲事务&quot;&gt;如何杀掉空闲事务&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666108/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666108/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/diy_multi_master_replication.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/diy_multi_master_replication.html 首发：http://www.mysqlops.com/2012/...&lt;img src=&quot;http://www1.feedsky.com/t1/605666108/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666108/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Percona</category><category>MySQL</category><category>Multi-Master</category><category>Replication</category><category>数据库</category><pubDate>Tue, 14 Feb 2012 19:57:50 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/diy_multi_master_replication.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1235</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/diy_multi_master_replication.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666108/6226105</fs:itemid></item><item><title>一个InnoDB性能超过Oracle的调优Case</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666109/6226105/1/item.html</link><content:encoded>&lt;p&gt;年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试，本想把MySQL调优到接近Oracle的性能即可，但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助（排名不分先后，仅按第一次为此CASE而骚扰的时间排序），不断修正方案，最终获得了比Oracle更好的性能，虽然是个特殊场景，但是我觉得意义是很广泛的，值得参考，遂记录于此。&lt;br /&gt;
所有涉及表结构和具体业务模型的部分全部略去，也请勿咨询，不能透露，敬请谅解。&lt;/p&gt;
&lt;h2&gt;一、测试模型：&lt;/h2&gt;
&lt;p&gt;包含12张业务表，每个事务包含12个&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;，每个&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;向一张表做INSERT，做完12个&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;即完成一个事务。&lt;/p&gt;
&lt;p&gt;用一个C &lt;acronym title=&quot;Application Programming Interface&quot;&gt;API&lt;/acronym&gt;编写的程序连接MySQL，不断执行如下操作&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;开始事务：START TRANSACTION;&lt;br /&gt;
每张表插入一行：INSERT INTO xxx VALUES (val1,val2,…); #一共12次&lt;br /&gt;
提交事务：COMMIT;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;通过一个Shell脚本来启动32个测试程序并发测试&lt;/p&gt;
&lt;h2&gt;二、测试环境：&lt;/h2&gt;
&lt;h3&gt;1. 机型：&lt;/h3&gt;
&lt;p&gt;R510&lt;br /&gt;
CPU：Intel(R) Xeon(R) CPU E5645 @ 2.40GHz 双路24线程&lt;br /&gt;
内存：6 * 8G 48G&lt;br /&gt;
存储：FusionIO 320G MLC&lt;/p&gt;
&lt;p&gt;R910&lt;br /&gt;
CPU：Intel(R) Xeon(R) CPU E7530 @ 1.87GHz 四路48线程&lt;br /&gt;
内存：32* 4G 128G&lt;br /&gt;
存储：FusionIO 640G MLC&lt;/p&gt;
&lt;h3&gt;2. Linux配置：&lt;/h3&gt;
&lt;p&gt;单实例启动数据库：/boot/grub/menu.lst修改kernel启动参数增加numa=off&lt;br /&gt;
多实例启动数据库：numactl &amp;#8211;cpunodebind=$BIND_NO &amp;#8211;localalloc $MYSQLD&lt;/p&gt;
&lt;p&gt;RHEL 5.4 with 2.6.18内置内核&lt;br /&gt;
RHEL 6.1 with 2.6.32淘宝版内核&lt;/p&gt;
&lt;p&gt;fs.aio-max-nr = 1048576 #调整系统允许的最大异步IO队列长度&lt;br /&gt;
vm.nr_hugepages = 18000 #大页页数&lt;br /&gt;
vm.hugetlb_shm_group = 601 #允许使用大页的用户id，即mysql用户&lt;br /&gt;
vm.swappiness = 0 #不倾向使用SWAP&lt;/p&gt;
&lt;h3&gt;3. FusionIO配置：&lt;/h3&gt;
&lt;p&gt;启动配置：&lt;br /&gt;
/etc/modprobe.d/iomemory-vsl.conf&lt;br /&gt;
options iomemory-vsl use_workqueue=0 # 忽略Linux IO调度&lt;br /&gt;
options iomemory-vsl disable-msi=0 # 开启MSI中断&lt;br /&gt;
options iomemory-vsl use_large_pcie_rx_buffer=1 # 打开PCIE缓冲&lt;br /&gt;
options iomemory-vsl preallocate_memory=SN号 # 预分配管理内存&lt;/p&gt;
&lt;p&gt;格式化配置：&lt;br /&gt;
fio-format -b 4K /dev/fct0 # 格式化设备为4K匹配NAND芯片页大小&lt;br /&gt;
mkfs.xfs -f -i attr=2 -l lazy-count=1,sectsize=4096 -b size=4096 -d sectsize=4096 -L data /dev/fioa # 调整XFS与FusionIO 4K页匹配，比较激进，需要更多稳定性测试认为这组参数充分安全&lt;/p&gt;
&lt;p&gt;mount配置：&lt;br /&gt;
/dev/fioa on /data type xfs (rw,noatime,nodiratime,noikeep,nobarrier,allocsize=100M,attr2,largeio,inode64,swalloc) # FusionIO的逻辑Block是100M，所以设为100M的预扩展&lt;/p&gt;
&lt;h3&gt;4. MySQL版本和通用配置：&lt;/h3&gt;
&lt;p&gt;Percona 5.1.60-13.1 原版&lt;br /&gt;
Percona 5.1.60-13.1 修改版&lt;br /&gt;
* 允许自定义InnoDB AIO队列申请长度 (5.5_change_aio_io_limit.patch)&lt;br /&gt;
Percona 5.5.19-24.0 原版&lt;br /&gt;
* 允许innodb_flush_neighbor_pages=2来合并真正相邻的脏页合并&lt;br /&gt;
* Group Commit&lt;br /&gt;
Percona 5.5.18-23.0 修改版&lt;br /&gt;
* 允许自定义InnoDB AIO队列申请长度 (5.5_change_aio_io_limit.patch)&lt;br /&gt;
* 允许预先扩展数据文件 (5.5_innodb_extent_tablespace.patch，@淘宝丁奇 贡献)&lt;br /&gt;
* Group Cimmit&lt;/p&gt;
&lt;p&gt;innodb_buffer_pool_size=20G&lt;br /&gt;
sync_binlog=1&lt;br /&gt;
innodb_flush_log_at_trx_commit=1&lt;/p&gt;
&lt;p&gt;测试并发：32&lt;/p&gt;
&lt;h3&gt;5. 修改补丁&lt;/h3&gt;
&lt;p&gt;#cat 5.5_change_aio_io_limit.patch&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p12323&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1232code3&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;ha_innodb.&lt;span style=&quot;color: #007788;&quot;&gt;cc&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;58.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;ha_innodb.&lt;span style=&quot;color: #007788;&quot;&gt;cc&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;41.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;146&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;146&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; @@
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; ulong innobase_commit_concurrency &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; ulong innobase_read_io_threads&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; ulong innobase_write_io_threads&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; ulong innobase_aio_pending_ios_per_thread&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #666666;&quot;&gt;// Change AIO io_limit By P.Linux&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;long&lt;/span&gt; innobase_buffer_pool_instances &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; ulong innobase_page_size&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;2870&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;2871&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; @@
 	srv_n_file_io_threads &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ulint&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; innobase_file_io_threads&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 	srv_n_read_io_threads &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ulint&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; innobase_read_io_threads&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 	srv_n_write_io_threads &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ulint&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; innobase_write_io_threads&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;	srv_n_aio_pending_ios_per_thread &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ulint&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; innobase_aio_pending_ios_per_thread&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
 	srv_read_ahead &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;amp&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 	srv_adaptive_flushing_method &lt;span style=&quot;color: #000040;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12282&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12284&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;11&lt;/span&gt; @@
   &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Number of background write I/O threads in InnoDB.&amp;quot;&lt;/span&gt;,
   &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;64&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; MYSQL_SYSVAR_ULONG&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;aio_pending_ios_per_thread, innobase_aio_pending_ios_per_thread,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;  PLUGIN_VAR_RQCMDARG &lt;span style=&quot;color: #000040;&quot;&gt;|&lt;/span&gt; PLUGIN_VAR_READONLY,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;  &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Number of AIO pending IOS per-thread in InnoDB.&amp;quot;&lt;/span&gt;,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;  &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;32&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;4096&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; MYSQL_SYSVAR_LONG&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;force_recovery, innobase_force_recovery,
   PLUGIN_VAR_RQCMDARG &lt;span style=&quot;color: #000040;&quot;&gt;|&lt;/span&gt; PLUGIN_VAR_READONLY,
   &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Helps to save your data in case the disk image of the database becomes corrupt.&amp;quot;&lt;/span&gt;,
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv0srv.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;57.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv0srv.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;35.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;242&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;242&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; @@
 UNIV_INTERN ulint	srv_n_file_io_threads	&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ULINT_MAX&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 UNIV_INTERN ulint	srv_n_read_io_threads	&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ULINT_MAX&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 UNIV_INTERN ulint	srv_n_write_io_threads	&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ULINT_MAX&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;UNIV_INTERN ulint   srv_n_aio_pending_ios_per_thread &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ULINT_MAX&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #666666;&quot;&gt;// Change AIO io_limit By P.Linux&lt;/span&gt;
&amp;nbsp;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Switch to enable random read ahead. */&lt;/span&gt;
 UNIV_INTERN my_bool	srv_random_read_ahead	&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; FALSE&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv0start.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;57.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;srv0start.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;25&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;12.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1475&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1475&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;16&lt;/span&gt; @@
&amp;nbsp;
 	ut_a&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;srv_n_file_io_threads&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;#cat 5.5_innodb_extent_tablespace.patch&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p12324&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1232code4&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql_yacc.&lt;span style=&quot;color: #007788;&quot;&gt;yy&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;58.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql_yacc.&lt;span style=&quot;color: #007788;&quot;&gt;yy&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;47.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;3878&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;3878&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt; @@
           &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt; 
             Lex&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;alter_tablespace_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;ts_alter_tablespace_type&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ALTER_TABLESPACE_DROP_FILE&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; 
           &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;        &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* innodb_extent_tablespace By P.Linux */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;        &lt;span style=&quot;color: #000040;&quot;&gt;|&lt;/span&gt; tablespace_name
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;          SET
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;          opt_ts_extent_size
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;          &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;            Lex&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;alter_tablespace_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;ts_alter_tablespace_type&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ALTER_TABLESPACE_ALTER_FILE&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;          &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;        &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* End */&lt;/span&gt;
         &lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
 logfile_group_info&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler.&lt;span style=&quot;color: #007788;&quot;&gt;h&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;58.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;sql&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler.&lt;span style=&quot;color: #007788;&quot;&gt;h&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;17.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;501&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;501&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;8&lt;/span&gt; @@
 &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
   TS_ALTER_TABLESPACE_TYPE_NOT_DEFINED &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;,
   ALTER_TABLESPACE_ADD_FILE &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;,
&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;  ALTER_TABLESPACE_DROP_FILE &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;2&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;  ALTER_TABLESPACE_DROP_FILE &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;2&lt;/span&gt;,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;  ALTER_TABLESPACE_ALTER_FILE &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt; &lt;span style=&quot;color: #666666;&quot;&gt;// innodb_extent_tablespace By P.Linux&lt;/span&gt;
 &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;enum&lt;/span&gt; tablespace_access_mode
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil0fil.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;57.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil0fil.&lt;span style=&quot;color: #007788;&quot;&gt;c&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;31&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;40.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;368&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;368&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;8&lt;/span&gt; @@
 Checks &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; a single&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;table tablespace &lt;span style=&quot;color: #0000ff;&quot;&gt;for&lt;/span&gt; a given table name exists in the
 tablespace memory cache.
 @&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt;	space id, ULINT_UNDEFINED &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; not found &lt;span style=&quot;color: #000040;&quot;&gt;*/&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;//static&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;UNIV_INTERN &lt;span style=&quot;color: #666666;&quot;&gt;// innodb_extent_tablespace By P.Linux&lt;/span&gt;
 ulint
 fil_get_space_id_for_table&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*=======================*/&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;4676&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;4677&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;8&lt;/span&gt; @@
 Checks &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; a single&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;table tablespace &lt;span style=&quot;color: #0000ff;&quot;&gt;for&lt;/span&gt; a given table name exists in the
 tablespace memory cache.
 @&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt;	space id, ULINT_UNDEFINED &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; not found &lt;span style=&quot;color: #000040;&quot;&gt;*/&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;//static&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;UNIV_INTERN &lt;span style=&quot;color: #666666;&quot;&gt;// innodb_extent_tablespace By P.Linux&lt;/span&gt;
 ulint
 fil_get_space_id_for_table&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*=======================*/&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;ha_innodb.&lt;span style=&quot;color: #007788;&quot;&gt;cc&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;58.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;handler&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;ha_innodb.&lt;span style=&quot;color: #007788;&quot;&gt;cc&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;37&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;49.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;433&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;434&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt; @@
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*=======================*/&lt;/span&gt;
 	uint	flags&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/****************************************************************/&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/**
+Alter tablespace supported in an InnoDB table. Allow setting extent space. */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; innobase_alter_tablespace&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;handlerton &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;hton,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;                                THD&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd, st_alter_tablespace &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;alter_info&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* innodb_extent_tablespace By P.Linux */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; innobase_hton_name&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;InnoDB&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*************************************************************/&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/**
@@ -2489,6 +2496,7 @@
         innobase_hton-&amp;amp;gt;flags=HTON_NO_FLAGS;
         innobase_hton-&amp;amp;gt;release_temporary_latches=innobase_release_temporary_latches;
 	innobase_hton-&amp;amp;gt;alter_table_flags = innobase_alter_table_flags;
+	innobase_hton-&amp;amp;gt;alter_tablespace= innobase_alter_tablespace; // innodb_extent_tablespace By P.Linux
&amp;nbsp;
 	ut_a(DATA_MYSQL_TRUE_VARCHAR == (ulint)MYSQL_TYPE_VARCHAR);
&amp;nbsp;
@@ -3146,6 +3155,33 @@
 		| HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE);
 }
&amp;nbsp;
+/****************************************************************/&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/**
+Alter tablespace supported in an InnoDB table. Allow setting extent space. */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; innobase_alter_tablespace&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;handlerton &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;hton,
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;                                THD&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd, st_alter_tablespace &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;alter_info&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;alter_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;ts_alter_tablespace_type &lt;span style=&quot;color: #000040;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; ALTER_TABLESPACE_ALTER_FILE&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;               &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; HA_ADMIN_NOT_IMPLEMENTED&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       ulint table_space&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; fil_get_space_id_for_table&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;alter_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;tablespace_name&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;table_space &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; ULINT_UNDEFINED&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;               my_error&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ER_WRONG_TABLE_NAME, MYF&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;, alter_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;tablespace_name&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;               &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; EE_FILENOTFOUND&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       ulint extent_size&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; alter_info&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;gt&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;extent_size&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       ulint actual_size&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       fil_extend_space_to_desired_size&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;amp&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;actual_size, table_space, extent_size&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* innodb_extent_tablespace By P.Linux */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*****************************************************************/&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/**
 Commits a transaction in an InnoDB database. */&lt;/span&gt;
 &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;---&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;include&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil0fil.&lt;span style=&quot;color: #007788;&quot;&gt;h&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2011&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;20&lt;/span&gt; &lt;span style=&quot;color: #208080;&quot;&gt;06&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;57.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+++&lt;/span&gt; Percona&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;Server&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;5.5.18&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;23.0&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;debug&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;storage&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;innobase&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;include&lt;span style=&quot;color: #000040;&quot;&gt;/&lt;/span&gt;fil0fil.&lt;span style=&quot;color: #007788;&quot;&gt;h&lt;/span&gt;	&lt;span style=&quot;color: #0000dd;&quot;&gt;2012&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #208080;&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;39&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;20.000000000&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0800&lt;/span&gt;
@@ &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;744&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;744&lt;/span&gt;,&lt;span style=&quot;color: #0000dd;&quot;&gt;18&lt;/span&gt; @@
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*============================*/&lt;/span&gt;
 	ulint		id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*!&amp;amp;lt; in: space id */&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*******************************************************************/&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/**
+Checks if a single-table tablespace for a given table name exists in the
+tablespace memory cache.
+@return        space id, ULINT_UNDEFINED if not found */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;UNIV_INTERN
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;ulint
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;fil_get_space_id_for_table&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*=======================*/&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;       &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;     name&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;  &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*!&amp;amp;lt; in: table name in the standard
+                               'databasename/tablename' format */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* innodb_extent_tablespace By P.Linux */&lt;/span&gt;
&lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt;
 &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*************************************************************************
 Return local hash table informations. */&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;三、测试结果：&lt;/h2&gt;
&lt;h3&gt;1. R910 Oracle单实例&lt;/h3&gt;
&lt;p&gt;测试人：童家旺，支付宝&lt;br /&gt;
TPS：稳定值2000,峰值2600 （我没参与测试，也没有报告，无法确定详情）&lt;br /&gt;
我的补充：Oracle已经是调优的过的，请相信我们的Oracle &lt;acronym title=&quot;Database Administrator&quot;&gt;DBA&lt;/acronym&gt;不是吃素的。我把听Oracle &lt;acronym title=&quot;Database Administrator&quot;&gt;DBA&lt;/acronym&gt;描述的只言碎语随便写下，Oracle跑到后面TPS也是有所下降，不是能一直100%稳定，最后CPU已经吃尽了，所以基本上再怎么优化提升的幅度会比较小。&lt;/p&gt;
&lt;h3&gt;2. R910 MySQL单实例 Percona 5.1.59 原版&lt;/h3&gt;
&lt;p&gt;测试人：帝俊，支付宝&lt;br /&gt;
TPS：峰值1500，无法稳定（具体不祥）&lt;br /&gt;
测试人描述：&lt;br /&gt;
目前的测试数据显示，由于MySQL在checkpoint上处理跟不上，不足以持续支持1.5K/s的事务数，10MB/s的redo量下的交易创建。该负载下，FIO的写出速度为160～190MB/s，写IOPS为2～2.3k，测试FIO的写吞吐量可以到600MB/s，写IOPS有8K+，需要进一步研究如何进一步提升系统的吞吐量。&lt;/p&gt;
&lt;h3&gt;3. R910 MySQL多实例 Percona 5.1.60-13.1原版&lt;/h3&gt;
&lt;p&gt;测试人：彭立勋，B2B&lt;br /&gt;
TPS：峰值500*4（无法稳定），谷值100，均值450＊4&lt;br /&gt;
重要配置：&lt;br /&gt;
innodb_page_size=4K # 修改数据页大小与FusionIO匹配&lt;br /&gt;
innodb_log_block_size=4K # 修改日志页大小于FusionIO匹配&lt;br /&gt;
innodb_log_file_size=1G&lt;br /&gt;
innodb_log_files_in_group=3&lt;br /&gt;
innodb_buffer_pool_size=20G&lt;br /&gt;
innodb_max_dirty_pages_pct=75&lt;br /&gt;
innodb_flush_method=ALL_O_DIRECT # 修改文件写入方式全部为O_DIRECT&lt;br /&gt;
innodb_read_io_threads=2&lt;br /&gt;
innodb_write_io_threads=10&lt;br /&gt;
innodb_io_capacity=20000&lt;br /&gt;
innodb_extra_rsegments=16&lt;br /&gt;
innodb_use_purge_thread=4&lt;br /&gt;
innodb_adaptive_flushing_method=3 # 采用Keep_average刷新方式&lt;br /&gt;
innodb_flush_neighbor_pages=0 # 不为了凑顺序IO刷相邻未修改的页&lt;br /&gt;
测试人描述：&lt;br /&gt;
每颗物理CPU绑定一个MySQL实例，四个实例同时接受测试。可以看到在测试过程中，IOPS抖动很大，在4K～17K之间抖动，可以判定，是Checkpoint机制不完善导致刷新间歇性繁忙，在IO闲置的时候不能充分发挥性能。但多实例可以提升整体TPS接近Oracle的均值，说明MySQL内部可能某些常量设置不合理，或者锁定力度太粗导致单实例不能充分发挥单机性能。&lt;/p&gt;
&lt;h3&gt;4. R910 MySQL多实例 Percona 5.1.60-13.1 修改版&lt;/h3&gt;
&lt;p&gt;测试人：彭立勋，B2B&lt;br /&gt;
TPS：峰值1200*4，谷值0，均值950*4&lt;br /&gt;
重要配置：（在测试3的基础上）&lt;br /&gt;
innodb_aio_pending_ios_per_thread=1024&lt;br /&gt;
测试人描述：&lt;br /&gt;
经过对测试3的分析，可以发现，InnoDB已经标记了很多Page到Flush_list，但是并没有被即时的回写，可以在INNODB_BUFFER_POOL_PAGES系统表中发现很页flush_type=2，即在Flush_list中。&lt;br /&gt;
经过review代码，发现InnoDB申请的AIO队列的长度只有256，由常量OS_AIO_N_PENDING_IOS_PER_THREAD（os0file.h）定义。将此常量修改为InnoDB的参数后，重新测试，可以使FusionIO的IOPS达到7K～18K，IO利用率得以提升，整体性能已经超越Oracle，但存在严重的低谷，大约每10s一次。&lt;/p&gt;
&lt;h3&gt;5.R510 MySQL单实例 Percona 5.5.18-23.0 修改版&lt;/h3&gt;
&lt;p&gt;测试人：彭立勋,B2B&lt;br /&gt;
TPS：峰值2800，谷值2300，均值2500&lt;br /&gt;
重要配置：（在测试3的基础上）&lt;br /&gt;
innodb_aio_pending_ios_per_thread=512&lt;br /&gt;
alter tablespace `trade/xxx` set extent_size=5000000; # 预先扩展数据文件&lt;br /&gt;
测试人描述：&lt;br /&gt;
根据测试4的结果进行分析，需要解决的主要问题就是抖动，抖动可能是两个原因导致的，一个是Checkpoint机制不完善，一个是数据文件扩展。Checkpoint机制不完善这个暂时无法改进，只能先解决数据文件扩展上的问题，采用淘宝丁奇的方法，对MySQL增加预先扩展文件的功能，在测试前先将文件扩展至测试写满需要的大小，使测试过程中无需扩展文件。&lt;br /&gt;
实例测试中发现非常有效，抖动范围在2300～2800之间，可以接受。但是Buffer Pool一旦脏页写满，为了控制脏页量InnoDB就会加大刷新量，影响到TPS。实际上在脏页未满的时候，IOPS就没有用完，但是InnoDB计算刷新量并没有考虑操作系统反馈的影响信息，只是根据自己的redo产生量计算。&lt;br /&gt;
&lt;a href=&quot;http://www.yupoo.com/photos/plinux/84222190/&quot; title=&quot;R510_1&quot;&gt;&lt;img src=&quot;http://pic.yupoo.com/plinux/BGH3jg5X/medish.jpg&quot; alt=&quot;R510_1&quot; width=&quot;533&quot; height=&quot;462&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
同时观察CPU还发现，2.6.18内核会将所有软中断发送到Core0上处理，这可能也是瓶颈之一。（当时忘记拷贝状态，这是后来确认内核问题看得，可以看这篇文章，一样的，&lt;a href=&quot;http://dbahacker.com/linux/cpu%E8%BD%AF%E4%B8%AD%E6%96%AD%E5%AE%9E%E8%B7%B5%E4%B8%80&quot; title=&quot;CPU软中断实践&quot; target=&quot;_blank&quot;&gt;CPU软中断实践&lt;/a&gt;）&lt;br /&gt;
03:05:17 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s&lt;br /&gt;
03:05:18 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1014.00&lt;br /&gt;
03:05:18 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1000.00&lt;/p&gt;
&lt;h3&gt;6. R510 MySQL单实例 Percona 5.5.19-24.0 原版&lt;/h3&gt;
&lt;p&gt;测试人：彭立勋，B2B&lt;br /&gt;
TPS：峰值3100，谷值2400，均值2700&lt;br /&gt;
重要配置：（在测试3的基础上）&lt;br /&gt;
替换内核版本为2.6.32淘宝版，使用IO中断负载均衡。&lt;br /&gt;
innodb_adaptive_flushing_method = 2&lt;br /&gt;
innodb_flush_neighbor_pages = cont&lt;br /&gt;
测试人描述：&lt;br /&gt;
采用淘宝版内核后，可以发现每个CPU都被用的比较满：(部分)&lt;br /&gt;
06:27:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle&lt;br /&gt;
06:27:27 PM  all   69.80    0.00   18.68    0.51    0.00    0.17    0.00    0.00   10.84&lt;br /&gt;
06:27:27 PM    0   74.75    0.00   17.17    0.00    0.00    0.00    0.00    0.00    8.08&lt;br /&gt;
06:27:27 PM    1   73.96    0.00   16.67    1.04    0.00    0.00    0.00    0.00    8.33&lt;br /&gt;
06:27:27 PM    2   73.20    0.00   17.53    1.03    0.00    0.00    0.00    0.00    8.25&lt;br /&gt;
06:27:27 PM    3   71.72    0.00   19.19    1.01    0.00    0.00    0.00    0.00    8.08&lt;br /&gt;
06:27:27 PM    4   71.43    0.00   18.37    1.02    0.00    0.00    0.00    0.00    9.18&lt;br /&gt;
06:27:27 PM    5   70.71    0.00   19.19    1.01    0.00    0.00    0.00    0.00    9.09&lt;/p&gt;
&lt;p&gt;这是个好现象，说明CPU被充分用起来了，在脏页未满之前，TPS可以比较稳定的维持在3000以上。但还是老问题，脏页一满，速度就下降，到测试结束时下降为2400。&lt;br /&gt;
&lt;a href=&quot;http://www.yupoo.com/photos/plinux/84222191/&quot; title=&quot;R510_2&quot;&gt;&lt;img src=&quot;http://pic.yupoo.com/plinux/BGH3jipn/q6QVk.jpg&quot; alt=&quot;R510_2&quot; width=&quot;530&quot; height=&quot;372&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;四、测试结论：&lt;/h2&gt;
&lt;p&gt;MySQL的调优与操作系统结合非常紧密，需要整体联动才能获得好的效果，InnoDB琐粒度较粗的缺陷，在代码实现简单的情况下，实际上对并发的影响不是很明显。&lt;br /&gt;
目前MySQL对高速硬件的利用主要缺陷是，不少常量写死，Checkpoint机制不完善，Checkpoint刷新脏页&amp;#8211;&amp;gt;InnoDB AIO队列&amp;#8211;&amp;gt;操作系统IO队列&amp;#8211;&amp;gt;存储设备，中间任何一环存在问题，都可能导致性能下降。&lt;br /&gt;
InnoDB AIO队列可以通过补丁开放参数设置，这个瓶颈已经消除。&lt;br /&gt;
操作系统IO队列可以通过淘宝的内核补丁将中断分散到每个核上处理来解决。&lt;br /&gt;
目前存在最大的问题就是Checkpoint刷新脏页的机制，仅仅依赖redo产生的速度，其实硬件IO还有很多余量，但InnoDB并不知道。&lt;br /&gt;
如果能限定一种机型，限定一种操作系统，在MySQL内获取操作系统报告的硬件状态，自适应的决策自己的行为，这样可以充分利用系统资源，例如IO util%并不高的时候，即使脏页还没到阈值，也可以加大刷新量，充分利用IO，这样可能系统根本就达不到脏页阈值，可以一直保持搞TPS，至少可以延缓TPS下降的趋势。&lt;br /&gt;
抖动问题则是Oracle和MySQL都存在的问题，扩展数据文件的瞬间必然导致TPS下降，淘宝丁奇的方法可以完美解决，Oracle也是类似的方法通过预先分配表空间文件解决。&lt;/p&gt;
&lt;h2&gt;五、测试缺陷：&lt;/h2&gt;
&lt;p&gt;测试CASE不全，没有在R910上测试5.5（虽然已经超了Oracle，但R910上应该还能猛一点），没有测试5.5多实例下可以获得何种性能，没有测试5.1在2.6.32内核下的表现，没有测试不同的页大小对InnoDB的影响。&lt;br /&gt;
没有稳定性测试，原版+多实例 属于稳定方案，其他改动是否100%不影响稳定，尚需测试。&lt;br /&gt;
在R910上的测试没有监控系统，也就没有图，坑爹了。&lt;/p&gt;
&lt;h2&gt;六、后续Action&lt;/h2&gt;
&lt;p&gt;在InnoDB控制刷赃页量的地方加入对系统diskstat的监控，当系统IO util%&lt;80%的时候，增加(IO_CAPACITY-当前系统IO数-redo计算的刷新量)个页的刷新，在系统不忙的时候提前加大刷新量，期望保持TPS稳定。&lt;/p&gt;
&lt;h2&gt;七、随意补充&lt;/h2&gt;
&lt;p&gt;为什么读为主的应用不用担心IO用不完？因为读操作是同步IO，一旦请求就被发送到磁盘，所以只要并发够多，总能把IO压爆。但是写为了加速，几乎所有数据库都是先写到内存，再异步写到磁盘，当然你要是搞最大保护模式，应该也是有数据库可以直接同步写磁盘的，但是对大部分数据库都是先写内存，再异步到磁盘，所以如果异步IO这里存在设计上的瓶颈，不管加多少并发，都是徒劳，内存一旦写满，链接线程就都堵住了，要等异步IO消化完才能继续，所以对于写为主的应用，这个CASE都是很有参考价值的。&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2010年12月6日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/percona_vs_mysql.html&quot; title=&quot;Percona对MySQL标准版本的改进&quot;&gt;Percona对MySQL标准版本的改进&lt;/a&gt; (3)&lt;/li&gt;&lt;li&gt;2010年01月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/xtradb_compile_error.html&quot; title=&quot;XtraDB 1.0.6-9编译错误的解决&quot;&gt;XtraDB 1.0.6-9编译错误的解决&lt;/a&gt; (0)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666109/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666109/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试，本想把MySQL调优到接近Oracle的性能即可，但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助（排名不分先后，仅按第一次...&lt;img src=&quot;http://www1.feedsky.com/t1/605666109/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666109/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Linux</category><category>Kernel</category><category>AIO</category><category>Percona</category><category>InnoDB</category><category>MySQL</category><category>XtraDB</category><category>数据库</category><pubDate>Mon, 23 Jan 2012 00:00:59 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1232</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666109/6226105</fs:itemid></item><item><title>在Server层实现Kill Idle Transaction</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666110/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/server_kill_idle_transaction.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;在上一篇文章里我们写了如何针对InnoDB清理空闲事务《&lt;a title=&quot;如何杀掉空闲事务&quot; href=&quot;http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html&quot; target=&quot;_blank&quot;&gt;如何杀掉空闲事务&lt;/a&gt;》，在@sleebin9 的提示下，这个功能不仅可以针对InnoDB，也可以用于所有MySQL的事务引擎。&lt;/p&gt;
&lt;p&gt;如何在Server层实现呢，sql/sql_parse.cc的do_command()函数是个好函数，连接线程会循环调用do_command()来读取并执行命令，在do_command()函数中，会调用my_net_set_read_timeout(net, thd-&gt;variables.net_wait_timeout)来设置线程socket连接超时时间，于是在这里可以下手。&lt;br /&gt;
主要代码：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p12307&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1230code7&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;830&lt;/span&gt;   &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
 831     This thread will do a blocking read from the client which
 832     will be interrupted when the next command is received from
 833     the client, the connection is closed or &amp;quot;net_wait_timeout&amp;quot;
 834     number of seconds has passed
 835   */&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;836&lt;/span&gt;   &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Add For Kill Idle Transaction By P.Linux */&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;837&lt;/span&gt;   &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;active_transaction&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;838&lt;/span&gt;   &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;839&lt;/span&gt;     &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_idle_timeout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;840&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;841&lt;/span&gt;       my_net_set_read_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;net, thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_idle_timeout&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;842&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_readonly_idle_timeout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_readonly_trx&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;843&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;844&lt;/span&gt;       my_net_set_read_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;net, thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_readonly_idle_timeout&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;845&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_changes_idle_timeout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;!&lt;/span&gt;thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_readonly_trx&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;846&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;847&lt;/span&gt;       my_net_set_read_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;net, thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;trx_changes_idle_timeout&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;848&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;849&lt;/span&gt;       my_net_set_read_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;net, thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;net_wait_timeout&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;850&lt;/span&gt;     &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;851&lt;/span&gt;   &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;852&lt;/span&gt;     my_net_set_read_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;net, thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;variables.&lt;span style=&quot;color: #007788;&quot;&gt;net_wait_timeout&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;853&lt;/span&gt;   &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
 &lt;span style=&quot;color: #0000dd;&quot;&gt;854&lt;/span&gt;   &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* End */&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;大家看明白了吗？其实这是偷梁换柱，本来在这里是要设置wait_timeout的，先判断线程是不是在事务里，就可以转而实现空闲事务的超时。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;    trx_idle_timeout 控制所有事务的超时，优先级最高&lt;br /&gt;
    trx_changes_idle_timeout 控制非只读事务的超时&lt;br /&gt;
    trx_readonly_idle_timeout 控制只读事务的超时&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;效果：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p12308&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1230code8&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;root@localhost : &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;none&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; 08:&lt;span style=&quot;color: #cc66cc;&quot;&gt;39&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;49&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;set&lt;/span&gt; autocommit &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; ;
Query OK&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; rows affected &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.00&lt;/span&gt; sec&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
root@localhost : &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;none&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; 08:&lt;span style=&quot;color: #cc66cc;&quot;&gt;39&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;56&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;set&lt;/span&gt; trx_idle_timeout &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;;
Query OK&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; rows affected &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.00&lt;/span&gt; sec&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
root@localhost : &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;none&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; 08:&lt;span style=&quot;color: #cc66cc;&quot;&gt;40&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;17&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;use&lt;/span&gt; perf 
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;Database&lt;/span&gt; changed
root@localhost : perf 08:&lt;span style=&quot;color: #cc66cc;&quot;&gt;40&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;insert&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;into&lt;/span&gt; perf &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;info &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'11'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
Query OK&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt; row affected &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.00&lt;/span&gt; sec&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
root@localhost : perf 08:&lt;span style=&quot;color: #cc66cc;&quot;&gt;40&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;26&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;select&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;from&lt;/span&gt; perf;
ERROR &lt;span style=&quot;color: #cc66cc;&quot;&gt;2006&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;HY000&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;: MySQL server has gone away
No connection&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt; Trying &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;to&lt;/span&gt; reconnect&lt;span style=&quot;color: #66cc66;&quot;&gt;...&lt;/span&gt;
Connection id:    &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;
Current &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;database&lt;/span&gt;: perf
&amp;nbsp;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----+------+&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; id &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; info &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----+------+&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;  &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; aaaa &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;  &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; aaaa &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; aaaa &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----+------+&lt;/span&gt;
&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt; rows &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;set&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.00&lt;/span&gt; sec&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;完整的patch这里下载：&lt;br /&gt;
Note: There is a file embedded within this post, please visit this post to download the file.&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2010年12月6日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/percona_vs_mysql.html&quot; title=&quot;Percona对MySQL标准版本的改进&quot;&gt;Percona对MySQL标准版本的改进&lt;/a&gt; (3)&lt;/li&gt;&lt;li&gt;2010年01月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/xtradb_compile_error.html&quot; title=&quot;XtraDB 1.0.6-9编译错误的解决&quot;&gt;XtraDB 1.0.6-9编译错误的解决&lt;/a&gt; (0)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666110/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666110/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/server_kill_idle_transaction.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/server_kill_idle_transaction.html 在上一篇文章里我们写了如...&lt;img src=&quot;http://www1.feedsky.com/t1/605666110/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666110/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Percona</category><category>InnoDB</category><category>patch</category><category>MySQL</category><category>kill_idle_transaction</category><category>XtraDB</category><category>数据库</category><pubDate>Fri, 23 Dec 2011 20:43:22 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/server_kill_idle_transaction.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1230</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/server_kill_idle_transaction.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666110/6226105</fs:itemid></item><item><title>如何杀掉空闲事务</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666111/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;我们经常遇到一个情况，就是网络断开或程序Bug导致COMMIT/ROLLBACK语句没有传到数据库，也没有释放线程，但是线上事务锁定等待严重，连接数暴涨，尤其在测试库这种情况很多，线上也偶有发生，于是想为MySQL增加一个杀掉空闲事务的功能。&lt;/p&gt;
&lt;p&gt;那么如何实现呢，通过MySQL Server层有很多不确定因素，最保险还是在存储引擎层实现，我们用的几乎都是InnoDB/XtraDB，所以就基于Percona来修改了，Oracle版的MySQL也可以照着修改。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需求：&lt;/strong&gt;&lt;br /&gt;
1. 一个事务启动，如果事务内最后一个语句执行完超过一个时间(innodb_idle_trx_timeout)，就应该关闭链接。&lt;br /&gt;
2. 如果事务是纯读事务，因为不加锁，所以无害，不需要关闭，保持即可。&lt;br /&gt;
虽然这个思路被Percona的指出Alexey Kopytov可能存在“Even though SELECT queries do not place row locks by default (there are exceptions), they can still block undo log records from being purged.”的问题，但是我们确实有场景SELECT是绝对不能kill的，除非之后的INSERT/UPDATE/DELETE发生了，所以我根据我们的业务特点来修改。&lt;br /&gt;
跟Percona的Yasufumi Kinoshita和Alexey Kopytov提出过纯SELECT事务不应被kill，但通过一个参数控制的方案还没有被Alexey Kopytov接受，作为通用处理我提出了用两个变量分别控制纯读事务的空闲超时时间和有锁事务的空闲超时时间，还在等待Percona的回复，因为这个方案还在测试，就先不开放修改了，当然如果你很熟悉MYSQL源码，我提出这个思路你肯定知道怎么分成这两个参数控制了。&lt;/p&gt;
&lt;p&gt;根据这两个需求我们来设计方法，首先想到这个功能肯定是放在InnoDB Master Thread最方便，Master Thread每秒调度一次，可以顺便检查空闲事务，然后关闭，因为在事务中操作trx-&gt;mysql_thd并不安全，所以一般来说最好在InnoDB层换成Thread ID操作，并且InnoDB中除了ha_innodb.cc，其他地方不能饮用THD，所以Master Thread中需要的线程数值，都需要在ha_innodb中计算好传递整型或布尔型返回值给master thread调用。&lt;br /&gt;
&lt;span id=&quot;more-1229&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;首先，我们要增加一个参数：idle_trx_timeout，它表示事务多久没有下一条语句发生就超时关闭。&lt;br /&gt;
在storage/innodb_plugin/srv/srv0srv.c的“&lt;strong&gt;/* plugin options */&lt;/strong&gt;”注释下增加如下代码注册idle_trx_timeout变量。&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122919&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code19&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; MYSQL_SYSVAR_LONG&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;idle_trx_timeout, srv_idle_trx_timeout,
  PLUGIN_VAR_RQCMDARG,
  &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;If zero then this function no effect, if no-zero then wait idle_trx_timeout seconds this transaction will be closed&amp;quot;&lt;/span&gt;,
  &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Seconds of Idle-Transaction timeout&amp;quot;&lt;/span&gt;,
  &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;LONG_MAX&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;代码往下找在innobase_system_variables结构体内加上：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122920&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code20&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;MYSQL_SYSVAR&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;idle_trx_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;有了这个变量，我们需要在Master Thread(storage/innodb_plugin/srv/srv0srv.c )中执行检测函数查找空闲事务。在loop循环的if (sync_array_print_long_waits(&amp;#038;waiter, &amp;#038;sema)判断后加上这段判断&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122921&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code21&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;    &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;srv_idle_trx_timeout &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; trx_sys&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
        trx_t&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;  trx&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;time_t&lt;/span&gt;  now&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
rescan_idle&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
        now &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;time&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        mutex_enter&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;kernel_mutex&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        trx &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; UT_LIST_GET_FIRST&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx_sys&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;mysql_trx_list&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 从当前事务列表里获取第一个事务&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 依次循环每个事务进行检查&lt;/span&gt;
            &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;conc_state &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; TRX_ACTIVE
                &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;mysql_thd
                &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; innobase_thd_is_idle&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;mysql_thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 如果事务还活着并且它的状态时空闲的&lt;/span&gt;
&amp;nbsp;
                ib_int64_t  start_time &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; innobase_thd_get_start_time&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;mysql_thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 获取线程最后一个语句的开始时间&lt;/span&gt;
                ulong       thd_id &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; innobase_thd_get_thread_id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;mysql_thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;#获取线程ID，因为存储引擎内直接操作THD不安全&lt;/span&gt;
&amp;nbsp;
                &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;last_stmt_start &lt;span style=&quot;color: #000040;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; start_time&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 如果事务最后语句起始时间不等于线程最后语句起始时间说明事务是新起的&lt;/span&gt;
                    trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;idle_start &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; now&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 更新事务的空闲起始时间&lt;/span&gt;
                    trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;last_stmt_start &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; start_time&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 更新事务的最后语句起始时间&lt;/span&gt;
                &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;difftime&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;now, trx&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;idle_start&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 如果事务不是新起的，已经执行了一部分则判断空闲时间有多长了&lt;/span&gt;
                       &lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; srv_idle_trx_timeout&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 如果空闲时间超过阈值则杀掉链接&lt;/span&gt;
                    &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* kill the session */&lt;/span&gt;
                    mutex_exit&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;kernel_mutex&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
                    thd_kill&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd_id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 杀链接&lt;/span&gt;
                    &lt;span style=&quot;color: #0000ff;&quot;&gt;goto&lt;/span&gt; rescan_idle&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
                &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
            trx &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; UT_LIST_GET_NEXT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;mysql_trx_list, trx&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 检查下一个事务&lt;/span&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
        mutex_exit&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;kernel_mutex&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;其中trx中的变量是新加的，在storage/innodb_plugin/include/trx0trx.h的trx_truct加上需要的变量：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122922&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code22&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;struct&lt;/span&gt; trx_struct&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
...
    &lt;span style=&quot;color: #0000ff;&quot;&gt;time_t&lt;/span&gt;      idle_start&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    ib_int64_t  last_stmt_start&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
...
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这里有几个函数是自定义的：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122923&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code23&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;ibool      innobase_thd_is_idle&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
ib_int64_t innobase_thd_get_start_time&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
ulong      innobase_thd_get_thread_id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这些函数在ha_innodb.cc中实现，需要在storage/innodb_plugin/srv/srv0srv.c头文件定义下加上这些函数的引用形势。&lt;/p&gt;
&lt;p&gt;然后在storage/innodb_plugin/handler/ha_innodb.cc 中定义这些函数的实现：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122924&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code24&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;
ibool
innobase_thd_is_idle&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;    &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*!&amp;lt; in: thread handle (THD*) */&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; THD&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;command &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; COM_SLEEP&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;
ib_int64_t
innobase_thd_get_start_time&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;    &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*!&amp;lt; in: thread handle (THD*) */&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ib_int64_t&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; THD&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;start_time&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;
ulong
innobase_thd_get_thread_id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;thd_get_thread_id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; THD&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; thd&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;还有最重要的thd_kill函数负责杀线程的，在sql/sql_class.cc中，找个地方定义这个函数：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122925&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code25&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; thd_kill&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;ulong id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
    THD &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;tmp&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    VOID&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;pthread_mutex_lock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;LOCK_thread_count&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    I_List_iterator&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;THD&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; it&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;threads&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt;it&lt;span style=&quot;color: #000040;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;command &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; COM_DAEMON &lt;span style=&quot;color: #000040;&quot;&gt;||&lt;/span&gt; tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_have_lock_thd &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339900;&quot;&gt;# 如果是DAEMON线程和不含锁的线程就不要kill了&lt;/span&gt;
            &lt;span style=&quot;color: #0000ff;&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;thread_id &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
            pthread_mutex_lock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;LOCK_thd_data&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #0000ff;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
    VOID&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;pthread_mutex_unlock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;LOCK_thread_count&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
        tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;awake&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;THD&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;KILL_CONNECTION&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
        pthread_mutex_unlock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;tmp&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;LOCK_thd_data&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;为了存储引擎能引用到这个函数，我们要把它定义到plugin中：&lt;br /&gt;
include/mysql/plugin.h和include/mysql/plugin.h中加上&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122926&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code26&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; thd_kill&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;long&lt;/span&gt; id&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;如何判定线程的is_have_lock_thd值？首先在THD中加上这个变量（sql/sql_class.cc）：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122927&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code27&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; THD &lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; Statement,
           &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; Open_tables_state
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
....
  &lt;span style=&quot;color: #007788;&quot;&gt;uint16&lt;/span&gt;    is_have_lock_thd&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
....
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;然后在&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;的必经之路mysql_execute_command拦上一刀，判断是有锁操作发生了还是事务提交或新起事务。&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122928&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1229code28&quot;&gt;&lt;pre class=&quot;cpp&quot; style=&quot;font-family:monospace;&quot;&gt;  &lt;span style=&quot;color: #0000ff;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;lex&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;sql_command&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_REPLACE&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_REPLACE_SELECT&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_UPDATE&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_UPDATE_MULTI&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_DELETE&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_DELETE_MULTI&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_INSERT&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_INSERT_SELECT&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
      thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_have_lock_thd &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #0000ff;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_COMMIT&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_ROLLBACK&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_START&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_END&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_PREPARE&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_COMMIT&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_ROLLBACK&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
  &lt;span style=&quot;color: #0000ff;&quot;&gt;case&lt;/span&gt; SQLCOM_XA_RECOVER&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;
      thd&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_have_lock_thd &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #0000ff;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;为了尽可能兼容Percona的补丁，能引用的都引用了Percona的操作，有些函数调用是在层次太多看不下去了就简化了。&lt;br /&gt;
另外还有一个版本是我自己弄的，在THD中增加了一个last_sql_end_time，在do_command结束后更新last_sql_end_time，然后在事务中拿到THD查看last_sql_end_time就可以得出idle时间，Oracle版我还是建议这么做，不要去改trx_struct结构体了，那个感觉更危险。&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年02月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/diy_multi_master_replication.html&quot; title=&quot;自己动手实现Multi-Master Replication&quot;&gt;自己动手实现Multi-Master Replication&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666111/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666111/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html 我们经常遇到一个情况，就是网络...&lt;img src=&quot;http://www1.feedsky.com/t1/605666111/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666111/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Percona</category><category>MySQL</category><category>数据库</category><pubDate>Tue, 29 Nov 2011 01:01:19 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1229</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/how_to_kill_idle_trx.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666111/6226105</fs:itemid></item><item><title>MySQL的timeout那点事</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666112/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/mysql_timeout.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;因为最近遇到一些超时的问题，正好就把所有的timeout参数都理一遍，首先数据库里查一下看有哪些超时：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122731&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1227code31&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;root@localhost : test &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;55&lt;/span&gt;:&lt;span style=&quot;color: #cc66cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;show&lt;/span&gt; global &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;variables&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;like&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;%timeout%&amp;quot;&lt;/span&gt;;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----------------------------+--------+&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; Variable_name              &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; Value  &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----------------------------+--------+&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; connect_timeout            &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; delayed_insert_timeout     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;300&lt;/span&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; innodb_lock_wait_timeout   &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;120&lt;/span&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; innodb_rollback_on_timeout &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;ON&lt;/span&gt;     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; interactive_timeout        &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;172800&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; net_read_timeout           &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;30&lt;/span&gt;     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; net_write_timeout          &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;60&lt;/span&gt;     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; slave_net_timeout          &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;3600&lt;/span&gt;   &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; table_lock_wait_timeout    &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;50&lt;/span&gt;     &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; # 这个参数已经没用了
&lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; wait_timeout               &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;172800&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;|&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;----------------------------+--------+&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;我们一个个来看&lt;/p&gt;
&lt;h2&gt;connect_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述:&lt;/strong&gt;&lt;br /&gt;
The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds as of MySQL 5.1.23 and 5 seconds before that.&lt;br /&gt;
Increasing the connect_timeout value might help if clients frequently encounter errors of the form Lost connection to MySQL server at &amp;#8216;XXX&amp;#8217;, system error: errno.&lt;br /&gt;
&lt;strong&gt;解释：在获取链接时，等待握手的超时时间，只在登录时有效，登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快，一般默认即可。&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;delayed_insert_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
How many seconds an INSERT DELAYED handler thread should wait for INSERT statements before terminating.&lt;br /&gt;
&lt;strong&gt;解释：这是为MyISAM INSERT DELAY设计的超时参数，在INSERT DELAY中止前等待INSERT语句的时间。&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;innodb_lock_wait_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
The timeout in seconds an InnoDB transaction may wait for a row lock before giving up. The default value is 50 seconds. A transaction that tries to access a row that is locked by another InnoDB transaction will hang for at most this many seconds before issuing the following error:&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122732&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1227code32&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;ERROR &lt;span style=&quot;color: #cc66cc;&quot;&gt;1205&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;HY000&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;: &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;Lock&lt;/span&gt; wait timeout exceeded; try restarting transaction&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When a lock wait timeout occurs, the current statement is not executed. The current transaction is not rolled back. (To have the entire transaction roll back, start the server with the &amp;#8211;innodb_rollback_on_timeout option, available as of MySQL 5.1.15. See also Section 13.6.12, “InnoDB Error Handling”.)&lt;br /&gt;
innodb_lock_wait_timeout applies to InnoDB row locks only. A MySQL table lock does not happen inside InnoDB and this timeout does not apply to waits for table locks.&lt;br /&gt;
InnoDB does detect transaction deadlocks in its own lock table immediately and rolls back one transaction. The lock wait timeout value does not apply to such a wait.&lt;br /&gt;
For the built-in InnoDB, this variable can be set only at server startup. For InnoDB Plugin, it can be set at startup or changed at runtime, and has both global and session values.&lt;br /&gt;
&lt;strong&gt;解释：描述很长，简而言之，就是事务遇到锁等待时的Query超时时间。跟死锁不一样，InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务，锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源，被回滚的肯定是请求锁的那个Query。&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;innodb_rollback_on_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
In MySQL 5.1, InnoDB rolls back only the last statement on a transaction timeout by default. If &amp;#8211;innodb_rollback_on_timeout is specified, a transaction timeout causes InnoDB to abort and roll back the entire transaction (the same behavior as in MySQL 4.1). This variable was added in MySQL 5.1.15.&lt;br /&gt;
&lt;strong&gt;解释：这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query，打开的话事务遇到超时就回滚整个事务。&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;interactive_timeout/wait_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See also&lt;br /&gt;
&lt;strong&gt;解释：一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为acrivity状态，执行完Query后成为interactive状态，重新开始计时。wait_timeout不同在于只作用于TCP/&lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt;和Socket链接的线程，意义是一样的。&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;net_read_timeout / net_write_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
The number of seconds to wait for more data from a connection before aborting the read. Before MySQL 5.1.41, this timeout applies only to TCP/&lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt; connections, not to connections made through Unix socket files, named pipes, or shared memory. When the server is reading from the client, net_read_timeout is the timeout value controlling when to abort. When the server is writing to the client, net_write_timeout is the timeout value controlling when to abort. See also slave_net_timeout.&lt;br /&gt;
On Linux, the NO_ALARM build flag affects timeout behavior as indicated in the description of the net_retry_count system variable.&lt;br /&gt;
&lt;strong&gt;解释：这个参数只对TCP/&lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt;链接有效，分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间，这是在Activity状态下的线程才有效的参数&lt;/strong&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;slave_net_timeout&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;手册描述：&lt;/strong&gt;&lt;br /&gt;
The number of seconds to wait for more data from the master before the slave considers the connection broken, aborts the read, and tries to reconnect. The first retry occurs immediately after the timeout. The interval between retries is controlled by the MASTER_CONNECT_RETRY option for the CHANGE MASTER TO statement or &amp;#8211;master-connect-retry option, and the number of reconnection attempts is limited by the &amp;#8211;master-retry-count option. The default is 3600 seconds (one hour).&lt;br /&gt;
&lt;strong&gt;解释：这是Slave判断主机是否挂掉的超时设置，在设定时间内依然没有获取到Master的回应就人为Master挂掉了&lt;/strong&gt;&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年02月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/diy_multi_master_replication.html&quot; title=&quot;自己动手实现Multi-Master Replication&quot;&gt;自己动手实现Multi-Master Replication&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666112/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666112/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/mysql_timeout.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/mysql_timeout.html 因为最近遇到一些超时的问题，正好就...&lt;img src=&quot;http://www1.feedsky.com/t1/605666112/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666112/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>MySQL</category><category>timeout</category><category>数据库</category><pubDate>Thu, 24 Nov 2011 13:39:20 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/mysql_timeout.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1227</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/mysql_timeout.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666112/6226105</fs:itemid></item><item><title>在NUMA处理器绑定多实例到固定核心</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666113/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/mysql_multi_using_numactl.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;另发在：&lt;a href=&quot;http://www.mysqlops.com/2011/07/01/mysql_multi_using_numactl.html&quot;&gt;http://www.mysqlops.com/2011/07/01/mysql_multi_using_numactl.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;关于NUMA的介绍我这里就不多说了，网上太多资料了，我在这篇文章要介绍的是如何在MySQL多实例场景下使用numactl来绑定各个实例到具体的物理节点上，避免跨节点分配内存和跨节点访问寄存器。&lt;/p&gt;
&lt;p&gt;至于为何使用多实例，因为MySQL对于多处理机和大内存的利用效率不佳，采用多实例可以很大程度提高MySQL对资源的利用，详情可以看Percona的白皮书中对多实例的测试：&lt;a href=&quot;http://www.percona.com/redir/files/white-papers/scaling-multiple-mysql-percona-server-virident.pdf&quot;&gt;Scaling MySQL With Virident Flash Drives and Multiple Instances of Percona Server&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;numactl这个程序的用法可以参照man手册：&lt;a href=&quot;http://linux.die.net/man/8/numactl&quot;&gt;http://linux.die.net/man/8/numactl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本用法是“numactl  [option] 程序路径”，例如我希望用numactl启动mysqld则是numactl  [option] /usr/local/mysql/bin/mysqld。曾经我误以为numactl是控制某一个程序名，汗……亲手做过才明白是程序路径。&lt;/p&gt;
&lt;p&gt;我只介绍几个重要参数&lt;br /&gt;
&amp;#8211;interleave=all 这是使用交叉分配模式启动一个程序，也就是说程序可以随意跨节点用其他节点的内存，传说中这是效率最高的关闭NUMA特性的方法，只是传说。&lt;br /&gt;
&amp;#8211;cpunodebind=node 这是把程序绑定在指定的node节点上运行，即使另一个物理节点是idle的，也不会去使用。&lt;br /&gt;
&amp;#8211;localalloc 严格控制只在节点内分配内存，禁止分配其他节点下的内存到当前节点运行的程序。&lt;/p&gt;
&lt;p&gt;我们启动MySQL希望的参数是 &lt;strong&gt;numactl &amp;#8211;cpunodebind=node &amp;#8211;localalloc mysqld_path&lt;/strong&gt;&lt;br /&gt;
为了运维方便，我不可能每次mysql启动都这么执行，我依然希望通过/etc/init.d/mysql和mysqld_multi来管理mysql启动和关闭，于是我采用自定义启动脚本的方式。&lt;/p&gt;
&lt;p&gt;首先编写自定义启动脚本如下：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122335&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1223code35&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!/bin/sh&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# Program Path&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;NUMACTL&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; numactl&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;MYSQLD&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;alibaba&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;mysql&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;libexec&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;mysqld
&lt;span style=&quot;color: #007800;&quot;&gt;PS&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ps&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;GREP&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;CUT&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;cut&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;WC&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;EXPR&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;which&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;expr&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# Variables&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;CPU_BIND&lt;/span&gt;=&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$NUMACTL&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;--show&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$GREP&lt;/span&gt; nodebind &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$CUT&lt;/span&gt; -d: &lt;span style=&quot;color: #660033;&quot;&gt;-f2&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt;   &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# CPU bins list&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;CPU_BIND_NUM&lt;/span&gt;=&lt;span style=&quot;color: #800000;&quot;&gt;${#CPU_BIND[@]}&lt;/span&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# How many CPU binds&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;MYSQLD_NUM&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$PS&lt;/span&gt; aux &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$GREP&lt;/span&gt; mysqld &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$GREP&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-v&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;grep&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$GREP&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'\&amp;lt;mysqld\&amp;gt;'&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$WC&lt;/span&gt; -l&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;MYSQLD_NUM&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$EXPR&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$MYSQLD_NUM&lt;/span&gt; + &lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;BIND_NO&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$EXPR&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$MYSQLD_NUM&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$CPU_BIND_NUM&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# Calc Which CPU to Bind&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# echo CMD&lt;/span&gt;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$NUMACTL&lt;/span&gt; --cpunodebind=&lt;span style=&quot;color: #007800;&quot;&gt;$BIND_NO&lt;/span&gt; --localalloc &lt;span style=&quot;color: #007800;&quot;&gt;$MYSQLD&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;tmp&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;mysqld.&lt;span style=&quot;color: #007800;&quot;&gt;$MYSQLD_NUM&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# use exec to avoid having an extra shell around.&lt;/span&gt;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;exec&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$NUMACTL&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;--cpubind&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$BIND_NO&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;--localalloc&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$MYSQLD&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;$@&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;方法是查看当前有多少个mysqld进程已经存在，并且通过numactl &amp;#8211;show判断有多少个物理节点，从而判断当前的进程应该分配给哪个节点，例如有2个物理节点，没有mysqld进程，则分配当前进程到0节点，再启动一个实例，当前已经有1个mysqld进程，则分配到1节点，再启动一个实例到0节点……依次循环。&lt;/p&gt;
&lt;p&gt;然后在my.cnf文件中配置使用我们自己的脚本启动：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122336&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1223code36&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt;mysqld_safe&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;
......
&lt;span style=&quot;color: #007800;&quot;&gt;ledir&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;local&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;mysql&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# 放自定义脚本的目录&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;mysqld&lt;/span&gt;=mysqld_using_numactl &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# 自定义脚本的名称&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;然后再用/etc/init.d/mysql或mysqld_multi启动mysqld进程就可以实现绑定了。&lt;br /&gt;
你可以先启动一个实例，然后在MySQL里做一些消耗CPU的操作，可以观察到只有一个物理节点上的core有活动，哪怕这个节点的core全是100%的利用率，另一个节点的core也全部都是闲的~&lt;/p&gt;
&lt;p&gt;有兴趣的话赶紧尝试一下吧~&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;随机显示文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2010年05月25日 -- &lt;a href=&quot;http://www.penglixun.com/life/diary/quality_of_life.html&quot; title=&quot;我的生活品质&quot;&gt;我的生活品质&lt;/a&gt; (7)&lt;/li&gt;&lt;li&gt;2009年09月29日 -- &lt;a href=&quot;http://www.penglixun.com/life/diary/add_some_stat_plug.html&quot; title=&quot;加了几个统计插件&quot;&gt;加了几个统计插件&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2009年10月26日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/mysql_show_index_cardinality.html&quot; title=&quot;MySQL里执行SHOW INDEX结果中Cardinality的含义&quot;&gt;MySQL里执行SHOW INDEX结果中Cardinality的含义&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666113/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666113/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/mysql_multi_using_numactl.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/mysql_multi_using_numactl.html 另发在：http://www.mysqlops.com/2011/...&lt;img src=&quot;http://www1.feedsky.com/t1/605666113/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666113/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>NUMA</category><category>mysqld_multi</category><category>数据库</category><category>numactl</category><pubDate>Fri, 01 Jul 2011 20:18:00 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/mysql_multi_using_numactl.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1223</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/mysql_multi_using_numactl.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666113/6226105</fs:itemid></item><item><title>如果可以，我们一起留在宜春</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666114/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/life/feeling/love_hometown_yichun.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;不要那些所谓的理想      不要那些所谓的奋斗&lt;/p&gt;
&lt;p&gt;不想去英国、美国，读书留学      不想去上海、北京，打拼奋斗&lt;/p&gt;
&lt;p&gt;就一起留在我们熟悉的城市&lt;/p&gt;
&lt;p&gt;每一条街道都能叫出名字    每一个邻居都认识&lt;/p&gt;
&lt;p&gt;想打个麻将，唱个歌&lt;/p&gt;
&lt;p&gt;一个电话，半个小时&lt;/p&gt;
&lt;p&gt;人就聚齐了&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;无聊了一起去南昌玩一趟&lt;/p&gt;
&lt;p&gt;开个车三四个小时就到江西首府了&lt;/p&gt;
&lt;p&gt;过年过节几个朋友窜窜门吃顿饭&lt;/p&gt;
&lt;p&gt;谁要是不来，打个车几分钟就到他家门口&lt;/p&gt;
&lt;p&gt;直接拖出来&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;嘴馋的时候&lt;/p&gt;
&lt;p&gt;满大街吃美味的小吃&lt;/p&gt;
&lt;p&gt;或者到鼓楼、到麻辣大王，吃个烧烤&lt;/p&gt;
&lt;p&gt;水果出来的季节&lt;/p&gt;
&lt;p&gt;到白马农庄摘草莓&lt;/p&gt;
&lt;p&gt;都是一箱一箱的买&lt;/p&gt;
&lt;p&gt;因为便宜又好吃&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;周末的时候还能骑车满世界转悠&lt;/p&gt;
&lt;p&gt;心血来潮就去明月山&lt;/p&gt;
&lt;p&gt;不好就去袁山&lt;/p&gt;
&lt;p&gt;找个野山，带着烧烤架&lt;/p&gt;
&lt;p&gt;美滋美滋的自助烧烤&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;冬天的时候一起堆雪人&lt;/p&gt;
&lt;p&gt;夏天去秀江游个泳&lt;/p&gt;
&lt;p&gt;累了就随便找个KTV、棋牌室、桌游社呼朋唤友&lt;/p&gt;
&lt;p&gt;打打麻将，斗斗地主    输赢都在这个圈子&lt;/p&gt;
&lt;p&gt;每个人我们都熟悉    知根知底&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;等我们工作了&lt;/p&gt;
&lt;p&gt;没有那么大的压力&lt;/p&gt;
&lt;p&gt;不用天天加班到10点&lt;/p&gt;
&lt;p&gt;不用没有节假日&lt;/p&gt;
&lt;p&gt;不用周周出差&lt;/p&gt;
&lt;p&gt;只要8点上班，5点下班&lt;/p&gt;
&lt;p&gt;不想做饭了就找个哥们家蹭顿饭&lt;/p&gt;
&lt;p&gt;饭后可以不用洗碗&lt;/p&gt;
&lt;p&gt;还可以一起散散步&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;看着朋友结婚，每个人的婚礼都能参加&lt;/p&gt;
&lt;p&gt;等我们有了孩子&lt;/p&gt;
&lt;p&gt;我们要让他们也天天在一起玩&lt;/p&gt;
&lt;p&gt;让我们成为世交他们也成为世交&lt;/p&gt;
&lt;p&gt;礼拜天领着他们去森林公园&lt;/p&gt;
&lt;p&gt;他们看植物，我们看他们&lt;/p&gt;
&lt;p&gt;让他干爹干妈一大堆&lt;/p&gt;
&lt;p&gt;过年压岁钱多的拿不了&lt;/p&gt;
&lt;p&gt;让他一出生就学普通话&lt;/p&gt;
&lt;p&gt;而不是一出生周围就是不知道哪个地方的方言或者英语&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果可以，我们一起留在宜春&lt;/p&gt;
&lt;p&gt;等我们老了可以天天有人陪着&lt;/p&gt;
&lt;p&gt;走不动了还可以打麻将&lt;/p&gt;
&lt;p&gt;商量着什么时候再去趟宜春中学&lt;/p&gt;
&lt;p&gt;什么时候再爬趟明月山&lt;/p&gt;
&lt;p&gt;什么时候再去鼓楼吃小吃&lt;/p&gt;
&lt;p&gt;什么时候再……&lt;/p&gt;
&lt;p&gt;把年轻的事情都再做一遍&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果……如果……如果可以……&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;随机显示文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2011年01月19日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/mysql_some_tips_part_1.html&quot; title=&quot;MySQL小技巧问答(一)&quot;&gt;MySQL小技巧问答(一)&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2009年05月24日 -- &lt;a href=&quot;http://www.penglixun.com/tech/system/tuning_redhat_enterprise_linux_in_ibm_system_x_server.html&quot; title=&quot;RedHat Enterprise Linux在IBM System x服务器上的调优&quot;&gt;RedHat Enterprise Linux在IBM System x服务器上的调优&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2009年12月8日 -- &lt;a href=&quot;http://www.penglixun.com/tech/system/fix_nginx_502_bad_gateway.html&quot; title=&quot;Nginx的502错误&quot;&gt;Nginx的502错误&lt;/a&gt; (0)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666114/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666114/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/life/feeling/love_hometown_yichun.html/feed</wfw:commentRss><slash:comments>11</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/life/feeling/love_hometown_yichun.html 如果可以，我们一起留在宜春 不要...&lt;img src=&quot;http://www1.feedsky.com/t1/605666114/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666114/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>心灵感触</category><category>Hometown</category><pubDate>Mon, 06 Jun 2011 21:26:50 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/life/feeling/love_hometown_yichun.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1222</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/life/feeling/love_hometown_yichun.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666114/6226105</fs:itemid></item><item><title>MySQL中创建及优化索引组织结构的思路</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666115/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/think_about_mysql_create_and_optimize_index.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;原文链接：&lt;a href=&quot;http://www.mysqlops.com/2011/05/23/mysql%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%8F%8A%E4%BC%98%E5%8C%96%E7%B4%A2%E5%BC%95%E7%BB%84%E7%BB%87%E7%BB%93%E6%9E%84%E7%9A%84%E6%80%9D%E8%B7%AF.html&quot;&gt;http://www.mysqlops.com/2011/05/23/mysql%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%8F%8A%E4%BC%98%E5%8C%96%E7%B4%A2%E5%BC%95%E7%BB%84%E7%BB%87%E7%BB%93%E6%9E%84%E7%9A%84%E6%80%9D%E8%B7%AF.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;【导读】&lt;br /&gt;
通过一个实际生产环境中的数据存取需求，分析如何设计此存储结构，如何操纵存储的数据，以及如何使操作的成本或代价更低，系统开销最小。同时，让更多初学者明白数据存储的表上索引是如何一个思路组织起来的，希望起到一个参考模板的价值作用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试用例描述&lt;/strong&gt;&lt;br /&gt;
测试用例为B2C领域，一张用于存储用户选购物品而生成的产品订单信息表，不过去掉一些其他字段，以便用于测试，其表中的数据项也不特别描述，字段意思见表&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122039&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1220code39&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;USE&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;`test`&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DROP&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;TABLE&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;EXISTS&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;`test`&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;`goods_order`&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;TABLE&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;`goods_order`&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`order_id`&lt;/span&gt;        INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;      &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;             COMMENT ‘订单单号’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`goods_id`&lt;/span&gt;        INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;      &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘商品款号’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`order_type`&lt;/span&gt;      TINYINT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘订单类型’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`order_status`&lt;/span&gt;    TINYINT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘订单状态’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`color_id`&lt;/span&gt;        SMALLINT  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘颜色id’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`size_id`&lt;/span&gt;         SMALLINT  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘尺寸id’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`goods_number`&lt;/span&gt;    MEDIUMINT  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘数量’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`depot_id`&lt;/span&gt;        INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘仓库id’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`packet_id`&lt;/span&gt;       INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt;  &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;′ COMMENT ‘储位code’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`gmt_create`&lt;/span&gt;      TIMESTAMP     &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’0000&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;00&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;00 00:00:00′ COMMENT ‘添加时间’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;`gmt_modify`&lt;/span&gt;      TIMESTAMP     &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; ’0000&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;00&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;00 00:00:00′ COMMENT ‘更新时间’&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;PRIMARY&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;KEY&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;order_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;`goods_id`&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;ENGINE&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;InnoDB &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt; CHARACTER &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; ‘utf8′ COLLATE ‘utf8_general_ci’;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;其中，主键信息：PRIMARY KEY(order_id,`goods_id`)，为何主键索引索引字段的顺序为：order_id,`goods_id`，而不是： `goods_id`, order_id呢？原因很简单，goods_id在订单信息表中的重复率会比order_id高，也即order_id的筛选率更高，可以减少扫描索引记录个数，从而达到更高的效率，同时，下面即将会列出的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;也告诉我们，有部分&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句的WHERE字句中只出现order_id字段，为此更加坚定我们必须把字段：order_id作为联合主键索引的头部，`goods_id`为联合主键索引的尾部。&lt;/p&gt;
&lt;p&gt;数据存储表设计的小结：&lt;br /&gt;
设计用于存储数据的表结构，首先要知道有哪些数据项，也即行内常说的数据流，以及各个数据项的属性，比如存储的数据类型、值域范围及长度、数据完整性等要求，从而确定数据项的属性定义。存储的数据项信息确定之后，至少进行如下三步分析：&lt;br /&gt;
l  首先，确定哪些数据项或组合，可以作为记录的唯一性标志；&lt;br /&gt;
l  其次，要确定对数据记录有哪些操作，每个操作的频率如何，对网站等类型应用，还需要区分前台操作和后台操作，也即分外部用户的操作，还是内部用户的操作；&lt;br /&gt;
l  最后，对作为数据记录操作的条件部分的数据项，分析其数据项的筛选率如何，也即数据项不同值占总数据记录数的比例关心，比例越接近1则是筛选率越好，以及各个值得分布率；&lt;br /&gt;
综上所述，再让数据修改性操作优先级别高于只读性操作，就可以创建一个满足要求且性能较好的索引组织结构。&lt;br /&gt;
数据的存取设计,就涉及一块非常重要的知识: 关系数据库的基础知识和关系数据理论的范式。对于范式的知识点，特别解释下，建议学到BCNF范式为止，1NF、2NF、3NF和BCNF之间的差别，各自规避的问题、存在的缺陷都要一清二楚，但是在真实的工作环境中，不要任何存取设计都想向范式靠，用一句佛语准确点表达：空即是色，色即是空。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用于生成测试数据的存储过程代码&lt;/strong&gt;&lt;br /&gt;
创建索引，就离不开表存储的真实数据，为此编写一个存储过程近可能模拟真实生产环境中的数据，同时也方便大家使用此存储过程，在自己的测试环境中，真实感受验证，&lt;br /&gt;
存储过程代码：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p122040&quot;&gt;&lt;td class=&quot;code&quot; id=&quot;p1220code40&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;DELIMITER $$
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DROP&lt;/span&gt; PROCEDURE &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;EXISTS&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;`usp_make_data`&lt;/span&gt; $$
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; PROCEDURE &lt;span style=&quot;color: #ff0000;&quot;&gt;`usp_make_data`&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
BEGIN
DECLARE iv_goods_id INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;
DECLARE iv_depot_id INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;
DECLARE iv_packet_id INT &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;UNSIGNED&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DEFAULT&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;
&amp;nbsp;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_goods_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5000&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;20&lt;/span&gt;;
&amp;nbsp;
WHILE iv_goods_id&amp;amp;gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;
DO
START  TRANSACTION;
WHILE iv_depot_id&amp;amp;gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;
DO
WHILE iv_packet_id&amp;amp;gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;
DO
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;INSERT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;INTO&lt;/span&gt; goods_order&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;order_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;goods_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;order_type&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;order_status&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;color_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;size_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;goods_number&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;gmt_create&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;gmt_modify&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;VALUES&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;iv_goods_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;%2&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;
iv_depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt;iv_packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;DATE_ADD&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;NOW&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;INTERVAL &lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; DAY&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;DATE_ADD&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;NOW&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;INTERVAL &lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;SUBSTRING&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;RAND&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; DAY&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;iv_packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;;
END WHILE;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_packet_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;20&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;iv_depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;;
END WHILE ;
&amp;nbsp;
COMMIT;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_depot_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; iv_goods_id&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;iv_goods_id&lt;span style=&quot;color: #66cc66;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;;
END WHILE ;
END $$
DELIMITER ;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;业务逻辑描述&lt;/strong&gt;&lt;br /&gt;
l  非注册用户，或网站的注册用户不登陆，都能可选购买物品，生成订单号对应的用户UID为系统默认的；&lt;br /&gt;
l  订单与用户UID关联、描述等信息，存储其它的表中，通过订单号的模式关联；&lt;br /&gt;
l  用户的订单信息，在未付款之前都可以再修改，付款之后则无法修改；&lt;br /&gt;
l  已经付费的订单信息，自动发送到物流部门，进行后续工序的操作。处理完毕之后，会更新订单中涉及物品的存储位置信息；&lt;br /&gt;
l  定期读取部分数据到数据仓库分析系统，用于统计分析；&lt;br /&gt;
l  个人订单查询，前后台都有；&lt;br /&gt;
l  购物记录查询显示；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根据业务规则描述需要使用操纵数据的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句&lt;/strong&gt;&lt;br /&gt;
(1).      EXPLAIN SELECT * FROM goods_order WHERE `order_id`=40918986;&lt;br /&gt;
(2).      SELECT * FROM goods_order WHERE `order_id` IN (40918986,40717328,30923040…) ORDER BY gmt_modify DESC;&lt;br /&gt;
(3).      UPDATE goods_order SET gmt_modify=NOW(),…. WHERE  `order_id`=40717328 AND goods_id=4248;&lt;br /&gt;
(4).      SELECT COUNT(*) FROM goods_order WHERE depot_id=0 ORDER BY gmt_modify DESC LIMIT 0,50;&lt;br /&gt;
(5).      SELECT * FROM goods_order WHERE depot_id=6 AND packet_id=0 ORDER BY gmt_modify DESC LIMIT 0,50;&lt;br /&gt;
(6).      SELECT COUNT(*) FROM goods_order WHERE goods_id=4248 AND order_status=0 AND order_type=1&lt;br /&gt;
(7).      SELECT * FROM goods_order WHERE goods_id=4248 AND order_status=0 AND order_type=1 ORDER BY gmt_modify DESC LIMIT 0,50;&lt;br /&gt;
(8).      SELECT * FROM goods_order WHERE gmt_modify&amp;gt;=’ 2011-04-06’;&lt;br /&gt;
8条&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句按触发其执行的用户分类：&lt;br /&gt;
l   前台用户点击触发的操作而会执行的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句为：(1)、(2)、(3)；&lt;br /&gt;
l   后台内部用户点击触发的操作而会执行的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句为：(1)、(2)、(3)、(4)、(5)、(6)、(7)；&lt;br /&gt;
l   后台系统自动定期执行：(4)、(5)、(6)、(7)，工作时间正常情况每隔15分钟执行一次，以检查是否有已付款而没有准备货物的订单、是否有收款而未发货的订单等;&lt;br /&gt;
l  统计分析系统定期导出数据而执行的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句为：(8)，频率为每24小时一次；&lt;br /&gt;
我们再分析上述列出来的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;，分为2类，一类是读操作的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;（备注：SELECT操作），另外一类为修改性操作（备注：UPDATE、DELETE操作），分别如下：&lt;br /&gt;
SELECT 的WHERE子句、GROUP BY子、ORDER BY 子句和HAVING 子句中，出现的字段：&lt;br /&gt;
(1).      order_id&lt;br /&gt;
(2).      order_id+gmt_modify&lt;br /&gt;
(3).      depot_id+gmt_modify&lt;br /&gt;
(4).      depot_id+packet_id+gmt_modify&lt;br /&gt;
(5).      goods_id+order_status+order_type&lt;br /&gt;
(6).      goods_id+order_status+order_type+gmt_modify&lt;br /&gt;
(7).      gmt_modify&lt;br /&gt;
修改性操作的WHERE子句中出现的条件字段：&lt;br /&gt;
(8).     order_id+ goods_id&lt;/p&gt;
&lt;p&gt;我们已经存在主键索引：PRIMARY KEY(order_id,`goods_id`)，另外考虑到此表数据的操作以SELECT和INSERT为主，UPDATE的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;量其次，再根据上述&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句，为此我们可以初步确定需要创建的索引：&lt;br /&gt;
ALTER TABLE goods_order&lt;br /&gt;
ADD INDEX idx_goodsID_orderType_orderStatus_gmtmodify(goods_id,order_type,order_status,gmt_modify),&lt;br /&gt;
ADD INDEX idx_depotID_packetID_gmtmodify(depot_id,packet_id,gmt_modify);&lt;/p&gt;
&lt;p&gt;总结：&lt;br /&gt;
文章中也分析了为何联合主键索引的顺序为：order_id,`goods_id`，再补充下作为主键的联合索引的字段属性的其他特性：字段值写入之后不变化、字段值长度短且最好为数值类型；&lt;br /&gt;
对于编号&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;：(8)，每天按更新日期读取一次数据的操作，以采用全表扫描的方式实现，牺牲其数据读取的性能，以减少更新字段修改日期的值而带来的索引维护开销；&lt;br /&gt;
对于编号&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;：(4)、(5)，考虑到每次都是读取最新的５０条记录，以及读取的数据基本上可肯定为热数据，为此不得不牺牲其中一条&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;的数据读取性能，而少创建一个联合索引，从而减少维护索引字段的IO量；&lt;br /&gt;
对于编号&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;：(6)、(7)，创建的联合索引，需要特别注意联合索引：idx_goodsID_orderType_orderStatus_gmtmodify(goods_id,order_type,order_status,gmt_modify)中的字段顺序，其中：&lt;br /&gt;
l   goods_id字段的筛选率高于order_type,order_status，另外gmt_modify字段只出现在ORDER BY子句中，为此只有让goods_id字段作为联合索引的头部，以提高索引的筛选率，从而提高索引的效率，减少逻辑或物理的读。&lt;br /&gt;
l   order_status字段只有0或1两种值，而order_type有多种，以及根据&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;语句，必须order_type出现在联合中的位置要比order_status靠近头部；&lt;br /&gt;
l   gmt_modify字段出现在ORDER BY子句中，为此必须放到联合索引字段的最后；&lt;/p&gt;
&lt;p&gt;最后，再梳理一下从需求到设计存储结构，再到编写&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;和创建索引结构，我们应该做的步骤：&lt;br /&gt;
l   整理业务产生的数据流，读取数据的方式；&lt;br /&gt;
l   整理清楚数据流中的每个数据项属性信息；&lt;br /&gt;
l   分析业务指标，推测需要存储数据的规模（备注：一定要以多少&lt;acronym title=&quot;Gigabyte&quot;&gt;GB&lt;/acronym&gt;作为容量单位）；&lt;br /&gt;
l   选择可能用于支持业务的硬件设备和数据库架构；&lt;br /&gt;
l   把所有可能操纵数据的条件和操作类型，都整理清楚；&lt;br /&gt;
l   分析操纵数据条件字段各自的数据筛选率；&lt;br /&gt;
l   权衡各个&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;的性能和IO量，也即类似于哪个操作权重高一些，那些操作权重适当低一些；&lt;br /&gt;
l   创建索引组织结构；&lt;br /&gt;
l   收集测试和生产环境的反馈信息，优化索引组织结构；&lt;/p&gt;
&lt;p&gt;备注：&lt;br /&gt;
本想再用测试环境结合业务的方式，跑一套模拟测试脚本程序，让大家更加直观地看到不同索引组织情况下，相同的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;操作及频率，数据库服务器的处理能力和负载变化及对比信息，可惜唯一的服务器无法使用了，只好放弃。对于分析相同的&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;，走不通索引，其需要的逻辑IO和物理IO量也是一个办法，此次就不分析了，有需要的朋友可以去玩玩，另外建议初学者一定要好好阅读下mysql 手册上的相关章节内容：7.2.6. Index Merge Optimization。&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2010年03月20日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/mysql_index_store_perfomance_effect.html&quot; title=&quot;MySQL索引与存储方式对性能的影响&quot;&gt;MySQL索引与存储方式对性能的影响&lt;/a&gt; (2)&lt;/li&gt;&lt;li&gt;2009年12月21日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/mysql_virtual_function_index.html&quot; title=&quot;给MySQL做虚拟的“函数索引”&quot;&gt;给MySQL做虚拟的“函数索引”&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2009年11月10日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/mysql_index_check_script_preview.html&quot; title=&quot;MySQL索引检查脚本预览&quot;&gt;MySQL索引检查脚本预览&lt;/a&gt; (0)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666115/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666115/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/think_about_mysql_create_and_optimize_index.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/think_about_mysql_create_and_optimize_index.html 原文链接：http://w...&lt;img src=&quot;http://www1.feedsky.com/t1/605666115/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666115/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Optimize</category><category>Index</category><category>MySQL</category><category>数据库</category><pubDate>Thu, 02 Jun 2011 16:22:26 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/think_about_mysql_create_and_optimize_index.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1220</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/think_about_mysql_create_and_optimize_index.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666115/6226105</fs:itemid></item><item><title>MySQL删除大表更快的DROP TABLE办法</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666116/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;原文地址：&lt;a href=&quot;http://www.mysqlops.com/2011/05/18/mysql%E5%88%A0%E9%99%A4%E5%A4%A7%E8%A1%A8%E6%9B%B4%E5%BF%AB%E7%9A%84drop-table%E5%8A%9E%E6%B3%95.html&quot;&gt;http://www.mysqlops.com/2011/05/18/mysql%E5%88%A0%E9%99%A4%E5%A4%A7%E8%A1%A8%E6%9B%B4%E5%BF%AB%E7%9A%84drop-table%E5%8A%9E%E6%B3%95.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;曾经发文介绍过，DROP table XXX ,特别是碰到大表时，&lt;br /&gt;
&lt;a href=&quot;http://www.mysqlops.com/2011/02/18/mysql-drop-table-%e5%a4%84%e7%90%86%e8%bf%87%e7%a8%8b.html&quot;&gt;http://www.mysqlops.com/2011/02/18/mysql-drop-table-%e5%a4%84%e7%90%86%e8%bf%87%e7%a8%8b.html&lt;/a&gt;&lt;br /&gt;
在DROP TABLE 过程中，所有操作都会被HANG住。&lt;br /&gt;
这是因为INNODB会维护一个全局独占锁（在table cache上面），直到DROP TABLE完成才释放。&lt;br /&gt;
在我们常用的ext3,ext4，ntfs文件系统，要删除一个大文件（几十G，甚至几百G）还是需要点时间的。&lt;br /&gt;
下面我们介绍一个快速DROP table 的方法； 不管多大的表,INNODB 都可以很快返回，表删除完成；&lt;br /&gt;
实现：巧用LINK（硬链接）&lt;/p&gt;
&lt;p&gt;实测：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:root@127.0.0.1&quot;&gt;root@127.0.0.1&lt;/a&gt; : test 21:38:00&amp;gt; show table status like ‘tt’ \G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
Name: tt&lt;br /&gt;
Engine: InnoDB&lt;br /&gt;
Version: 10&lt;br /&gt;
Row_format: Compact&lt;br /&gt;
Rows: 151789128&lt;br /&gt;
Avg_row_length: 72&lt;br /&gt;
Data_length: 11011096576&lt;br /&gt;
Max_data_length: 0&lt;br /&gt;
Index_length: 5206179840&lt;br /&gt;
Data_free: 7340032&lt;br /&gt;
Auto_increment: NULL&lt;br /&gt;
Create_time: 2011-05-18 14:55:08&lt;br /&gt;
Update_time: NULL&lt;br /&gt;
Check_time: NULL&lt;br /&gt;
Collation: utf8_general_ci&lt;br /&gt;
Checksum: NULL&lt;br /&gt;
Create_options:&lt;br /&gt;
Comment:&lt;br /&gt;
1 row in set (0.22 sec)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:root@127.0.0.1&quot;&gt;root@127.0.0.1&lt;/a&gt; : test 21:39:34&amp;gt; drop table tt ;&lt;br /&gt;
Query OK, 0 rows affected (25.01 sec)&lt;/p&gt;
&lt;p&gt;删除一个11G的表用时25秒左右（硬件不同，时间不同）；&lt;/p&gt;
&lt;p&gt;下面我们来对另一个更大的表进行删除；&lt;br /&gt;
但之前，我们需要对这个表的数据文件做一个硬连接：&lt;/p&gt;
&lt;p&gt;root@ # ln stock.ibd stock.id.hdlk&lt;br /&gt;
root@ # ls stock.* -l&lt;br /&gt;
-rw-rw—- 1 mysql mysql        9196 Apr 14 23:03 stock.frm&lt;br /&gt;
-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.ibd&lt;br /&gt;
-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk&lt;/p&gt;
&lt;p&gt;你会发现stock.ibd的INODES属性变成了2；&lt;/p&gt;
&lt;p&gt;下面我们继续来删表。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:root@127.0.0.1&quot;&gt;root@127.0.0.1&lt;/a&gt; : test 21:44:37&amp;gt; show table status like ‘stock’ \G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
Name: stock&lt;br /&gt;
Engine: InnoDB&lt;br /&gt;
Version: 10&lt;br /&gt;
Row_format: Compact&lt;br /&gt;
Rows: 49916863&lt;br /&gt;
Avg_row_length: 356&lt;br /&gt;
Data_length: 17799577600&lt;br /&gt;
Max_data_length: 0&lt;br /&gt;
Index_length: 1025507328&lt;br /&gt;
Data_free: 4194304&lt;br /&gt;
Auto_increment: NULL&lt;br /&gt;
Create_time: 2011-05-18 14:55:08&lt;br /&gt;
Update_time: NULL&lt;br /&gt;
Check_time: NULL&lt;br /&gt;
Collation: utf8_general_ci&lt;br /&gt;
Checksum: NULL&lt;br /&gt;
Create_options:&lt;br /&gt;
Comment:&lt;br /&gt;
1 row in set (0.23 sec)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:root@127.0.0.1&quot;&gt;root@127.0.0.1&lt;/a&gt; : test 21:39:34&amp;gt; drop table stock ;&lt;br /&gt;
Query OK, 0 rows affected (0.99 sec)&lt;/p&gt;
&lt;p&gt;1秒不到就删除完成； 也就是DROP TABLE不用再HANG这么久了。&lt;br /&gt;
但table是删除了，数据文件还在，所以你还需要最后数据文件给删除。&lt;/p&gt;
&lt;p&gt;root # ll&lt;br /&gt;
total 19096666112&lt;br /&gt;
-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk&lt;br /&gt;
root # rm stock.id.hdlk&lt;br /&gt;
虽然DROP TABLE 多绕了几步。(如果你有一个比较可靠的自运行程序（自动为大表建立硬链接，并会自动删除过期的硬链接文件），就会显得不那么繁琐。)&lt;br /&gt;
这样做能大大减少MYSQL HANG住的时间； 相信还是值得的。&lt;/p&gt;
&lt;p&gt;至于原理: 就是利用&lt;acronym title=&quot;Operating System&quot;&gt;OS&lt;/acronym&gt; HARD LINK的原理,&lt;br /&gt;
当多个文件名同时指向同一个INODE时,这个INODE的引用数N&amp;gt;1, 删除其中任何一个文件名都会很快.&lt;br /&gt;
因为其直接的物理文件块没有被删除.只是删除了一个指针而已;&lt;br /&gt;
当INODE的引用数N=1时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时;&lt;/p&gt;
&lt;p&gt;好了. 大家试试吧.&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年02月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/diy_multi_master_replication.html&quot; title=&quot;自己动手实现Multi-Master Replication&quot;&gt;自己动手实现Multi-Master Replication&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666116/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666116/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html 原文地址：http://www.mysqlo...&lt;img src=&quot;http://www1.feedsky.com/t1/605666116/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666116/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>MySQL</category><category>DROP</category><category>数据库</category><pubDate>Thu, 02 Jun 2011 16:07:12 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1215</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/mysql_fast_drop_table_use_hard_lin.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666116/6226105</fs:itemid></item><item><title>自编译MySQL指南 2.0</title><link>http://item.feedsky.com/~feedsky/plinux/~8121906/605666117/6226105/1/item.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #888888;&quot;&gt;本文内容遵从&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh&quot; target=&quot;_blank&quot;&gt;CC版权协议&lt;/a&gt;, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明&lt;/br&gt;网址: http://www.penglixun.com/tech/database/mysql_compile_reference.html &lt;/p&gt;
&lt;p&gt;&lt;/span&gt;&lt;strong&gt;原文：&lt;a href=&quot;http://www.mysqlops.com/2011/03/06/mysql_compile_reference.html&quot;&gt;http://www.mysqlops.com/2011/03/06/mysql_compile_reference.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一般情况下，用户选择的MySQL安装方式为 RPM包 或 二进制压缩包，但是，通用安装包为了适应不同的软硬件平台，都会采用保守的编译方式，功能上也是选择最常用最稳定的功能编译入二进制版本。&lt;br /&gt;
虽然这满足了大部分用户的需求，但是有时我们仅仅需要一部分功能（例如我们不需要Query Cache，但这个模块编译时不去掉的话，运行时依然会触发其代码清理Query Cache内存池，并引发过Bug），或者有性能更好的商业编译器（例如ICC），或者对源码做了修改时，就必须采用编译的方式来安装了。&lt;/p&gt;
&lt;p&gt;下面我们就来介绍下如何从源码编译安装MySQL。&lt;br /&gt;
&lt;span id=&quot;more-1211&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一部分，选择编译参数&lt;/strong&gt;&lt;br /&gt;
编译MySQL需要设置两种编译参数：GCC/ICC的编译参数，MySQL的编译参数。GCC/ICC编译参数是控制编译时编译器的优化动作，MySQL编译参数是控制MySQL功能模块的处理动作。&lt;/p&gt;
&lt;p&gt;以Xeon 5520为例，55系列是Intel的Nehalem架构处理器，为了充分挖掘它的处理能力，我们做了很多的测试来尝试一些GCC的编译参数，如何获得更高的MySQL性能。&lt;/p&gt;
&lt;p&gt;首先看处理器支持哪些flags：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;processor	: 15&lt;br /&gt;
vendor_id	: GenuineIntel&lt;br /&gt;
cpu family	: 6&lt;br /&gt;
model		: 26&lt;br /&gt;
model name	: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz&lt;br /&gt;
stepping	: 5&lt;br /&gt;
cpu &lt;acronym title=&quot;Megahertz&quot;&gt;MHz&lt;/acronym&gt;		: 2261.088&lt;br /&gt;
cache size	: 8192 &lt;acronym title=&quot;Kilobyte&quot;&gt;KB&lt;/acronym&gt;&lt;br /&gt;
physical id	: 0&lt;br /&gt;
siblings	: 8&lt;br /&gt;
core id		: 3&lt;br /&gt;
cpu cores	: 4&lt;br /&gt;
apicid		: 7&lt;br /&gt;
fpu		: yes&lt;br /&gt;
fpu_exception	: yes&lt;br /&gt;
cpuid level	: 11&lt;br /&gt;
wp		: yes&lt;br /&gt;
&lt;strong&gt;flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx rdtscp lm constant_tsc ida pni monitor ds_cpl vmx est tm2 cx16 xtpr popcnt lahf_lm&lt;/strong&gt;&lt;br /&gt;
bogomips	: 4521.98&lt;br /&gt;
clflush size	: 64&lt;br /&gt;
cache_alignment	: 64&lt;br /&gt;
address sizes	: 40 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;从cupinfo的信息可以看出，支持sse/sse2/mmx这些GCC的flag，查看gcc的文档可以看到全部的优化选项：[&lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html&quot;&gt;点我查看&lt;/a&gt;]。&lt;/p&gt;
&lt;p&gt;经过尝试，得到了如下编译参数，经过两周的压力测试，编译MySQL 5.1.46sp1企业版，比Percona 5.1.47 Server性能高出15%，目前也非常稳定的运行在开发测试库上。GCC版本为4.1.3，系统为RHEL 5.4 x64.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CXX=gcc \&lt;br /&gt;
CHOST=”x86_64-pc-linux-gnu” \&lt;br /&gt;
CFLAGS=” -O3 \&lt;br /&gt;
-fomit-frame-pointer \&lt;br /&gt;
-pipe \&lt;br /&gt;
-march=nocona \&lt;br /&gt;
-mfpmath=sse \&lt;br /&gt;
-m128bit-long-double \&lt;br /&gt;
-mmmx \&lt;br /&gt;
-msse \&lt;br /&gt;
-msse2 \&lt;br /&gt;
-maccumulate-outgoing-args \&lt;br /&gt;
-m64 \&lt;br /&gt;
-ftree-loop-linear \&lt;br /&gt;
-fprefetch-loop-arrays \&lt;br /&gt;
-freg-struct-return \&lt;br /&gt;
-fgcse-sm \&lt;br /&gt;
-fgcse-las \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-fforce-addr \&lt;br /&gt;
-fivopts \&lt;br /&gt;
-ftree-vectorize \&lt;br /&gt;
-ftracer \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-minline-all-stringops \&lt;br /&gt;
-fbranch-target-load-optimize2&amp;#8243; \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
./configure &amp;#8211;prefix=/usr/soft/install/mysql-ent-official-5.1.56 \&lt;br /&gt;
&amp;#8211;with-server-suffix=custom-mysql \&lt;br /&gt;
&amp;#8211;with-mysqld-user=mysql \&lt;br /&gt;
&amp;#8211;with-plugins=partition,blackhole,csv,heap,innobase,myisam,myisammrg \&lt;br /&gt;
&amp;#8211;with-charset=utf8 \&lt;br /&gt;
&amp;#8211;with-collation=utf8_general_ci \&lt;br /&gt;
&amp;#8211;with-extra-charsets=gbk,gb2312,utf8,ascii \&lt;br /&gt;
&amp;#8211;with-big-tables \&lt;br /&gt;
&amp;#8211;with-fast-mutexes \&lt;br /&gt;
&amp;#8211;with-zlib-dir=bundled \&lt;br /&gt;
&amp;#8211;enable-assembler \&lt;br /&gt;
&amp;#8211;enable-profiling \&lt;br /&gt;
&amp;#8211;enable-local-infile \&lt;br /&gt;
&amp;#8211;enable-thread-safe-client \&lt;br /&gt;
&amp;#8211;with-readline \&lt;br /&gt;
&amp;#8211;with-pthread \&lt;br /&gt;
&amp;#8211;with-embedded-server \&lt;br /&gt;
&amp;#8211;with-client-ldflags=-all-static \&lt;br /&gt;
&amp;#8211;with-mysqld-ldflags=-all-static \&lt;br /&gt;
&amp;#8211;without-query-cache \&lt;br /&gt;
&amp;#8211;without-geometry \&lt;br /&gt;
&amp;#8211;without-debug \&lt;br /&gt;
&amp;#8211;without-ndb-debug&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;GCC参数的含义为：&lt;br /&gt;
-fomit-frame-pointer&lt;br /&gt;
对于不需要栈指针的函数就不在寄存器中保存指针，因此可以忽略存储和检索地址的代码，同时对许多函数提供一个额外的寄存器。所有”-O”级别都打开它，但仅在调试器可以不依靠栈指针运行时才有效。在AMD64平台上此选项默认打开，但是在x86平台上则默认关闭。建议显式的设置它。&lt;br /&gt;
-pipe&lt;br /&gt;
在编译过程的不同阶段之间使用管道而非临时文件进行通信，可以加快编译速度。建议使用。&lt;br /&gt;
-march=nocona&lt;br /&gt;
Xoen 55xx处理器在GCC 4.1.3&lt;br /&gt;
-mfpmath=sse&lt;br /&gt;
启用cpu支持”sse”标量浮点指令。&lt;br /&gt;
m128bit-long-double&lt;br /&gt;
指定long double为128位，pentium以上的cpu更喜欢这种标准，并且符合x86-64的ABI标准，但是却不附合i386的ABI标准。&lt;br /&gt;
-mmmx -msse -msse2&lt;br /&gt;
使用相应的扩展指令集以及内置函数&lt;br /&gt;
-maccumulate-outgoing-args&lt;br /&gt;
指定在函数引导段中计算输出参数所需最大空间，这在大部分现代cpu中是较快的方法；缺点是会明显增加二进制文件尺寸。&lt;br /&gt;
-m64&lt;br /&gt;
生成专门运行于64位环境的代码，不能运行于32位环境，仅用于x86_64[含EMT64]环境。&lt;br /&gt;
-ftree-loop-linear&lt;br /&gt;
在trees上进行线型循环转换。它能够改进缓冲性能并且允许进行更进一步的循环优化。&lt;br /&gt;
-fprefetch-loop-arrays&lt;br /&gt;
生成数组预读取指令，对于使用巨大数组的程序可以加快代码执行速度，适合数据库相关的大型软件等。具体效果如何取决于代码。&lt;br /&gt;
-freg-struct-return&lt;br /&gt;
如果struct和union足够小就通过寄存器返回，这将提高较小结构的效率。如果不够小，无法容纳在一个寄存器中，将使用内存返回。建议仅在完全使用GCC编译的系统上才使用。&lt;br /&gt;
-fgcse-sm&lt;br /&gt;
在全局公共子表达式消除之后运行存储移动，以试图将存储移出循环。&lt;br /&gt;
-fgcse-las&lt;br /&gt;
在全局公共子表达式消除之后消除多余的在存储到同一存储区域之后的加载操作。&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-fforce-addr&lt;br /&gt;
必须将地址复制到寄存器中才能对他们进行运算。由于所需地址通常在前面已经加载到寄存器中了，所以这个选项可以改进代码。&lt;br /&gt;
-fivopts&lt;br /&gt;
在trees上执行归纳变量优化。&lt;br /&gt;
-ftree-vectorize&lt;br /&gt;
在trees上执行循环向量化。&lt;br /&gt;
-ftracer&lt;br /&gt;
执行尾部复制以扩大超级块的尺寸，它简化了函数控制流，从而允许其它的优化措施做的更好。&lt;br /&gt;
-frename-registers&lt;br /&gt;
试图驱除代码中的假依赖关系，这个选项对具有大量寄存器的机器很有效。&lt;br /&gt;
-minline-all-stringops&lt;br /&gt;
默认时GCC只将确定目的地会被对齐在至少4字节边界的字符串操作内联进程序代码。该选项启用更多的内联并且增加二进制文件的体积，但是可以提升依赖于高速 memcpy, strlen, memset 操作的程序的性能。数据库系统使用这个参数可以显著提高内存操作性能。&lt;br /&gt;
-fbranch-target-load-optimize2&lt;br /&gt;
在执行序启动以及结尾之前执行分支目标缓存器加载最佳化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二部分，使用TC-Malloc内存管理：&lt;/strong&gt;&lt;br /&gt;
Linux下的malloc函数性能问题，想必大部分在Linux下写C的人都深有感受，纷纷利用内存池来改进内存分配效率。&lt;br /&gt;
Google开源的tcmalloc则改进了malloc的一些效率问题，在大量malloc和free时，操作系统的内存曲线明显比Linux下malloc函数要平稳，在大并发情况下，提升程序稳定性和性能。&lt;br /&gt;
一般网上都是把tcmalloc动态库加到mysqld_safe中启动，但是我们的MySQL都是静态编译的，这时候动态加载是否生效呢？所以还是静态编译入MySQL好。&lt;/p&gt;
&lt;p&gt;编译tcmalloc先要编译libunwind：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz&lt;br /&gt;
tar zxvf libunwind-0.99.tar.gz&lt;/p&gt;
&lt;p&gt;CHOST=”x86_64-pc-linux-gnu” \&lt;br /&gt;
CFLAGS=” -O3 -fPIC \&lt;br /&gt;
-fomit-frame-pointer \&lt;br /&gt;
-pipe \&lt;br /&gt;
-march=nocona \&lt;br /&gt;
-mfpmath=sse \&lt;br /&gt;
-m128bit-long-double \&lt;br /&gt;
-mmmx \&lt;br /&gt;
-msse \&lt;br /&gt;
-msse2 \&lt;br /&gt;
-maccumulate-outgoing-args \&lt;br /&gt;
-m64 \&lt;br /&gt;
-ftree-loop-linear \&lt;br /&gt;
-fprefetch-loop-arrays \&lt;br /&gt;
-freg-struct-return \&lt;br /&gt;
-fgcse-sm \&lt;br /&gt;
-fgcse-las \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-fforce-addr \&lt;br /&gt;
-fivopts \&lt;br /&gt;
-ftree-vectorize \&lt;br /&gt;
-ftracer \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-minline-all-stringops \&lt;br /&gt;
-fbranch-target-load-optimize2&amp;#8243; \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;然后编译tcmalloc：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;tar zxvf google-perftools-1.7.tar.gz&lt;/p&gt;
&lt;p&gt;CHOST=”x86_64-pc-linux-gnu” \&lt;br /&gt;
CFLAGS=” -O3 \&lt;br /&gt;
-fomit-frame-pointer \&lt;br /&gt;
-pipe \&lt;br /&gt;
-march=nocona \&lt;br /&gt;
-mfpmath=sse \&lt;br /&gt;
-m128bit-long-double \&lt;br /&gt;
-mmmx \&lt;br /&gt;
-msse \&lt;br /&gt;
-msse2 \&lt;br /&gt;
-maccumulate-outgoing-args \&lt;br /&gt;
-m64 \&lt;br /&gt;
-ftree-loop-linear \&lt;br /&gt;
-fprefetch-loop-arrays \&lt;br /&gt;
-freg-struct-return \&lt;br /&gt;
-fgcse-sm \&lt;br /&gt;
-fgcse-las \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-fforce-addr \&lt;br /&gt;
-fivopts \&lt;br /&gt;
-ftree-vectorize \&lt;br /&gt;
-ftracer \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-minline-all-stringops \&lt;br /&gt;
-fbranch-target-load-optimize2&amp;#8243; \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
./configure &amp;#8211;disable-cpu-profiler \&lt;br /&gt;
&amp;#8211;disable-heap-profiler \&lt;br /&gt;
&amp;#8211;disable-heap-checker \&lt;br /&gt;
&amp;#8211;disable-debugalloc \&lt;br /&gt;
&amp;#8211;enable-minimal \&lt;br /&gt;
&amp;#8211;enable-frame-pointers &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;记得要把libtammloc加入系统路径，否则编译MySQL时找不到：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;echo “/usr/local/lib” &amp;gt; /etc/ld.so.conf.d/usr_local_lib.conf&lt;br /&gt;
/sbin/ldconfig&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最后就是编译MySQL了：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CXX=gcc \&lt;br /&gt;
CHOST=”x86_64-pc-linux-gnu” \&lt;br /&gt;
CFLAGS=” -O3 \&lt;br /&gt;
-fomit-frame-pointer \&lt;br /&gt;
-pipe \&lt;br /&gt;
-march=nocona \&lt;br /&gt;
-mfpmath=sse \&lt;br /&gt;
-m128bit-long-double \&lt;br /&gt;
-mmmx \&lt;br /&gt;
-msse \&lt;br /&gt;
-msse2 \&lt;br /&gt;
-maccumulate-outgoing-args \&lt;br /&gt;
-m64 \&lt;br /&gt;
-ftree-loop-linear \&lt;br /&gt;
-fprefetch-loop-arrays \&lt;br /&gt;
-freg-struct-return \&lt;br /&gt;
-fgcse-sm \&lt;br /&gt;
-fgcse-las \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-fforce-addr \&lt;br /&gt;
-fivopts \&lt;br /&gt;
-ftree-vectorize \&lt;br /&gt;
-ftracer \&lt;br /&gt;
-frename-registers \&lt;br /&gt;
-minline-all-stringops \&lt;br /&gt;
-felide-constructors \&lt;br /&gt;
-fno-exceptions \&lt;br /&gt;
-fno-rtti \&lt;br /&gt;
-fbranch-target-load-optimize2&amp;#8243; \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
LDFLAGS=” -lrt -lunwind -ltcmalloc_minimal -lstdc++ ” \&lt;br /&gt;
./configure &amp;#8211;prefix=/usr/soft/install/mysql-ent-custom-5.1.49sp1 \&lt;br /&gt;
&amp;#8211;with-server-suffix=-custom-edition \&lt;br /&gt;
&amp;#8211;with-mysqld-user=mysql \&lt;br /&gt;
&amp;#8211;with-plugins=partition,blackhole,csv,heap,innobase,myisam,myisammrg \&lt;br /&gt;
&amp;#8211;with-charset=utf8 \&lt;br /&gt;
&amp;#8211;with-collation=utf8_general_ci \&lt;br /&gt;
&amp;#8211;with-extra-charsets=gbk,gb2312,utf8,ascii \&lt;br /&gt;
&amp;#8211;with-big-tables \&lt;br /&gt;
&amp;#8211;with-fast-mutexes \&lt;br /&gt;
&amp;#8211;with-zlib-dir=bundled \&lt;br /&gt;
&amp;#8211;enable-assembler \&lt;br /&gt;
&amp;#8211;enable-profiling \&lt;br /&gt;
&amp;#8211;enable-local-infile \&lt;br /&gt;
&amp;#8211;enable-thread-safe-client \&lt;br /&gt;
&amp;#8211;with-readline \&lt;br /&gt;
&amp;#8211;with-pthread \&lt;br /&gt;
&amp;#8211;with-embedded-server \&lt;br /&gt;
&amp;#8211;with-mysqld-ldflags=-all-static \&lt;br /&gt;
&amp;#8211;without-query-cache \&lt;br /&gt;
&amp;#8211;without-geometry \&lt;br /&gt;
&amp;#8211;without-debug \&lt;br /&gt;
&amp;#8211;without-ndb-debug&lt;br /&gt;
make &amp;amp;&amp;amp; make install&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;经过试用，大并发下内存分配和释放曲线都比Linux原生的平稳。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三部分，尝试ICC：&lt;/strong&gt;&lt;br /&gt;
ICC是Intel自己开发的多平台编译器，经过我的测试ICC在浮点运算，线程库和数学函数上的优势非常明显，原生SSE2指令集支持、Intel自己编写的线程库和数学函数库，性能没得说。&lt;br /&gt;
我用同一份运算PI值的代码在ICC和GCC下编译，提升比例达&lt;strong&gt;20%&lt;/strong&gt;，实际在数据库中比较同一条超级复杂的聚合&lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;，ICC提升达&lt;strong&gt;34%&lt;/strong&gt;。&lt;br /&gt;
下面给出TC-Malloc + ICC + Percona从源码编译的完整方案。&lt;/p&gt;
&lt;p&gt;第一步：编译安装libunwind&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz&lt;br /&gt;
tar zxvf libunwind-0.99.tar.gz&lt;/p&gt;
&lt;p&gt;CC=icc \&lt;br /&gt;
CXX=icpc \&lt;br /&gt;
LD=xild \&lt;br /&gt;
AR=xiar \&lt;br /&gt;
CFLAGS=”-O3 -no-prec-div -ip -fp-model fast=1 -xSSE2 -axSSE2 -fPIC” \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
CPPFLAGS=” -I/usr/alibaba/icc/include ” \&lt;br /&gt;
./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;第二布：编译安装tcmalloc&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;wget http://google-perftools.googlecode.com/files/google-perftools-1.7.tar.gz&lt;br /&gt;
tar zxvf google-perftools-1.7.tar.gz&lt;/p&gt;
&lt;p&gt;CC=icc \&lt;br /&gt;
CXX=icpc \&lt;br /&gt;
LD=xild \&lt;br /&gt;
AR=xiar \&lt;br /&gt;
CFLAGS=”-O3 -no-prec-div -ip -fp-model fast=1 -xSSE2 -axSSE2 -fPIC” \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
CPPFLAGS=” -I/usr/alibaba/icc/include ” \&lt;br /&gt;
./configure \&lt;br /&gt;
&amp;#8211;disable-cpu-profiler \&lt;br /&gt;
&amp;#8211;disable-heap-profiler \&lt;br /&gt;
&amp;#8211;disable-heap-checker \&lt;br /&gt;
&amp;#8211;disable-debugalloc \&lt;br /&gt;
&amp;#8211;enable-minimal \&lt;br /&gt;
&amp;#8211;enable-frame-pointers &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/p&gt;
&lt;p&gt;echo “/usr/local/lib” &amp;gt; /etc/ld.so.conf.d/usr_local_lib.conf&lt;br /&gt;
/sbin/ldconfig&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;第三部：编译安装Percona&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CC=icc \&lt;br /&gt;
CXX=icpc \&lt;br /&gt;
LD=xild \&lt;br /&gt;
AR=xiar \&lt;br /&gt;
CFLAGS=”-O3 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -unroll2 -ip -fp-model fast=1 -restrict -fno-exceptions -fno-rtti -no-prec-div -fno-implicit-templates -static-intel -static-libgcc -static -xSSE2 -axSSE2&amp;#8243; \&lt;br /&gt;
CXXFLAGS=”${CFLAGS}” \&lt;br /&gt;
CPPFLAGS=” -I/usr/alibaba/icc/include ” \&lt;br /&gt;
LDFLAGS=” -L/usr/alibaba/icc/lib/intel64/ -lrt -lunwind -ltcmalloc_minimal -lstdc++ ” \&lt;br /&gt;
./configure &amp;#8211;prefix=/usr/alibaba/install/percona-custom-5.1.55-12.6 \&lt;br /&gt;
&amp;#8211;with-server-suffix=-alibaba-edition \&lt;br /&gt;
&amp;#8211;with-mysqld-user=mysql \&lt;br /&gt;
&amp;#8211;with-plugins=heap,innodb_plugin,myisam,partition \&lt;br /&gt;
&amp;#8211;with-charset=utf8 \&lt;br /&gt;
&amp;#8211;with-collation=utf8_general_ci \&lt;br /&gt;
&amp;#8211;with-extra-charsets=gbk,utf8,ascii \&lt;br /&gt;
&amp;#8211;with-big-tables \&lt;br /&gt;
&amp;#8211;with-fast-mutexes \&lt;br /&gt;
&amp;#8211;with-zlib-dir=bundled \&lt;br /&gt;
&amp;#8211;with-readline \&lt;br /&gt;
&amp;#8211;with-pthread \&lt;br /&gt;
&amp;#8211;enable-assembler \&lt;br /&gt;
&amp;#8211;enable-profiling \&lt;br /&gt;
&amp;#8211;enable-local-infile \&lt;br /&gt;
&amp;#8211;enable-thread-safe-client \&lt;br /&gt;
&amp;#8211;without-embedded-server \&lt;br /&gt;
&amp;#8211;with-mysqld-ldflags=-all-static \&lt;br /&gt;
&amp;#8211;without-query-cache \&lt;br /&gt;
&amp;#8211;without-geometry \&lt;br /&gt;
&amp;#8211;without-debug \&lt;br /&gt;
&amp;#8211;without-ndb-binlog \&lt;br /&gt;
&amp;#8211;without-ndb-debug&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;编译完成后make &amp;amp;&amp;amp; make install&lt;/p&gt;&lt;h2  class=&quot;related_post_title&quot;&gt;类似的文章&lt;/h2&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2012年02月14日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/diy_multi_master_replication.html&quot; title=&quot;自己动手实现Multi-Master Replication&quot;&gt;自己动手实现Multi-Master Replication&lt;/a&gt; (0)&lt;/li&gt;&lt;li&gt;2012年01月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html&quot; title=&quot;一个InnoDB性能超过Oracle的调优Case&quot;&gt;一个InnoDB性能超过Oracle的调优Case&lt;/a&gt; (1)&lt;/li&gt;&lt;li&gt;2011年12月23日 -- &lt;a href=&quot;http://www.penglixun.com/tech/database/server_kill_idle_transaction.html&quot; title=&quot;在Server层实现Kill Idle Transaction&quot;&gt;在Server层实现Kill Idle Transaction&lt;/a&gt; (1)&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/605666117/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666117/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.penglixun.com/tech/database/mysql_compile_reference.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/mysql_compile_reference.html 原文：http://www.mysqlops.com/2011/03/06...&lt;img src=&quot;http://www1.feedsky.com/t1/605666117/plinux/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/plinux/~8121906/605666117/6226105/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Reference</category><category>Compile</category><category>MySQL</category><category>数据库</category><pubDate>Wed, 13 Apr 2011 14:57:42 +0800</pubDate><author>P.Linux</author><comments>http://www.penglixun.com/tech/database/mysql_compile_reference.html#comments</comments><guid isPermaLink="false">http://www.penglixun.com/?p=1211</guid><dc:creator>P.Linux</dc:creator><fs:srclink>http://www.penglixun.com/tech/database/mysql_compile_reference.html</fs:srclink><fs:srcfeed>http://www.penglixun.com/feed</fs:srcfeed><fs:itemid>feedsky/plinux/~8121906/605666117/6226105</fs:itemid></item></channel></rss>
