ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

MariaDBの5.5と10.2でチューニング&ベンチマーク比較(2) - インターネット検索編

はじめに

この休みの間はひたすらこれです。

というわけで前回はベンチマークのための環境準備とmysqltuner先生による指摘反映をして、少し改善しました。

今の問題はupgrade後のほうが性能が落ちているように見えていることです。これを解決するチューニングは何か?というのを探していきたいともいます。

今回はインターネット上で検索してみましょう。「MariaDB チューニング」で期間を直近1年にしぼって検索してみました。

スロークエリを有効にする

性能を判断できる指標は多いほうがいいです。general_query_logを出すと大量になってしまいますが、スロークエリは常に出すべきでしょう。mysqltuner先生もそうおっしゃっていました。

slow_query_log=ON
long_query_time=0.5
log-slow-queries=/var/lib/mysql/slow.log

qiita.com

さて現在のsysbenchでスロークエリが出ているのか、確認してみましたが、スロークエリは出ていませんでした。ただ、今後問題発生したときにまっさきにみたいので、設定しておきましょう。

innodb_buffer_pool_size

現在総メモリの25%にしていますが、ストレージエンジンはinnodbしか使っていないため、80&まで割り当ててみます。1GBなので768MBに設定。

25%と80%で比較してみます。

f:id:take_she12:20171028111335p:plain

改善効果は見られないどころか、一部劣化しているので25%に戻しますかね。

dsas.blog.klab.org

variablesの差分をみる

バージョンが異なり、デフォルト値が変更になったパラメータも多数あります。膨大にありますが、関係ありそうなものを見つけるのに1度やってみます。

mysql -u root -e "show variables;"

thread

[root@mariadb10-2-8 ~]# diff variables_5_5_45.log variables_10_2_8.log | grep thread
> innodb_encryption_threads  0
> innodb_mtflush_threads 8
< innodb_purge_threads   1
> innodb_purge_threads   4
< innodb_thread_concurrency_timer_based  OFF
< performance_schema_max_thread_instances    1000
> performance_schema_max_thread_instances    6100
< pseudo_thread_id   2046
> pseudo_thread_id   2054
> slave_domain_parallel_threads  0
> slave_parallel_threads 0
< thread_pool_max_threads    500
> thread_pool_max_threads    65536
> thread_pool_prio_kickup_timer  1000
> thread_pool_priority   auto
< thread_stack   294912
> thread_stack   299008
> wsrep_slave_threads    1

thread_pool_max_threadsが全然違いますね。

Thread Pool System and Status Variables - MariaDB Knowledge Base

スレッドプール内の最大スレッド数で、これに達すると新しくスレッドが作られなくなります。これは大きい方がいいと思います。

max_allowed_packet

クライアントが送ることができる最大パケットサイズですね。

10.2.8では16MBがデフォルトになったようです。

[root@mariadb10-2-8 ~]# diff variables_5_5_45.log variables_10_2_8.log | grep max_allow
< max_allowed_packet 1048576
> max_allowed_packet 16777216

innodb

大量に出ますが、ぱっとみ何か気づくものはありませんでした。(この中に原因はあるかもしれないけど)

