用於提高 MySQL (5.7) 性能的多種模式
讓我們先從我的問題開始:
在 MySQL(5.7)伺服器中是否有多個模式(1 個主模式和每天 1 個模式 - 有 5-6 個與主模式結構相同的表,但只在白天工作,並且每晚都會與主模式同步)會影響其性能?
更多背景:
我的數據庫面臨的問題是應用程序在某些負載下執行良好(仍然可以,但 LA 上升到 8),但過去幾天我正在為 CPU 使用率而戰……我探勘了問題和原因是鎖在進行中,我的工作人員被困在試圖插入/更新新數據的過程中。
為了更深入,我每分鐘至少插入 1K 次,每分鐘最多更新 2K 次(有些在以前插入的記錄上),每分鐘超過 4-5K 次選擇。
而且我不是在談論簡單的整數插入…很多字元串、時間戳、整數和 6 個索引(表中的總列數為 32)
我的伺服器相當強大(嗯,相當)。
- 16GB 記憶體
- 1TB固態硬碟
- 8 核,Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
- 軟體:MySQL 5.7
我的 my.cnf 的一部分
innodb_buffer_pool_size = 12G innodb_buffer_pool_instances = 8 innodb_log_file_size = 30G innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 2 innodb_thread_concurrency = 8
我仍然得到高達 8.00 的 LA
所有這一切的問題在於,我所有的工人每分鐘都開始工作,而且他們有點互相對抗。
我帶來的是以下場景: - 使用我的“每日”工作表(主要是 SELECTS)創建單獨的模式,並在我的原始模式中進行插入/更新。
這會減少伺服器的負載嗎?
還有一個離題的問題:高達 8.00 的 LA 對伺服器來說是否健康?
謝謝
PS如果您需要更多資訊,請告訴我,我會分享。
問題 #1
你的innodb_thread_concurrency太小了。建議:應該是
0
或64
。請閱讀我來自Aug 14, 2017
(MariaDB 10.1.22 以使用更多 RAM 而不是 CPU)的文章,了解原因。問題 #2
我沒有看到提到的innodb_read_io_threads和innodb_write_io_threads。預設情況下,兩者都是
4
. 建議:我將兩者都加倍8
(Percona Server 的預設值)。請參閱我的文章Jun 20, 2013
(MySQL using too much CPU)。問題 #3
為什麼你的innodb_log_file_size
30G
是?InnoDB 重做日誌是按順序寫入的。恕我直言,在 SSD 上寫入順序文件並不是那麼好(請參閱我的文章Feb 06, 2014
:SSD 上的 MySQL - 有什麼缺點?和Sep 25, 2014
:DB 事務日誌的最佳儲存設備是什麼?)。建議 #1:您可以將 InnoDB 配置為將重做日誌放在單獨的磁碟上。SUGGESTION #2:請暫時製作innodb_log_file_size1G
。Jan 17, 2013
然後,通過閱讀我的文章(MySQL 5.5 - Innodb - innodb_log_file_size 高於 4GB 的組合? )找出合適的大小,其中我指向 Percona 的 mysqlperformanceblog 中的兩個文章:
Jun 03, 2006
:選擇合適的 innodb_log_file_sizeNov 21, 2008
:如何計算一個好的 InnoDB 日誌文件大小試一試 !!!
至於題外話:16GB RAM 和 8.00 LA 的伺服器???當然不是 !!!試試這些建議,看看它是否真的有幫助。
Load Average = 8 是可以的,但它通常表示您的馬力不足。在 MySQL 中,這通常意味著您缺少一些有用的索引。
“主要”和“日常”???你在說什麼。也許是數據倉庫的“事實”表和“摘要”表?如果是這樣,那麼我在這裡有很多建議。
“同步回來”??你的意思是你在一個表中收集數據(一天),然後每晚將數據複製到一個更大的表中?再一次,這聞起來像是糟糕的索引。或者可能是複雜的查詢。讓我們看看
SHOW CREATE TABLE
和一些SELECTs
。17 次插入/秒,33 次更新/秒——這些都不是很大的數字。即使是旋轉硬碟也可以處理這種情況。
6個指標?讓我們看看他們(
SHOW CREATE TABLE
)。“6”偏高;讓我們看看我們是否可以削減。請注意,每個索引 BTree 必須最終更新(參見“更改緩衝區”)INSERT
。是否UPDATEs
更改任何索引列?你有多個UNIQUE
索引嗎?(注:PRIMARY KEY
計數。)你有AUTO_INCREMENT
嗎?也許它可以被淘汰。(在我的問題得到解答之前,我無法開始解決您關於“多個模式”的問題;我需要更好地了解正在發生的事情。)