我有一個Drupal應用程序,它已經在單個MySQL數據庫服務器上運行了12個月,並且性能相對較好(除峯值負載事件外)。我們需要能夠支持比當前的數據庫服務器更高的峯值,而在32GB的情況下,從簡單的垂直擴展單個數據庫服務器就沒有多少收穫。MariaDB Galera集羣服務器以100%CPU和負載上升運行
我們決定設置一個具有2x 32GB實例的新MariaDB Galera集羣。我們儘可能將配置與即將成爲obselete的數據庫服務器進行匹配。
遷移到新數據庫服務器後,我們注意到這些實例的CPU使用率始終保持在100%,並且負載穩步增加。在1小時的過程中,平均負載從0.1到150.
最初我們認爲它可能與服務器之間的同步有關,但即使關閉了1臺服務器,也沒有發生同步,它仍然是最大的只要Web應用程序向它發出請求就可以使用CPU。
經過大量實驗後,我發現減少一些配置選項對CPU使用率和負載有着深遠的影響。在做出以下更改後,兩種情況下的平均負載穩定在4到6之間。
的問題
- 哪些是在新老服務器之間的CPU使用率如此巨大差異的一些可能的原因,儘管本質上從舊服務器遷移的配置?
- 負載目前在4到6之間徘徊(這對我們的網站來說是一個低流量期)。我應該考慮怎樣降低這個價值,並確保當這個網站被一些真正的流量所擊中時,它不會崩潰?
配置改變
innodb_buffer_pool_instances
- 原始值:(有498個表總量中的所有數據庫)
- 新值:
table_cache
- 原始值:
- 新值:
MAX_CONNECTIONS
- 原始值:千
- 新值:
當前配置
下面是從服務器/etc/mysql/my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_type=1
bind-address=0.0.0.0
max_connections = 400
wait_timeout = 600
key_buffer_size = 16M
max_allowed_packet = 16777216
max_heap_table_size = 512M
table_cache = 92
thread_stack = 196608
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_limit = 1048576
query_cache_size = 128M
expire_logs_days = 10
general_log = 0
max_binlog_size = 10485760
server-id = 0
innodb_file_per_table
innodb_buffer_pool_size = 25G
innodb_buffer_pool_instances = 4
innodb_log_buffer_size = 8388608
innodb_additional_mem_pool_size = 8388608
innodb_thread_concurrency = 16
net_buffer_length = 16384
sort_buffer_size = 2097152
myisam_sort_buffer_size = 8388608
read_buffer_size = 131072
join_buffer_size = 131072
read_rnd_buffer_size = 262144
tmp_table_size = 512M
long_query_time = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
# Galera Provider Configuration
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#wsrep_provider_options="gcache.size=32G"
# Galera Cluster Configuration
wsrep_cluster_name="xxx"
wsrep_cluster_address="gcomm://xxx.xxx.xxx.107,xxx.xxx.xxx.108"
# Galera Synchronization Congifuration
wsrep_sst_method=rsync
#wsrep_sst_auth=user:pass
# Galera Node Configuration
wsrep_node_address="xxx.xxx.xxx.107"
wsrep_node_name="xxx01"
[mysqldump]
quick
quote-names
max_allowed_packet = 16777216
[isamchk]
key_buffer_size = 16777216
是的,你在這兩點上都是正確的。 Percona工程師還建議我們禁用QC,而table_open_cache是該配置的正確名稱。 – nicksanta 2015-03-14 06:08:27