[root@mariadb10-2-8 ~]# diff variables_5_5_45.log variables_10_2_8.log | grep innodb
< have_innodb    YES
< innodb_adaptive_flushing_method    estimate
> innodb_adaptive_flushing_lwm   10.000000
< innodb_adaptive_hash_index_partitions  1
< innodb_additional_mem_pool_size    8388608
< innodb_autoextend_increment    8
> innodb_adaptive_hash_index_partitions  8
> innodb_adaptive_hash_index_parts   8
> innodb_adaptive_max_sleep_delay    150000
> innodb_autoextend_increment    64
< innodb_blocking_buffer_pool_restore    OFF
> innodb_background_scrub_data_check_interval    3600
> innodb_background_scrub_data_compressed    OFF
> innodb_background_scrub_data_interval  604800
> innodb_background_scrub_data_uncompressed  OFF
> innodb_buf_dump_status_frequency   0
> innodb_buffer_pool_chunk_size  134217728
> innodb_buffer_pool_dump_at_shutdown    ON
> innodb_buffer_pool_dump_now    OFF
> innodb_buffer_pool_dump_pct    25
> innodb_buffer_pool_filename    ib_buffer_pool
> innodb_buffer_pool_load_abort  OFF
> innodb_buffer_pool_load_at_startup ON
> innodb_buffer_pool_load_now    OFF
< innodb_buffer_pool_restore_at_startup  0
< innodb_buffer_pool_shm_checksum    ON
< innodb_buffer_pool_shm_key 0
> innodb_change_buffer_max_size  25
< innodb_checkpoint_age_target   0
> innodb_checksum_algorithm  crc32
> innodb_cleaner_lsn_age_factor  DEPRECATED
> innodb_cmp_per_index_enabled   OFF
< innodb_concurrency_tickets 500
< innodb_corrupt_table_action    assert
< innodb_data_file_path  ibdata1:10M:autoextend
> innodb_compression_algorithm   zlib
> innodb_compression_default OFF
> innodb_compression_failure_threshold_pct   5
> innodb_compression_level   6
> innodb_compression_pad_pct_max 50
> innodb_concurrency_tickets 5000
> innodb_corrupt_table_action    deprecated
> innodb_data_file_path  ibdata1:12M:autoextend
< innodb_dict_size_limit 0
> innodb_deadlock_detect ON
> innodb_default_encryption_key_id   1
> innodb_default_row_format  dynamic
> innodb_defragment  OFF
> innodb_defragment_fill_factor  0.900000
> innodb_defragment_fill_factor_n_recs   20
> innodb_defragment_frequency    40
> innodb_defragment_n_pages  7
> innodb_defragment_stats_accuracy   0
> innodb_disable_sort_file_cache OFF
> innodb_disallow_writes OFF
< innodb_doublewrite_file    
> innodb_empty_free_list_algorithm   DEPRECATED
> innodb_encrypt_log OFF
> innodb_encrypt_tables  OFF
> innodb_encryption_rotate_key_age   1
> innodb_encryption_rotation_iops    100
> innodb_encryption_threads  0
< innodb_fast_checksum   OFF
< innodb_file_format Antelope
> innodb_fatal_semaphore_wait_threshold  600
> innodb_file_format Barracuda
< innodb_file_format_max Antelope
> innodb_file_format_max Barracuda
> innodb_fill_factor 100
> innodb_flush_log_at_timeout    1
< innodb_flush_neighbor_pages    area
> innodb_flush_neighbors 1
> innodb_flush_sync  ON
> innodb_flushing_avg_loops  30
> innodb_force_primary_key   OFF
< innodb_ibuf_accel_rate 100
< innodb_ibuf_active_contract    1
< innodb_ibuf_max_size   402636800
< innodb_import_table_from_xtrabackup    0
> innodb_foreground_preflush DEPRECATED
> 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_idle_flush_pct  100
> innodb_immediate_scrub_data_uncompressed   OFF
> innodb_instrument_semaphores   OFF
> innodb_io_capacity_max 2000
< innodb_large_prefix    OFF
< innodb_lazy_drop_table 0
> innodb_large_prefix    ON
> innodb_lock_schedule_algorithm vats
< innodb_locking_fake_changes    ON
> innodb_locking_fake_changes    OFF
< innodb_log_block_size  512
< innodb_log_buffer_size 8388608
> innodb_log_arch_dir    
> innodb_log_arch_expire_sec 0
> innodb_log_archive OFF
> innodb_log_block_size  0
> innodb_log_buffer_size 16777216
> innodb_log_checksum_algorithm  DEPRECATED
> innodb_log_checksums   ON
> innodb_log_compressed_pages    ON
< innodb_max_bitmap_file_size    104857600
< innodb_max_changed_pages   1000000
< innodb_max_dirty_pages_pct 75
> innodb_log_write_ahead_size    8192
> innodb_lru_scan_depth  1024
> innodb_max_bitmap_file_size    0
> innodb_max_changed_pages   0
> innodb_max_dirty_pages_pct 75.000000
> innodb_max_dirty_pages_pct_lwm 0.000000
< innodb_merge_sort_block_size   1048576
< innodb_mirrored_log_groups 1
> innodb_max_purge_lag_delay 0
> innodb_max_undo_log_size   10485760
> innodb_mirrored_log_groups 0
> innodb_monitor_disable 
> innodb_monitor_enable  
> innodb_monitor_reset   
> innodb_monitor_reset_all   
> innodb_mtflush_threads 8
< innodb_old_blocks_time 0
< innodb_open_files  300
> innodb_old_blocks_time 1000
> innodb_online_alter_log_max_size   134217728
> innodb_open_files  2000
> innodb_optimize_fulltext_only  OFF
> innodb_page_cleaners   1
> innodb_prefix_index_cluster_optimization   OFF
< innodb_purge_batch_size    20
< innodb_purge_threads   1
> innodb_purge_batch_size    300
> innodb_purge_rseg_truncate_frequency   128
> innodb_purge_threads   4
< innodb_read_ahead  linear
< innodb_recovery_stats  OFF
< innodb_recovery_update_relay_log   OFF
> innodb_read_only   OFF
< innodb_show_locks_held 10
> innodb_sched_priority_cleaner  0
> innodb_scrub_log   OFF
> innodb_scrub_log_speed 256
> innodb_show_locks_held 0
< innodb_simulate_comp_failures  0
> innodb_sort_buffer_size    1048576
< innodb_stats_auto_update   1
> innodb_stats_auto_recalc   ON
> innodb_stats_include_delete_marked OFF
< innodb_stats_on_metadata   ON
> innodb_stats_on_metadata   OFF
> innodb_stats_persistent    ON
> innodb_stats_persistent_sample_pages   20
< innodb_stats_update_need_lock  1
< innodb_strict_mode OFF
> innodb_stats_transient_sample_pages    8
> innodb_status_output   OFF
> innodb_status_output_locks OFF
> innodb_strict_mode ON
> innodb_sync_array_size 1
> innodb_temp_data_file_path ibtmp1:12M:autoextend
< innodb_thread_concurrency_timer_based  OFF
> innodb_tmpdir  
< innodb_use_atomic_writes   OFF
> innodb_track_redo_log_now  OFF
> innodb_undo_directory  ./
> innodb_undo_log_truncate   OFF
> innodb_undo_logs   128
> innodb_undo_tablespaces    0
> innodb_use_atomic_writes   ON
< innodb_use_global_flush_log_at_trx_commit  ON
> innodb_use_global_flush_log_at_trx_commit  OFF
> innodb_use_mtflush OFF
< innodb_use_sys_malloc  ON
< innodb_use_sys_stats_table OFF
< innodb_version 5.5.44-MariaDB-37.3
> innodb_use_trim    ON
> innodb_version 5.7.19

おわりに

今回はバージョン間での性能歳を見つけることができませんでした。

次回は何が原因でトランザクション性能に差分がでているのか、その指標になる値を見つけて、比較したのち、パラメータ変更につなげていきます。