MariaDB / MySQL 配置错误

MariaDB / MySQL 配置错误

我目前在专用服务器上有一个 LAMP,但 MariaDB(MySQL)存在严重问题。

我已经安装了一个每天有 10 万次页面浏览量的网站,并且由于查询的需要,数据库服务器必须具有缓存,否则网站速度会非常慢。

问题是我在文件的参数配置上存在错误:

/etc/my.cnf.d/server.cnf

服务器上升到100% CPU100% 内存,不保存缓存而崩溃。

Hardware
Server type: Dedicated
CPU: Xeon E5-2650 v4 (x2)
RAM: 128GB
SSD: 2T

Software 
Os: CentOS 7
Server: MariaDB v10.11.4
Tables: 66
Rows: 346,215,143
Engine: innoDB
Size data base: 74,837 MB
Collation database: utf8mb4_general_ci
Callation tables: utf8mb4_general_ci

这是文件:

[server]

[mysqld]
datadir                         = /var/lib/mysql
socket                          = /var/lib/mysql/mysql.sock
log-error                       = /var/log/mariadb/mariadb.log
pid-file                        = /var/lib/mysql/hippo.pid
port                            = 5000
#skip-networking
symbolic-links                  = 0
bind-address                    = 0.0.0.0
default_authentication_plugin   = mysql_native_password
skip-name-resolve               = 1 
max_connections                 = 15000
max_user_connections            = 15000
query_cache_type                = 1
query_cache_size                = 64G
query_cache_limit               = 2G
innodb_file_per_table           = ON
innodb_buffer_pool_size         = 46G
innodb_flush_method             = O_DIRECT
innodb_read_io_threads          = 16
innodb_write_io_threads         = 16
innodb_io_capacity              = 5000
open_files_limit                = 32768
innodb_open_files               = 32768
innodb_log_buffer_size          = 32M
innodb_log_file_size            = 19G
innodb_data_file_path           = ibdata1:10M:autoextend
innodb_flush_log_at_timeout     = 3
key_buffer_size                 = 16G
sort_buffer_size                = 16G
read_buffer_size                = 16G
read_rnd_buffer_size            = 16G
join_buffer_size                = 128M 
thread_cache_size               = 64
tmp_table_size                  = 32G
max_heap_table_size             = 32G
wait_timeout                    = 300
net_read_timeout                = 300
net_write_timeout               = 600
table_open_cache                = 32768

[mysqld_safe]
open_files_limit                = 32768

[galera]

[embedded]

[mariadb]

[mariadb-10.3]

谢谢 :)

答案1

每秒几页应该不成问题。(每秒 1K 页可能会有问题。)

许多设置可能会溢出您的大内存,因此应该缩小:

max_connections                 = 15000  --> 200
max_user_connections            = 15000  --> 200
query_cache_size                = 64G  --> 100M
query_cache_limit               = 2G   --> 50M
innodb_buffer_pool_size         = 46G  --> 70G (yes, increase)
key_buffer_size                 = 16G  --> 50M (if not using MyISAM)
sort_buffer_size                = 16G  --> 1G
read_buffer_size                = 16G  --> 1G
read_rnd_buffer_size            = 16G  --> 1G
tmp_table_size                  = 32G  --> 1G
max_heap_table_size             = 32G  --> 1G

当“查询缓存”很大时,它的效率会不太高。

每个连接都会消耗大量 RAM,因此 15000*“lots” 可能会导致内存问题。由于您每秒仅传送几页,因此您不需要超过几个连接。

buffer_pool 是可能的缓存机制;大部分 RAM 应该分配给它。如果 RAM 达到 100%,则进一步减少它。

打开SlowLog查看哪些查询最慢;然后让我们看看所涉及的索引。

如果您在同一台服务器上运行 Web 服务器(Apache?),那么它的配置可能也过度了。

答案2

这确实是一个评论,但是它有点太长了,不适合放在小盒子里。

我建立了一个日均浏览量达 10 万的网站

这是一个毫无意义的指标。

不保存缓存并崩溃

崩溃是什么意思?核心转储?OOM Killer?还是其他?

您肯定存在能力问题 - 如何解决这些问题需要花费比在这里快速发帖更多的时间、信息和精力。

如果您的内存使用率达到 100%,则说明您的配置有误 - 但不一定是因为您的数据库配置有误。虽然 mysql 的最大连接数太高,但您需要在 Web 服务器上解决这个问题。

如果不详细了解工作负载,就不可能判断数据库中的其他设置是否合适或错误。

相关内容