拜讀mysql高效能,總結:
mysql使用innode作為儲存引擎的主要配置選項:
innodb_buffer_pool_size
innodb_log_file_size
key_buffer_size
max_connections
thread_cache
table_cache
open_files_limit
1.配置快取步驟
1.1確定mysql可以使用多少快取,這個需要看作業系統的位數,如果32位是存在限制的,系統的glibc庫可能也存在限制每次分配的記憶體的大小,例如,如果glibc支援單次分配的最大大小為2gb,那麼無法設定innodb_buffer_pool的值。
1.2確定每個mysql連線需要多少快取,例如排序快取,臨時表等,innodb字典,最好的觀察辦法:觀察伺服器在真是的壓力情況下多了多少快取,
1.3確定作業系統需要多少快取,譬如:其他軟體,定時任務,作業系統跑的快取,我們建議取2gb和5%,作為基準,取其中的最大值。
1.4剩下的快取全部給mysql快取,例如innodb緩衝池,mysql使用快取避免io訪問,比較重要的快取:
innodb緩衝池
innodb日誌檔案盒myisam資料的作業系統快取
myisam鍵快取
查詢快取
無法手工配置的快取,例如二進位制日誌和表定義檔案的作業系統快取
1.4.1配置innodb緩衝池buffer pool,緩衝的資料為:行的資料,自適應雜湊索引,插入緩衝,鎖,以及其他內部資料結構,innodb還使用緩衝池來幫助延遲寫入,這樣就可以合併多個寫入操作,總之innodb嚴重依賴緩衝池,可以通過show命令得到的變數或者innotop這樣的工具監控innodb緩衝池的記憶體利用情況
如果資料量不大,並且不會快速增長,沒有必要為緩衝池分配過多的快取
很大的緩衝池也會帶來挑戰,預熱和關閉都需要很長時間,如果有很多髒頁在緩衝池裡面,關閉會花費更多的時間,可有使用show innodb status來觀察髒頁的重新整理量,
innodb_max_dirty_pages_pct變數值並不保證innodb將在緩衝池中保持更少的髒頁,它只是控制innodb是否可以偷懶,的閥值,偷懶的概念:innodb可以通過乙個後台執行緒來重新整理髒頁,嘗試讓髒頁的數量更低,並且會合併寫入,更高效的寫入磁碟,之所以成為偷懶,是因為他是的innodb延遲了緩衝池中重新整理髒頁的操作,直到其他資料必須使用空間的時候才刷寫,
預熱緩衝池:可以利用percona server的功能來重新載入緩衝池的頁,從而節省時間,如果不能使用percona server,可以進行全表掃瞄和索引掃瞄,吧索引載入緩衝池,這種方式可以使用init_file設定實現這個功能,把sql放到乙個檔案裡,當mysql啟動的時候來執行,檔名必須在init_file中指定,檔案中可以包含多條sql命令,每一條單獨一行,這裡不能寫注釋。
1.4.2 myisam鍵快取,key caches,nyisam只快取索引,不快取表資料,最重要的配置項是key_buffer_size,查詢information_schema表的index_length欄位,把他們的值相加,就可以得到索引儲存的占用空間:
select sum(index_length) from information_schema.tables where engine='myisam';
1.4.3 執行緒快取,這個就是連線需要快取中的一部分,他就是:儲存那些當前沒有與連線關聯,但是準備為後面新的連線服務的執行緒,thread_cache_size變數指定了mysql可以儲存在快取中的執行緒數,一般不會設定很大,到底設定多大呢,乙個很好的辦法就是看threads_connected變數,嘗試設定thread_cache_size足夠大,一邊能處理業務壓力,譬如:thread_connected通常保持在100-120,則可以設定快取大小為20,如果在500-700,設定成200已經足夠大了。
1.4.4 table cache表快取,表快取和執行緒快取是相似的,但是存數的物件是表,每個在快取中的物件都是包含相關表.frm檔案的解析結果,加上一些其他資料,準確的說,在物件裡的其他資料的內容依賴於表的儲存引擎, 表快取可以重用資源,但是表快取對innodb的重要性就小多了,因為innode不依賴他做很多事情,表快取分為2部分,乙個是開啟的表的快取,乙個是表定義快取,
1.4.5 innodb資料字典(data dictionary),innodb自己的表快取,稱為:表定義快取或者資料字典,當開啟一張表,innodb就會增加乙個相應的表到資料字典,每張表大約占用4kb,或者更多記憶體,相比myisam,innodb沒有把資訊持久化,而是每次開啟表的時候重新計算,在開啟之後,每隔一段過期時間或者遇觸發事件,譬如改變表的內容,也會重新計算統計資訊,如果表非常多,伺服器要花費大量時間預熱,這個時間伺服器要花費很多的時間在i/o操作,可以在percona server(mysql5.6中也可以,但是叫做innodb_analyze_is_persistent )中開啟innodb_use_sys_stats_table選項來持久化儲存資訊到磁碟,以解決這個問題。
即使啟動後,innodb統計操作還可能多伺服器和一些特定的查詢產生衝擊,可以關閉innodb_stats_on_metadata選項來避免好使的表統計資訊重新整理。
如果設定了innodb_file_per_table選項,innodb在任意時刻可以保持開啟.ibd檔案的數量也是有其限制的,這由innodb儲存引擎負責,而不是mysql管理,並且由innodb_open_files來控制,最後把inodb_open_files的值設定的足夠大,以使伺服器可以保持所有的.ibd檔案同時開啟。
mysql引擎之MyISAM與InnoDB
在mysql中,支援幾種引擎,其中包括myisam與innodb,兩者皆採用b tree的資料結構,樹 鍊錶 myisam 索引和資料是分開的,也叫非聚集索引,不管是以自增id作為索引還是以其他作為索引,最下層的葉子節點存放的是乙個實體地址,通過這個實體地址找到需要的資料 索引和資料是分開的,也叫聚...
mysql配置優化 MySQL配置效能優化
下面配置的優化,可能影響比較大,可能可以顯著提高讀寫效能。1 mysql一些主要配置項介紹 innodb buffer pool size 這是你安裝完innodb後第乙個應該設定的選項。緩衝池是資料和索引快取的地方 這個值越大越好,這能保證你在大多數的讀取操作時使用的是記憶體而不是硬碟。如果是純資...
MYSQL資料庫引擎,ISAM和INNODB
其餘都屬於第二類,稱為 非事務安全型 non transaction safe 1 isam isam是乙個定義明確且歷經時間考驗的資料 管理方法,它在設計之時就考慮到資料庫被查詢的次數要遠大於更新的次數。因此,isam執行讀取操作的速度很快,而且不占用大量的記憶體和儲存資源。isam的兩個主要不足...