my-innodb-heavy-4G.cnf配置文件详解

来源:互联网 发布:防御矩阵2ipone 编辑:程序博客网 时间:2024/04/20 14:17
[client] #客户端
port            = 3306 #客户端连接端口
socket          = /tmp/mysql.sock #客户端套接字文件的路径

[mysqld]
port            = 3306 #服务器监听端口
socket          = /tmp/mysql.sock  #服务器套接字文件的路径

back_log = 50 back_log  # 可以把大量的mysql连接放在监听队列里,在mysql连接管理器线程处理之前。
如果存在非常高的连接频率,并且有“connection refused”错误,需要增加这个值

#skip-networking  #禁止TCP/IP连接,增加安全性。所有通信都要经过Unix socket或者命名管道方式

max_connections = 100  #MySQL的最佳并发连接数,即使达到上限,也会允许超级用户连接
 
max_connect_errors = 10  #允许每个客户端的最大错误连接数,达到上限后,服务器会堵塞,通过运行"FLUSH HOSTS" 或者重启mysqld服务可解堵塞

在连接中错误密码和其他错误都会导致这个值增加,可查看"Aborted_connects"值的计数
mysql>show global status like 'Aborted_connects'

table_open_cache = 2048 #所有线程打开mysql数据库表的最大数量,增加这个值,mysqld需要增加系统文件描述符的数量,文件描述符的大小至少是table_open_cache的两倍
#external-locking 启用外部文件级别锁。启用文件锁将会对性能有负面影响,因此只有当多个数据库运行在同一文件(某些限制依然生效)或者使用其他的软件在文件级别锁住MyISAM表

max_allowed_packet = 16M #服务器能处理的一次查询的最大规模,动态增加该值

biglog_cache_size = 1M #在事务中,二进制日志SQL语句的缓存大小。如果你经常用大的,多语句的事务,可以增加这个值以提高性能。
事务的所有语句都将缓存到这个二进制日志缓存中,并在执行"COMMIT"命令后写入二进制日志中。事务比这个值要大的话,硬盘的临时文件将会被使用
缓冲将在事务的第一次update语句后分配给每个连接。
max_heap_table_size = 64M 分配给内存中每个HEAP表的最大规模,这样保护了创造一个很大的表,耗光所有的内存资源。

read_buffer_size = 2M #该缓冲规模用于做全表扫描,如果做全表扫描,会将该缓冲规模分配给每个线程

read_rnd_buffer_size = 16M #对排序后的结果缓冲下来,从缓冲区中读取,避免从硬盘读取。将这个值设置的高些,可以大大提高性能。
读取时,分配给每个线程。

sort_buffer_size = 8M #排序缓冲区用于"ORDER BY" 和"GROUP BY"查询的性能。当排序后的数据不适合进入排序缓冲中,基于硬盘的排序将被使用
排序时分配给每个线程。
join_buffer_size = 8M #这个缓冲区用于"JOIN"的优化,JOINs在大多数情景中性能很差,将这个值设置的很大将提高系统的性能。

thread_cache_size = 8 # 这个参数设置了我们应该在缓存区中保存多少个线程以备重用。当一个客户端断开连接时,那么它将被放入缓冲区(缓冲区未满)
当有很大数量的连接时,将会大大减少线程的创建。(通常这个值对改善性能的影响不大)

thread_concurrency = 8 线程并发数。允许线程同时运行的数量。这个参数只有在支持线程并发的系统上有意义。(比如solaris)
应该设置线程并发数为CPU个数的2~4倍

query_cache_size = 64M 查询缓存用于缓存"SELECT"语句的执行结果,再有相同查询,将从缓冲区取出执行结果。如果有大量的相同查询操作并且极少的改变表,
启动查询缓存将极大的提高性能。mysql> show status like 'Qcache_lowmem_prunes';查看"Qcache_lowmem_prunes"检查是否满足你的负载。
如果你的表改动非常频繁,或者你的查询每次都不一样,将会降低系统性能。

query_cache_limit = 2M  #每个缓存数据最大为2M,这样避免了一个很大的缓存数据覆盖了其他的缓存数据

ft_min_worl_len = 4 编入全文索引的最小字符长度。如果你需要搜索更短的字符你可能希望减小这个参数。在你更改这个值后,需要重建你的FULLTEXT 索引

#memlock #内存锁,如果系统支持memlock()函数调用,在高内存使用下,可以启动该选项,获得良好的性能

default-storage-engine = MYISAM 建表默认使用的存储引擎

thread_stack = 192k #使用的线程堆栈大小。在连接的时候内存的总数总是预留的。Mysql自身通常需要不超过64K的内存,当业务
需要更多的堆栈内存时,需要设置更高的值。

transaction_isolation = REPEATABLE-READ 设置默认的事务隔离级别,可选的有:READ-UNCOMMITTED,READ-COMMITTED,REPEATABLE-READ,SERIALIZABLE

tmp_table_size #为临时表设置最大的内存,如果表的增长大于这个值,会自动刷新到硬盘。这个限制是针对单个表的
log-bin=mysql-bin#启用二进制日志。进行复制操作时,需要在MASTER上配置,如果你需要按时间点进行数据恢复,也需要二进制日志
binlog_format=mixed #定义日志格式

#log_slave_updates  #如果复制结构采用了(A->B->C),需要在B上启动这个参数。作用是从MASTER获取的二进制日志也写入自己的二进制文件中

