MySQL-8.0.19 優化日志及壓測


概要

MySQL-8.0.19 發布的第一時間 dbm 就提供了支持,那 dbm 自動化安裝的 MySQL 實例在性能上是一個怎樣的表現呢?我的測試環境如下。

IP CPU Mem Disk 系統版本 MySQL版本 角色
192.168.100.10 32(邏輯核心) 128G 4TSSD centos-7.6 MySQL-8.0.19 Master
192.168.100.20 32(邏輯核心) 128G 4TSSD centos-7.6 MySQL-8.0.19 Slave

dbm-agent 在安裝 MySQL 時會根據主機配置自動的完成參數優化,默認情況下的性能表現如下圖。


安裝

安裝 Master。

dbma-cli-single-instance --port=3306 --max-mem=131072 install

安裝 Slave。

dbma-cli-build-slave --host=192.168.100.10 --port=3306 --max-mem=131072 build-slave

驗證同步是否正常。

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event Master_Host: 192.168.100.10 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000051 Read_Master_Log_Pos: 88792484 Relay_Log_File: relay.000078 Relay_Log_Pos: 433520819 Relay_Master_Log_File: mysql-bin.000027 Slave_IO_Running: Yes Slave_SQL_Running: Yes 

dbm-agent 自動生成的配置文件如下。

