Mysql

問答動態網站的 MySQL Tuner 設置

  • January 13, 2022

我在已經連續工作 1 週的伺服器上執行了 mysqltuner 腳本。

我分享我得到的值和現有的 mysql 配置文件。你可以幫幫我嗎?當我在網際網路上查看時,我看不到非常詳細的解決方案。

MySQL 調諧器輸出

[--] Skipped version check for MySQLTuner script
[OK] Logged in using credentials from Debian maintenance account.
[OK] Currently running supported MySQL version 5.7.32-0ubuntu0.18.04.1
[OK] Operating on 64-bit architecture

-------- Log file Recommendations ------------------------------------------------------------------
[!!] log_error is set to stderr MT can't read stderr

-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in MyISAM tables: 173.9K (Tables: 5)
[--] Data in InnoDB tables: 1.0G (Tables: 110)
[OK] Total fragmented tables: 0

-------- Analysis Performance Metrics --------------------------------------------------------------
[--] innodb_stats_on_metadata: OFF
[OK] No stat updates during querying INFORMATION_SCHEMA.

-------- Security Recommendations ------------------------------------------------------------------
[OK] There are no anonymous accounts for any database users
[!!] User 'root@localhost' has no password set.
[!!] There is no basic password file list!

-------- CVE Security Recommendations --------------------------------------------------------------
[--] Skipped due to --cvefile option undefined

-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 3d 6h 34m 46s (40M q [143.364 qps], 346K conn, TX: 133G, RX: 8G)
[--] Reads / Writes: 94% / 6%
[--] Binary logging is disabled
[--] Physical Memory     : 3.9G
[--] Max MySQL memory    : 51.7G
[--] Other process memory: 0B
[--] Total buffers: 1.4G global + 257.8M per thread (200 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[!!] Maximum reached memory usage: 4.7G (121.05% of installed RAM)
[!!] Maximum possible memory usage: 51.7G (1342.95% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
[OK] Slow queries: 0% (0/40M)
[OK] Highest usage of available connections: 6% (13/200)
[OK] Aborted connections: 0.00%  (0/346968)
[--] Skipped name resolution test due to skip_networking=ON in system variables.
[!!] Query cache may be disabled by default due to mutex contention.
[OK] Query cache efficiency: 72.5% (27M cached / 38M selects)
[!!] Query cache prunes per day: 105070
[OK] Sorts requiring temporary tables: 0% (720 temp sorts / 421K sorts)
[OK] No joins without indexes
[OK] Temporary tables created on disk: 18% (35K on disk / 188K total)
[OK] Thread cache hit rate: 99% (13 created / 346K connections)
[OK] Table cache hit rate: 95% (1K open / 1K opened)
[OK] table_definition_cache(2048) is upper than number of tables(394)
[OK] Open file limit used: 0% (48/5K)
[OK] Table locks acquired immediately: 100% (789 immediate / 789 locks)

-------- Performance schema ------------------------------------------------------------------------
[--] Performance schema is disabled.
[--] Memory used by P_S: 0B
[--] Sys schema is installed.

-------- ThreadPool Metrics ------------------------------------------------------------------------
[--] ThreadPool stat is disabled.

-------- MyISAM Metrics ----------------------------------------------------------------------------
[!!] Key buffer used: 18.2% (48M used / 268M cache)
[OK] Key buffer size / total MyISAM indexes: 256.0M/102.0K
[OK] Read Key buffer hit rate: 99.8% (8K cached / 16 reads)

-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 4
[OK] InnoDB File per table is activated
[!!] InnoDB buffer pool / data size: 1.0G/1.0G
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (9.375 %): 48.0M * 2/1.0G should be equal to 25%
[OK] InnoDB buffer pool instances: 1
[--] Number of InnoDB Buffer Pool Chunk : 8 for 1 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 99.97% (2850068636 hits/ 2850872999 total)
[!!] InnoDB Write Log efficiency: 23.15% (238067 hits/ 1028533 total)
[OK] InnoDB log waits: 0.00% (0 waits / 790466 writes)

-------- AriaDB Metrics ----------------------------------------------------------------------------
[--] AriaDB is disabled.

-------- TokuDB Metrics ----------------------------------------------------------------------------
[--] TokuDB is disabled.

-------- XtraDB Metrics ----------------------------------------------------------------------------
[--] XtraDB is disabled.

-------- Galera Metrics ----------------------------------------------------------------------------
[--] Galera is disabled.

-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] Binlog format: ROW
[--] XA support enabled: ON
[--] Semi synchronous replication Master: Not Activated
[--] Semi synchronous replication Slave: Not Activated
[--] This is a standalone server

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
   Set up a Secure Password for root@localhost user: SET PASSWORD FOR 'root'@'SpecificDNSorIp' = PASSWORD('secure_password');
   Reduce your overall MySQL memory footprint for system stability
   Dedicate this server to your database for highest performance.
   Increasing the query_cache size over 128M may reduce performance
   Performance schema should be activated for better diagnostics
   Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: https://bit.ly/2TcGgtU
Variables to adjust:
 *** MySQL's maximum memory usage is dangerously high ***
 *** Add RAM before increasing MySQL buffer variables ***
   query_cache_size (=0)
   query_cache_type (=0)
   query_cache_size (> 128M) [see warning above]
   performance_schema = ON enable PFS
   innodb_buffer_pool_size (>= 1.0G) if possible.
   innodb_log_file_size should be (=128M) if possible, so InnoDB total log files size equals to 25% of buffer pool size.

MySQL 配置文件

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /var/tmpfs
tmp_table_size=2K
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address        = 127.0.0.1

performance_schema=off
skip-networking
tmpdir=/tmp
max_connections=200
max_user_connections=200
key_buffer_size=256M
myisam_sort_buffer_size=128M
join_buffer_size=1M
read_buffer_size=128K
sort_buffer_size=128K
table_open_cache=3072
thread_cache_size=1024
table_definition_cache=2048
open_files_limit=52000
wait_timeout=120
connect_timeout=120
max_heap_table_size=128M
max_allowed_packet=268435456
query_cache_limit=4M
query_cache_size=128M
query_cache_type=1
interactive_timeout=120
max_connect_errors=15
local-infile=0
#innodb_additional_mem_pool_size=64M
innodb_flush_method=O_DIRECT
default-storage-engine=InnoDB
innodb_buffer_pool_size=1000M
innodb_buffer_pool_instances=2  
innodb_log_buffer_size=16M
innodb_file_per_table=1
innodb_file_format = barracuda
innodb_thread_concurrency=4
innodb_flush_log_at_trx_commit = 1
innodb_write_io_threads=2
innodb_read_io_threads=2

#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

[isamchk]
key_buffer=512M
sort_buffer_size=2M
read_buffer=2M
write_buffer=2M

[myisamchk]
tmpdir=/tmp
key_buffer=512M
sort_buffer=2M
read_buffer=2M
write_buffer=2M

如果你能幫忙,我會很高興。我應該更改哪些設置?

問題是什麼?如果是“慢”查詢,那麼我們需要查看它們。一些可調參數比需要的要高,所以這裡有一些建議的更改:

key_buffer_size = 50M
max_connections = 100
table_open_cache = 1000
table_definition_cache = 400
temp_table_size = 40M
max_heap_table_size = 40M
innodb_buffer_pool_instances = 1
query_cache_size = 40M
thread_cache_size = 10
innodb_buffer_pool_size = 1200M

如需更深入的分析:http: //mysql.rjweb.org/doc.php/mysql_analysis

XtrmuS 請應用 2020 年 11 月 1 日的 Rick James 建議進行改進。

為了在幾天內提高下一次性能,需要考慮的其他建議,

join_buffer_size=128K  # from 1M for this per connection RAM footprint reduction
thread_cache_size=100  # from RJ suggestion of 10 - to reduce threads_created count
query_cache_type=0  # for OFF from ON to conserve CPU cycles
query_cache_size=0  # from 128M to conserve CPU cycles and eliminate Query cache prunes per day
query_cache_limit=0  # from 4M - with QC OFF you will conserve this RAM
innodb_thread_concurrency=0  # from 4 to allow auto size by MySQL
innodb_change_buffer_max_size=40  # from 25 percent to accomodate high volume INSERTS

請查看配置文件、網路配置文件以獲取聯繫資訊和免費下載的實用程序腳本以幫助進行性能調整。

引用自:https://dba.stackexchange.com/questions/279014