《MySQL DBA修炼之道》——2.6 MySQL的主要参数设置-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《MySQL DBA修炼之道》——2.6 MySQL的主要参数设置

简介: 本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第2章,第2.6节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。MySQL的主要参数设置 研发、测试人员往往熟悉SQL语句的撰写、表结构的设计,而不熟悉MySQL的配置,这可能会导致一些困惑,比较常见的是,在线上运行良好的查询,到了线下就变慢了,下面介绍几个常见的参数配置。

本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第2章,第2.6节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6 MySQL的主要参数设置

研发、测试人员往往熟悉SQL语句的撰写、表结构的设计,而不熟悉MySQL的配置,这可能会导致一些困惑,比较常见的是,在线上运行良好的查询,到了线下就变慢了,下面介绍几个常见的参数配置。一般情况下,配置好这几个参数可以满足大部分开发环境和测试环境的要求。
(1)innodb_buffer_pool_size
为了提升写性能,可以把要写的数据先在缓冲区(buffer)里合并,然后再发送给下一级存储。这样做可提高I/O操作的效率。InnoDB Buffer Pool就是InnoDB用来缓存它的数据和索引的内存缓冲区,可由innodb_buffer_pool_size设置其大小。理论上,将这个值设置得越高,访问数据需要的磁盘I/O就越少。常见的做法是让这个值大于热点数据,这样可以获得比较好的性能。如果不清楚环境的数据量和访问模式,建议将其设置为机器物理内存大小的70%~80%。
(2)innodb_log_file_size
日志组里每个日志文件的大小。在32位计算机上日志文件的合并大小必须小于4GB,默认大小是5MB,在生产环境下,这个值太小了。官方文档推荐的值为从1MB到1/N的缓冲池大小,其中N是日志组里日志文件的数目(由innodb_log_files_in_group变量来确定,一般默认为2)。值越大,在缓冲池中需要检查点刷新的行为就越少,因此也越节约磁盘I/O,但更大的日志文件也意味着在崩溃时恢复得更慢。建议将日志文件的大小设置为256MB或更大,这样可以满足一般情况下的需要。
(3)innodb_flush_log_at_trx_commit,建议设置为2
这个选项的默认值是1。当设置为2时,在每个事务提交时,日志缓冲被写到文件中,但不对日志文件做刷新到磁盘的操作。对日志文件的刷新每秒才发生一次。所以,理论上,操作系统崩溃或掉电只会丢失最后一秒的事务。
(4)sync_binlog,建议设置为0
如果是autocommit模式,那么每执行一个语句就会向二进制日志写入一次,否则每个事务写入一次。如果sync_binlog的值为正,那么每当sync_binlog参数设定的语句或事务数被写入二进制日志后,MySQL服务器就会将它的二进制日志同步到硬盘上。默认值是0,不与硬盘同步。值为1是最安全的选择,因为崩溃时,你最多丢掉二进制日志中的一个语句或事务。但是,这也是最慢的选择,成本昂贵。
另外,在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写则不敏感。我们应设置变量lower_case_table_names=0,这也是Unix/Linux系统的默认值。开发环境、测试环境的MySQL也建议部署在Unix/Linux平台,尽可能和生产环境一致。


6ebdeb80bbe187f13b5a95d873672acc90359ad6

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: