1

For the past few months, on a few different servers with similar FreeBSD versions and specs, I've been experiencing high swap usage with MySQL while seemingly having plenty of free RAM.

  • FreeBSD 11.2-RELEASE-p8 (Also was happening in p2)
  • mysql-server 5.6.43 (Also was happening in 5.6.40)
  • Hosted in vmware vcloud.
  • MySQL datadir is in a zvol, with vfs.zfs.arc_max="512M"
  • 4 vcpu and 8GB RAM.

It doesn't use swap immediately. It takes a couple weeks of incrementally using more swap until none remains. This particular server hasn't reached max swap yet, but it's getting there.

last pid: 7054; load averages: 0.53, 0.44, 0.40 up 14+20:16:49 13:28:17 32 processes: 1 running, 31 sleeping CPU: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle Mem: 233M Active, 1966M Inact, 1994M Laundry, 1326M Wired, 533M Buf, 412M Free ARC: 189M Total, 47M MFU, 74M MRU, 288K Anon, 5185K Header, 62M Other 63M Compressed, 208M Uncompressed, 3.28:1 Ratio Swap: 6144M Total, 4684M Used, 1460M Free, 76% Inuse PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 125 root 2 20 0 22348K 5628K select 1 15:47 0.05% vmtoolsd 7053 root 1 20 0 7920K 3600K CPU2 2 0:00 0.04% top 93525 root 1 20 0 154M 113M nanslp 1 0:36 0.02% php 1140 mysql 30 20 0 8720M 3519M select 0 344:58 0.02% mysqld 681 root 1 20 0 77684K 31444K select 1 5:52 0.01% snmpd 452 root 1 20 0 9184K 1048K select 2 1:23 0.01% devd 6958 dfairley 1 20 0 13164K 7968K select 0 0:00 0.01% sshd 93513 root 1 20 0 104M 23360K kqread 2 0:05 0.01% php-fpm 711 root 1 20 0 12712K 12808K select 2 1:11 0.00% ntpd 619 root 1 20 0 6416K 2004K select 0 0:36 0.00% syslogd 1179 root 1 20 0 10456K 5204K select 1 0:20 0.00% sendmail 6949 daemon 1 41 0 118M 63328K accept 0 0:53 0.00% php-fpm 6954 daemon 1 31 0 116M 62008K accept 0 0:38 0.00% php-fpm 7002 daemon 1 35 0 114M 56476K accept 2 0:21 0.00% php-fpm 1186 root 1 20 0 6468K 800K nanslp 0 0:05 0.00% cron 6999 daemon 1 44 0 114M 54684K accept 2 0:04 0.00% php-fpm 401 root 1 42 0 6548K 1992K select 2 0:01 0.00% dhclient 1182 smmsp 1 20 0 10456K 3352K pause 2 0:00 0.00% sendmail 447 _dhcp 1 20 0 6548K 2048K select 0 0:00 0.00% dhclient 1176 root 1 20 0 12852K 5168K select 2 0:00 0.00% sshd 738 mysql 1 52 0 7064K 0K wait 2 0:00 0.00% <sh> 6959 dfairley 1 20 0 7416K 3784K pause 3 0:00 0.00% csh 6956 root 1 23 0 13164K 7920K select 0 0:00 0.00% sshd 7052 root 1 20 0 7612K 3796K select 1 0:00 0.00% sudo 1237 root 1 52 0 6408K 1796K ttyin 2 0:00 0.00% getty 1238 root 1 52 0 6408K 1796K ttyin 2 0:00 0.00% getty 1239 root 1 52 0 6408K 1796K ttyin 0 0:00 0.00% getty 1236 root 1 52 0 6408K 1796K ttyin 3 0:00 0.00% getty 1241 root 1 52 0 6408K 1796K ttyin 3 0:00 0.00% getty 1242 root 1 52 0 6408K 1796K ttyin 1 0:00 0.00% getty 1235 root 1 52 0 6408K 1796K ttyin 1 0:00 0.00% getty 1240 root 1 52 0 6408K 1796K ttyin 3 0:00 0.00% getty 

Eventually out of swap messages start hitting /var/log/messages every 10 or so minutes.

my.cnf:

