我有一个专用服务器,我从中运行我的网站。它有 32GB 内存、Xeon E5-1650 3.2Ghz(6 核、12 HT)和 RAID 1 中的两个 3TB 驱动器。
我正在运行 Percona 5.7.18
我 99% 的表都是 InnoDB
我的 ibdata1 文件是 500MB。
它主要是 SELECT 查询,但也有一些非常复杂的连接/查询。不过也有一定比例的 INSERT/UPDATE。
服务器花费一些时间来调整用户上传的 JPEG 文件的大小,因此在分配内存等时我需要注意这一点。
我还有什么可以告诉你的吗?
我确实计划在某个时候实现一些像样的 webapp 级缓存,但同时希望改进 mysql 配置。
该网站在交通正常的日子里运行得很好,但在繁忙的日子里(比如今天......)可能会有点挣扎
我是一个单独的开发人员,所以全栈而且分布很薄,并且很乐意承认我的 DBA 技能相当差。我可以写一个像样的查询,但我对服务器设置一无所知。我的 my.cnf 中的内容是多年来从各种不同来源拼凑而成的,我猜它远非最佳!
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
datadir = /var/lib/mysql
skip-name-resolve
max-allowed-packet = 16M
max-connect-errors = 1000000
# is this a silly thing to do..?
tmpdir = /dev/shm
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
character-set-client-handshake = FALSE
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
ft_min_word_len = 2
group_concat_max_len = 4096
max_connections = 500
tmp-table-size = 32M
max-heap-table-size = 32M
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
join_buffer_size = 2M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
slow-query-log = 1
long-query-time = 1
slow-query-log-file = /var/lib/mysql/slow_log
log-error = /var/lib/mysql/mysite.err
max_allowed_packet = 256M
query_cache_size = 268435456
query_cache_limit = 1048576
query_cache_type = 1
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 12
innodb_read_io_threads = 12
innodb_write_io_threads = 12
thread_pool_size = 24
sql_mode = ""
[mysqld_safe]
log-error=/var/lib/mysql/mysite.err
pid-file=/var/run/mysqld/mysqld.pid
任何帮助/指导将不胜感激,我喜欢学习,更重要的是我需要学习!
谢谢!
32GB RAM,12G buffer_pool --> 剩余大量空间用于调整图像大小。
12G buffer_pool、0.5GB ibdata1 和 5.7 -->
innodb_file_per_table
可能是ON
. 是吗?如果是这样,您没有告诉我们您拥有多少数据。查看.ibd
文件。query_cache_size = 256M
可能是坏的。 对表的任何写入都会导致清除该表的所有QC 条目。清除与 QC 的大小成正比。保持在 50M 以下。(或将其关闭。)经验法则:“不要将缓存放在缓存前面。” MySQL 在内部做了很多缓存;添加 webapp 级缓存可能无济于事,并且可能会从重要的 buffer_pool 中抢走 RAM。
你知道你是否受 I/O 限制吗?受 CPU 限制?
我看到你有慢日志。用pt-query-digest总结一下。然后,让我们讨论最糟糕的几个查询。 修复慢速查询比任何调优更有可能提高性能。
但是,如果您需要更多调整建议,让我们看看
GLOBAL STATUS
. 特别是,请遵循此处的说明。