我一直在阅读有关如何优化我的数据库 (MySQL 5.6.51) 设置的文章,我发现了一篇建议尽可能增加key_buffer的文章。
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 1
performance-schema=0
max_allowed_packet=32M
open_files_limit=10000
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_file_per_table=1
key_buffer_size = 32M
default-storage-engine=MyISAM
query_cache_type=2
query_cache_size=128M
query_cache_limit=2M
Run Code Online (Sandbox Code Playgroud)
我应该保持这些设置不变吗?我正在管理我自己的网站数据库,但我不是一个合适的数据库管理员。
谢谢你的帮助。
编辑:对不起,我错误地将我的 MySQL 版本表示为 7.0.33,但那是我的 PHP 版本!(非常愚蠢的错误,我知道)。我在问题中更正了这一点。
查看您链接到的文章上的日期。这是从 2006 年开始的,也就是我们写这篇文章的 15 年前。当时 MySQL 的最新版本是 5.0.30。
该key_buffer_size配置选项仅适用于 MyISAM 表。它是为缓存 MyISAM 索引而分配的 RAM 大小。InnoDB 表不使用密钥缓冲区。
我注意到您的一项设置default-storage-engine=MyISAM表明您至少有一些 MyISAM 表,除非您已将每个表指定为 InnoDB。您可以检查每个表使用的引擎:
SELECT table_schema, table_name, engine
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');
Run Code Online (Sandbox Code Playgroud)
MySQL 中的默认存储引擎在 MySQL 5.5 中更改为 InnoDB,大约在 2010 年。在现代版本的 MySQL 中,有很多原因更喜欢使用 InnoDB 而不是 MyISAM。您应该使用 InnoDB,除非您有特定的理由不这样做,并且已经通过测量证明您需要使用 MyISAM。
您询问您的设置是否最适合具有 8GB RAM 的服务器。我们没有足够的关于您使用数据库的信息来了解这一点。
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 1
Run Code Online (Sandbox Code Playgroud)
你为什么要设置这个?您是否曾经使用慢查询日志来诊断性能问题?您是否定期轮换 slow.log 以便它不会继续填满您的存储空间(IMO,除非您具有自动日志轮换功能,否则不应允许生产服务器上存在任何日志)。
performance-schema=0
Run Code Online (Sandbox Code Playgroud)
为什么要禁用性能模式?在一些旧版本的 MySQL 中,它很慢,但已经修复并且没有理由禁用它。我不会在我操作的数据库中禁用它,即使是那些对性能非常敏感的数据库。
max_allowed_packet=32M
Run Code Online (Sandbox Code Playgroud)
这个够大吗?这意味着您不能有任何超过 32MB 的 SQL 查询,或返回大于 32MB 的行的查询结果集。你使用 BLOB/TEXT 列吗?
open_files_limit=10000
Run Code Online (Sandbox Code Playgroud)
你为什么要设置这个?您是否测量过任何表明默认 open_files_limit 不够的东西?你有几张桌子?你的典型数量是Threads_connected多少?你读过https://dev.mysql.com/doc/refman/8.0/en/table-cache.html
innodb_buffer_pool_size = 512M
Run Code Online (Sandbox Code Playgroud)
这是 1 GB 的一半,但您说您有一台具有 8GB RAM 的服务器。为什么不使用更多?另一方面,如果您的数据很小,512MB 可能绰绰有余。您还没有说明您在 InnoDB 表中存储了多少数据。
请注意,innodb 配置选项对 MyISAM 表没有影响,因此如果您仍然使用 MyISAM 表,则调整 innodb 选项没有任何好处。
innodb_log_file_size = 128M
Run Code Online (Sandbox Code Playgroud)
这够了吗?适当的日志文件大小主要取决于您的写入流量速率。此外,它必须至少是最大 BLOB/TEXT 数据大小的 10 倍。你有任何大的 BLOB/TEXT 列吗?
innodb_file_per_table=1
Run Code Online (Sandbox Code Playgroud)
这是当前 MySQL 版本中的默认设置。那么,如果它是默认值,为什么还要在选项文件中指定它呢?
key_buffer_size = 32M
Run Code Online (Sandbox Code Playgroud)
key_buffer_size如果您使用 InnoDB 表,则没有必要进行调整。8.0版本之前的mysql系统架构中还有一些MyISAM表,但是这些表很小,并且以其他方式缓存。关键缓冲区可能并不重要。
default-storage-engine=MyISAM
Run Code Online (Sandbox Code Playgroud)
我建议不要将默认存储引擎设置为 MyISAM。在大多数基准测试中它比 InnoDB 慢,并且不支持 RDBMS 的 ACID 属性。
query_cache_type=2
query_cache_size=128M
query_cache_limit=2M
Run Code Online (Sandbox Code Playgroud)
不推荐使用查询缓存,因为已发现它会导致性能瓶颈。我建议设置query_cache_type=0和query_cache_size=0。这在 MySQL 8.0 中不是必需的,因为查询缓存已完全删除。
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |