大規模なMySQL 5.6データベース(1000万〜1億行の複数のテーブル)を備えたマシンがあります。特に夕方にはかなりの負荷がかかり、16コアマシンで実行されます。
ただし、負荷がどのようなものであっても、問題を引き起こす可能性のある断続的なスパイクが常に発生します。 CPU負荷は次のようになります。
(これらは非常に負荷が軽い時間であり、特に午前6時より前の時間は基本的に「アイドル」である必要があります)
これまでに発見した問題の唯一の解決策は、新しいサーバーをセットアップし、データをミラーリングしてそのサーバーに切り替えることです。通常、これにより2〜3か月間購入され、その後スパイクが再び現れ始めます。 MySQLを再起動するか、サーバーを再起動しても、何も変わりません。
これらもcronjobsが原因ではありません。それらをすべて無効にしても、これはまだ起こります。
現在のInnoDBステータスの要点は次のとおりです。
https://Gist.github.com/fleshgolem/de1d4a661fb545fabfda
そして、ここにサーバー変数のダンプがあります:
Variable_name Value
auto_increment_increment 1
auto_increment_offset 1
autocommit ON
automatic_sp_privileges ON
back_log 200
basedir /usr
big_tables OFF
bind_address *
binlog_cache_size 32768
binlog_checksum CRC32
binlog_direct_non_transactional_updates OFF
binlog_format ROW
binlog_max_flush_queue_time 0
binlog_order_commits ON
binlog_row_image FULL
binlog_rows_query_log_events OFF
binlog_stmt_cache_size 32768
block_encryption_mode aes-128-ecb
bulk_insert_buffer_size 8388608
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
completion_type NO_CHAIN
concurrent_insert AUTO
connect_timeout 10
core_file OFF
datadir /var/lib/mysql/
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
default_storage_engine InnoDB
default_tmp_storage_engine InnoDB
default_week_format 0
delay_key_write ON
delayed_insert_limit 100
delayed_insert_timeout 300
delayed_queue_size 1000
disconnect_on_expired_password ON
div_precision_increment 4
end_markers_in_json OFF
enforce_gtid_consistency ON
eq_range_index_dive_limit 10
error_count 0
event_scheduler OFF
expire_logs_days 0
explicit_defaults_for_timestamp OFF
external_user
flush OFF
flush_time 0
foreign_key_checks ON
ft_boolean_syntax + -><()~*:""&|
ft_max_Word_len 84
ft_min_Word_len 4
ft_query_expansion_limit 20
ft_stopword_file (built-in)
general_log OFF
general_log_file /var/lib/mysql/xxxx.log
group_concat_max_len 1024
gtid_executed
gtid_mode ON
gtid_next AUTOMATIC
gtid_owned
gtid_purged
have_compress YES
have_crypt YES
have_dynamic_loading YES
have_geometry YES
have_openssl DISABLED
have_profiling YES
have_query_cache YES
have_rtree_keys YES
have_ssl DISABLED
have_symlink DISABLED
Host_cache_size 640
hostname xxxx
identity 0
ignore_builtin_innodb OFF
ignore_db_dirs
init_connect
init_file
init_slave
innodb_adaptive_flushing ON
innodb_adaptive_flushing_lwm 10
innodb_adaptive_hash_index ON
innodb_adaptive_max_sleep_delay 150000
innodb_additional_mem_pool_size 8388608
innodb_api_bk_commit_interval 5
innodb_api_disable_rowlock OFF
innodb_api_enable_binlog OFF
innodb_api_enable_mdl OFF
innodb_api_trx_level 0
innodb_autoextend_increment 64
innodb_autoinc_lock_mode 1
innodb_buffer_pool_dump_at_shutdown OFF
innodb_buffer_pool_dump_now OFF
innodb_buffer_pool_filename ib_buffer_pool
innodb_buffer_pool_instances 8
innodb_buffer_pool_load_abort OFF
innodb_buffer_pool_load_at_startup OFF
innodb_buffer_pool_load_now OFF
innodb_buffer_pool_size 42949672960
innodb_change_buffer_max_size 25
innodb_change_buffering all
innodb_checksum_algorithm innodb
innodb_checksums ON
innodb_cmp_per_index_enabled OFF
innodb_commit_concurrency 0
innodb_compression_failure_threshold_pct 5
innodb_compression_level 6
innodb_compression_pad_pct_max 50
innodb_concurrency_tickets 5000
innodb_data_file_path ibdata1:12M:autoextend
innodb_data_home_dir
innodb_disable_sort_file_cache OFF
innodb_doublewrite OFF
innodb_fast_shutdown 1
innodb_file_format Antelope
innodb_file_format_check ON
innodb_file_format_max Antelope
innodb_file_per_table ON
innodb_flush_log_at_timeout 1
innodb_flush_log_at_trx_commit 2
innodb_flush_method O_DIRECT
innodb_flush_neighbors 0
innodb_flushing_avg_loops 30
innodb_force_load_corrupted OFF
innodb_force_recovery 0
innodb_ft_aux_table
innodb_ft_cache_size 8000000
innodb_ft_enable_diag_print OFF
innodb_ft_enable_stopword ON
innodb_ft_max_token_size 84
innodb_ft_min_token_size 3
innodb_ft_num_Word_optimize 2000
innodb_ft_result_cache_limit 2000000000
innodb_ft_server_stopword_table
innodb_ft_sort_pll_degree 2
innodb_ft_total_cache_size 640000000
innodb_ft_user_stopword_table
innodb_io_capacity 200
innodb_io_capacity_max 2000
innodb_large_prefix OFF
innodb_lock_wait_timeout 50
innodb_locks_unsafe_for_binlog OFF
innodb_log_buffer_size 8388608
innodb_log_compressed_pages ON
innodb_log_file_size 104857600
innodb_log_files_in_group 2
innodb_log_group_home_dir ./
innodb_lru_scan_depth 1024
innodb_max_dirty_pages_pct 75
innodb_max_dirty_pages_pct_lwm 0
innodb_max_purge_lag 0
innodb_max_purge_lag_delay 0
innodb_mirrored_log_groups 1
innodb_monitor_disable
innodb_monitor_enable
innodb_monitor_reset
innodb_monitor_reset_all
innodb_old_blocks_pct 37
innodb_old_blocks_time 1000
innodb_online_alter_log_max_size 134217728
innodb_open_files 2000
innodb_optimize_fulltext_only OFF
innodb_page_size 16384
innodb_print_all_deadlocks OFF
innodb_purge_batch_size 300
innodb_purge_threads 1
innodb_random_read_ahead OFF
innodb_read_ahead_threshold 56
innodb_read_io_threads 16
innodb_read_only OFF
innodb_replication_delay 0
innodb_rollback_on_timeout OFF
innodb_rollback_segments 128
innodb_sort_buffer_size 1048576
innodb_spin_wait_delay 6
innodb_stats_auto_recalc ON
innodb_stats_method nulls_equal
innodb_stats_on_metadata OFF
innodb_stats_persistent ON
innodb_stats_persistent_sample_pages 20
innodb_stats_sample_pages 8
innodb_stats_transient_sample_pages 8
innodb_status_output OFF
innodb_status_output_locks OFF
innodb_strict_mode OFF
innodb_support_xa ON
innodb_sync_array_size 1
innodb_sync_spin_loops 30
innodb_table_locks ON
innodb_thread_concurrency 0
innodb_thread_sleep_delay 10000
innodb_undo_directory .
innodb_undo_logs 128
innodb_undo_tablespaces 0
innodb_use_native_aio ON
innodb_use_sys_malloc ON
innodb_version 5.6.19
innodb_write_io_threads 16
insert_id 0
interactive_timeout 28800
join_buffer_size 262144
keep_files_on_create OFF
key_buffer_size 8388608
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
large_files_support ON
large_page_size 0
large_pages OFF
last_insert_id 0
lc_messages en_US
lc_messages_dir /usr/share/mysql/
lc_time_names en_US
license GPL
local_infile ON
lock_wait_timeout 31536000
locked_in_memory OFF
log_bin ON
log_bin_basename /var/lib/mysql/xxxx-db1-bin
log_bin_index /var/lib/mysql/xxxx-db1-bin.index
log_bin_trust_function_creators OFF
log_bin_use_v1_row_events OFF
log_error /var/log/mysqld.log
log_output FILE
log_queries_not_using_indexes OFF
log_slave_updates ON
log_slow_admin_statements OFF
log_slow_slave_statements OFF
log_throttle_queries_not_using_indexes 0
log_warnings 1
long_query_time 10.000000
low_priority_updates OFF
lower_case_file_system OFF
lower_case_table_names 0
master_info_repository TABLE
master_verify_checksum OFF
max_allowed_packet 4194304
max_binlog_cache_size 18446744073709547520
max_binlog_size 1073741824
max_binlog_stmt_cache_size 18446744073709547520
max_connect_errors 100
max_connections 750
max_delayed_threads 20
max_error_count 64
max_heap_table_size 16777216
max_insert_delayed_threads 20
max_join_size 18446744073709551615
max_length_for_sort_data 1024
max_prepared_stmt_count 16382
max_relay_log_size 0
max_seeks_for_key 18446744073709551615
max_sort_length 1024a
max_sp_recursion_depth 0
max_tmp_tables 32
max_user_connections 0
max_write_lock_count 18446744073709551615
metadata_locks_cache_size 1024
metadata_locks_hash_instances 8
min_examined_row_limit 0
multi_range_count 256
myisam_data_pointer_size 6
myisam_max_sort_file_size 9223372036853727232
myisam_mmap_size 18446744073709551615
myisam_recover_options OFF
myisam_repair_threads 1
myisam_sort_buffer_size 8388608
myisam_stats_method nulls_unequal
myisam_use_mmap OFF
net_buffer_length 16384
net_read_timeout 30
net_retry_count 10
net_write_timeout 60
new OFF
old OFF
old_alter_table OFF
old_passwords 0
open_files_limit 5000
optimizer_Prune_level 1
optimizer_search_depth 62
optimizer_switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on
optimizer_trace enabled=off,one_line=off
optimizer_trace_features greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on
optimizer_trace_limit 1
optimizer_trace_max_mem_size 16384
optimizer_trace_offset -1
performance_schema ON
performance_schema_accounts_size 100
performance_schema_digests_size 10000
performance_schema_events_stages_history_long_size 10000
performance_schema_events_stages_history_size 10
performance_schema_events_statements_history_long_size 10000
performance_schema_events_statements_history_size 10
performance_schema_events_waits_history_long_size 10000
performance_schema_events_waits_history_size 10
performance_schema_hosts_size 100
performance_schema_max_cond_classes 80
performance_schema_max_cond_instances 5900
performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768
performance_schema_max_file_instances 7693
performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 19500
performance_schema_max_rwlock_classes 40
performance_schema_max_rwlock_instances 10300
performance_schema_max_socket_classes 10
performance_schema_max_socket_instances 1520
performance_schema_max_stage_classes 150
performance_schema_max_statement_classes 168
performance_schema_max_table_handles 4000
performance_schema_max_table_instances 12500
performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1600
performance_schema_session_connect_attrs_size 512
performance_schema_setup_actors_size 100
performance_schema_setup_objects_size 100
performance_schema_users_size 100
pid_file /var/run/mysqld/mysqld.pid
plugin_dir /usr/lib64/mysql/plugin/
port 3306
preload_buffer_size 32768
profiling OFF
profiling_history_size 15
protocol_version 10
proxy_user
pseudo_slave_mode OFF
pseudo_thread_id 2018
query_alloc_block_size 8192
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 1048576000
query_cache_type ON
query_cache_wlock_invalidate OFF
query_prealloc_size 8192
Rand_seed1 0
Rand_seed2 0
range_alloc_block_size 4096
read_buffer_size 131072
read_only OFF
read_rnd_buffer_size 262144
relay_log
relay_log_basename
relay_log_index
relay_log_info_file relay-log.info
relay_log_info_repository TABLE
relay_log_purge ON
relay_log_recovery OFF
relay_log_space_limit 0
report_Host 10.129.156.251
report_password
report_port 3306
report_user
rpl_stop_slave_timeout 31536000
secure_auth ON
secure_file_priv
server_id 1
server_id_bits 32
server_uuid 96bcdb70-44c5-11e5-8df9-0401654ee301
skip_external_locking ON
skip_name_resolve OFF
skip_networking OFF
skip_show_database OFF
slave_allow_batching OFF
slave_checkpoint_group 512
slave_checkpoint_period 300
slave_compressed_protocol OFF
slave_exec_mode STRICT
slave_load_tmpdir /tmp
slave_max_allowed_packet 1073741824
slave_net_timeout 3600
slave_parallel_workers 0
slave_pending_jobs_size_max 16777216
slave_rows_search_algorithms TABLE_SCAN,INDEX_SCAN
slave_skip_errors ALL
slave_sql_verify_checksum ON
slave_transaction_retries 10
slave_type_conversions
slow_launch_time 2
slow_query_log OFF
slow_query_log_file /var/lib/mysql/xxxx-slow.log
socket /var/lib/mysql/mysql.sock
sort_buffer_size 262144
sql_auto_is_null OFF
sql_big_selects ON
sql_buffer_result OFF
sql_log_bin ON
sql_log_off OFF
sql_mode STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
sql_notes ON
sql_quote_show_create ON
sql_safe_updates OFF
sql_select_limit 18446744073709551615
sql_slave_skip_counter 0
sql_warnings OFF
ssl_ca
ssl_capath
ssl_cert
ssl_cipher
ssl_crl
ssl_crlpath
ssl_key
storage_engine InnoDB
stored_program_cache 256
sync_binlog 0
sync_frm ON
sync_master_info 1
sync_relay_log 10000
sync_relay_log_info 10000
system_time_zone EST
table_definition_cache 1400
table_open_cache 2000
table_open_cache_instances 1
thread_cache_size 15
thread_concurrency 10
thread_handling one-thread-per-connection
thread_stack 262144
time_format %H:%i:%s
time_zone SYSTEM
timed_mutexes OFF
timestamp 1457343545.452900
tmp_table_size 16777216
tmpdir /tmp
transaction_alloc_block_size 8192
transaction_allow_batching OFF
transaction_prealloc_size 4096
tx_isolation REPEATABLE-READ
tx_read_only OFF
unique_checks ON
updatable_views_with_limit YES
version 5.6.19-log
version_comment MySQL Community Server (GPL)
version_compile_machine x86_64
version_compile_os Linux
wait_timeout 28800
warning_count 0
必要な関連情報が他にある場合はお知らせください。それに応じて質問を更新します。残念ながら私が探しているものはもうありません。
これはおそらくそれです:
query_cache_size 1048576000
query_cache_type ON
何が起こっているのか:書き込みが入ってくると、QCのGB全体をスキャンして、そのテーブルのすべてのインスタンスを見つけ、それらをパージする必要があります。これには多くのCPU時間を要します。一方、allSELECTs
はブロックされます。
RAMの容量に関係なく、約50Mより大きなサイズを設定しないでください。DYNAMIC
の代わりにON
を使用することをお勧めします。 SELECTs
を手で選ぶSQL_CACHE
とどのSQL_NO_CACHE
。
または、QCを実行する価値がまったくない場合もあります。これは、書き込みトラフィックが常に発生する本番システムの一般的なケースです。
もっと...
変数とグローバルステータスに基づく
観測:
バージョン:5.6.19-log
50 GBのRAM
稼働時間= 11d 07:07:58
Windowsで実行していません。
64ビットバージョンの実行
MyISAMとInnoDBの両方を実行しているようです。
より重要な問題
InnoDBに完全に変換するか、キャッシュサイズを調整します。最高
innodb_buffer_pool_size = 30G -- you are not using all of the 40G now
key_buffer_size = 2G -- your current 8M is not efficient for writes
query_cache_sizeは1000Mで本当に悪いです。あなたの使用法は適度に効果的ですので、以下を考慮してください:
SQL_CACHE
またはSQL_NO_CACHE
すべての `SELECTに、どれが利益をもたらす可能性があるかに基づいて、query_cach_size
のみ100m
多くのクエリがtmpテーブルを使用しており、さらに悪いことに、ディスクtmpテーブルを使用しています。 slowlogを使用して、どのクエリが最も侵襲的かを調べます。それらに取り組みましょう。
上げるtmp_table_size
およびmax_heap_table_size
16Mから32Mまで(ただしそれ以上)。 tmpテーブルを「ディスクtmpテーブル」に変換するには2つの方法があるため、これによりmight変換できない場合があります。
slave_skip_errors = ALL
-敷物の下で問題が発生しています。ビッグタイム!
詳細およびその他の観察
(Innodb_buffer_pool_pages_free * 16384/innodb_buffer_pool_size)= 1,864,255 * 16384/42949672960 = 71.1%-バッファープールの空き容量-buffer_pool_sizeがワーキングセットよりも大きい;それを減らすことができます
(Innodb_log_writes)= 40,597,718/976078 = 42 /秒
(Com_rollback)= 99,316,489/976078 = 101 /秒-InnoDBのロールバック。 -ロールバックの頻度が多すぎる場合は、アプリのロジックが非効率的である可能性があります。
(local_infile)= ON-local_infile = ONは潜在的なセキュリティ問題です
(Key_writes/Key_write_requests)= 2,200,386/4113735 = 53.5%-書き込みに対するkey_bufferの有効性-十分なRAMがある場合、key_buffer_sizeを増やすことは価値があります。
(query_cache_size)= 1000M-QCのサイズ-小さすぎる=あまり役に立たない大きすぎる=オーバーヘッドが多すぎる。 0または50M以下をお勧めします。
(Qcache_not_cached)= 235,136,200/976078 = 240 /秒-SQL_CACHEが試行されましたが無視されました-キャッシュを再考してください。 qcacheの調整
(Qcache_inserts-Qcache_queries_in_cache)=(258097280-7736)/ 976078 = 264 /秒-無効化/秒。
((query_cache_size-Qcache_free_memory)/ Qcache_queries_in_cache/query_alloc_block_size)=(1000M-11519952)/ 7736/8192 = 16.4-query_alloc_block_size vs formula-query_alloc_block_sizeを調整
(Created_tmp_tables)= 31,198,441/976078 = 32 /秒-複雑なSELECTの一部として「一時」テーブルを作成する頻度。
(Created_tmp_disk_tables)= 5,996,371/976078 = 6.1 /秒-複雑なSELECTの一部としてdisk "temp"テーブルを作成する頻度-tmp_table_sizeとmax_heap_table_sizeを増やします。 MyISAMの代わりにMEMORYを使用できる一時テーブルのルールを確認してください。 MyISAMを回避するために、スキーマまたはクエリに小さな変更を加えることができる場合があります。インデックスの改善とクエリの再構成が役立つ可能性が高くなります。
(Handler_read_rnd_next)= 1,066,165,445,800/976078 = 1092295 /秒-多数のテーブルスキャンの場合は高い-おそらく不適切なキー
(Com_rollback/Com_commit)= 99,316,489/49548802 = 200.4%-ロールバック:コミット率-ロールバックにはコストがかかります。アプリのロジックを変更する
(Select_scan)= 16,213,392/976078 = 17 /秒-全テーブルスキャン-インデックスの追加/クエリの最適化(小さなテーブルでない限り)
(Com_insert + Com_delete + Com_delete_multi + Com_replace + Com_update + Com_update_multi)=(57757683 + 26581027 + 0 + 0 + 34482709 + 0)/ 976078 = 121 /秒-書き込み/秒-50書き込み/秒+ログのフラッシュはおそらく最大通常のドライブのI/O書き込み容量
(expire_logs_days)= 0-binlogを自動的にパージするまでの時間(この数日後)-大きすぎる(またはゼロ)=ディスク容量を消費する;小さすぎる=ネットワーク/マシンのクラッシュに迅速に対応する必要がある(log_bin = OFFの場合は関係ありません)
(slow_query_log)= OFF-遅いクエリをログに記録するかどうか。 (5.1.12)
(long_query_time)= 10.000000 = 10-「遅い」クエリを定義するためのカットオフ(秒)。 -提案2
(Aborted_clients/Connections)= 33,444/45497 = 73.5%-タイムアウトによりスレッドがぶつかった-wait_timeoutを増やす;いいね、切断を使う
(Threads_created/Connections)= 3,675/45497 = 8.1%-プロセス作成の迅速性-thread_cache_sizeを増やす
innodb_log_file_sizeは小さい(ただし変更は難しい)。
Buffer_poolでの適切なキャッシング。
Table_definitionsの適切なキャッシング。
Com_delete = 27 /秒
スワッピングはありますか?
GTID-これはマスターですか?