本文目錄一覽:
mysql 參數調優(11)之innodb_buffer_pool_instances設置多個緩衝池實例
MySQL 5.5引入了緩衝實例作為減小內部鎖爭用來提高MySQL吞吐量的手段。在5.5版本這個對提升吞吐量幫助很小,然後在MySQL 5.6版本這個提升就非常大了,所以在MySQL5.5中你可能會保守地設置innodb_buffer_pool_instances=4,在MySQL 5.6和5.7中你可以設置為8-16個緩衝池實例。設置後觀察會覺得性能提高不大,但在大多數高負載情況下,它應該會有不錯的表現。對了,不要指望這個設置能減少你單個查詢的響應時間。這個是在高並發負載的服務器上才看得出區別。比如多個線程同時做許多事情。
5.7、8.0 下INNODB_BUFFER_POOL_INSTANCES默認為1,若mysql存在高並發和高負載訪問,設置為1則會造成大量線程對BUFFER_POOL的單實例互斥鎖競爭,這樣會消耗一定量的性能的。
pool_instances 可以設置為cpu核心數,它的作用是:
1)對於緩衝池在數千兆字節範圍內的系統,通過減少爭用不同線程對緩存頁面進行讀寫的爭用,將緩衝池劃分為多個單獨的實例可以提高並發性。可以類比為 java中的 ThreadLocal 線程本地變量 就是為每個線程維護一個buffer pool實例,這樣就不用去爭用同一個實例了。相當於減少高並發下mysql對INNODB_BUFFER緩衝池的爭用。
2)使用散列函數將存儲在緩衝池中或從緩衝池讀取的每個頁面隨機分配給其中一個緩衝池實例。每個緩衝池管理自己的空閑列表, 刷新列表, LRU和連接到緩衝池的所有其他數據結構,並受其自己的緩衝池互斥量保護。
數據庫緩衝池有什麼作用
其實就是一個存儲轉發的作用,如果你訪問的信息在緩衝池就直接在緩衝裡面拿,這對於降低數據庫壓力,提高數據庫性能和速度有明顯的效果
數據庫實例的作用是什麼?
數據庫實例由各種高速緩衝池以及後台進程組成。
數據庫是數據以某中方式組織起來的數據集合,物理存儲為數據庫文件,數據庫實例負責維護,訪問來這些數據。
打個比方:
你在文本中有一些數據(數據庫文件)需要計算,你就要寫一個程序(後台進程),計算這些數據,如果計算中有源中間結果,你就需要把數據的中間結果放到內存中的一個區域中(高速緩衝池),然後再取出這些中間結果計算。
當然這只是打個比方,實際數據庫實例要處理的東西要多得多。
舉個很形象的例子(呵呵):
一個實例就像一台絞肉機,每台絞肉機都可以絞肉。
大塊的肉放進去做為輸入(T-SQL),碎肉擠出來做為輸出(結果集)。
你每運行一次安裝程序,只能裝一台絞肉機。
當然,你可以在服務器上裝好幾台絞肉機,但是必須有不同的名字:絞肉機A,絞zhidao肉機B…
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/160436.html