[client] port = 3306 socket = /tmp/mysql.sock [mysqld] default_time_zone=America/Vancouver port = 3306 socket = /tmp/mysql.sock key_buffer_size = 32M expire_logs_days=30 join_buffer_size = 1M table_definition_cache = 1500 table_open_cache = 1500 sort_buffer_size = 2M read_buffer_size = 4M read_rnd_buffer_size = 4M max_allowed_packet = 128M slave-skip-errors=1022,1050,1060,1061,1062,1169,1146 server-id = 253051 log-bin=/data/binarylogs/mysql-bin log-bin-index=/data/binarylogs/mysql-bin binlog_format=mixed innodb_log_group_home_dir=/data/mysql/logs innodb_buffer_pool_size = 4096M innodb_log_file_size = 512M innodb_buffer_pool_instances = 4 skip-innodb_doublewrite innodb_flush_log_at_trx_commit = 2 max_connections=80 [mysqldump] quick max_allowed_packet = 128M [mysql] no-auto-rehash [mysqlhotcopy] interactive-timeout 

What can cause mysql to repeatedly allocate swap while having plenty of free memory?

Edit: Output of SHOW GLOBAL STATUS;:

Aborted_clients 0 Aborted_connects 0 Binlog_cache_disk_use 368 Binlog_cache_use 1495766 Binlog_stmt_cache_disk_use 0 Binlog_stmt_cache_use 183 Bytes_received 6673111397 Bytes_sent 16919455552 Com_admin_commands 0 Com_assign_to_keycache 0 Com_alter_db 0 Com_alter_db_upgrade 0 Com_alter_event 0 Com_alter_function 0 Com_alter_procedure 0 Com_alter_server 0 Com_alter_table 140 Com_alter_tablespace 0 Com_alter_user 0 Com_analyze 0 Com_begin 682 Com_binlog 0 Com_call_procedure 2 Com_change_db 17594185 Com_change_master 0 Com_check 1815 Com_checksum 0 Com_commit 682 Com_create_db 1 Com_create_event 0 Com_create_function 0 Com_create_index 0 Com_create_procedure 4 Com_create_server 0 Com_create_table 81 Com_create_trigger 78 Com_create_udf 0 Com_create_user 0 Com_create_view 0 Com_dealloc_sql 118 Com_delete 33434 Com_delete_multi 34 Com_do 0 Com_drop_db 1 Com_drop_event 0 Com_drop_function 0 Com_drop_index 0 Com_drop_procedure 8 Com_drop_server 0 Com_drop_table 1 Com_drop_trigger 78 Com_drop_user 0 Com_drop_view 0 Com_empty_query 0 Com_execute_sql 118 Com_flush 1 Com_get_diagnostics 0 Com_grant 0 Com_ha_close 0 Com_ha_open 0 Com_ha_read 0 Com_help 0 Com_insert 2267022 Com_insert_select 1 Com_install_plugin 0 Com_kill 0 Com_load 0 Com_lock_tables 711 Com_optimize 0 Com_preload_keys 0 Com_prepare_sql 118 Com_purge 0 Com_purge_before_date 0 Com_release_savepoint 0 Com_rename_table 0 Com_rename_user 0 Com_repair 1 Com_replace 0 Com_replace_select 0 Com_reset 0 Com_resignal 0 Com_revoke 0 Com_revoke_all 0 Com_rollback 0 Com_rollback_to_savepoint 0 Com_savepoint 0 Com_select 23827649 Com_set_option 1874466 Com_signal 0 Com_show_binlog_events 0 Com_show_binlogs 0 Com_show_charsets 0 Com_show_collations 88 Com_show_create_db 331 Com_show_create_event 0 Com_show_create_func 0 Com_show_create_proc 0 Com_show_create_table 50 Com_show_create_trigger 0 Com_show_databases 2 Com_show_engine_logs 0 Com_show_engine_mutex 0 Com_show_engine_status 1 Com_show_events 7 Com_show_errors 0 Com_show_fields 6349 Com_show_function_code 0 Com_show_function_status 0 Com_show_grants 0 Com_show_keys 2445 Com_show_master_status 0 Com_show_open_tables 0 Com_show_plugins 0 Com_show_privileges 0 Com_show_procedure_code 0 Com_show_procedure_status 0 Com_show_processlist 75 Com_show_profile 0 Com_show_profiles 0 Com_show_relaylog_events 0 Com_show_slave_hosts 0 Com_show_slave_status 0 Com_show_status 38530 Com_show_storage_engines 0 Com_show_table_status 149 Com_show_tables 1258634 Com_show_triggers 3 Com_show_variables 38882 Com_show_warnings 3 Com_slave_start 0 Com_slave_stop 0 Com_stmt_close 118 Com_stmt_execute 118 Com_stmt_fetch 0 Com_stmt_prepare 118 Com_stmt_reprepare 0 Com_stmt_reset 0 Com_stmt_send_long_data 0 Com_truncate 0 Com_uninstall_plugin 0 Com_unlock_tables 709 Com_update 488759 Com_update_multi 294 Com_xa_commit 0 Com_xa_end 0 Com_xa_prepare 0 Com_xa_recover 0 Com_xa_rollback 0 Com_xa_start 0 Compression OFF Connection_errors_accept 0 Connection_errors_internal 0 Connection_errors_max_connections 0 Connection_errors_peer_address 0 Connection_errors_select 0 Connection_errors_tcpwrap 0 Connections 586795 Created_tmp_disk_tables 303745 Created_tmp_files 269 Created_tmp_tables 3267898 Delayed_errors 0 Delayed_insert_threads 0 Delayed_writes 0 Flush_commands 1 Handler_commit 26737048 Handler_delete 206673 Handler_discover 0 Handler_external_lock 69915146 Handler_mrr_init 0 Handler_prepare 2992470 Handler_read_first 20029611 Handler_read_key 1228486328 Handler_read_last 100115 Handler_read_next 1712542996 Handler_read_prev 1412213 Handler_read_rnd 21965186 Handler_read_rnd_next 3295746264 Handler_rollback 2668 Handler_savepoint 0 Handler_savepoint_rollback 0 Handler_update 800615 Handler_write 76355829 Innodb_buffer_pool_dump_status not started Innodb_buffer_pool_load_status not started Innodb_buffer_pool_pages_data 252762 Innodb_buffer_pool_bytes_data 4141252608 Innodb_buffer_pool_pages_dirty 78 Innodb_buffer_pool_bytes_dirty 1277952 Innodb_buffer_pool_pages_flushed 4358689 Innodb_buffer_pool_pages_free 4096 Innodb_buffer_pool_pages_misc 5286 Innodb_buffer_pool_pages_total 262144 Innodb_buffer_pool_read_ahead_rnd 0 Innodb_buffer_pool_read_ahead 4428 Innodb_buffer_pool_read_ahead_evicted 20 Innodb_buffer_pool_read_requests 5898171234 Innodb_buffer_pool_reads 245395 Innodb_buffer_pool_wait_free 0 Innodb_buffer_pool_write_requests 19741903 Innodb_data_fsyncs 1553378 Innodb_data_pending_fsyncs 0 Innodb_data_pending_reads 0 Innodb_data_pending_writes 0 Innodb_data_read 6139465728 Innodb_data_reads 372118 Innodb_data_writes 5567954 Innodb_data_written 73872195072 Innodb_dblwr_pages_written 0 Innodb_dblwr_writes 0 Innodb_have_atomic_builtins ON Innodb_log_waits 0 Innodb_log_write_requests 3607495 Innodb_log_writes 1750027 Innodb_os_log_fsyncs 316644 Innodb_os_log_pending_fsyncs 0 Innodb_os_log_pending_writes 0 Innodb_os_log_written 2416485376 Innodb_page_size 16384 Innodb_pages_created 26254 Innodb_pages_read 374718 Innodb_pages_written 4358689 Innodb_row_lock_current_waits 0 Innodb_row_lock_time 2560 Innodb_row_lock_time_avg 2 Innodb_row_lock_time_max 89 Innodb_row_lock_waits 1194 Innodb_rows_deleted 99776 Innodb_rows_inserted 2033207 Innodb_rows_read 5579212917 Innodb_rows_updated 689505 Innodb_num_open_files 1500 Innodb_truncated_status_writes 0 Innodb_available_undo_logs 128 Key_blocks_not_flushed 0 Key_blocks_unused 26756 Key_blocks_used 498 Key_read_requests 8896641 Key_reads 55 Key_write_requests 2430085 Key_writes 69 Last_query_cost 0.000000 Last_query_partial_plans 0 Max_used_connections 43 Not_flushed_delayed_rows 0 Open_files 59 Open_streams 0 Open_table_definitions 1500 Open_tables 1500 Opened_files 1225846 Opened_table_definitions 2741 Opened_tables 3734 Performance_schema_accounts_lost 0 Performance_schema_cond_classes_lost 0 Performance_schema_cond_instances_lost 0 Performance_schema_digest_lost 0 Performance_schema_file_classes_lost 0 Performance_schema_file_handles_lost 0 Performance_schema_file_instances_lost 0 Performance_schema_hosts_lost 0 Performance_schema_locker_lost 0 Performance_schema_mutex_classes_lost 0 Performance_schema_mutex_instances_lost 0 Performance_schema_rwlock_classes_lost 0 Performance_schema_rwlock_instances_lost 0 Performance_schema_session_connect_attrs_lost 0 Performance_schema_socket_classes_lost 0 Performance_schema_socket_instances_lost 0 Performance_schema_stage_classes_lost 0 Performance_schema_statement_classes_lost 0 Performance_schema_table_handles_lost 0 Performance_schema_table_instances_lost 0 Performance_schema_thread_classes_lost 0 Performance_schema_thread_instances_lost 0 Performance_schema_users_lost 0 Prepared_stmt_count 0 Qcache_free_blocks 1 Qcache_free_memory 1031432 Qcache_hits 0 Qcache_inserts 0 Qcache_lowmem_prunes 0 Qcache_not_cached 23787035 Qcache_queries_in_cache 0 Qcache_total_blocks 1 Queries 49223617 Questions 46560144 Rsa_public_key Select_full_join 39259 Select_full_range_join 0 Select_range 370666 Select_range_check 0 Select_scan 3833980 Slave_heartbeat_period 0.000 Slave_last_heartbeat Slave_open_temp_tables 0 Slave_received_heartbeats 0 Slave_retried_transactions 0 Slave_running OFF Slow_launch_threads 0 Slow_queries 4 Sort_merge_passes 6 Sort_range 212023 Sort_rows 34405674 Sort_scan 1616766 Ssl_accept_renegotiates 0 Ssl_accepts 0 Ssl_callback_cache_hits 0 Ssl_cipher Ssl_cipher_list Ssl_client_connects 0 Ssl_connect_renegotiates 0 Ssl_ctx_verify_depth 0 Ssl_ctx_verify_mode 0 Ssl_default_timeout 0 Ssl_finished_accepts 0 Ssl_finished_connects 0 Ssl_server_not_after Ssl_server_not_before Ssl_session_cache_hits 0 Ssl_session_cache_misses 0 Ssl_session_cache_mode NONE Ssl_session_cache_overflows 0 Ssl_session_cache_size 0 Ssl_session_cache_timeouts 0 Ssl_sessions_reused 0 Ssl_used_session_cache_entries 0 Ssl_verify_depth 0 Ssl_verify_mode 0 Ssl_version Table_locks_immediate 34856215 Table_locks_waited 1 Table_open_cache_hits 34862013 Table_open_cache_misses 3681 Table_open_cache_overflows 1819 Tc_log_max_pages_used 0 Tc_log_page_size 0 Tc_log_page_waits 0 Threads_cached 6 Threads_connected 3 Threads_created 16681 Threads_running 1 Uptime 1287299 Uptime_since_flush_status 1287299 

SHOW VARIABLES;:

auto_increment_increment 1 auto_increment_offset 1 autocommit ON automatic_sp_privileges ON avoid_temporal_upgrade OFF back_log 66 basedir /usr/local/ big_tables OFF bind_address * binlog_cache_size 32768 binlog_checksum CRC32 binlog_direct_non_transactional_updates OFF binlog_error_action IGNORE_ERROR binlog_format MIXED binlog_gtid_simple_recovery OFF 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 binlogging_impossible_mode IGNORE_ERROR block_encryption_mode aes-128-ecb bulk_insert_buffer_size 8388608 character_set_client utf8mb4 character_set_connection utf8mb4 character_set_database latin1 character_set_filesystem binary character_set_results utf8mb4 character_set_server latin1 character_set_system utf8 character_sets_dir /usr/local/share/mysql/charsets/ collation_connection utf8mb4_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/db/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 OFF eq_range_index_dive_limit 10 error_count 0 event_scheduler OFF expire_logs_days 30 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/db/mysql/rad-bccfa.log group_concat_max_len 1024 gtid_executed gtid_mode OFF 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 YES host_cache_size 208 hostname rad-bccfa 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 4 innodb_buffer_pool_load_abort OFF innodb_buffer_pool_load_at_startup OFF innodb_buffer_pool_load_now OFF innodb_buffer_pool_size 4294967296 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 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 536870912 innodb_log_files_in_group 2 innodb_log_group_home_dir /data/mysql/logs 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 1500 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_include_delete_marked OFF 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_tmpdir innodb_undo_directory . innodb_undo_logs 128 innodb_undo_tablespaces 0 innodb_use_native_aio OFF innodb_use_sys_malloc ON innodb_version 5.6.43 innodb_write_io_threads 4 insert_id 0 interactive_timeout 28800 join_buffer_size 1048576 keep_files_on_create OFF key_buffer_size 33554432 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/local/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 /data/binarylogs/mysql-bin log_bin_index /data/binarylogs/mysql-bin.index log_bin_trust_function_creators OFF log_bin_use_v1_row_events OFF log_error ./rad-bccfa.err log_output FILE log_queries_not_using_indexes OFF log_slave_updates OFF 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 FILE master_verify_checksum OFF max_allowed_packet 134217728 max_binlog_cache_size 18446744073709547520 max_binlog_size 1073741824 max_binlog_stmt_cache_size 18446744073709547520 max_connect_errors 100 max_connections 80 max_delayed_threads 20 max_digest_length 1024 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 1024 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 175950 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 3420 performance_schema_max_digest_length 1024 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 16480 performance_schema_max_rwlock_classes 40 performance_schema_max_rwlock_instances 9560 performance_schema_max_socket_classes 10 performance_schema_max_socket_instances 180 performance_schema_max_stage_classes 150 performance_schema_max_statement_classes 168 performance_schema_max_table_handles 3000 performance_schema_max_table_instances 12500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 260 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/db/mysql/rad-bccfa.pid plugin_dir /usr/local/lib/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 588542 query_alloc_block_size 8192 query_cache_limit 1048576 query_cache_min_res_unit 4096 query_cache_size 1048576 query_cache_type OFF query_cache_wlock_invalidate OFF query_prealloc_size 8192 rand_seed1 0 rand_seed2 0 range_alloc_block_size 4096 read_buffer_size 4194304 read_only OFF read_rnd_buffer_size 4194304 relay_log relay_log_basename relay_log_index relay_log_info_file relay-log.info relay_log_info_repository FILE relay_log_purge ON relay_log_recovery OFF relay_log_space_limit 0 report_host report_password report_port 3306 report_user rpl_stop_slave_timeout 31536000 secure_auth ON secure_file_priv /var/db/mysql_secure/ server_id 253051 server_id_bits 32 server_uuid 02376841-ea78-11e5-8675-00505601050e sha256_password_private_key_path private_key.pem sha256_password_public_key_path public_key.pem show_old_temporals OFF simplified_binlog_gtid_recovery OFF 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 1022,1050,1060,1061,1062,1146,1169 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/db/mysql/rad-bccfa-slow.log socket /tmp/mysql.sock sort_buffer_size 2097152 sql_auto_is_null OFF sql_big_selects ON sql_buffer_result OFF sql_log_bin ON sql_log_off OFF sql_mode 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 10000 sync_relay_log 10000 sync_relay_log_info 10000 system_time_zone PST table_definition_cache 1500 table_open_cache 1500 table_open_cache_instances 1 thread_cache_size 8 thread_concurrency 10 thread_handling one-thread-per-connection thread_stack 262144 time_format %H:%i:%s time_zone America/Vancouver timed_mutexes OFF timestamp 1550099073.579494 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.43-log version_comment Source distribution version_compile_machine amd64 version_compile_os FreeBSD11.2 wait_timeout 28800 warning_count 0 
6
  • What things can be tuned for ZFS? Do you have other processes running on the same VM (web server, php, etc)? If you provide SHOW VARIABLES; and SHOW GLOBAL STATUS; (after being up for at least a day), I may be able to discover some other issues. Meanwhile, lower innodb_buffer_pool_size to 3G in hopes that that will keep the problem from happening. (4G, even 5G, should be fine for a dedicated 8G server). Commented Feb 13, 2019 at 22:31
  • @RickJames Many things can be tuned for ZFS, but the swap appears to be allocated to MySQL itself, not ZFS's cache. This particular server does have php-fpm running, but the issue occurs on a different server that is 100% dedicated to MySQL. I've tried lowering the innodb buffer pool but it still swaps out. I added the output of global status. Variables are default+what's specified in the my.cnf. Commented Feb 13, 2019 at 22:50
  • I need the complete VARIABLES list -- the defaults change from version to version. MySQL may need swapping, but it does not allocate swap space; that is left to the OS (and ZFS driver). Commented Feb 13, 2019 at 23:02
  • @RickJames Thanks, I added the variables output. I just wasn't sure how long these questions should be on serverfault. Commented Feb 13, 2019 at 23:06
  • Your output is more compact than some; maybe that is why it fits. Commented Feb 13, 2019 at 23:51

2 Answers 2

1

Analysis...

Observations:

  • Version: 5.6.43-log
  • 8 GB of RAM
  • Uptime = 14d 21:34:59
  • You are not running on Windows.
  • Running 64-bit version
  • You appear to be running entirely (or mostly) InnoDB.

The More Important Issues:

Alas, nothing jumped out as the answer to your swapping problem. Anyway, here's my comments:

Set long_query_time=1 and turn on the slowlog. You have some slow queries that are likely to get worse as the tables get bigger. (16% of SELECTs are table scans.)

slave_skip_errors = 1022 1050 1060 1061 1062 1146 1169 -- That's sweeping a lot of things under the rug!

Doing USE dbname 30 times per connection (14 times per second)? What's going on?

Increase thread_cache_size to 20.

Since you don't seem to be using MyISAM, I wonder why you are doing any REPAIRs.

Is some 3rd party software doing SHOW TABLES every second? There is a bit of overhead in this.

Details and other observations:

( innodb_buffer_pool_size / _ram ) = 4096M / 8192M = 50.0% -- % of RAM used for InnoDB buffer_pool

( innodb_lru_scan_depth ) = 1,024 -- "InnoDB: page_cleaner: 1000ms intended loop took ..." may be fixed by lowering lru_scan_depth

( Innodb_pages_written / Innodb_buffer_pool_write_requests ) = 4,358,689 / 19741903 = 22.1% -- Write requests that had to hit disk -- Check innodb_buffer_pool_size

