以下是我的默认生产MySQL配置文件(my.cnf)用于以 InnoDB 作为默认存储引擎的纯 UTF-8 设置。

[server]
bind-address=127.0.0.1
innodb_file_per_table
default-character-set=utf8
default-storage-engine=innodb

该设置执行以下操作:

  1. 绑定到 localhost:3306(环回)而不是默认的 *:3306(所有接口)。这样做是为了增加安全性。
  2. 为每个表设置一个表空间。这样做是为了增加可维护性。
  3. 将默认字符集设置为 UTF-8。默认情况下完成是为了轻松国际化。
  4. 将默认存储引擎设置为 InnoDB。完成后默认允许行级锁定。

假设您可以通过添加最多三 (3) 个配置参数来进一步改进设置。您会添加哪些内容以及为什么?

在这种情况下,改进意味着性能改进、可靠性改进或易用性/易于维护性的提高。您可以假设运行 MySQL 实例的计算机将具有 1000 MB RAM。

有帮助吗?

解决方案

缓存更多数据:

innodb_buffer_pool_size = 512M

如果你写入大量数据:

innodb_log_file_size = 128M

, ,避免过多的日志切换。

无论如何,我不会添加第三个,所有其他都取决于。

其他提示

为 InnoDB 分配比默认 8M 更多的内存(使用 innodb_buffer_pool_size)无疑是一种增强。关于该值,在您的专用数据库服务器上,您可以将其设置为 RAM 的 80%,并且该值设置得越高,与硬盘的交互就越少。只是为了给我两分钱,我想提一下,您可以通过调整以下值来提高性能 innodb_flush_log_at_trx_commit, ,但是牺牲了 ACID 合规性......根据 MySQL手册:

如果Innodb_flush_log_at_trx_commit的值为0,则将日志缓冲区每秒写入日志文件,然后在日志文件上执行磁盘操作,但是在事务提交中什么也没有完成。

因此,您可能会由于崩溃或任何故障而丢失一些未正确写入数据库的数据。再次根据MySQL手册:

但是,InnoDB的崩溃恢复不会受到影响,因此无论价值如何,崩溃恢复确实有效。

所以,我建议:

innodb_flush_log_at_trx_commit = 0

最后,如果您的连接率很高(即如果您需要配置 MySQL 以支持访问数据库的 Web 应用程序),那么您应该考虑将最大连接数增加到 500 等。但由于这是或多或少微不足道且众所周知的事情,所以我想强调的重要性 back_log 以确保连通性。

我希望这些信息能够帮助您优化数据库服务器。

增加 innodb 缓冲池大小,尽可能大:

innodb_buffer_pool_size=768M

您还需要一些临时表的关键缓冲区空间:

key_buffer_size=32M

其他取决于您对数据库所做的事情,但 table_cache 或 query_cache_size 将是其他一些潜力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top