學而思則優!MySQL優化服務器專題收關,實戰解析不迷茫

最近咱們一直在更新MySQL性能優化,內容也是由淺及深,如果有朋友哪裏還不清楚,隨時聯繫小編,咱們共同探討進步。今天,咱們繼續更新——優化MySQL服務器。

優化MySQL服務器主要從兩個方面來優化,一方面是對硬件進行優化;另一方面是對MySQL服務的參數進行優化。這部分的內容需要較全面的知識,一般只有專業的數據庫管理員才能進行這一類的優化。 對於可以定製參數的操作系統,也可以針對MySQL進行操作系統優化。

學而思則優!MySQL優化服務器專題收關,實戰解析不迷茫

 

優化服務器硬件

服務器的硬件性能直接決定着MySQL數據庫的性能硬件的性能瓶頸直接決定MySQL數據庫的運行速度和效率。針對性能瓶頸,提高硬件配置,可以提高MySQL數據庫的查詢、更新的速度。

(1)配置較大的內存。足夠大的內存,是提高MySQL數據庫性能的方法之一。內存的速度比磁盤I/0快得多,可以通過增加系統的緩衝區容量,使數據在內存停留的時間更長,以減少磁盤I/O。

(2)配置高速磁盤系統,以減少讀盤的等待時間,提高響應速度。

(3)合理分佈磁盤IO,把磁盤I/O分散在多個設備上,以減少資源競爭,提高並行操作能力。

(4)配置多處理器,MySQL 是多線程的數據庫,多處理器可同時執行多個線程。

學而思則優!MySQL優化服務器專題收關,實戰解析不迷茫

 

優化MySQL的參數

通過優化MySQL的參數可以提高資源利用率,從而達到提高MySQL服務器性能的目的。

MySQL服務的配置參數都在my.cnf或者my.ini文件的[MySQLd]組中。下面對幾個對性能影響比較大的參數進行詳細介紹。

  • key_ buffer size:表示索引緩衝區的大小。索引緩衝區所有的線程共享。增加索引緩衝區可以得到更好處理的索引(對所有讀和多重寫)。當然,這個值也不是越大越好,它的大小取決於內存的大小。如果這個值太大,導致操作系統頻繁換頁,也會降低系統性能。
  • table_ cache: 表示同時打開的表的個數。這個值越大,能夠同時打開的表的個數越多。這個值不是越大越好,因爲同時打開的表太多會影響操作系統的性能。
  • query_ cache_ size.:表示查詢緩衝區的大小。該參數需要和query_cache_type 配合使用。當query_cache_type值是0時,所有的查詢都不使用查詢緩衝區。但是query_ cache_type=0並不會導致MySQL釋放query_ cache_size所配置的緩衝區內存。當query_cache. type=1時,所有的查詢都將使用查詢緩衝區,除非在查詢語句中指定SQL_ NO_ CACHE,如SELECT SQL_ NO_ CACHE * FROM tbl name,當query_ cache_type=2時,只有在查詢語句中使用SQL_ CACHE關鍵字,查詢纔會使用查詢緩衝區。使用查詢緩衝區可以提高查詢的速度,這種方式只適用於修改操作少且經常執行相同的查詢操作的情況。
  • sort_buffer_size:表示排序緩存區的大小。這個值越大,進行排序的速度越快。
  • read_buffer_size:表示每個線程連續掃描時爲掃描的每個表分配的緩衝區的大小(字節)。當線程從表中連續讀取記錄時需要用到這個緩衝區。SET SESSION read_ buffer size- n可以臨時設置該參數的值。
  • read_ md_ buffer_ size:表示爲每個線程保留的緩衝區的大小與read buffer size 相似。但主要用於存儲按特定順序讀取出來的記錄。也可以用SET SESSION read_ md buffer size=n 來臨時設置該參數的值。如果頻繁進行多次連續掃描,可以增加該值。
  • innodb_ buffer pool size: 表示InnoDB 類型的表和索引的最大緩存。這個值越大,查詢的速度就會越快。但是這個值太大會影響操作系統的性能。
  • max_ connections: 表示數據庫的最大連接數。這個連接數不是越大越好,因爲這些連接會浪費內存的資源。過多的連接可能會導致MySQL服務器僵死。
  • innodb_ flush_ log_ at _trx_ commit:表示何時將緩衝區的數據寫入日誌文件,並且將日誌文件寫入磁盤中。該參數對於innoDB引擎非常重要。該參數有3個值,分別爲0、1和2。值爲0時表示每隔1秒將數據寫入日誌文件並將日誌文件寫入磁盤;值爲1時表示每次提交事務時將數據寫入日誌文件並將日誌文件寫入磁盤;值爲2時表示每次提交事務時將數據寫入日誌文件,每隔1秒將日誌文件寫入磁盤。該參數的默認值爲1.默認值1安全性最高,但是每次事務提交或事務外的指令都需要把日誌寫入(flush) 硬盤,是比較費時的; 0值更快一點,但安全方面比較差; 2值日誌仍然會每秒寫入到硬盤,所以即使出現故障,一般也不會丟失超過1~2秒的更新。
  • back_ log: 表示在MySQL暫時停止回答新請求之前的短時間內,多少個請求可以被存在堆棧中。換句話說,該值表示對到來的TCP/IP連接的偵聽隊列的大小。只有期望在一個短時間內有很多連接,才需要增加該參數的值。操作系統在這個隊列大小。上也有限制。設定back_ log 高於操作系統的限制將是無效的。
  • interactive_ ftimeout: 表示服務器在關閉連接前等待行動的秒數。sort buffer size: 表示每個需要進行排序的線程分配的緩衝區的大小。增加這個參數的值可以提高ORDER BY或GROUP BY操作的速度。默認數值是2097 144 (2MB) 。
  • thread_ cache_ size: 表示可以複用的線程的數量。如果有很多新的線程,爲了提高性能可以增大該參數的值。
  • wait timeout: 表示服務器在關閉一個連接時等待行動的秒數。默認數值是28 800。

合理地配置這些參數可以提高MySQL服務器的性能。除上述參數以外,還有innodb_ log_buffer_ size. innodb_ log. file_ size 等參數。配置完參數以後,需要重新啓動MySQL服務纔會生效。

以上就是小編整理的MySQL優化服務器,個人見解,歡迎各位大佬留言交流哦~~~

學而思則優,學而不思則罔。最後,小編將MySQL性能優化中的個人疑問總結了一下,看是否和大家的疑問大致一樣,大家也可以試着思考,提出疑問,這樣的學習效果,小編認爲還是很有效果的~~~

學而思則優!MySQL優化服務器專題收關,實戰解析不迷茫

 

疑問1 :是不是索引建立得越多越好?

合理的索引可以提高查詢的速度,但不是索引越多越好。在執行插入語句的時候,MySQL要爲新插入的記錄建立索引。所以過多的索引會導致插入操作變慢。原則上是隻有查詢用的字段才建立索引。

疑問2 :爲什麼查詢語句中的索引沒有起作用?

在一些情況下,查詢語句中使用了帶有索引的字段。但索引並沒有起作用。例如,在.WHERE條件的LIKE關鍵字匹配的字符串以“%”開頭,這種情況下索引不會起作用。又如,WHERE條件中使用OR關鍵字連接查詢條件,如果有1個字段沒有使用索引,那麼其他的索引也不會起作用。如果使用多列索引,但沒有使用多列索引中的第1個字段,那麼多列索引也不會起作用。

疑問3 :如何使用查詢緩衝區?

查詢緩衝區可以提高查詢的速度,但是這種方式只適合查詢語句比較多、更新語句比較少的情況。默認情況下查詢緩衝區的大小爲0,也就是不可用。可以修改query_ _cache_ size 調整查詢緩衝區大小:修改query_ cache, _type 以調整查詢緩衝區的類型。在my.ini 中修改query_ cache_ size和query_ cache_ type 的值如下所示:

[mysq1d]
query_ cache size=512M
query_ cache_ type=1

query_ cache_ type=1 表示開啓查詢緩衝區。只有在查詢語句中包含SQL_ _NO_ CACHE關鍵字時,纔不會使用查詢緩衝區。可以使用FLUSH QUERY CACHE語句來刷新緩衝區,清理查詢緩衝區中的碎片。

喜歡小編請多多點贊評論分享,關注小編,私信小編免費獲取海量學習資料哦~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章