( Innodb_dblwr_pages_written/Innodb_pages_written ) = 0/4358689 = 0 -- Seems like these values should be equal?

( Innodb_os_log_written / (Uptime / 3600) / innodb_log_files_in_group / innodb_log_file_size ) = 2,416,485,376 / (1287299 / 3600) / 2 / 512M = 0.00629 -- Ratio -- (see minutes)

( Uptime / 60 * innodb_log_file_size / Innodb_os_log_written ) = 1,287,299 / 60 * 512M / 2416485376 = 4,766 -- Minutes between InnoDB log rotations Beginning with 5.6.8, this can be changed dynamically; be sure to also change my.cnf. -- (The recommendation of 60 minutes between rotations is somewhat arbitrary.) Adjust innodb_log_file_size. (Cannot change in AWS.)

( innodb_flush_method ) = innodb_flush_method = -- How InnoDB should ask the OS to write blocks. Suggest O_DIRECT or O_ALL_DIRECT (Percona) to avoid double buffering. (At least for Unix.) See chrischandler for caveat about O_ALL_DIRECT

( innodb_flush_neighbors ) = 1 -- A minor optimization when writing blocks to disk. -- Use 0 for SSD drives; 1 for HDD.

( innodb_io_capacity ) = 200 -- I/O ops per second capable on disk . 100 for slow drives; 200 for spinning drives; 1000-2000 for SSDs; multiply by RAID factor.

