天天看點

高性能的MySQL(8)優化伺服器配置一安全與穩定

在前面的章節已經介紹了一些選項,還有一些剩餘的也很重要的選項,我們繼續說明一下:

一、基本配置

tmp_table_size 和 max_heap_table_size

這2個設定控制使用Memory引擎的記憶體臨時表能使用多大的記憶體。如果隐士記憶體臨時表的大小超過這2個設定,将會被轉換為磁盤臨時表。隐士臨時表是一種并非自己建立,而是伺服器建立,由于儲存執行中的查詢的中間結果的表。

臨時表最好呆在記憶體裡,但是如果它很大,實際上還是使用磁盤比較好,否則可能會記憶體溢出。

可以使用show status 來檢視臨時表使用頻率。

<a href="http://blog.51cto.com/attachment/201311/154005259.png" target="_blank"></a>

max_connections

這個設定的作用,以保證伺服器不會因為應用程式激增的連結而不堪重負。

thread_cache_size

線程緩存大小,可以觀察Threads_connected狀态變量找到一般情況下的最大和最小值。也可以觀察Threads_created,如果這個值很大或者一直增大,告訴你可能需要調大thread_cache_size。檢視threads_cached看有多少線程已經在緩存中了。

<a href="http://blog.51cto.com/attachment/201311/160412467.png" target="_blank"></a>

table_cache_size

這個應該設定的足夠大,以避免總是需要重新打開和重新解析表的定義。可以通過觀察open_tables的值的變化來檢查該變量。如果看到opened_tables每秒的變化很大,那麼table_cache的值可能不夠大。

二、安全穩定配置

如果希望啟用一些使伺服器更安全和更可靠的設定,雖然會影響一些性能,但是有時候是有必要的,看看下面的配置:

expire_logs_days

二進制日志,可以讓伺服器在指定的天數之後清理舊的二進制日志,盡可能多的保留,當恢複的時候你會發現很有用。

max_allowed_packet

伺服器發送或者接收包的最大值。

max_connect_errors

太多的連接配接錯誤,将會列入黑名單。

skip_name_resolve

打開的話,驗證連接配接時基于主機名的帳号将會被禁用,隻能使用IP位址來連接配接。

以下的選項可以控制複制行為,并且對防止從庫出問題很有幫助:

read_only 

禁止麼有特權的使用者在從庫做變更,隻接受主庫傳輸過來的變更,不接受從應用來的變更,強烈建議打開。

skip_slave_start

阻止MySQL試圖自動啟動複制。因為在不安全的崩潰或其他問題後,啟動複制是不安全的,最後人工幹預确認後,手動啟動。

slave_net_timeout

控制從庫發現跟主機的連接配接已經失敗并且需要重連之前等待的時間。預設一個小時太長,設定1分鐘或者更短。

三、InnoDB進階設定

對新版的InnoDB,有一些新的選項可以用,對伺服器性能相當重要,也有安全和穩定的選項,如下所示:

innodb

非常重要,如果設定為force,隻有在InnoDB可以啟動的時候,伺服器才會啟動。如果InnoDB是預設的存儲引擎,這一點是你期望的。整個伺服器失敗,強制你去檢測錯誤,而不是以為伺服器正常啟動了。

innodb_autoinc_lock_mode

控制InnoDB如何生成自增主鍵值,高并發插入時自增主鍵會成為瓶頸,因為很多事務都在等待自增鎖。詳細用法參考手冊把。

innodb_buffer_pool_instances

MySQL5.5以後的版本出現的,可以把緩沖池分為多段,但是目前還不廣泛使用,Percona Server5.5版本已經可以用了,多緩沖區和更細粒度的鎖。

innodb_io_capacity

告訴InnoDB伺服器的I/O能力,根據伺服器調整。

innodb_read_io_threads 和 innodb_write_io_threads

控制有多少背景線程可以被I/O操作使用。預設都是4,對大部分伺服器足夠了,除非并發很高。

innodb_strict_mode

這個設定讓MySQL在某些條件下把警告改成抛錯。

innodb_old_blocks_time

InnoDB有兩段緩沖池LRU連結清單,設計的目的是防止換出長期使用很多次的頁面。兩段LRU連結清單将阻止此頁取代很長一段時間内都需要用到的頁面被放入“年輕(Young)"子連結清單,并且隻在它被浏覽了很多次後移動到“年老(Old)”子連結清單。

這個變量指定一個頁面從LRU的“年輕”部分轉移到“年老”部分之前必須經過的毫秒數,預設為0。

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1321846,如需轉載請自行聯系原作者

繼續閱讀