MyISAM转innodb后的参数设置优化

转了MYSQL数据库引擎之后,相关的参数也要重新调整和优化

innodb_flush_logs_at_trx_commit=0(为2好像更合理吧。)

 

该参数设定了事务提交时内存中log信息的处理。
1) =1时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。Truly ACID。速度慢。 2) =2时,在每个事务提交时,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。只有操作系统崩溃或掉电才会删除最后一秒的事务,不然不会丢失事务。 3) =0时,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新。任何mysqld进程的崩溃会删除崩溃前最后一秒的事务

抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整innodb_flush_log_at_trx_commit 。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统挂了时才可能丢数据。

innodb_buffer_pool_size=2048M(这个数值,是否可以调整?当然,在内存不多的情况下,2G也是可以的)

如果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。

这是InnoDB最重要的设置,对InnoDB性能有决定性的影响。默认的设置只有8M,所以默认的数据库设置下面InnoDB性能很差。在只有InnoDB存储引擎的数据库服务器上面,可以设置60-80%的内存。更精确一点,在内存容量允许的情况下面设置比InnoDB tablespaces大10%的内存大小。

innodb_data_file_path=innodb_data_file_path=ibdata1:10G;ibdata2:10G;ibdata3:10G:autoextend(格式似乎错误,innodb_data_file_path出现了两次,而每个数据文件超过10G之后,再建立文件,有没有可能10G太大了?)

参数的名字和实际的用途有点出入,它不仅指定了所有InnoDB数据文件的路径,还指定了初始大小分配,最大分配以及超出起始分配界线时是否应当增加文件的大小。此参数的一般格式如下:

path-to-datafile:size-allocation[:autoextend[:max-size-allocation]]

例如,假设希望创建一个数据文件sales,初始大小为100MB,并希望在每次达到当前大小限制时,自动增加8MB(8MB是指定autoextend时的默认扩展大小).但是,不希望此文件超过1GB,可以使用如下配置:

innodb_data_home_dir =

innodb_data_file_path = /data/sales:100M:autoextend:8M: max:1GB

如果此文件增加到预定的1G的限制,可以再增加另外一个数据文件,如下:

innodb_data_file_path = /data/sales:100M:autoextend:8M: max:1GB;innodb_data_file_path = /data2/sales2:100M:autoextend:8M: max:2GB

要注意的是,在这些示例中,inndb_data_home_dir参数开始设置为空,因为最终数据文件位于单独的位置(/data/和/data2/).如果希望所有 InnoDB数据文件都位于相同的位置,就可以使用innodb_data_home_dir来指定共同位置,然后在通过 inndo_data_file_path来指定文件名即可。如果没有定义这些值,将在datadir中创建一个sales。

innodb_log_file_size=256M(大多数推荐设置)

对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。

该参数决定了recovery speed。太大的话recovery就会比较慢,太小了影响查询性能,一般取256M可以兼顾性能和recovery的速度

注意:在重新设置该值时,好像要把原来的文件删除掉。

innodb_log_buffer_size=4M(也是推荐设置)

此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据.MySQL开发人员建议设置为1-8M之间

默认值对于多数中等写操作和事务短的运用都是可以的。如果经常做更新或者使用了很多blob数据,应该增大这个值。但太大了也是浪费内存,因为1秒钟总会 flush(这个词的中文怎么说呢?)一次,所以不需要设到超过1秒的需求。8M-16M一般应该够了。小的运用可以设更小一点。

innodb_flush_logs_at_trx_commit=2(此处配置重复,前面的为0,这里又配置为2,是否设置为2对于我们提高速度更需要?) transaction-isolation=READ-COMITTED(内涵没有了解清楚,但如果不影响网站功能,这样也OK

如果应用程序可以运行在READ-COMMITED隔离级别,做此设定会有一定的性能提升。innodb_flush_method=O_DIRECT(推荐设置)

设置InnoDB同步IO的方式:
1) Default – 使用fsync()。 2) O_SYNC 以sync模式打开文件,通常比较慢。 3) O_DIRECT,在Linux上使用Direct IO。可以显著提高速度,特别是在RAID系统上。避免额外的数据复制和double buffering(mysql buffering 和OS buffering)。innodb_thread_concurrency=16(如果满足这个值大约为cpu+磁盘数)*2,那暂时OK的,如果我们不清楚物理CPU和磁盘够成,这个参数不设置,用默认的也OK

