您当前的位置:首页 > 其他技术 > 天龙技术

InnoDB数据引擎优化针对天龙八部

本文出处:网游动力作者:本站发布时间:2008-11-18阅读次数:
InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。

天龙八部数据库就是InnoDB。
在高并发的情况下,高insert update的情况下,InnoDB是最佳选择。
默认情况下,如果你对InnoDB不进行任何配置。那么数据将在mysql目录的data下。
有一个名为ibdata1文件和2个ib_logfile0,ib_logfile1日志文件。
而tlbbdb存储的只是表格索引,真正的数据存储在ibdata1

默认情况下,任何操作系统有文件大小限制,比如2G或者4G。
一旦数据到达操作系统限制级别,那么就会报错了。所以在对InnoDB需要配置。

你必须找到 my.cnf配置文件 修改一些参数来提高性能满足你的需求。

innodb_data_file_path=ibdata1:10M:autoextend
指定名字,大小,其中autoextend为自动增长。当然再增长无法突破操作系统对单个文件的大小限制。
或者你可以
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
指定2个文件

或者你可以
innodb_data_file_path=ibdata1:10M:autoextend:max:500M
来设置这个文件的增长最大值

默认情况下,innodb存储在mysql的data目录中,你可以指定存储在其它地方。

innodb_data_home_dir = /ibdata
指定存储在 ibdata目录
当然这个目录你必须建立好。否则会出错。
因为innodb不会自动去建立这个目录。

当然你也可以不设置 直接使用下面的配置
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend

假设你有一台Linux计算机,有2GB内存和三个60GB硬盘(在目录路径/, /dr2和/dr3)。下列例子显示了在my.cnf里对InnoDB可能的配置参数。


innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend该例子把两个数据文件放在不同磁盘上。InnoDB开始用第一个数据文件填充表空间。在一些情况下,如果所有数据不被放置在同一物理磁盘上,这样将改善数据库的性能。把日志文件放在与数据文件不同的磁盘上对性能是经常很有好处的。你也可以使用原始磁盘分区(原始设备)作为InnoDB数据文件,这样可以加速I/O。 
innodb_additional_mem_pool_sizeInnoDB用来存储数据目录信息&其它内部数据结构的内存池的大小。你应用程序里的表越多,你需要在这里分配越多的内存。如果InnoDB用光了这个池内的内存,InnoDB开始从操作系统分配内存,并且往MySQL错误日志写警告信息。默认值是1MB。
innodb_autoextend_increment当自动扩展表空间被填满之时,为扩展而增加的尺寸(MB为单位)。默认值是8。这个选项可以在运行时作为全局系统变量而改变。
innodb_buffer_pool_sizeInnoDB用来缓存它的数据和索引的内存缓冲区的大小。你把这个值设得越高,访问表中数据需要得磁盘I/O越少。在一个专用的数据库服务器上,你可以设置这个参数达机器物理内存大小的80%。尽管如此,还是不要把它设置得太大,因为对物理内存的竞争可能在操作系统上导致内存调度。

innodb_flush_log_at_trx_commit默认值1 应该设置为0 该选项超级影响性能
经过对保存文件,设置选项,内存等设置,你的INNODB就初步优化。性能能提升很多。下来说下如何清理数据和日志这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情。 最简单的,增加InnoDB表空间大小的方法是从开始配置它为自动扩展的。为表空间定义里的最后一个数据文件指定autoextend属性。然后在文件耗尽空间之时,InnoDB以8MB为增量自动增加该文件的大小。增加的大小可以通过设置innodb_autoextend_increment值来配置,这个值以MB为单位,默认的是8。 作为替代,你可以通过添加另一个数据文件来增加表空间的尺寸。要这么做的话,你必须停止MySQL服务器,编辑my.cnf文件,添加一个新数据文件到innodb_data_file_path的末尾,然后再次启动服务器。如果最后一个数据文件是用关键字autoextend定义的,编辑my.cnf文件的步骤必须考虑最后一个数据文件已经增长到多大。获取数据文件的尺寸,把它四舍五入到最接近乘积1024 × 1024bytes (= 1MB),然后在innodb_data_file_path中明确指定大致的尺寸。然后你可以添加另一个数据文件。记得只有innodb_data_file_path里最后一个数据可以被指定为自动扩展。 作为一个例子。假设表空间正好有一个自动扩展文件ibdata1:innodb_data_file_path = /ibdata/ibdata1:10M:autoextend
假设这个数据文件过一段时间已经长到988MB。下面是添加另一个总扩展数据文件之后的配置行: 
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
当你添加一个新文件到表空间的之后,请确信它并不存在。当你重启服务器之时,InnoDB创建并初始化这个文件。
如果你想要改变你的InnoDB日志文件的数量和大小,你必须要停止MySQL服务器,并确信它被无错误地关闭。随后复制旧日志文件到一个安全的地方以防万一某样东西在关闭时出错而你需要用它们来恢复表空间。从日志文件目录删除所有旧日志文件,编辑my.cnf来改变日志文件配置,并再次启动MySQL服务器。mysqld在启动之时发现没有日志文件,然后告诉你它正在创建一个新的日志文件。



下面说一下对INNODB的优化微调
1.把几个修改放在一个事物里来处理
2.设置innodb_flush_log_at_trx_commit=0
3.调大日志缓存大小 比如 8M
4.在写入更新时都用SET AUTOCOMMIT=0; 来开头