5、优化MySQL服务器
MySQL 中,可以通過兩個方面來優化服務器,即硬件和配置參數的優化。通過這些優化方式,可以提高 MySQL 的運行速度。
本節內容需要較全面的知識,可能很難理解,一般只有專業的數據庫管理員才能進行這一類的優化。下面為讀者介紹優化 MySQL 服務器的方法。
優化服務器硬件
服務器的硬件直接決定著 MySQL 數據庫的性能。例如,增加內存和提高硬盤的讀寫速度,可以提高 MySQL 數據庫的查詢、更新的速度。
優化服務器硬件的方法主要有以下幾種:
- 配置較大的內存
- 配置高速磁盤系統,以減少讀盤的等待時間,提高響應速度
- 合理分布磁盤 I/O,把磁盤 I/O 分散在多個設備上,以減少資源競爭,提高并行操作能力
- 配置多處理器,MySQL 是多線程的數據庫,多處理器可同時執行多個線程
隨著硬件技術的成熟,硬件的價格也隨之降低。現在普通的個人電腦都已經配置了 8GB 內存,甚至一些個人電腦配置 16GB 內存。因為內存的讀寫速度比硬盤的讀寫速度快。可以在內存中為 MySQL 設置更多的緩沖區,這樣可以提高 MySQL 的訪問的速度。如果將查詢頻率很高的記錄存儲在內存中,那么查詢速度就會很快。
如果條件允許,可以將內存提高到 16GB。并且選擇 my-innodb-heavy-4G.ini 作為 MySQL 數據庫的配置文件。但是,這個配置文件主要支持 InnoDB 存儲引擎的表。如果使用 8GB 內存,可以選擇 my-huge.ini 作為配置文件。MySQL 所在的計算機最好是專用數據庫服務器,這樣數據庫就可以完全利用該機器的資源。
服務器類型分為 Developer Machine、Server Machine 和 Dedicate MySQL Server
Machine。其中 Developer Machine 用來做軟件開發的時候使用,數據庫占用的資源比較少。后面兩者占用的資源比較多,尤其是
Dedicate MySQL Server Machine,其幾乎要占用所有的資源。
還可以使用多塊磁盤來存儲數據。這樣可以從多個磁盤上并行讀取數據,提高數據庫讀取數據的速度。通過鏡像機制可以將不同計算機上的 MySQL 服務器進行同步,這些 MySQL 服務器中的數據都是一樣的。通過不同的 MySQL 服務器來提供數據庫服務,這樣可以降低單個 MySQL 服務器的壓力,從而提高 MySQL 的性能。
優化MySQL參數
和大多數數據庫一樣,MySQL 提供了很多參數來進行服務器的優化設置。數據庫服務器第一次啟動時,很多參數都是默認設置的,這在實際應用中并不能完全滿足需求,為此數據庫管理員要進行必要的設置。
1. 查看性能參數的方法
MySQL 服務器啟動之后,可以使用 SHOW VARIABLES; 命令查看系統參數,也可稱為靜態參數。這些參數是系統默認或者 DBA 調整優化后的參數,可以通過 SET 命令或在配置文件中修改。
使用 SHOW STATUS; 命令查詢服務器運行的實時狀態信息,也就是動態參數。便于 DBA 查看當前 MySQL 運行的狀態,做出相應優化,不能手動修改。
例 1
下面為使用 SHOW VARIABLES 和 SHOW STATUS 命令的實例。
2. 設置優化性能參數
在 MySQL 中,有些參數直接影響到系統的性能。我們可以通過優化 MySQL 的參數提高資源利用率,從而達到提高 MySQL 服務器性能的目的。以下配置參數都在 my.cnf 或者 my.ini 文件的 [mysqld] 組中。
下面對幾個重要參數進行詳細介紹。
1)key_buffer_size(針對MyISAM存儲引擎)
表示索引緩存的大小,這個參數是對 MyISAM 表性能影響最大的一個參數。值越大,索引進行查詢的速度越快。
通過檢查狀態值 key_read_requests 和 key_reads,可以知道 key_buffer_size 的值是否合理。正常情況下,key_reads / key_read_requests 的比例值需小于 0.01。
2)table_cache(針對MyISAM存儲引擎)
表示數據庫用戶同時打開的表的個數。值越大,能夠同時打開的表的個數越多。需要注意的是,這個值不是越大越好,因為同時打開的表太多會影響操作系統的性能。
在設置該參數的時候,可以通過 open_tables 和 opened_tables 變量的值來確定該參數的值。open_tables 參數表示當前打開的表緩存數,opened_tables 參數表示曾經打開的表緩存數。
如果 open_tables 的值已經接近 table_cache 的值,且 opened_tables 還在不斷變大,則說明 MySQL 正在將緩存的表釋放以容納新的表,此時可能需要加大table_cache 的值。對于大多數情況,比較適合的值如下:
open_tables / opened_tables >= 0.85
open_tables / table_cache <= 0.95
執行 FLUSH TABLE 操作后,系統會關閉一些當前沒有使用的表緩存,因此 FLUSH TABLE 后,open_tables 參數的值會變小,opened_tables 參數的值不會變。
3)query_cache_size
表示查詢緩存區的大小。使用查詢緩存區可以提高查詢的速度。
內存中會為 MySQL 保留部分的緩存區,這些緩存區可以提高 MySQL 的處理速度。
可以從以下幾個方面考慮如何設置該參數的大小:
- 查詢緩存對 DDL 和 DML 語句的性能的影響
- 查詢緩存的內部維護成本
- 查詢緩存的命中率以及內存使用率等因素
4)query_cache_type
表示查詢緩沖區的開啟狀態,用于控制查詢結果是否放到查詢緩存中。這種方式只適用于修改操作少且經常執行相同的查詢操作的情況,其默認值為 0。
值為 0 表示關閉;
值為 1 表示開啟;
值為 2 表示按要求使用查詢緩存區,只有 SELECT 語句中使用了 SQL_CACHE 關鍵字,查詢緩存區才會使用。例如,SELECT SQL_CACHE * FROM student。
5)max_connections
表示數據庫的最大連接數,默認值為 100。參數最大值不能超過 16384,即使超過也以 16384 為準。該參數設置過小的最明顯特征是出現“Too many connections”錯誤。當然連接數也不是越大越好,因為這些連接會浪費內存的資源。
6)sort_buffer_size
表示排序緩存區的大小。值越大,排序的速度越快。
7)read_buffer_size
表示為每個線程保留的緩沖區的大小。當線程需要從表中連續讀取記錄時需要用到這個緩沖區。
8)read_rnd_buffer_size
表示為每個線程保留的緩沖區的大小,與 read_buffer_size 相似。但主要用于存儲按特定順序讀取出來的記錄。
9)innodb_buffer_pool_size
表示 InnoDB 類型的表和索引的最大緩存。值越大,查詢的速度越快。但是這個值太大了也會影響操作系統的性能。
調優參考計算方法:
val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%
val > 95% 則考慮增大 innodb_buffer_pool_size, 建議使用物理內存的 75%
val < 95% 則考慮減小 innodb_buffer_pool_size, 建議設置為:Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (102410241024)
10)innodb_log_file_size
該參數的作用是設置日志組中每個日志文件的大小。該參數在高寫入負載尤其是大數據集的情況下很重要,這個值越大則性能相對較高。最好不要超過 innodb_log_files_in_group * innodb_log_file_size 的 0.75。
11)innodb_log_files_in_group
該參數用于指定數據庫中有幾個日志組,默認為2個,因為有可能出現跨日志的大事務,所以一般來講,建議使用 3~4 個日志組。
12)innodb_log_buffer_size
該參數的作用是設置日志緩存的大小,一旦提交事務,則將該緩存池中的內容寫到磁盤的日志文件上。該參數的設置在中等強度寫入負載以及較短事務情況下,一般都可以滿足服務器的性能要求。如果服務器負載較大,可以考慮加大該參數的值。一般緩存池中的內存每秒鐘寫到磁盤一次,所以設置較大會浪費內存空間,一般設置為 8MB~16MB 就足夠了。
可以參考 Innodb_os_log_written 的值,如果該值增加過快,可以適當的增加該參數的值。
13)innodb_flush_log_at_trx_commit
表示何時將緩沖區的數據寫入日志文件,并且將日志文件寫入磁盤中。該參數有 3 個值,分別為 0、1 和 2。
值為 0 時,表示每隔 1 秒將數據寫入日志文件并將日志文件寫入磁盤;
值為 1 時,表示每次提交事務時將數據寫入日志文件并將日志文件寫入磁盤;
值為 2 時,表示每次提交事務時將數據寫入日志文件,每隔 1 秒將日志文件寫入磁盤。
該參數的默認值為 1,是最安全最合理的值。為了保證事務的持久性和一致性,建議將該參數設置為 1。
參數設置的值要根據自己的實際情況來設置,并不是值越大越好,可能設置的數值太大體現不出優化效果,反而造成系統空間被占用,導致操作系統變慢。合理的配置參數可以提高 MySQL 服務器的性能。需要注意的是,配置完參數以后,需要重新啟動 MySQL 服務配置才會生效。
總結
以上是生活随笔為你收集整理的5、优化MySQL服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4、提高插入数据的速度
- 下一篇: linux cmake编译源码,linu