[mysqld] ####for basic user = mysql3306 basedir = /usr/local/mysql-8.0.19-linux-glibc2.12-x86_64 datadir = /database/mysql/data/3306 server_id = 1794 port = 3306 bind_address = * admin_address = 127.0.0.1 mysqlx_port = 33060 admin_port = 33062 socket = /tmp/mysql-3306.sock mysqlx_socket = /tmp/mysqlx-33060.sock pid_file = /tmp/mysql-3306.pid character_set_server = utf8mb4 open_files_limit = 102000 max_prepared_stmt_count = 1048576 skip_name_resolve = 1 super_read_only = OFF log_timestamps = system event_scheduler = OFF auto_generate_certs = ON activate_all_roles_on_login = ON end_markers_in_json = OFF tmpdir = /tmp/ max_connections = 1024 autocommit = ON sort_buffer_size = 256K join_buffer_size = 256K eq_range_index_dive_limit = 200 ####for table big_tables = OFF sql_require_primary_key = OFF lower_case_table_names = 1 auto_increment_increment = 1 auto_increment_offset = 1 table_open_cache = 4000 table_definition_cache = 2000 table_open_cache_instances = 32 ####for net max_allowed_packet = 1G connect_timeout = 10 interactive_timeout = 28800 net_read_timeout = 30 net_retry_count = 10 net_write_timeout = 60 net_buffer_length = 32K ####for logs log_output = FILE general_log = OFF general_log_file = general.log ##error log_error = err.log log_statements_unsafe_for_binlog = ON ##slow slow_query_log = ON slow_query_log_file = slow.log long_query_time = 2 log_queries_not_using_indexes = OFF log_slow_admin_statements = OFF log_slow_slave_statements = OFF ##binlog log_bin = /binlog/mysql/binlog/3306/mysql-bin binlog_checksum = none log_bin_trust_function_creators = ON binlog_direct_non_transactional_updates = OFF binlog_expire_logs_seconds = 604800 binlog_error_action = ABORT_SERVER binlog_format = ROW max_binlog_stmt_cache_size = 1G max_binlog_cache_size = 1G max_binlog_size = 1G binlog_order_commits = ON binlog_row_image = FULL binlog_row_metadata = MINIMAL binlog_rows_query_log_events = ON binlog_stmt_cache_size = 32K log_slave_updates = ON binlog_transaction_dependency_history_size =25000 binlog_transaction_dependency_tracking = WRITESET sync_binlog = 1 binlog_cache_size = 96K binlog_group_commit_sync_delay = 0 binlog_group_commit_sync_no_delay_count = 0 ####for replication rpl_semi_sync_master_enabled = 1 rpl_semi_sync_slave_enabled = 1 rpl_semi_sync_master_timeout = 1000 rpl_semi_sync_master_wait_point = AFTER_SYNC rpl_semi_sync_master_wait_no_slave = ON rpl_semi_sync_master_wait_for_slave_count = 1 master_info_repository = table sync_master_info = 10000 skip_slave_start = OFF slave_load_tmpdir = /tmp/ plugin_load_add = semisync_master.so plugin_load_add = semisync_slave.so relay_log = relay sync_relay_log = 10000 sync_relay_log_info = 10000 relay_log_info_repository = table slave_preserve_commit_order = ON slave_parallel_type = logical_clock slave_parallel_workers = 2 slave_max_allowed_packet = 1G ####for gtid gtid_mode = ON binlog_gtid_simple_recovery = ON enforce_gtid_consistency = ON gtid_executed_compression_period = 1000 ####for clone plugin-load-add = mysql_clone.so clone = FORCE_PLUS_PERMANEN ####for engines default_storage_engine = innodb default_tmp_storage_engine = innodb internal_tmp_mem_storage_engine = TempTable ####for innodb innodb_data_home_dir = ./ innodb_data_file_path = ibdata1:64M:autoextend innodb_page_size = 16K innodb_default_row_format = dynamic innodb_log_group_home_dir = ./ innodb_redo_log_encrypt = OFF innodb_online_alter_log_max_size = 256M innodb_undo_directory = ./ innodb_undo_log_encrypt = OFF innodb_undo_log_truncate = ON innodb_max_undo_log_size = 1G innodb_rollback_on_timeout = OFF innodb_rollback_segments = 128 innodb_log_checksums = ON innodb_checksum_algorithm = crc32 innodb_log_compressed_pages = ON innodb_doublewrite = ON innodb_commit_concurrency = 0 innodb_read_only = OFF innodb_dedicated_server = OFF innodb_old_blocks_pct = 37 innodb_old_blocks_time = 1000 innodb_random_read_ahead = OFF innodb_read_ahead_threshold = 56 innodb_max_dirty_pages_pct_lwm = 20 innodb_max_dirty_pages_pct = 90 innodb_lru_scan_depth = 1024 innodb_adaptive_flushing = ON innodb_adaptive_flushing_lwm = 10 innodb_flushing_avg_loops = 30 innodb_buffer_pool_dump_pct = 50 innodb_buffer_pool_dump_at_shutdown = ON innodb_buffer_pool_load_at_startup = ON innodb_buffer_pool_filename = ib_buffer_pool innodb_stats_persistent = ON innodb_stats_on_metadata = ON innodb_stats_method = nulls_equal innodb_stats_auto_recalc = ON innodb_stats_include_delete_marked = ON innodb_stats_persistent_sample_pages = 20 innodb_stats_transient_sample_pages = 8 innodb_status_output = OFF innodb_status_output_locks = OFF innodb_buffer_pool_dump_now = OFF innodb_buffer_pool_load_abort = OFF innodb_buffer_pool_load_now = OFF innodb_thread_concurrency = 0 innodb_concurrency_tickets = 5000 innodb_thread_sleep_delay = 15000 innodb_adaptive_max_sleep_delay = 150000 innodb_read_io_threads = 8 innodb_write_io_threads = 4 innodb_use_native_aio = ON innodb_flush_sync = OFF innodb_spin_wait_delay = 6 innodb_purge_threads = 6 innodb_purge_batch_size = 300 innodb_purge_rseg_truncate_frequency = 128 innodb_deadlock_detect = ON innodb_print_all_deadlocks = ON innodb_lock_wait_timeout = 50 innodb_table_locks = ON innodb_sync_array_size = 1 innodb_sync_spin_loops = 30 innodb_print_ddl_logs = OFF innodb_replication_delay = 0 innodb_cmp_per_index_enabled = OFF innodb_disable_sort_file_cache = OFF innodb_numa_interleave = OFF innodb_strict_mode = ON innodb_sort_buffer_size = 1M innodb_fast_shutdown = 1 innodb_force_load_corrupted = OFF innodb_force_recovery = 0 innodb_temp_tablespaces_dir = ./#innodb_temp/ innodb_tmpdir = ./ innodb_temp_data_file_path = ibtmp1:64M:autoextend innodb_page_cleaners = 4 innodb_adaptive_hash_index = ON innodb_adaptive_hash_index_parts = 8 innodb_flush_log_at_timeout = 1 innodb_fsync_threshold = 0 innodb_fill_factor = 90 innodb_file_per_table = ON innodb_autoextend_increment = 64 innodb_open_files = 100000 innodb_buffer_pool_chunk_size = 128M innodb_buffer_pool_instances = 32 innodb_log_files_in_group = 8 innodb_log_file_size = 256M innodb_flush_neighbors = 0 innodb_io_capacity = 4000 innodb_io_capacity_max = 20000 innodb_autoinc_lock_mode = 2 innodb_change_buffer_max_size = 25 innodb_flush_method = O_DIRECT innodb_log_buffer_size = 2G innodb_flush_log_at_trx_commit = 1 innodb_buffer_pool_size = 96G ####for performance_schema performance_schema =ON performance_schema_consumer_global_instrumentation =ON performance_schema_consumer_thread_instrumentation =ON performance_schema_consumer_events_stages_current =ON performance_schema_consumer_events_stages_history =ON performance_schema_consumer_events_stages_history_long =OFF performance_schema_consumer_statements_digest =ON performance_schema_consumer_events_statements_current =ON performance_schema_consumer_events_statements_history =ON performance_schema_consumer_events_statements_history_long =OFF performance_schema_consumer_events_waits_current =ON performance_schema_consumer_events_waits_history =ON performance_schema_consumer_events_waits_history_long =OFF performance-schema-instrument ='memory/%=COUNTED' # -- ~ _ ~ ~ _ ~ ~ _ ~ --{@class=h5 text-secondary mb-4} # base on mysql-8.0.19{@class=h5 text-secondary mb-4} # generated by https://www.sqlpy.com 2020年1月15日 10:32{@class=h5 text-secondary mb-4} # wechat: jianglegege{@class=h5 text-secondary mb-4} # email: 1721900707@qq.com{@class=h5 text-secondary mb-4} # -- ~ _ ~ --{@class=h5 text-secondary mb-4} 

