mysql - 是什么导致 RDS 上的 MySQL 每 5 分钟出现一次 CPU 峰值?

标签 mysql innodb amazon-rds

在相对写入密集型的恒定负载下,我们在 RDS 上使用 MySQL 每 5 分钟就会遇到一次 CPU 峰值。有没有人经历过类似的事情或知道是什么原因造成的?

MySQL 版本:5.6.22 存储引擎:InnoDB

我们在 M3 中型和 M3 大型实例类型(包括磁盘和 SSD 磁盘)上都遇到了峰值,并且无论我们是否启用了多可用区,它们都会发生。

写入越多,尖峰就越陡峭。但是,写入次数似乎不会影响频率。我们写完后,他们会继续一会儿。它们不会出现在只读负载下。

这是 InnoDB 变量:

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: 5705302016
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: /rdsdbdata/db/innodb
innodb_disable_sort_file_cache: OFF
innodb_doublewrite: ON
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: 1
innodb_flush_method: O_DIRECT
innodb_flush_neighbors: 1
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: 134217728
innodb_log_files_in_group: 2
innodb_log_group_home_dir: /rdsdbdata/log/innodb
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: 4
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.22
innodb_write_io_threads: 4

谢谢!

最佳答案

我假设您提供的 VARIABLES 是用于 m3.large 的?

对于 SSD,我很确定 innodb_flush_neighbors 应该是 0。(我很惊讶 Amazon 没有注意到这一点。) http://dev.mysql.com/doc/refman/5.6/en/optimizing-innodb-diskio.html

尝试将 innodb_flushing_avg_loops 增加到 200。“增加该值可以使刷新操作的速率随着工作负载的变化而平稳且逐渐地变化。”

innodb_read_io_threadsinnodb_write_io_threads 在 8 时可能更好。

“adaptive_flushing”听起来很相关,但我对它的了解还不够多,无法发表评论。

如果这些还不够,请

  • 再解释一下处理过程,
  • 说明是否有任何 cron 作业正在运行 */5,
  • 以及任何其他线索。

此外,您可以提供这些以更深入地研究设置。 (我没有要求他们,因为我没有任何关于在哪里寻找尖峰的好线索。)

  • 显示变量;
  • 显示全局状态; -- 假设它至少已经运行了一天。

关于mysql - 是什么导致 RDS 上的 MySQL 每 5 分钟出现一次 CPU 峰值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078391/

相关文章:

mysql - (Bug?) InnoDB MySQL error 1025, errno 150 Foreign Key

MySQL/InnoDB : more optimal to have two non-unique index columns or combine them in unique primary key?

mysql - 优化 group_concat 函数的 MySQL 查询

sql-server - 如何使用Golang SDK查询RDS的任何表格

php - 使用来自 mysql 查询的 GET Id

php - 如何更新具有空值的列

amazon-web-services - 查找 AWS RDS 连接源

amazon-web-services - 复制数据库快照的最小 KMS 权限

php - 使用 JSON 更新记录时 MySQL 语法错误

mysql - 我应该把它分成一个字段还是mysql中的多个字段?