用于限制能够进入innodb层的线程数

当进入innodb层调用read_row/write_row/update_row/delete_row时,会检查已经进入innodb的线程数:innodb_srv_conc_enter_innodb

如果已经满了,就会等待innodb_thread_sleep_delay毫秒尝试一次

如果再次失败,则进入到一个FIFO队列sleep。

当在innodb层完成操作后,会调用innodb_srv_conc_exit_innodb退出innodb层

当线程进入时,获得一段时间片innodb_concurrency_tickets,在时间片范围内,该线程就无需检测,直接进入innodb。

理论上讲,我们可以把innodb_thread_concurrency设置为(cpu数+磁盘数)*2,但这需要取决于具体的应用场景。

innodb_commit_concurrency ,用于限制在innodb层commit阶段的线程数,大多数情况下,默认值已经足够。

时间: 2025-01-21 08:13:11

MyISAM转innodb后的参数设置优化的相关文章

MyISAM和InnoDB引擎优化分析_Mysql

这几天喻名堂在学习mysql数据库的优化并在自己的服务器上进行设置,喻名堂主要学习了MyISAM和InnoDB两种引擎的优化方法,它们各有优缺点,一般在实际应用中将两种引擎结合起来使用效果会更好.喻名堂测试的硬件配置以及软件环境如下: 服务器型号:IBM S226 CPU:至强四核 内存:4G 硬盘:两个80G做RAID1 系统:windows server 2003 SP1 32位企业版 Mysql版本:5.5 根据自己服务器的实际情况,优化过和参数如下: 一.公共选项 skip-extern

浅谈MyISAM 和 InnoDB 的区别与优化_Mysql

MyISAM 和 InnoDB 的基本区别 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可.注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的. 3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他

MyISAM和InnoDB不同与优化方法

简要介绍来自官网. 简要介绍:MyIsam MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.(注意MySQL 5.1不支持ISAM). 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件的扩展名是.MYI (MYIndex). 简要介绍:InnoDB InnoDB给MySQL提供 了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.In

【SQL 性能优化】参数设置

QL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE    10.2.0.4.0      Production TNS for IB

mysql 同一版本,同样的库,同样的参数设置,却不同的优化策略是为什么?

问题描述 如题:mysql 同一版本,同样的库,同样的参数设置,却不同的优化策略是为什么? 同一句sql,在247的服务器上,正常的解析,使用正常索引,小表驱动大表, 在181的服务器上,不能正常的解析,没使用索引,大表驱动小表. 问题补充:yanq12 写道 解决方案 引用关键的是他有时候是按照大表驱动小表的解析方式,有时候是按照小表驱动大表的解析方式,来解析这个应该是优化器的问题吧,估计是大表驱动小表和小表驱动大表效率差不多....至于没使用索引的话,可能是因为优化器认为全表扫描效率比索引高

MySQL my.cnf参数配置优化详解

MySQL my.cnf参数配置优化详解 本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化. 注:你的MySQL 版本可能和这里用的不同,所以有些参数会废弃,有些被替代,当发现启动异常或者使用异常时,请取消某些配置. # 客户端 # 以下选项会被MySQL客户端应用读取.注意只有M

MySQL 5.5.x my.cnf参数配置优化详解_Mysql

一直有耳闻MySQL5.5的性能非常NB,所以近期打算测试一下,方便的时候就把bbs.kaoyan.com升级到这个版本的数据库.今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下,大家在对mysql服务器进行优化的时候可以作为参考,并根据实际情况对其中的一些参数进行调整.(特别备注:以下原文中有些参数事实上不适用于mysql5.5,不知

Mysql服务器安装后my.ini配置优化

Mysql服务器安装完后的参数调整以及如何优化Mysql性能,直接使用默认的my.cnf参数,当然在大多数情况下是没有问题的.想要通过调整参数获得性能上的提升以及资源的合理利用,请关注下面这几个参数: key_buffer_size 这个参数对于MyISAM引擎来说是非常重要的,如果你的服务器主要是用MyISAM引擎的,建议将该值设置为内存的30%-40%.很多优化工具是把系统当前的索引总大小计算得出的一个值,需要注意的是该值只缓存索引数据,而MyISAM使用操作系统页面缓存来缓存元数据,所以你

详解CentOS下MySQL的my.cnf参数配置优化

PS:本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化. # 以下选项会被MySQL客户端应用读取. # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时候指定这些选项. # [