什麼MySQL服務器變量,我們應該看什麼閾值是以下問題的情況顯著:如何衡量mySQL瓶頸?
- 勢必
- 磁盤CPU讀取勢必
- 磁盤寫入約束
而對於每種情況下,推薦哪些解決方案來改進它們,達不到更好的硬件或將數據庫擴展到多個服務器?
什麼MySQL服務器變量,我們應該看什麼閾值是以下問題的情況顯著:如何衡量mySQL瓶頸?
而對於每種情況下,推薦哪些解決方案來改進它們,達不到更好的硬件或將數據庫擴展到多個服務器?
這是一個複雜的領域。影響你們三個類別的「門檻」重疊很多。
如果您有您的操作是CPU綁定的問題,那麼你一定要看看: (一)你的數據庫的結構 - 它是完全正常化。錯誤的數據庫結構會導致處理器遇到複雜的查詢。 (b)您的索引 - 是您查詢索引充分需要的所有內容。缺乏索引可能會非常困難地擊中處理器和內存。要檢查索引,請執行「EXPLAIN ...查詢」。結果解釋中的任何行表示它沒有使用索引,您需要仔細查看,如果可能,請添加索引。 (c)儘可能使用準備好的陳述。這些可以節省CPU執行相當多的處理工作。 (d)使用更適合您的CPU的優化編譯器。這是專用的類型,但它可以在這裏和那裏收集到多餘的額外百分比。
如果您的操作在讀取綁定時遇到問題 (a)確保在可能的情況下緩存。檢查query_cache_limit和query_cache_size的配置變量。這不是一個神奇的解決方法,但提高這些可以幫助。 (b)與上面一樣,檢查您的索引。良好的索引減少了需要讀取的數據量。
如果您的操作遇到寫入綁定問題 (a)查看您是否需要當前擁有的所有索引。索引是很好的,但是它們改善查詢時間的權衡是維護這些索引會影響寫入數據和保持最新狀態的時間。通常情況下,如果您有疑問,您需要索引,但是有時候您更喜歡快速寫入表格,而不是閱讀它。 (b)儘可能使用INSERT DELAYED來「寫入」數據庫。請注意,這是不是一個魔術修復和往往不合適,但在適當的情況下可以幫助。 (c)檢查同時嚴重讀取和寫入的表,例如,訪問列表不斷更新訪問者的會話數據並從中讀取。優化桌子閱讀和書寫是很容易的,但並不是真的有可能設計一張桌子,以便在兩個方面都很好。如果您遇到這種情況並且是瓶頸,請考慮是否可以將其功能拆分或將使用該表的任何複雜操作移動到可以定期更新爲塊的臨時表中。
注意,在上面,唯一的東西有主要效果,是很好的查詢設計/索引。除此之外,你想開始考慮更好的硬件。尤其是,您可以從RAID-0陣列中獲得很多好處,這對於編寫綁定的問題並沒有太大的幫助,但可以爲讀取問題創造奇蹟。它可能是一個非常便宜的解決方案,可以大幅提升。
您還錯過了列表中的兩個項目。
內存限制。如果你遇到內存問題,那麼你必須檢查所有可以有用的索引編制索引。如果出於某種原因,您正在使用大量離散連接到數據庫,則還可以查看更大的連接池。
網絡綁定。如果你遇到了網絡綁定問題......你可能不是,但如果你是,你需要另一個網卡或更好的網絡。
注意,一個方便的方式來分析你的數據庫性能是打開log_slow_queries選項,long_query_time時間設置爲0得到的一切,或0.3或類似的捕捉任何可能被牽着你的數據庫了。您也可以打開log-queries-not-using-indexes來查看是否有任何有趣的東西出現。請注意,這種日誌記錄可以殺死繁忙的活動服務器。嘗試在開發盒上啓動。
希望這有些幫助。我會對上述任何人的評論感興趣。
儘管這個答案很有幫助,但它並沒有回答OP詢問的問題。但是,@Toxikman對於數據庫管理堆棧交換中的問題可能會有更好的結果。 – Dbeazy
對於案例#1,我知道您可以使用EXPLAIN來優化查詢並調整mySQL緩存。 – Toxikman