在組複製上調整 MySQL
我即將在 GROUP REPLICATION 中從舊版本的 MySQL 5.6(主/從配置)切換到 MySQL 8(多主配置上的 3 個節點)。
這些表是 99% 的 InnoDB。
webfarm 只是將之前的 InnoDB 配置變數複製到這些新機器上。我想知道如何提高性能,每台機器都有以下配置:
1) Cpu: 12 core (Intel Xeon Processor (Skylake, IBRS)) 2) RAM: total used free shared buff/cache available Mem: 49456252 5164100 11487392 18972 32804760 43676276 Swap: 1998844 6924 1991920 3) Disk: Filesystem Size Used Avail Use% Mounted on /dev/sda2 54G 1.2G 50G 3% / /dev/mapper/vg0-mysql 1004G 414G 590G 42% /var/lib/mysql
我所有的數據庫都是 250GB 的數據。
InnnoDB 變數:
*************************** 1. row *************************** Variable_name: innodb_adaptive_flushing Value: ON *************************** 2. row *************************** Variable_name: innodb_adaptive_flushing_lwm Value: 10 *************************** 3. row *************************** Variable_name: innodb_adaptive_hash_index Value: ON *************************** 4. row *************************** Variable_name: innodb_adaptive_hash_index_parts Value: 8 *************************** 5. row *************************** Variable_name: innodb_adaptive_max_sleep_delay Value: 150000 *************************** 6. row *************************** Variable_name: innodb_api_bk_commit_interval Value: 5 *************************** 7. row *************************** Variable_name: innodb_api_disable_rowlock Value: OFF *************************** 8. row *************************** Variable_name: innodb_api_enable_binlog Value: OFF *************************** 9. row *************************** Variable_name: innodb_api_enable_mdl Value: OFF *************************** 10. row *************************** Variable_name: innodb_api_trx_level Value: 0 *************************** 11. row *************************** Variable_name: innodb_autoextend_increment Value: 64 *************************** 12. row *************************** Variable_name: innodb_autoinc_lock_mode Value: 2 *************************** 13. row *************************** Variable_name: innodb_buffer_pool_chunk_size Value: 134217728 *************************** 14. row *************************** Variable_name: innodb_buffer_pool_dump_at_shutdown Value: ON *************************** 15. row *************************** Variable_name: innodb_buffer_pool_dump_now Value: OFF *************************** 16. row *************************** Variable_name: innodb_buffer_pool_dump_pct Value: 25 *************************** 17. row *************************** Variable_name: innodb_buffer_pool_filename Value: ib_buffer_pool *************************** 18. row *************************** Variable_name: innodb_buffer_pool_in_core_file Value: ON *************************** 19. row *************************** Variable_name: innodb_buffer_pool_instances Value: 8 *************************** 20. row *************************** Variable_name: innodb_buffer_pool_load_abort Value: OFF *************************** 21. row *************************** Variable_name: innodb_buffer_pool_load_at_startup Value: ON *************************** 22. row *************************** Variable_name: innodb_buffer_pool_load_now Value: OFF *************************** 23. row *************************** Variable_name: innodb_buffer_pool_size Value: 34359738368 *************************** 24. row *************************** Variable_name: innodb_change_buffer_max_size Value: 25 *************************** 25. row *************************** Variable_name: innodb_change_buffering Value: all *************************** 26. row *************************** Variable_name: innodb_checksum_algorithm Value: crc32 *************************** 27. row *************************** Variable_name: innodb_cmp_per_index_enabled Value: OFF *************************** 28. row *************************** Variable_name: innodb_commit_concurrency Value: 0 *************************** 29. row *************************** Variable_name: innodb_compression_failure_threshold_pct Value: 5 *************************** 30. row *************************** Variable_name: innodb_compression_level Value: 6 *************************** 31. row *************************** Variable_name: innodb_compression_pad_pct_max Value: 50 *************************** 32. row *************************** Variable_name: innodb_concurrency_tickets Value: 5000 *************************** 33. row *************************** Variable_name: innodb_data_file_path Value: ibdata1:12M:autoextend *************************** 34. row *************************** Variable_name: innodb_data_home_dir Value: *************************** 35. row *************************** Variable_name: innodb_deadlock_detect Value: ON *************************** 36. row *************************** Variable_name: innodb_dedicated_server Value: OFF *************************** 37. row *************************** Variable_name: innodb_default_row_format Value: dynamic *************************** 38. row *************************** Variable_name: innodb_directories Value: *************************** 39. row *************************** Variable_name: innodb_disable_sort_file_cache Value: OFF *************************** 40. row *************************** Variable_name: innodb_doublewrite Value: ON *************************** 41. row *************************** Variable_name: innodb_fast_shutdown Value: 1 *************************** 42. row *************************** Variable_name: innodb_file_per_table Value: ON *************************** 43. row *************************** Variable_name: innodb_fill_factor Value: 100 *************************** 44. row *************************** Variable_name: innodb_flush_log_at_timeout Value: 1 *************************** 45. row *************************** Variable_name: innodb_flush_log_at_trx_commit Value: 1 *************************** 46. row *************************** Variable_name: innodb_flush_method Value: O_DIRECT *************************** 47. row *************************** Variable_name: innodb_flush_neighbors Value: 0 *************************** 48. row *************************** Variable_name: innodb_flush_sync Value: ON *************************** 49. row *************************** Variable_name: innodb_flushing_avg_loops Value: 30 *************************** 50. row *************************** Variable_name: innodb_force_load_corrupted Value: OFF *************************** 51. row *************************** Variable_name: innodb_force_recovery Value: 0 *************************** 52. row *************************** Variable_name: innodb_fsync_threshold Value: 0 *************************** 53. row *************************** Variable_name: innodb_ft_aux_table Value: *************************** 54. row *************************** Variable_name: innodb_ft_cache_size Value: 8000000 *************************** 55. row *************************** Variable_name: innodb_ft_enable_diag_print Value: OFF *************************** 56. row *************************** Variable_name: innodb_ft_enable_stopword Value: ON *************************** 57. row *************************** Variable_name: innodb_ft_max_token_size Value: 84 *************************** 58. row *************************** Variable_name: innodb_ft_min_token_size Value: 3 *************************** 59. row *************************** Variable_name: innodb_ft_num_word_optimize Value: 2000 *************************** 60. row *************************** Variable_name: innodb_ft_result_cache_limit Value: 2000000000 *************************** 61. row *************************** Variable_name: innodb_ft_server_stopword_table Value: *************************** 62. row *************************** Variable_name: innodb_ft_sort_pll_degree Value: 2 *************************** 63. row *************************** Variable_name: innodb_ft_total_cache_size Value: 640000000 *************************** 64. row *************************** Variable_name: innodb_ft_user_stopword_table Value: *************************** 65. row *************************** Variable_name: innodb_io_capacity Value: 200 *************************** 66. row *************************** Variable_name: innodb_io_capacity_max Value: 2000 *************************** 67. row *************************** Variable_name: innodb_lock_wait_timeout Value: 120 *************************** 68. row *************************** Variable_name: innodb_log_buffer_size Value: 134217728 *************************** 69. row *************************** Variable_name: innodb_log_checksums Value: ON *************************** 70. row *************************** Variable_name: innodb_log_compressed_pages Value: ON *************************** 71. row *************************** Variable_name: innodb_log_file_size Value: 268435456 *************************** 72. row *************************** Variable_name: innodb_log_files_in_group Value: 2 *************************** 73. row *************************** Variable_name: innodb_log_group_home_dir Value: ./ *************************** 74. row *************************** Variable_name: innodb_log_spin_cpu_abs_lwm Value: 80 *************************** 75. row *************************** Variable_name: innodb_log_spin_cpu_pct_hwm Value: 50 *************************** 76. row *************************** Variable_name: innodb_log_wait_for_flush_spin_hwm Value: 400 *************************** 77. row *************************** Variable_name: innodb_log_write_ahead_size Value: 8192 *************************** 78. row *************************** Variable_name: innodb_lru_scan_depth Value: 1024 *************************** 79. row *************************** Variable_name: innodb_max_dirty_pages_pct Value: 90.000000 *************************** 80. row *************************** Variable_name: innodb_max_dirty_pages_pct_lwm Value: 10.000000 *************************** 81. row *************************** Variable_name: innodb_max_purge_lag Value: 0 *************************** 82. row *************************** Variable_name: innodb_max_purge_lag_delay Value: 0 *************************** 83. row *************************** Variable_name: innodb_max_undo_log_size Value: 1073741824 *************************** 84. row *************************** Variable_name: innodb_monitor_disable Value: *************************** 85. row *************************** Variable_name: innodb_monitor_enable Value: *************************** 86. row *************************** Variable_name: innodb_monitor_reset Value: *************************** 87. row *************************** Variable_name: innodb_monitor_reset_all Value: *************************** 88. row *************************** Variable_name: innodb_numa_interleave Value: OFF *************************** 89. row *************************** Variable_name: innodb_old_blocks_pct Value: 37 *************************** 90. row *************************** Variable_name: innodb_old_blocks_time Value: 1000 *************************** 91. row *************************** Variable_name: innodb_online_alter_log_max_size Value: 134217728 *************************** 92. row *************************** Variable_name: innodb_open_files Value: 3459 *************************** 93. row *************************** Variable_name: innodb_optimize_fulltext_only Value: OFF *************************** 94. row *************************** Variable_name: innodb_page_cleaners Value: 4 *************************** 95. row *************************** Variable_name: innodb_page_size Value: 16384 *************************** 96. row *************************** Variable_name: innodb_parallel_read_threads Value: 4 *************************** 97. row *************************** Variable_name: innodb_print_all_deadlocks Value: OFF *************************** 98. row *************************** Variable_name: innodb_print_ddl_logs Value: OFF *************************** 99. row *************************** Variable_name: innodb_purge_batch_size Value: 300 *************************** 100. row *************************** Variable_name: innodb_purge_rseg_truncate_frequency Value: 128 *************************** 101. row *************************** Variable_name: innodb_purge_threads Value: 4 *************************** 102. row *************************** Variable_name: innodb_random_read_ahead Value: OFF *************************** 103. row *************************** Variable_name: innodb_read_ahead_threshold Value: 56 *************************** 104. row *************************** Variable_name: innodb_read_io_threads Value: 4 *************************** 105. row *************************** Variable_name: innodb_read_only Value: OFF *************************** 106. row *************************** Variable_name: innodb_redo_log_archive_dirs Value: *************************** 107. row *************************** Variable_name: innodb_redo_log_encrypt Value: OFF *************************** 108. row *************************** Variable_name: innodb_replication_delay Value: 0 *************************** 109. row *************************** Variable_name: innodb_rollback_on_timeout Value: OFF *************************** 110. row *************************** Variable_name: innodb_rollback_segments Value: 128 *************************** 111. row *************************** Variable_name: innodb_sort_buffer_size Value: 1048576 *************************** 112. row *************************** Variable_name: innodb_spin_wait_delay Value: 6 *************************** 113. row *************************** Variable_name: innodb_spin_wait_pause_multiplier Value: 50 *************************** 114. row *************************** Variable_name: innodb_stats_auto_recalc Value: ON *************************** 115. row *************************** Variable_name: innodb_stats_include_delete_marked Value: OFF *************************** 116. row *************************** Variable_name: innodb_stats_method Value: nulls_equal *************************** 117. row *************************** Variable_name: innodb_stats_on_metadata Value: OFF *************************** 118. row *************************** Variable_name: innodb_stats_persistent Value: ON *************************** 119. row *************************** Variable_name: innodb_stats_persistent_sample_pages Value: 20 *************************** 120. row *************************** Variable_name: innodb_stats_transient_sample_pages Value: 8 *************************** 121. row *************************** Variable_name: innodb_status_output Value: OFF *************************** 122. row *************************** Variable_name: innodb_status_output_locks Value: OFF *************************** 123. row *************************** Variable_name: innodb_strict_mode Value: ON *************************** 124. row *************************** Variable_name: innodb_sync_array_size Value: 1 *************************** 125. row *************************** Variable_name: innodb_sync_spin_loops Value: 30 *************************** 126. row *************************** Variable_name: innodb_table_locks Value: ON *************************** 127. row *************************** Variable_name: innodb_temp_data_file_path Value: ibtmp1:12M:autoextend *************************** 128. row *************************** Variable_name: innodb_temp_tablespaces_dir Value: ./#innodb_temp/ *************************** 129. row *************************** Variable_name: innodb_thread_concurrency Value: 12 *************************** 130. row *************************** Variable_name: innodb_thread_sleep_delay Value: 0 *************************** 131. row *************************** Variable_name: innodb_tmpdir Value: *************************** 132. row *************************** Variable_name: innodb_undo_directory Value: ./ *************************** 133. row *************************** Variable_name: innodb_undo_log_encrypt Value: OFF *************************** 134. row *************************** Variable_name: innodb_undo_log_truncate Value: ON *************************** 135. row *************************** Variable_name: innodb_undo_tablespaces Value: 2 *************************** 136. row *************************** Variable_name: innodb_use_native_aio Value: ON *************************** 137. row *************************** Variable_name: innodb_version Value: 8.0.17 *************************** 138. row *************************** Variable_name: innodb_write_io_threads Value: 4 *************************** 139. row ************************** Variable_name: max_connections Value: 3072 *************************** 140. row *************************** Variable_name: max_user_connections Value: 3072
我讀了很多關於緩衝池大小的文章(80% 的規則),但我仍在考慮是否還有其他變數需要增加。
另外我嘗試執行 mysqltuner perl 腳本,這些是建議:
-------- Recommendations --------------------------------------------------------------------------- General recommendations: Control warning line(s) into /var/log/mysql/error.log file Control error line(s) into /var/log/mysql/error.log file MySQL was started within the last 24 hours - recommendations may be inaccurate Reduce your overall MySQL memory footprint for system stability Dedicate this server to your database for highest performance. Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1 Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: https://bit.ly/2TcGgtU Variables to adjust: *** MySQL's maximum memory usage is dangerously high *** *** Add RAM before increasing MySQL buffer variables *** table_definition_cache(2000) > 464470 or -1 (autosizing if supported) innodb_buffer_pool_size (>= 241.7G) if possible. innodb_log_file_size should be (=3G) if possible, so InnoDB total log files size equals to 25% of buffer pool size. innodb_buffer_pool_instances(=24)
行“innodb_buffer_pool_size (>= 241.7G) 如果可能的話。” 讓我有點震驚,怎麼可能有這麼大的 RAM 和緩衝池?
我知道這與我之前提到的數據大小(250GB)有關,但不建議使用這麼大的記憶體嗎?隨時詢問其他細節,感謝您的幫助!
@danblack
在其中一台 GROUP REPLICATION 機器的 mysql 配置文件下方,我的客戶現在不使用這些機器,當一切準備就緒並正確配置後,我將切換到它們。
這是關於 GR 機器的完整 mysqltuner 報告: https ://pastebin.com/XEFbpGUV
@Wilson Hauck 我沒有將 SSD 或 NVMEE 視為設備:
pvdisplay --- Physical volume --- PV Name /dev/sdc VG Name vg0 PV Size <651.93 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 166893 Free PE 493 Allocated PE 166400 PV UUID 4Xco4e-Es5d-LcZ2-FHxt-8PYw-B1E6-h9nwP8 cat /sys/block/sdc/queue/rotational 1
這些是我要切換的一台機器的輸出,我再說一遍,這些機器仍然沒有被應用程序使用:
正常執行時間 25 小時:
B) https://pastebin.com/Uqtre6BS
C) https://pastebin.com/3HfWdCTR
D) https://pastebin.com/EazB2XWZ
ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 193064 max locked memory (kbytes, -l) 65536 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 193064 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
除了這些資訊之外,我還提供了我的客戶現在使用的從機的輸出:
正常執行時間:26 天
MySQL 配置文件:
mysqltuning script + SHOW GLOBAL STATUS + SHOW GLOBAL VARIABLES + SHOW FULL PROCESSLIST
磁碟類型:
pvdisplay --- Physical volume --- PV Name /dev/vdb1 VG Name vg0 PV Size 912.54 GiB / not usable 2.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 233611 Free PE 5259 Allocated PE 228352 PV UUID G8aSfO-Ktbg-UcfP-4yoL-jjH9-qjxe-OUN9ni cat /sys/block/vdb/queue/rotational 1 ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 459880 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 459880 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited iostat -xm 5 3 Linux 3.2.0-4-amd64 02/24/20 _x86_64_ (12 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 6.95 0.00 0.65 1.20 0.01 91.19 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.16 0.09 0.15 0.00 0.00 22.30 0.00 1.02 1.94 0.46 0.46 0.01 vdb 5.84 89.65 156.08 208.73 7.59 3.05 59.71 0.92 2.53 1.93 2.97 0.68 24.89 dm-0 0.00 0.00 161.92 269.31 7.59 3.05 50.51 1.21 2.81 2.52 2.98 0.58 24.96 avg-cpu: %user %nice %system %iowait %steal %idle 3.35 0.00 0.54 4.43 0.00 91.69 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.60 4.40 1.40 0.02 0.01 9.10 0.01 1.93 2.55 0.00 0.14 0.08 vdb 3.40 35.60 830.40 51.20 17.90 0.30 42.26 1.16 1.31 1.18 3.53 0.85 75.04 dm-0 0.00 0.00 833.80 74.60 17.90 0.30 41.01 1.54 1.69 1.53 3.47 0.83 75.20 avg-cpu: %user %nice %system %iowait %steal %idle 3.40 0.00 0.43 4.64 0.00 91.52 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.40 0.00 0.40 0.00 0.00 16.00 0.00 0.00 0.00 0.00 0.00 0.00 vdb 5.80 30.80 810.60 46.80 14.65 0.27 35.63 1.39 1.59 1.61 1.32 1.04 89.36 dm-0 0.00 0.00 816.20 67.20 14.67 0.27 34.63 2.02 2.24 2.34 1.04 1.01 89.36
更新第二次編輯
- 從伺服器
(顯示全域狀態;+ 顯示全域變數;+ 顯示完整程序列表;)
- 舞台伺服器
顯示全域變數;
(顯示全球狀態;+ 顯示完整的程序列表;)
每秒速率 = RPS
為您的 SLAVE my.cnf 考慮的建議
$$ mysqld $$部分
max_connections=750 # from 3072 to conserve RAM - max_used_connections was 507 in 27 days read_rnd_buffer_size=192K # from 2M to reduce handler_read_rnd_next RPS 133,629 innodb_io_capacity=900 # from 200 to enable higher IOPS to your HDD join_buffer_size=16M # from ~ 32M will still support 2.6M rows to be joined connect_timeout=20 # from 8 seconds for tolerance and to reduce aborted_connects RPHr 593 table_definition_cache=20000 # from 1400 to reduce opened_table_definitions RPS 104 key_cache_age_threshold=7200 # from 300 (seconds) to reduce key_reads RPS 3 log_queries_not_using_indexes=OFF # from ON to conserve CPU cycles - since log is OFF.
這僅僅是開始。查看我的個人資料、聯繫資訊的網路個人資料和免費的實用程序腳本以幫助進行性能調整。
觀察結果:48G RAM 不足以承受負載,19% 的查詢需要 10 秒以上才能完成,需要投資獲取需要的索引以避免表掃描,com_analyze 和 com_optimize 均表示 27 中沒有活動天和更多的機會來提高性能。
B)C)D)——一個負載很輕的 8.0 伺服器。
更新 2 - 一個非常忙碌的奴隸。這是一個批評:
觀察:
- 版本:5.6.26-日誌
- 48 GB 記憶體
- 正常執行時間 = 27 天 07:48:48
- 您沒有在 Windows 上執行。
- 執行 64 位版本
- 您似乎完全(或大部分)執行 InnoDB。
更重要的問題:
從 2000 增加到5000。
table_open_cache
和/或查看您是否有太多桌子。密切關注 Table_open_cache_misses/Uptime 增加table_definition_cache
。正在以大致相同的速度插入和刪除很多或行。如果您要“替換”大塊數據,請解釋一下。可能有更好的方法來完成這項任務。也許:http: //mysql.rjweb.org/doc.php/deletebig#optimal_reload_of_a_table
Max_used_connections 相當高(507)。這可能意味著活動的爆發以及一堆緩慢的查詢。你有近乎崩潰的經歷嗎?
你確實有很多慢查詢。有關如何獲得特定幫助的資訊,請參見:http: //mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog
如果您使用的是 SSD 驅動器,那麼 innodb_io_capacity = 1000 可能會有所幫助。
你為什麼每秒使用 SHOW SLAVE STATUS 3.8 次?這可能是系統的負擔。其他各種SHOW異常頻繁執行。
似乎有一些 MyISAM 表。它們可以轉換為 InnoDB 嗎?
Performance_schema…lost – 這些表明表配置得不夠大。它可能表明您沒有使用 P_S。所以,也許它應該被關閉。
完全關閉查詢記憶體——更改
query_cache_size
為 0。如果您確實想要它,請不要將大小設置為大於 50M。細節和其他觀察:
( (key_buffer_size - 1.2 * Key_blocks_used * 1024) ) = ((1024M - 1.2 * 6797 * 1024)) / 49152M = 2.1%
– key_buffer 中浪費的 RAM 百分比。– 減小 key_buffer_size(現在為 1073741824)。
( Key_blocks_used * 1024 / key_buffer_size ) = 6,797 * 1024 / 1024M = 0.65%
– 使用的 key_buffer 的百分比。高水位線。– 降低 key_buffer_size(現在為 1073741824)以避免不必要的記憶體使用。
( Key_reads + Key_writes + Innodb_pages_read + Innodb_pages_written + Innodb_dblwr_writes + Innodb_buffer_pool_pages_flushed ) = (7204545 + 51732 + 265181067 + 156828295 + 12360935 + 156828295) / 2360928 = 253 /sec
——眼壓?– 如果硬體可以處理,將 innodb_io_capacity(現在為 200)設置為這個值。
( ( Key_reads + Key_writes + Innodb_pages_read + Innodb_pages_written + Innodb_dblwr_writes + Innodb_buffer_pool_pages_flushed ) / innodb_io_capacity / Uptime ) = ( 7204545 + 51732 + 265181067 + 156828295 + 12360935 + 156828295 ) / 200 / 2360928 = 126.7%
– 這可能是一個指標,表明合理設置了 innodb_io_capacity。– 如果硬體可以處理,則增加 innodb_io_capacity(現在為 200)。
( Opened_tables ) = 295,211,003 / 2360928 = 125 /sec
– 打開表格的頻率 – 增加 table_open_cache (現在 2000)
( Opened_table_definitions ) = 245,012,524 / 2360928 = 103 /sec
– 打開 .frm 文件的頻率 – 增加 table_definition_cache(現在是 1400)和/或 table_open_cache(現在是 2000)。
( Table_open_cache_overflows ) = 295,192,212 / 2360928 = 125 /sec
– 可能需要增加table_open_cache(現在是2000)
( Table_open_cache_misses ) = 295,208,827 / 2360928 = 125 /sec
– 可能需要增加table_open_cache(現在是2000)
( Table_open_cache_misses / (Table_open_cache_hits + Table_open_cache_misses) ) = 295,208,827 / (1552264289 + 295208827) = 16.0%
– table_open_cache 的有效性。– 增加table_open_cache(現在是2000)並檢查table_open_cache_instances(現在是1)。
( innodb_lru_scan_depth ) = 1,024
– “InnoDB: page_cleaner: 1000ms 預期循環佔用了……”可以通過降低 lru_scan_depth 來修復
( innodb_io_capacity_max / innodb_io_capacity ) = 2,000 / 200 = 10
– 容量:max/plain – 推薦 2. Max 應該大約等於您的 I/O 子系統可以處理的 IOP。(如果驅動器類型未知,2000/200 可能是合理的一對。)
( (Innodb_buffer_pool_reads + Innodb_buffer_pool_pages_flushed) ) = ((236228471 + 156828295) ) / 2360928 = 166 /sec
– InnoDB I/O – 增加 innodb_buffer_pool_size(現在是 25769803776)?
( Innodb_os_log_written ) = 581,123,630,592 / 2360928 = 246142 /sec
– 這是 InnoDB 繁忙程度的指標。– 非常空閒或非常繁忙的 InnoDB。
( innodb_log_buffer_size ) = 128M
– 建議 2MB-64MB,至少和事務中最大的 blob 一樣大。– 調整 innodb_log_buffer_size(現在為 134217728)。
( innodb_log_buffer_size / innodb_log_file_size ) = 128M / 256M = 50.0%
– 緩衝區在 RAM 中;文件在磁碟上。– buffer_size 應該更小和/或 file_size 應該更大。
( Innodb_log_writes ) = 72,150,946 / 2360928 = 31 /sec
( Uptime / 60 * innodb_log_file_size / Innodb_os_log_written ) = 2,360,928 / 60 * 256M / 581123630592 = 18.2
– InnoDB 日誌輪換之間的分鐘數從 5.6.8 開始,可以動態更改;請務必同時更改 my.cnf。– (輪換間隔 60 分鐘的建議有些隨意。)調整 innodb_log_file_size(現在為 268435456)。(不能在 AWS 中更改。)
( Innodb_dblwr_writes ) = 12,360,935 / 2360928 = 5.2 /sec
– “雙寫緩衝區”寫入磁碟。“雙寫”是一項可靠性功能。一些較新的版本/配置不需要它們。–(其他問題的症狀)
( innodb_flush_neighbors ) = 1
– 將塊寫入磁碟時的小優化。– 使用 0 表示 SSD 驅動器;1 用於硬碟。
( innodb_io_capacity ) = 200
- 磁碟上每秒的 I/O 操作數。100 用於慢速驅動器;200 用於旋轉驅動器;SSD 1000-2000;乘以 RAID 係數。
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
– 是否記錄所有死鎖。– 如果你被死鎖困擾,打開它。注意:如果你有很多死鎖,這可能會寫入很多磁碟。
( max_connections ) = 3,072
– 最大連接數(執行緒)。影響各種分配。– 如果 max_connections(現在是 3072)太高並且各種記憶體設置很高,您可能會用完 RAM。
( join_buffer_size * Max_used_connections ) = (32M * 507) / 49152M = 33.0%
– (用於考慮 join_buffer_size 大小的指標。) – join_buffer_size(現在為 33554432)可能應該縮小以避免記憶體不足。
( character_set_server ) = character_set_server = latin1
– 將 character_set_server(現在是 latin1)設置為 utf8mb4 可以幫助解決字元集問題。那是未來的預設值。
( local_infile ) = local_infile = ON
– local_infile (now ON) = ON 是一個潛在的安全問題
( bulk_insert_buffer_size ) = 8 / 49152M = 0.02%
– 用於多行插入和載入數據的緩衝區 – 太大可能會威脅 RAM 大小。太小可能會阻礙此類操作。
( Created_tmp_tables ) = 173,730,482 / 2360928 = 74 /sec
– 創建“臨時”表作為複雜 SELECT 的一部分的頻率。
( Created_tmp_disk_tables ) = 60,901,114 / 2360928 = 26 /sec
– 作為複雜 SELECT 的一部分創建磁碟“臨時”表的頻率 – 增加 tmp_table_size(現在為 201326592)和 max_heap_table_size(現在為 201326592)。檢查何時使用 MEMORY 而不是 MyISAM 的臨時表規則。也許較小的模式或查詢更改可以避免 MyISAM。更好的索引和查詢的重新制定更有可能有所幫助。
( Created_tmp_disk_tables / Questions ) = 60,901,114 / 1167645085 = 5.2%
– 需要磁碟 tmp 表的查詢的百分比。– 更好的索引/沒有斑點/等等。
( tmp_table_size ) = 192M
– 限制用於支持 SELECT 的MEMORY臨時表的大小 – 減少 tmp_table_size(現在為 201326592)以避免記憶體不足。也許不超過64M。
( (Com_insert + Com_update + Com_delete + Com_replace) / Com_commit ) = (33982982 + 45639342 + 27851942 + 6777983) / 97943382 = 1.17
– 每個送出的語句(假設所有 InnoDB) – 低:可能有助於在事務中將查詢分組;高:長期交易使各種事情緊張。
( Select_full_join ) = 9,805,365 / 2360928 = 4.2 /sec
– 無索引連接 – 為 JOIN 中使用的表添加合適的索引。
( Select_scan ) = 251,823,622 / 2360928 = 106 /sec
– 全表掃描 – 添加索引/優化查詢(除非它們是小表)
( Select_scan / Com_select ) = 251,823,622 / 1037614281 = 24.3%
– % 的選擇進行全表掃描。(可能被儲存常式愚弄。)——添加索引/優化查詢
( binlog_error_action ) = binlog_error_action = IGNORE_ERROR
– 無法寫入binlog怎麼辦。– IGNORE_ERROR 是向後兼容的預設值,但建議使用 ABORT_SERVER。
( binlog_format ) = binlog_format = MIXED
– 聲明/行/混合。– ROW 是 5.7 (10.3) 的首選
( slow_query_log ) = slow_query_log = OFF
– 是否記錄慢查詢。(5.1.12)
( long_query_time ) = 10
– 用於定義“慢”查詢的截止時間(秒)。– 建議 2
( Slow_queries ) = 224,832,658 / 2360928 = 95 /sec
– 頻率(每秒慢查詢) – 返工慢人;改進指標;觀察慢速日誌文件的磁碟空間
( Slow_queries / Questions ) = 224,832,658 / 1167645085 = 19.3%
– 頻率(所有查詢的百分比) – 查找慢查詢;檢查索引。
( log_slow_slave_statements ) = log_slow_slave_statements = OFF
– (5.6.11, 5.7.1) 預設情況下,複製的語句不會出現在慢日誌中;這導致他們顯示。– 在慢日誌中查看可能干擾從屬讀取的寫入會很有幫助。
( log_queries_not_using_indexes ) = log_queries_not_using_indexes = ON
– 是否在慢日誌中包含此類。– 這會使慢日誌變得混亂;把它關掉,這樣你就可以看到真正的慢查詢。並減少 long_query_time(現在為 10)以擷取最有趣的查詢。
( Max_used_connections ) = 507
– 連接的高水位線 – 大量不活動的連接是可以的;超過 100 個活動連接可能是個問題。Max_used_connections(現在是 507)不區分它們;Threads_running(現在為 1)是瞬時的。
( Com_change_db ) = 43,570,240 / 2360928 = 18 /sec
– 可能來自 USE 語句。– 考慮與 DB 連接,使用 db.tbl 語法,消除虛假的 USE 語句等。
( Connections ) = 52,611,835 / 2360928 = 22 /sec
– Connections – 增加wait_timeout(現在是720);使用池化?你有一半的查詢記憶體。您應該同時設置 query_cache_type = OFF 和 query_cache_size = 0 。(根據傳言)QC 程式碼中有一個“錯誤”,除非您關閉這兩個設置,否則某些程式碼會保持打開狀態。
異常小:
(query_cache_size - Qcache_free_memory) / query_cache_size = 0.01% 1 - Qcache_free_memory / query_cache_size = 0.01% delayed_insert_timeout = 8
異常大:
Com_begin = 41 /sec Com_create_view = 0.014 /HR Com_rename_table = 0.1 /HR Com_rollback_to_savepoint = 2 /HR Com_show_binlogs = 11 /HR Com_show_create_db = 2.2 /HR Com_show_create_table = 0.2 /sec Com_show_slave_status = 3.8 /sec Com_show_table_status = 0.2 /sec Com_show_triggers = 0.2 /sec Handler_delete = 220 /sec Handler_read_first = 99 /sec Handler_read_key = 60959 /sec Handler_read_last = 1 /sec Handler_read_next = 467752 /sec Handler_read_rnd = 11341 /sec Handler_savepoint_rollback = 2 /HR Handler_update = 3004 /sec Innodb_buffer_pool_pages_misc = 134,346 Innodb_buffer_pool_pages_misc * 16384 / innodb_buffer_pool_size = 8.5% Innodb_buffer_pool_write_requests = 8241 /sec Innodb_rows_deleted = 220 /sec Key_read_requests = 9261 /sec Key_write_requests = 1843 /sec Performance_schema_digest_lost = 5.68e+8 Performance_schema_file_instances_lost = 5.05e+8 Performance_schema_table_instances_lost = 8.75e+7 Qcache_free_memory = 192.0MB Select_full_range_join = 0.62 /sec Select_full_range_join / Com_select = 0.14% Sort_range = 61 /sec Sort_rows = 9214 /sec Sort_scan = 68 /sec Threads_cached = 95 max_user_connections = 3,072 net_buffer_length = 262,144 optimizer_trace_offset = --1 performance_schema_max_cond_instances = 15,188 performance_schema_max_file_instances = 31,508 performance_schema_max_socket_instances = 6,164 performance_schema_max_thread_instances = 6,244 thread_concurrency = 12
異常字元串:
Slave_heartbeat_period = 1800 Slave_running = ON ignore_db_dirs = lost+found innodb_fast_shutdown = 1 optimizer_trace = enabled=off,one_line=off optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on read_only = ON slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN