web-dev-qa-db-ja.com

100%のCPU使用率を示すMySQL

Cpanelと共にインストールされたMYSQLサーバーでいくつかの問題が発生しています。私のサーバーは、Web上のトラフィックが多すぎない場合でも、mysqlの使用率が100%であることを示しています。

CentOS 6.5x64と80GB SSDおよび8GB Ramと4CPUコアを実行しています。

my.cnf:

[mysqld]
max_connections=500
key_buffer=128M
myisam_sort_buffer_size=35M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=4000
thread_cache_size=286
interactive_timeout=25
wait_timeout=7000
connect_timeout=10
max_allowed_packet=268435456
max_connect_errors=10
query_cache_limit=2M
query_cache_size=256M
query_cache_type=1
tmp_table_size=16M
innodb_buffer_pool_size=134217728
open_files_limit=10000
[mysqld_safe]
[mysqldump]
quick
max_allowed_packet=16M
[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M

MySQLTunerの出力は次のとおりです。

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[--] Data in MyISAM tables: 164M (Tables: 88)
[--] Data in InnoDB tables: 33M (Tables: 239)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 129

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 15m 2s (83K q [92.549 qps], 13K conn, TX: 44M, RX: 5M)
[--] Reads / Writes: 61% / 39%
[--] Total buffers: 544.0M global + 4.5M per thread (500 max threads)
[OK] Maximum possible memory usage: 2.7G (34% of installed RAM)
[OK] Slow queries: 0% (0/83K)
[OK] Highest usage of available connections: 23% (116/500)
[OK] Key buffer size / total MyISAM indexes: 128.0M/59.2M
[OK] Key buffer hit rate: 97.9% (24K cached / 527 reads)
[OK] Query cache efficiency: 54.3% (18K cached / 33K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 1% (5 temp sorts / 388 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 374 total)
[OK] Thread cache hit rate: 99% (116 created / 13K connections)
[OK] Table cache hit rate: 98% (465 open / 474 opened)
[OK] Open file limit used: 3% (311/10K)
[!!] Table locks acquired immediately: 58%
[OK] InnoDB buffer pool / data size: 128.0M/33.6M
[OK] InnoDB log waits: 0
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Optimize queries and/or use InnoDB to reduce lock wait

これが私のTOPの出力です:

top - 12:01:06 up 1 day,  1:02,  1 user,  load average: 10.37, 9.22, 8.61
Tasks: 399 total,   1 running, 397 sleeping,   0 stopped,   1 zombie
Cpu(s): 84.1%us, 15.1%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.2%si,      0.7%st
Mem:   8191528k total,  6042780k used,  2148748k free,   242064k buffers
Swap:        0k total,        0k used,        0k free,  4785012k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
24515 mysql     20   0 2732m 165m 6264 S 303.8  2.1  42:43.18 mysqld
19471 root  20   0  174m  10m 6148 S  1.0  0.1   0:00.03 php
19523 root  20   0  172m  10m 5864 S  1.0  0.1   0:00.03 php
19533 root  20   0  172m   9m 5804 S  0.7  0.1   0:00.02 php
19535 root  20   0  172m  10m 5864 S  0.7  0.1   0:00.02 php

この問題の原因は何でしょうか?
サーバーがハングしないようにmy.cnfを変更する必要がありますか?
それとも、16GB RAMの新しいサーバーを購入する必要がありますか?

5
Rahukaal

詳細を見て、次の一般的な推奨事項をまとめることができます。

  1. READ:WRITE ratio(61:39)は、エンジンタイプをInnodbに変更する必要があるという手がかりを与えます。その前にの出力を確認してください

    SHOW ENGINE INNODB STATUS\G; SHOW FULL PROCESSLIST;

    ピーク時。ほとんどの場合、クエリはLOCK状態で表​​示されます。テーブルロックは、MyISAMの大きな制限の1つです。大量の同時書き込みと選択があり、クエリのパフォーマンスを一貫して高速にする必要がある場合は、より優れたロックメカニズム(row-level)のため、Innodbが唯一の選択肢です。

  2. 断片化されたテーブルの合計:129OPTIMIZE TABLEを実行してすべてを最適化し、パフォーマンスを向上させる

  3. slow_query.logを確認し、Query_time、Lock_time、Rows_sent、Rows_examinedを確認します。 Rows Sent / Rows Examinedセットの比率が高いクエリを見つけた場合、それらのクエリはoptimizationに適しています。 slow_query.logの一部のクエリがCPUリソースを大量に使用している可能性があります。

  4. RAM=および使用可能なディスク容量:free -m , df -hに関するサーバーのステータスを確認します。使用可能なメモリがある場合は、innodb_buffer_pool_sizeを増やしてキャッシュを増やします。

  5. MySQL構成でこれらのパラメーターを調整するのは常に良い

    innodb_fast_shutdown=0 innodb_log_buffer_size innodb_log_file_size innodb_flush_method=O_DIRECT query_cache_size=0

警告:

チェックリスト1:MySQLプロセスのCPU、可能であればCPUチェックリスト2:RAM、データセットがRAMに適合している場合。チェックリスト3:接続関連のパラメーター

ABORTED_CONNECTS、CONNECTIONS、MAX_USED_CONNECTIONS、OPEN_FILES、OPEN_TABLES、OPENED_FILES、OPENED_TABLES、クエリ、SLOW_QUERIES、THREADS_CONNECTED、THREADS_CREATED、THREADS_RUNNING、PERFORMANCE_SCHEMA、QUERY_CACHE_SIZE、WAIT_TIMEOUT、LONG_QUERY_TIME、は、interactive_timeout、CONNECT_TIMEOUT、MAX_CONNECTIONS、LOCK_WAIT_TIMEOUT、TX_ISOLATION、のmax_allowed_pa​​cket、GENERAL_LOG、table_open_cacheの、SLOW_QUERY_LOG、 OPEN_FILES_LIMIT、INNODB_LOCK_WAIT_TIMEOUT

チェックリスト4:メモリ関連のパラメーターkey_buffer_size、query_cache_size、innodb_buffer_pool_size、innodb_log_buffer_size、max_connections、read_buffer_size、read_rnd_buffer_size、sort_buffer_size、join_buffer_size、binlog_cache_size、thread_stack、tmp_table_size

チェックリスト5:その他の重要なInnoDBパラメーターinnodb_log_file_size、innodb_file_per_table、innodb_flush_log_at_trx_commit、innodb_flush_method、innodb_fast_shutdown

チェックリスト6:mysqltuner

インデックスなしで実行された結合:テーブルキャッシュヒット率:

-------- MyISAMメトリック---------------------------------------- ----------------- [!!] [!!]書き込みキーバッファーヒット率:-------- InnoDB Metrics --------- ------------------------------------------------ [! !] InnoDBバッファープール/データサイズ:[!!] InnoDBログファイルサイズ/ InnoDBバッファープールサイズの比率:[!!] InnoDBバッファープールインスタンス:

チェックリスト7:プロセスリスト以下のクエリは、「データの送信」の状態で長期間見つかる

チェックリスト8:クエリログが遅い-Rows_examinedとRows_sentの比率が非常に高い、

チェックリスト9:重複するインデックス(存在する場合)

チェックリスト10:遅いクエリの計画を説明する

チェックリスト11:where句の列が適切にインデックス付けされているかどうかを確認する(インデックス付けされていないクエリ)

チェックリスト12:テーブルロック、メタデータロック、デッドロック(ある場合)を確認します。

チェックリスト13:メンテナンスジョブが間隔を置いて実行されている(例:mysqlcheck、mysqldumpなど)

チェックリスト14:ハードウェアリソース、低速ディスク、RAID再構築、ディスクI/O、飽和ネットワーク、ネットワーク帯域幅、スレッド数の増加に伴うスループット。

13