壓測

用 sysbench 對 MySQL 進行壓力測試。

准備數據。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=120 \
oltp_read_write prepare

性能壓測。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=120 \
oltp_read_write run

MySQL 的性能表現。

操作系統層面的資源消耗情況。

從資源使用情況來看 120 個並發並沒有把主機的性能完全利用起來,接下來准備一步步加大並發。


150並發

把並發加大到 150。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=150 \
oltp_read_write run

提高並發后 select 由之前的 46k 提升到 57k,其它類型的處理能力也得到了提升。

資源使用率上升。

總體上看負載還行, iowait 也比較小,可以繼續加大並發。


180並發

把並發加大到 180。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=180 \
oltp_read_write run

提高並發后 select 由之前的 57k 提升到 67k,其它類型的處理能力也得到了提升。

資源使用率上升到 70%。


210並發

把並發加大到 210。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=210 \
oltp_read_write run

提高並發后 select 由之前的 67k 提升到 74k,其它類型的處理能力也得到了提升。

資源使用率上升到 80%。


240並發

把並發加大到 240。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=240 \
oltp_read_write run

提高並發后 select 由之前的 74k 提升到 79k,其它類型的處理能力也得到了提升。

資源使用率上升到 85%。


270並發

把並發加大到 270。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=270 \
oltp_read_write run

當並發達到 270 的時候性能已經開始下降。

資源使用率還是 85%。


300並發

把並發加大到 300。

sysbench --mysql-host=192.168.100.10  --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench --tables=120 --table_size=1000000 \
--mysql-db=tempdb --time=3600 --threads=300 \
oltp_read_write run

當並發達到 300 的時候性能還在下降。

同時資源使用率也穩定在 85% 左右不再下降。 


結論

dbm-agent 自動生成的 my.cnf 文件還是比較機智的,不怎么用 DBA 操心,整體上並發與性能的關系如下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM