innodb的innodb_buffer_pool_size和MyISAM的key_buffer_size(转自:http://www.java123.net/898181.html)

一. key_buffer_size 对MyISAM表来讲很是重要。mysql

若是只是使用MyISAM表,能够把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载 -- 记住,MyISAM表会使用操做系统的缓存来缓存数据,所以须要留出部份内存给它们,不少状况下数据比索引大多了。尽管如此,须要老是检查是否全部的 key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的状况是很是少的。这么作太浪费了。若是你不多使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。
key_buffer_size = 2000M
或者
key_buffer_size = 1G

key_buffer_size设置和说明:http://blog.csdn.net/rainysia/article/details/8767946sql

二. innodb_buffer_pool_size 对Innodb表来讲很是重要。缓存

Innodb相比MyISAM表对缓冲更为敏感。MyISAM能够在默认的 key_buffer_size 设置下运行的能够,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。因为Innodb把数据和索引都缓存起来,无需留给操做系统太多的内存,所以若是只须要用Innodb的话则能够设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 -- 若是你的数据量不大,而且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了。
innodb_buffer_pool_size = 8000M
或者
innodb_buffer_pool_size = 15G

 

三.其余安全

其余牛人的解释
#InnoDB存储数据字典、内部数据结构的缓冲池,16MB 已经足够大了。
innodb_additional_mem_pool_size = 16M
 
#InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等
#若是是专用的DB服务器,且以InnoDB引擎为主的场景,一般可设置物理内存的50%
#若是是非专用DB服务器,能够先尝试设置成内存的1/4,若是有问题再调整
#默认值是8M,很是坑X,这也是致使不少人以为InnoDB不如MyISAM好用的缘故
innodb_buffer_pool_size = 4G
 
#InnoDB共享表空间初始化大小,默认是 10MB,也很是坑X,改为 1GB,而且自动扩展
innodb_data_file_path = ibdata1:1G:autoextend
 
#若是不了解本选项,建议设置为1,能较好保护数据可靠性,对性能有必定影响,但可控
innodb_flush_log_at_trx_commit = 1
#抱 怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都须要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于不少运用,特别是从MyISAM表转过来的是能够的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,因此你通常不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即便MySQL挂了也可能会丢失事务的数据。而值2只会在整个操做系统 挂了时才可能丢数据
 
#InnoDB的log buffer,一般设置为 64MB 就足够了
innodb_log_buffer_size = 64M
 
#InnoDB redo log大小,一般设置256MB 就足够了
innodb_log_file_size = 256M
 
#InnoDB redo log文件组,一般设置为 2 就足够了
innodb_log_files_in_group = 2
 
#启用InnoDB的独立表空间模式,便于管理
innodb_file_per_table = 1
 
#启用InnoDB的status file,便于管理员查看以及监控等
innodb_status_file = 1
 
#设置事务隔离级别为 READ-COMMITED,提升事务效率,一般都知足事务一致性要求
transaction_isolation = READ-COMMITTED 
 
 
[mysqld]
#禁止开启自动事务
init_connect='SET autocommit=0'
innodb_buffer_pool_size = 4G
key_buffer_size = 1G
user            = mysql
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
skip-external-locking
#bind-address            = 127.0.0.1
#
# * Fine Tuning
#
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
相关文章
相关标签/搜索