私のmysqlは、CPUごとに約70〜80%と約5%のメモリを使用しており、高トラフィックの場合、ウェブサイトの読み込みに時間がかかりすぎる
誰かが私を助けてくれませんか?
私のサーバーは32コアのRAMを搭載した8コアで、cpanel/cloudlinuxでcentos 6.9を使用しています
ここに私のmy.cnfとmysqltunerログがあります
[mysqld]
innodb_file_per_table=1
local-infile=0
tmpdir =/dev/shm
max_connections = 1024
max_user_connections=650
key_buffer_size = 1024M
myisam_sort_buffer_size = 64M
#default-storage-engine=MyISAM
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 256K
thread_cache_size = 384
wait_timeout = 20
connect_timeout = 10
tmp_table_size = 64M
max_heap_table_size = 64M
max_allowed_packet = 64M
net_buffer_length = 16384
max_connect_errors = 10
thread_concurrency = 16
concurrent_insert = 2
read_rnd_buffer_size = 786432
bulk_insert_buffer_size = 8M
query_cache_limit = 7M
query_cache_size = 64M
query_cache_type = 1
query_prealloc_size = 262144
query_alloc_block_size = 65536
transaction_alloc_block_size = 8192
transaction_prealloc_size = 4096
max_write_lock_count = 16
innodb_buffer_pool_size=8G #75 % of RAM
innodb_flush_log_at_trx_commit=2
innodb_thread_concurrency=8 # of cpus
innodb_flush_method=O_DIRECT
[mysqld_safe]
open_files_limit = 8192
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer = 384M
sort_buffer = 384M
read_buffer = 256M
/////////////////////////////
そしてこれがmysqltunerの出力です
--------パフォーマンスメトリクス---------------------------------------- -------------------------------
[--] Up for: 2d 3h 25m 54s (23M q [127.290 qps], 468K conn, TX: 138G, RX: 7G) [--] Reads / Writes: 89% / 11% [--] Binary logging is disabled [--] Physical Memory : 31.3G [--] Max MySQL memory : 12.9G [--] Other process memory: 3.9G [--] Total buffers: 9.1G global + 3.2M per thread (1024 max threads) [--] P_S Max memory usage: 555M [--] Galera GCache Max memory usage: 0B [OK] Maximum reached memory usage: 10.0G (31.77% of installed RAM) [OK] Maximum possible memory usage: 12.9G (41.28% of installed RAM) [OK] Overall possible memory usage with other process is compatible with memory available [OK] Slow queries: 0% (5K/23M) [OK] Highest usage of available connections: 8% (85/1024) [OK] Aborted connections: 0.55% (2598/468725) [!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance [!!] Query cache may be disabled by default due to mutex contention. [OK] Query cache efficiency: 61.7% (12M cached / 19M selects) [!!] Query cache prunes per day: 1008253 [OK] Sorts requiring temporary tables: 0% (2K temp sorts / 34M sorts) [!!] Joins performed without indexes: 150075 [!!] Temporary tables created on disk: 52% (577K on disk / 1M total) [OK] Thread cache hit rate: 99% (85 created / 468K connections) [!!] Table cache hit rate: 1% (2K open / 102K opened) [OK] Open file limit used: 24% (1K/8K) [OK] Table locks acquired immediately: 99% (38M immediate / 38M locks) -------- Performance schema ------------------------------------------------------------------------ [--] Memory used by P_S: 555.4M [--] Sys schema isn't installed. -------- ThreadPool Metrics ------------------------------------------------------------------------ [--] ThreadPool stat is disabled. -------- MyISAM Metrics ---------------------------------------------------------------------------- [!!] Key buffer used: 26.8% (287M used / 1B cache) [OK] Key buffer size / total MyISAM indexes: 1.0G/1.5G [OK] Read Key buffer hit rate: 100.0% (2B cached / 572K reads) [!!] Write Key buffer hit rate: 30.1% (2M cached / 899K writes) -------- InnoDB Metrics ---------------------------------------------------------------------------- [--] InnoDB is enabled. [--] InnoDB Thread Concurrency: 8 [OK] InnoDB File per table is activated [OK] InnoDB buffer pool / data size: 8.0G/1.2G [!!] Ratio InnoDB log file size / InnoDB Buffer pool size (1.171875 %): 48.0M * 2/8.0G should be equal 25% [OK] InnoDB buffer pool instances: 8 [--] InnoDB Buffer Pool Chunk Size not used or defined in your version [OK] InnoDB Read buffer efficiency: 100.00% (786635092 hits/ 786673138 total) [!!] InnoDB Write Log efficiency: 51.42% (236640 hits/ 460226 total) [OK] InnoDB log waits: 0.00% (0 waits / 223586 writes) -------- AriaDB Metrics ---------------------------------------------------------------------------- [--] AriaDB is disabled. -------- TokuDB Metrics ---------------------------------------------------------------------------- [--] TokuDB is disabled. -------- XtraDB Metrics ---------------------------------------------------------------------------- [--] XtraDB is disabled. -------- RocksDB Metrics --------------------------------------------------------------------------- [--] RocksDB is disabled. -------- Spider Metrics ---------------------------------------------------------------------------- [--] Spider is disabled. -------- Connect Metrics --------------------------------------------------------------------------- [--] Connect is disabled. -------- Galera Metrics ---------------------------------------------------------------------------- [--] Galera is disabled. -------- Replication Metrics ----------------------------------------------------------------------- [--] Galera Synchronous replication: NO [--] No replication slave(s) for this server. [--] This is a standalone server. -------- Recommendations ---------------------------------------------------------------------------
一般的な推奨事項:
Run OPTIMIZE TABLE to defragment tables for better performance OPTIMIZE TABLE `modsec`.`hits`; -- can free 382.777297973633 MB Total freed space after theses OPTIMIZE TABLE : 382.777297973633 Mb Set up a Secure Password for user@Host ( SET PASSWORD FOR 'user'@'SpecificDNSorIp' = PASSWORD('secure_password'); ) Restrict Host for user@% to user@SpecificDNSorIp
アカウントをIPまたはサブネットのみで構成し、skip-name-resolve = 1で構成を更新します
常にインデックスを利用するように結合クエリを調整する
調整を行うときは、tmp_table_size/max_heap_table_sizeを等しくします
SELECT DISTINCT
LIMIT
句のないクエリファイル記述子の制限を回避するために、table_open_cacheを徐々に増やします
Table_open_cacheを64以上に増やす前にこれを読んでください:table_cacheの負のスケーラビリティ
Open_files_limit(8192)変数に注意してください
table_open_cache(2000)より大きくする必要があります
GitHubからSysスキーマをインストールすることを検討してください-mysql/mysql-sys:MySQL sysスキーマ
Innodb_log_file_sizeやinnodb_log_files_in_groupを変更する前にこれを読んでください:MySQL :: MySQL 5.7リファレンスマニュアル:: 14.7.2 InnoDB REDOログファイルの数またはサイズの変更
調整する変数:
query_cache_size (=0) query_cache_type (=0) query_cache_size (> 64M) join_buffer_size (> 1.0M, or always use indexes with joins) tmp_table_size (> 64M) max_heap_table_size (> 64M) table_open_cache (> 2000) innodb_log_file_size should be (=1G) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
「パフォーマンスの問題を回避することはできません。」
クエリキャッシュmayが問題の一部である可能性があります。適度に効率的に実行されていますが、プルーンはたくさんあります-12 /秒。プルーンは高価です。
MyISAM may問題の一部になります。 convert をInnoDBに変換する必要があります。
MysqltunerとWilsonのいくつかの提案は役立ちますが、some、高CPUでの実際の問題は、ほとんどの場合、不十分なインデックスまたは不適切にフォーマットされたクエリです。
_long_query_time 1
_;でスローログをオンにします。一日待つ; _pt-query-digest
_または_mysqldumpslow -s t
_を実行して、「最悪」のクエリを見つけます。次に、それらを高速化するのに役立ちます。 詳細 。
これはあなたのケースで最も重要なチューナーコメントかもしれません:
_[!!] Temporary tables created on disk: 52% (577K on disk / 1M total)
_
これは約6 /秒で、他のサーバーと比較して約90パーセンタイルです。 Windowsで実行していますか? MySQLのバージョンは?
適切なサイズの列にTEXT
を使用していますかVARCHAR(...)
?列の小さなリストだけが必要なときに_SELECT *
_を使用しますか?これらの両方canは、ディスク上のtmpテーブルにつながります。
効率 多くの:多くのスキーマ。
クエリキャッシュが最適ではない方法で実装されました。競合の問題があり、データの無効化が頻繁に行われているため、CPU使用率が高くなっている可能性があります。
Innodb_log_file_sizeの値は何ですか?少なくとも1Gでない場合(とにかく2Gを好む傾向があります)、実際には増やす必要があります。そうしないと、フラッシュの問題が発生し、そうです、これはCPUに影響します。
セッションごとのバッファも、CPU使用率に悪影響を与える可能性があります。高すぎる値または低すぎる値を選択した場合の影響は通常、関係があります。デフォルトを使用してください。
MyISAMがCPU使用率を上げることができるとは思いません。通常、それを取り除く他の理由があります。しかし、それはInnoDBよりもはるかに複雑ではないので、CPUの敵になるべきではありません。
My.cnf/ini [mysqld]セクションの提案
#sort_buffer_size=256k # disable to allow default to work for you
#read_buffer_size=1M # disable to allow default to work for you
#read_rnd_buffer_size # disable to allow default to work for you
#join_buffer_size # disable to allow default to work for you
key_buffer_size=384M # from 1024M only 287M used today
max_connections=164 # from 1024 because max_used_connections 85 today
wait_timeout=40 # from 20 seconds - does not allow much think time
#max_allowed_packet=64M # to disable and allow 1M default if you need more,
sESSION <SET @ max_allowed_packet = nnnnnn; 1GまでIS THE LIMIT
#query_cache_limit=7M # disable to allow default of 1M only 9 would fit
query_cache_min_res_unit=512 #from def 4096 to increase capacity of QC
query_prealloc_size=32768 # 262144 to minimize RAM malloc
query_alloc_block_size=32768 # from 65535 to be same as p_a_s
Www.mysqlcalculator.comで2分間費やしてください。最初の4つの変数が無効になっていることがわかります。RAMフットプリントは、応答時間を改善するために必要なものよりはるかに大きくなっています。