( sync_binlog ) = 0 -- Use 1 for added security, at some cost of I/O =1 may lead to lots of "query end"; =0 may lead to "binlog at impossible position" and lose transactions in a crash, but is faster.

( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- Whether to log all Deadlocks. -- If you are plagued with Deadlocks, turn this on. Caution: If you have lots of deadlocks, this may write a lot to disk.

( max_connections ) = 80 -- Maximum number of connections (threads). Impacts various allocations. -- If max_connections is too high and various memory settings are high, you could run out of RAM.

( local_infile ) = local_infile = ON -- local_infile = ON is a potential security issue

( Select_scan ) = 3,833,980 / 1287299 = 3 /sec -- full table scans -- Add indexes / optimize queries (unless they are tiny tables)

( Select_scan / Com_select ) = 3,833,980 / 23827649 = 16.1% -- % of selects doing full table scan. (May be fooled by Stored Routines.) -- Add indexes / optimize queries

( binlog_error_action ) = binlog_error_action = IGNORE_ERROR -- What to do if the binlog cannot be written. -- IGNORE_ERROR is the default for backwards compatibility, but ABORT_SERVER is recommended.

( binlog_format ) = binlog_format = MIXED -- STATEMENT/ROW/MIXED. ROW is preferred; it may become the default.

( slave_skip_errors ) = slave_skip_errors = 1022 1050 1060 1061 1062 1146 1169 -- Which error cases to ignore -- It would be better to change the code than sweep problems under the rug.

( slow_query_log ) = slow_query_log = OFF -- Whether to log slow queries. (5.1.12)

( long_query_time ) = 10 -- Cutoff (Seconds) for defining a "slow" query. -- Suggest 2

( Com_change_db / Connections ) = 17,594,185 / 586795 = 30 -- Database switches per connection -- (minor) Consider using "db.table" syntax

( Com_change_db ) = 17,594,185 / 1287299 = 14 /sec -- Probably comes from USE statements. -- Consider connecting with DB, using db.tbl syntax, eliminating spurious USE statements, etc.

( Threads_created / Connections ) = 16,681 / 586795 = 2.8% -- Rapidity of process creation

You have the Query Cache half-off. You should set both query_cache_type = OFF and query_cache_size = 0 . There is (according to a rumor) a 'bug' in the QC code that leaves some code on unless you turn off both of those settings.

Abnormally large:

Com_check = 5.1 /HR Com_create_procedure = 0.011 /HR Com_create_trigger = 0.22 /HR Com_drop_procedure = 0.022 /HR Com_drop_trigger = 0.22 /HR Com_repair = 0.0028 /HR Com_show_tables = 0.98 /sec 

Abnormal strings:

optimizer_trace = enabled=off,one_line=off optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN version_compile_machine = amd64 
3
  • Thanks for your analysis with this. I'll definitely be applying some of your recommendations. It's a 10 year old platform with a lot of weird stuff going on. The swap thing is new though and I'll update the post when I figure it out. Commented Feb 14, 2019 at 17:15
  • Has it been on FreeBSD the whole time? I don't hear of that OS much anymore. Commented Feb 14, 2019 at 17:22
  • Yep, the entire time. The application side of it makes use of a lot of snapshotting/clones with ZFS, before ZFS was viable on linux. Commented Feb 14, 2019 at 17:32
0

Rate Per Second=RPS - Suggestions to consider for your my.cnf [mysqld] section

innodb_io_capacity=1800 # from 200 to allow higher IOPS read_rnd_buffer_size=256K # from 4M to reduce handler_read_rnd_next RPS of 2560 query_cache_size=0 # from 1M to conserve RAM and QC is OFF already innodb_lru_scan_depth=100 # from 1024 to conserve CPU cycles every SECOND thread_cache_size=32 # from 8 to reduce threads_created from 16,681 in 15 days (expensive operation) 
4
  • This doesn't attempt to answer the question of why FreeBSD is using all swap while free ram remains. It also suggests increasing the iops that innodb expects to have, while not even knowing what kind of disks are in use. Commented Feb 20, 2019 at 16:33
  • @duncanfairley Then do not change anything that might help your situation. Could it be that someone is failing to terminate command line or SSHD processes and leaving tty connections when they are finished and walked away? Commented Feb 27, 2019 at 21:30
  • @DuncanFairley You have clues in handler_read_rnd_next that you are achieving 2560 RPS already, so allowing innodb_io_capacity above 200 would most likely be reasonable. Commented Mar 4, 2019 at 14:57
  • @DuncanFairley Have you tired any of the suggestions of Feb 20, 2018? We still do not know if you have any SSD or NVME or all rotating media. Please let us know if you have made any progress on expediting your delivery of query results. Thanks Commented Mar 16, 2019 at 0:03

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.