#log #启用完整查询日志。每个查询(甚至是错误语法的查询)都会记录。通常禁用这个参数。

#log_warnings #把警告信息打印到错误日志中。排错时应该启动这个参数
#slow_query_log #慢查询是超过定义在"long_query_time"中时间的查询或者不用索引的查询,

#long_query_time = 2 #大于这个时间的查询都会被记录。这里不能用1这个值,

 

#*** MyISAM Specific options

key_buffer_size = 32M #Key Buffer的大小,用于缓存MyISAM tables的索引块。
不要把它设置超过可用内存的30%,因为系统也需要一些内存缓存行。即使你不用MyISM表,你也应该设置它到8-64M
用于内部临时表

bulk_insert_buffer_size = 64M #MyISAM 用特别的树状的缓存区让大量的插入操作更快。这个特性限制了每个线程中缓存树的大小,
设置为0将禁用这个优化。不要设置大于key_buffer_size的值

#myisam_sort_buffer_size = 128M #当MySQL需要在修复,优化,更改表和导入数据到空表时,会分配这个缓冲区,也会分配给每个线程,
因此不要把它设置的太大

#myisam_max_sort_file_size = 10G #当在修复,更改表或者导入数据需要重建索引,这时,mysql允许使用的最大的临时文件的规模。
如果文件大小超过这个值,索引会比较慢

#myisam_repair_thread = 1 #如果一个表超过一个索引,MyISAM会用超过一个线程并行的修复他们。只有多个CPU和大量内存时才有意义
#myisam_recover #自动检查和修复并关闭MyISAM表

#INNODB Specific options
#skip-innodb # 启用这个参数表示MySQL安装了innodb支持但不启用,这将节省内存和硬盘空间,并提升一些速度

#innodb_additional_mem_pool_size = 16M #增加额外的内存池,用于InnoDB存储源数据信息。如果InnoDB 需要更多的内存
将从系统中分配。现在的操作系统已经足够快了,不需要改变这个值。SHOW INNODB STATUS 将会显示现在的使用总数

#innodb_buffer_pool_size = 2G #InnoDB用一个一个缓冲池缓存索引和行数据。这个值设置的越大,磁盘I/O越少。在专用的数据库
服务器上你可以设置它的大小是物理内存大小的80%,不要设置太大,因为物理内存之间的竞争可能会导致分页。在32位的系统,每个进程被限制在
2-3.5G,因此不要设置太高

innodb_data_file_path = ibdata1:10M:autoextend #多个InnoDB数据文件,形成表空间。# 在很多情况下,单独的文件驱动器通常是很好的选择。


#innodb_data_home_dir = <directory> #设置InnoDB表空间文件的路径,默认是在MySQL的数据目录


innodb_write_io_threads = 8

innodb_read_io_threads = 8

#用于异步IO操作的IO线程的数量,这个参数在unix中被固定为8,但是在window硬盘中可以修改为更大的数字


#innodb_force_recover = 1 #如果碰到InnoDB表空间破坏,给该变量设置一个非零的值,将有可能转储表。

从1开始设置,慢慢增加直到可以成功的转储表。


#innodb_thread_concurrency = 16 #设置InnoDB的最大线程并发数。这个参数取决于程序,硬件和操作系统

设定的调度特性,太高值可能会导致线程崩塌


#innodb_flush_log_at_trx_commit = 1 #设置为1,每次commit提交,InnoDB都会同步事务日志到磁盘,提供完整的ACID性能

#如果你想降低安全值,可以运行在更小的事务级别,可以设置0或者2,减少磁盘I/O

#设置0意味着仅仅写入日志文件,日志文件同步到磁盘大约需要每秒一次。

#设置为2意味着每次commit都会写入日志文件,但是日志文件同步到磁盘,大约是每秒一次

innodb_log_buffer_size = 8M #innodb用于缓冲日志数据的缓冲区大小,如果它满了,Innodb将会刷新

到磁盘,不必设置太大


innodb_log_file_size = 256M #在一个日志组中,每个redo-log的大小。可以设置为buffer pool size的

25%-100%,避免不必要的刷新,重写日志文件。然而,越大的日志文件恢复起来越慢。


innodb_log_files_in_group = 3 日志组数,通常设置为2-3个


innodb_log_group_home_dir #指定redo-log存放位置,默认是MySQL的datadir目录,可以讲日志文件

指向一个专用的硬件设备上,以提高性能


innodb_max_dirty_pages_pct = 90 #在buffer pool中允许脏页的百分比,如果达到这个值,则启用刷新

这个一个软连接,不保证按这个值来执行


#innodb_flush_method=O_DSYNC #日志的刷新方法。表空间一直用重写的刷新逻辑。默认是"fdatasync"


#innodb_lock_wait_timeout = 120

Innodb为避免死锁的配置选项

[mysqldump]

# Do not buffer the whole result set in memory before writing it to

# file. Required for dumping very large tables

quick

max_allowed_packet = 16M


[mysql]

no-auto-rehash

# Only allow UPDATEs and DELETEs that use keys.

#safe-updates

[myisamchk]

key_buffer_size = 512M

sort_buffer_size = 512M

read_buffer = 8M

write_buffer = 8M

[mysqlhotcopy]

interactive-timeout

[mysqld_safe]

# Increase the amount of open files allowed per process. Warning: Make

# sure you have set the global system limit high enough! The high value

# is required for a large number of opened tables

open-files-limit = 8192












阅读全文
0 0