MySQL有兩種途徑途徑瞭解其的配置參數,一個是MySQL交互模式下的命令SHOW VARIABLES,一個使用mysqladmin variables 查詢。html
MySQL的配置參數分爲2種,全局的和局部的。局部的配置變量能夠在每次會話中本身更改。mysql
從MySQL 4.0之後開始,在SHOW VARIABLES中顯示的參數,大部分能夠動態使用SET命令進行更改。sql
基本參數配置:數據庫
參數windows |
說明數組 |
bind-address緩存 |
綁定的IP地址安全 |
user服務器 |
用戶網絡 |
port |
端口號 |
datadir |
數據文件目錄 |
basedir |
msyql應用程序的目錄 |
socket |
socket文件,默認在/tmp目錄下,可是建議不要這樣設置,/tmp目錄是一個你們都願意破壞的目錄 |
default-table-type |
默認表類型 |
查詢的Cache的是從MySQL4.0版本開始提供的功能。相關的參數爲:
參數 |
說明 |
query_cache_size |
查詢Cache的尺寸 |
query_cache_type |
查詢的Cache類型。 0 OFF,不進行緩衝 1 ON,進行緩衝 2 DEMAND,對SELECT SQL_CACHE開頭的查詢進行緩衝 |
query_cache_limit |
查詢的結果的限制長度,小於這個長度的數據才能Cache |
MyISAM的索引參數:key_buffer_size爲MyISAM引擎的最關鍵的優化參數之一。
參數 |
說明 |
key_buffer_size |
(關鍵參數),索引塊用的緩衝區大小,全部的鏈接程序線程共用 |
key_cache_block_size |
每個索引block的大小,默認1024字節,從4.1.1後纔出現這個參數,原來都是直接採用1024字節做爲Block的長度 |
InnoDB使用的參數:InnoDB的參數較少,籠統而不細緻,內存的管理多由InnoDB引擎本身負責,主要的緩衝就是innodb_buffer_pool_size參數分配的緩衝。這樣配置卻是簡單了,但沒有了細緻優化樂趣。
參數 |
說明 |
innodb_buffer_pool_size |
innodb的緩衝區大小,存放數據和索引,通常設置爲機器內存的50%-80% (關鍵參數) |
innodb_log_buffer_size |
InnoDB日誌緩衝區大小 |
innodb_flush_method |
刷新日誌的方法 |
innodb_additional_mem_pool_size |
innodb內存池的大小,存放着各類內部使用的數據結構 |
innodb_data_home_dir |
InnoDB數據文件的目錄 |
innodb_data_file_path |
數據文件配置 |
innodb_log_files_in_group |
Innodb日誌的 |
innodb_log_file_size |
Innodb日誌文件的尺寸 |
innodb_lock_wait_timeout |
等待數據鎖的超時時間,避免死鎖的一種措施 |
innodb_flush_log_at_trx_commit |
日誌提交方式 (關鍵參數) 0每秒寫1第二天志,將數據刷入磁盤,至關於每秒提交一次事務。 1每次提交事務寫日誌,同時將刷新相應磁盤,默認參數。 2每提交事務寫一第二天志,但每隔一秒刷新一次相應的磁盤文件[注] |
innodb_force_recovery |
在Innodb的自動恢復失敗後,從崩潰中強制啓動,有1-6個級別,數值越低恢復的方式也保守,默認爲4。儘可能使用較保守方式恢復。 恢復後要註釋刪除這一行。 |
Log的參數:MySQL的日誌有6種,查詢日誌,慢查詢日誌,變動日誌,二進制變動日誌,告警日誌,錯誤日誌。my.cnf中能夠配置日誌的前綴和日誌參數。日誌是監控數據庫系統的重要途徑。
參數 |
說明 |
log |
查詢日誌,記錄全部的MySQL的命令操做,在跟蹤數據庫運行時很是有幫助,但在實際環境中就不要使用了 |
log-update |
變動日誌,用文本方式記錄全部改變數據的變動操做, |
log-bin |
二進制變動日誌,更加緊湊,使用mysqlbinlog讀取,操做,轉換 |
binlog_cache_size |
臨時存放某次事務的SQL語句緩衝長度 |
max_binlog_cache_szie |
最大的二進制Cache日誌緩衝區尺寸 |
max_binlog_size |
最大的二進制日誌尺寸 |
log-error |
致使沒法啓動的錯誤日誌 |
log-warnings |
告警日誌 |
long_query_time |
慢查詢時間限度,超過這個限度,mysqld認爲是一個慢查詢 |
log-queries-not-using-indexes |
沒有使用索引查詢的日誌,方便記錄長時間訪問的查詢進行優化 |
log-slow-queries |
慢速的查詢日誌, |
打開文件參數:
參數 |
說明 |
table_cache |
可以被同時打開的表最大個數,打開一個表使用2個文件描述符 (關鍵參數) |
open_files_limit |
mysqld保留的文件描述符號個數,和table_cache和max_connections設置相關,默認爲0 設置爲0, 系統設置max_connections*5或者max_connections + table_cache*2中的最大值 |
關於鏈接通訊的參數:
參數 |
說明 |
max_connections |
最大的鏈接數 |
max_connect_errors |
同一個地址最大錯誤鏈接數,防止攻擊用 |
net_buffer_length |
服務器和客戶之間通信的使用的緩衝區長度 |
max_allowed_packet |
服務器和客戶之間最大的通訊的緩衝區長度 |
net_read_timeout |
網絡讀取超時 |
net_write_timeout |
網絡寫入超時 |
interactive_timeout |
交互模式下的沒有操做後的超時時間 |
wait_ timeout |
非交互模式的沒有操做後的超時時間 |
每一個會話使用的buffer設置,默認使用my.cnf的配置,也可使用每一個會話設置。不要設置的過大。
參數 |
說明 |
read_buffer_size (record_buffer) |
對數據表做順序讀取的緩衝大小 |
read_rnd_buffer_size |
在排序後,讀取結果數據的緩衝區大小, |
sort_buffer_size (sort_buffer) |
用來完成排序操做的線程使用的緩衝區大小 |
join_buffer_size |
全關聯操做緩衝區(沒有索引而進行關聯操做) |
write_buffer_size |
myisamchk的特有選項 寫入緩衝區大小 |
myisam_sort_buffer_szie |
爲索引的從新排序操做(好比CREATE INDEX)的分配的緩衝區的長度 |
對於磁盤緩式寫入的一些選項,delay_key_write,flush,flush_time參數可能能夠進一步提升MyISAM引擎的性能,可是在服務器Crash的時候,可能會丟失數據,形成表損壞。
MySQL對於插入語句支持一個選項INSERT DELAYED,若是有這個選項,MySQL將這些插入語句放入一個隊列,並不立刻讀入磁盤。delay_insert_XXX的選項都是配置這個功能,
MySQL建立表的時候也有一個選項,DELAY_KEY_WRITE,有這個選項描述的表的鍵發生改動後,改動能夠緩衝在key_buffer中,不當即回寫磁盤。
參數 |
說明 |
delay_insert_limit |
INSERT DELAYED語句選項。(插入語句的描述) 處理INSERT DELAYED語句,MYSQL插入delay_insert_limit條語句後檢查是否有查詢語句,若有有去查詢,若是沒有,則繼續插入 |
delay_insert_timeout |
在處理完INSERT DELAYED對列的插入數據後,MYSQL等待delay_insert_timeout秒後看看是否有INSERT DELAYED數據,若是有繼續,若是沒有結束此次操做。 |
delay_query_size |
INSERT DELAYED插入數據對列的長度 |
max_delayed_threads |
處理INSERT DELAYED語句的最大線程個數 |
delay_key_write |
對於使用DELAY_KEY_WRITE選項的建立的表,能夠延緩鍵讀寫 0N 不延緩全部的鍵寫如操做 OFF延緩有DELAY_KEY_WRITE選項的標的鍵寫入操做 ALL延緩全部的表 |
flush |
是否要在每一個操做後當即刷新數據表 |
flush_time |
每隔多少秒,對數據表進行一次刷新。關閉後打開。 |
|
|
關閉某些選項:關閉某些選項能夠加快MySQL的運行速度,這些選項在MySQL SHOW VARIABLES 中顯示爲have_XXX 的變量。
參數 |
說明 |
skip-openssl |
關閉mysql服務器對SSL加密的支持 |
skip-isam |
關閉mysql服務器對isam的引擎的支持 |
skip-bdb |
關閉mysql服務器對bdb的引擎的支持 |
skip-external-locking |
不使用外部鎖,MySQL的外部鎖用於防止其餘程序修改正在數據文件,但其在部分系統上不可靠,通常都不使用。(4.03版本前叫skip-locking) |
skip-innodb |
關閉mysql服務器對innodb的引擎的支持 |
skip_networking |
只能從本地訪問數據庫 |
|
|
其餘參數:
參數 |
說明 |
slow_launch_time |
用多於這個時間建立的線程視爲一個慢建立線程 |
binlog_cache_size |
臨時存放構成每次事務的SQL的緩衝區長度,(全局變量,可是應該影響每個會話) |
max_binlog_cache_size |
二進制日誌緩衝區的最大長度,其實就是事物的最大長度,默認4G |
max_heap_table_size |
HEAP表的最大容許長度 |
max_tmp_tables |
臨時tables的最大個數 |
myisam_recover_options |
myisam引擎的自動恢復模式 |
thread_cache_size |
線程緩衝區的所能容納的最大線程個數 |
tmp_table_size |
臨時tables的最大尺寸 |
MySQL有兩種途徑途徑瞭解其的運行狀態,一個是MySQL交互模式下的命令SHOW STATUS,一個使用mysqladmin extended-status 。兩種方法殊途同歸,經過觀察其運行狀態能夠了解咱們的參數設置是否合理,是否有要優化的表和數據。
SHOW STATUS顯示了MySQL從運行開始到如今爲止狀態,大部分爲一些計數器,使用FLUSH STATUS能夠從新對各類狀態變量進行計數。
表19 MySQL的狀態計數器
參數 |
說明 |
Aborted_clients |
因客戶沒有正確關閉而丟棄的鏈接數量,沒有正確關閉指沒有調用mysql_close就退出,鏈接超時,數據傳送中客戶端退出 |
Aborted_connects |
試圖鏈接MySQL服務器但沒有成功的次數 |
Connections |
試圖鏈接MySQL服務器的嘗試次數,(包括成功的和沒有成功) |
|
|
Com_XXX |
執行語句的計數器,好比Com_select變量記錄了select語句的個數 |
|
|
Created_tmp_disk_tables |
使用磁盤建立臨時表的次數,若是要建立的臨時表的尺寸大於tmp_table_size,那麼臨時表將建立在磁盤上, |
Created_tmp_tables |
建立臨時表的次數 |
|
|
Delayed_XXX |
INSERT DELAYED語句的執行性能參數 |
|
|
Opened_tables |
曾經打開過的數據表總數 |
Open_tables |
當前處於打開的表個數 |
Open_files |
當前處於打開的文件個數 |
|
|
Bytes_received |
從客戶收到的字節總數 |
Bytes_send |
發送給客戶的字節總數 |
|
|
Handler_commit Handler_rollback |
事務提交或者回滾的次數 |
Handler_delete |
對數據表刪除一條記錄的次數 |
Handler_update |
對數據表修改一條記錄的次數 |
Handler_write |
對數據表插入一條記錄的次數 |
Handler_read_first |
讀取索引中第一個索引項的個數 |
Handler_read_key |
根據索引直接讀取一行數據的次數,這個數值高表示數據庫有較好的檢索能力。 |
Handler_read_next |
根據索引讀取下個數據行的請求次數. 在一個索引的區間內進行查詢( > < ,orderby 這類查詢條件)會影響這個計數器。 |
Handler_read_prev |
根據索引讀取前個數據行的請求次數.用於一些反序查詢。 |
Handler_read_rnd |
經過一個固定位置(應該就是不經過索引)讀取一個數據行的次數。這個數值很高表示你的不少查詢操做的結果須要排序,可能這些查詢操做不能適當使用索引而要檢索整個表。 |
Handler_read_rnd_next |
請求從數據文件中讀取下一個記錄的次數.若是有不少全表的檢索這個值將很高. 一般這表示數據表沒有合適的索引。 |
|
|
key_blocks_used |
索引緩衝區塊中已經被使用的區塊大小。Block的尺寸默認是1024字節,4.1.1後能夠經過key_cache_block_size參數設置。能夠根據key_buffer_size/(1024 or key_cache_block_size) 獲得Block總數,而後知道key_buffer的利用率 |
Key_read_requests |
從緩衝讀取1個Block的次數 |
Key_read |
從磁盤讀取的次數 |
Key_write_requests |
寫入索引緩衝區寫入一個Block的次數 |
Key_write |
寫回磁盤的次數 |
|
|
Qcache_free_blocks |
Qcache沒有使用的內存塊個數 |
Qcache_free_memory |
Qcache沒有使用的內存尺寸 |
Qcache_hits |
查詢在Qcache中的命中次數,和Com_select比較,就能夠知道Qache的大約命中率是多少。 |
Qcache_inserts |
加入Cache中的查詢個數 |
Qcache_lowmem_prunes |
因爲Qcache不夠用,形成替換出Qcache的查詢個數 |
Qcache_not_cached |
沒有能Cache的查詢個數 |
|
|
Slow_queries |
慢查詢的次數,若是一個查詢的所用的時間大於long_query_time設置的時間,則計數加1 |
|
|
Select_XXXX |
關聯查詢的一些狀態計數 |
|
|
Innodb_XXXX |
InnoDB的狀態技術器,不過只有MySQL 5.02的版本才支持這些計數器。這兒略過 |
|
|
Table_locks_waited |
必須等待後才能完成表鎖定的請求個數,若是這個數值和下面數值的比率過大,表示數據庫的性能較低 |
Table_locks_immediate |
無需等待,當即完成表鎖定的請求個數。 |
|
|
Thread_connected |
如今處在鏈接打開狀態的線程個數 |
Thread_cached |
如今在現場緩衝區的線程個數 |
Thread_created |
到目前爲止,建立的線程個數 |
Thead_running |
如今運行的線程個數,不是全部打開的線程都在運行,有些會處於SLEEP狀態 |
InnoDB的狀態監控的要在交互模式下使用show innodb status命令。相對的能夠利用InnoDB狀態參數也過少。
一、 innodb_flush_log_at_trx_commit AND sync_binlog
innodb_flush_log_at_trx_commit = N:
N=0 – 每隔一秒,把事務日誌緩存區的數據寫到日誌文件中,以及把日誌文件的數據刷新到磁盤上;
N=1 – 每一個事務提交時候,把事務日誌從緩存區寫到日誌文件中,而且刷新日誌文件的數據到磁盤上;
N=2 – 每事務提交的時候,把事務日誌數據從緩存區寫到日誌文件中;每隔一秒,刷新一第二天志文件,但不必定刷新到磁盤上,而是取決於操做系統的調度;
sync_binlog = N:
N>0 — 每向二進制日誌文件寫入N條SQL或N個事務後,則把二進制日誌文件的數據刷新到磁盤上;
N=0 — 不主動刷新二進制日誌文件的數據到磁盤上,而是由操做系統決定;
推薦配置組合:
N=1,1 — 適合數據安全性要求很是高,並且磁盤IO寫能力足夠支持業務,好比充值消費系統;
N=1,0 — 適合數據安全性要求高,磁盤IO寫能力支持業務不富餘,容許備庫落後或無複製;
N=2,0或2,m(0<m<100) — 適合數據安全性有要求,容許丟失一點事務日誌,複製架構的延遲也能接受;
N=0,0 — 磁盤IO寫能力有限,無複製或容許複製延遲稍微長點能接受,例如:日誌性登記業務;
二、 innodb_file_per_table
啓用單表空間,減小共享表空間維護成本,減小空閒磁盤空間釋放的壓力。另外,大數據量狀況下 的性能,也會有性能上的提高,爲此建議你們使用獨立表空間 代替 共享表空間的方式;
三、 key_buffer_size
key_buffer_size只能緩存MyISAM或類MyISAM引擎的索引數據,而innodb_buffer_pool_size不只能緩存索引數據,還能緩存元數據,可是對於咱們只使用InnoDB引擎的數據庫系統而言,此參數值也不能設置過於偏小,由於臨時表可能會使用到此鍵緩存區空間,索引緩存區推薦:64M;
四、 query_cache_type and query_cache_size
n query_cache_type=N
N=0 —- 禁用查詢緩存的功能;
N=1 —- 啓用產訊緩存的功能,緩存全部符合要求的查詢結果集,除SELECT SQL_NO_CACHE.., 以及不符合查詢緩存設置的結果集外;
N=2 —- 僅僅緩存SELECT SQL_CACHE …子句的查詢結果集,除不符合查詢緩存設置的結果集外;
n query_cache_size
查詢緩存設置多大才是合理?至少須要從四個維度考慮:
① 查詢緩存區對DDL和DML語句的性能影響;
② 查詢緩存區的內部維護成本;
③ 查詢緩存區的命中率及內存使用率等綜合考慮
④ 業務類型
五、 innodb_commit_concurrency
含義:同一時刻,容許多少個線程同時提交InnoDB事務,默認值爲0,範圍0-1000。
0 — 容許任意數量的事務在同一時間點提交;
N>0 — 容許N個事務在同一時間點提交;
注意事項:
① mysqld提供服務時,不準把 innodb_commit_concurrency 的值從0改成非0,或非0的值改成0;
② mysqld提供時,容許把 innodb_commit_concurrency 的值N>0改成M,且M>0;
六、 innodb_concurrency_tickets
含義:
同一時刻,能訪問InnoDB引擎數據的線程數,默認值爲500,範圍1-4294967295。
補充說明:當訪問InnoDB引擎數據的線程數達到設置的上線,線程將會被放到隊列中,等待其餘線程釋放ticket。
建議:
MySQL數據庫服務最大線程鏈接數參數max_connections,通常狀況下都會設置在128-1024的範圍,再結合實際業務可能的最大事務併發度,innodb_concurrency_tickets保持默認值通常狀況下足夠。
七、 innodb_fast_shutdown and innodb_force_recovery
innodb_fast_shutdown:
含義:設置innodb引擎關閉的方式,默認值爲:1,正常關閉的狀態;
0 — mysqld服務關閉前,先進行數據徹底的清理和插入緩衝區的合併操做,如果髒數據
較多或者服務器性能等因素,會致使此過程須要數分鐘或者更長時間;
1 — 正常關閉mysqld服務,針對innodb引擎不作任何其餘的操做;
2 — 如果mysqld出現崩潰,當即刷事務日誌到磁盤上而且冷關閉mysqld服務;沒有提交
的事務將會丟失,可是再啓動mysqld服務的時候會進行事務回滾恢復;
innodb_force_recovery:
含義:
mysqld服務出現崩潰以後,InnoDB引擎進行回滾的模式,默認值爲0,可設置的值0~6;
提示:
只有在須要從錯誤狀態的數據庫進行數據備份時,才建議設置innodb_force_recovery的值大於0。 如果把此參數做爲安全選項,也能夠把參數的值設置大於0,防止InnoDB引擎的數據變動,設置不一樣值的做用:
0 — 正常的關閉和啓動,不會作任何強迫恢復操做;
1 — 跳過錯誤頁,讓mysqld服務繼續運行。跳過錯誤索引記錄和存儲頁,嘗試用
SELECT * INOT OUTFILE ‘../filename’ FROM tablename;方式,完成數據備份;
2 — 阻止InnoDB的主線程運行。清理操做時出現mysqld服務崩潰,則會阻止數據恢復操做;
3 — 恢復的時候,不進行事務回滾;
4 — 阻止INSERT緩衝區的合併操做。不作合併操做,爲防止出現mysqld服務崩潰。不計算
表的統計信息
5 — mysqld服務啓動的時候不檢查回滾日誌:InnoDB引擎對待每一個不肯定的事務就像提交
的事務同樣;
6 — 不作事務日誌前滾恢復操做;
推薦的參數組合配置:
innodb_fast_shutdown = 1
#如果機房條件較好可設置爲0(雙路電源、UPS、RAID卡電池和供電系統穩定性)
innodb_force_recovery =0
#至於出問題的時候,設置爲什麼值,要視出錯的緣由和程度,對數據後續作的操做
八、 innodb_additional_mem_pool_size
含義:開闢一片內存用於緩存InnoDB引擎的數據字典信息和內部數據結構(好比:自適應HASH索引結構);
默認值:build-in版本默認值爲:1M;Plugin-innodb版本默認值爲:8M;
提示:如果mysqld服務上的表對象數量較多,InnoDB引擎數據量很大,且innodb_buffer_pool_size的值設置 較大,則應該適當地調整innodb_additional_mem_pool_size的值。如果出現緩存區的內存不足,則會直接向操做系統申請內存分配,而且會向MySQL的error log文件寫入警告信息;
九、 innodb_buffer_pool_size
含義:開闢一片內存用於緩存InnoDB引擎表的數據和索引;
默認值:歷史默認值爲:8M,如今版本默認值爲:128M;
參數最大值:受限於CPU的架構,支持32位仍是支持64位,另外還受限於操做系統爲32位仍是64位;
提示:
innodb_buffer_pool_size的值設置合適,會節約訪問表對象中數據的物理IO。官方手冊上建議專用的數據庫服務器,可考慮設置爲物理內存總量的80%,可是我的建議要看物理服務器的物理內存總量,以及考慮: 是否只使用InnoDB引擎、mysqld內部管理佔用的內存、最大線程鏈接數和臨時表等因素,官方提供的80%值做爲一個參考,舉而個例子方便你們做決定(前提:物理服務器爲mysqld服務專用,且只用InnoDB引擎,假設數據量遠大於物理內存):
1).內存配置:24G 則 innodb_buffer_pool_size=18G
1).內存配置:32G 則 innodb_buffer_pool_size=24G
出現下列哪些狀況,則能夠考慮減少innodb_buffer_pool_size的值:
1).出現物理內存的競爭,可能致使操做系統的分頁;
2).InnoDB預分配額外的內存給緩衝區和結構管理,當分配的總內存量超過innodb_buffer_pool_size值的10%;
3).地址空間要求必須爲連續的,在windows系統有一個嚴重問題,DLL須要加載在特定的地址空間;
4).初始化緩衝區的時間消耗,與緩衝區的大小成正比。官方提供的數據 Linux X86 64位系統 初始化 innodb_buffer_pool_size=10G 大概須要6秒鐘;
十、 lower_case_table_names
Linux或類Unix平臺,對文件名稱大小寫敏感,也即對數據庫、表、存儲過程等對象名稱大小寫敏 感,爲減小開發人員的開發成本,爲此推薦你們設置該參數使對象名稱都自動轉換成小寫;
十一、 max_connect_errors
max_connect_errors默認值爲10,也即mysqld線程沒從新啓動過,一臺物理服務器只要鏈接 異常中斷累計超過10次,就再也沒法鏈接上mysqld服務,爲此建議你們設置此值至少大於等於10W; 若異常中斷累計超過參數設置的值,有二種解決辦法,執行命令:FLUSH HOSTS;或者從新啓動mysqld服務;
十二、 interactive_timeout and wait_timeout
u interactive_timeout
處於交互狀態鏈接的活動被服務器端強制關閉,而等待的時間,單位:秒;
u wait_timeout
與服務器端無交互狀態的鏈接,直到被服務器端強制關閉而等待的時間,此參數只對基於TCP/IP或基於 Socket通訊協議創建的鏈接纔有效,單位:秒;
u 推薦設置
interactive_timeout = 172800
wait_timeout = 172800
1三、 transaction-isolation and binlog-format
u transaction-isolation
可供設置的值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、
SERIALIZABLE,默認的值爲: REPEATABLE-READ,事務隔離級別設置的不一樣,對二進制日誌登記格
式影響很是大,詳細信息可見文章解讀MySQL事務的隔離級別和日誌登記模式選擇技巧;
u binlog-format
複製的模式,可供設置的值:STATEMENT、ROW、MIXED(注:5.0.*只有命令行式複製),
5.1.*版本默認設置:MIXED;
u 推薦配置
① 只讀爲主的業務應用場景
transaction-isolation = read-committed
binlog-format = mixed #5.1.*版本,5.0.*只能設置爲 statement
① 非只讀爲主的業務應用場景
transaction-isolation = repeatabled-read
binlog-format = mixed #5.1.*版本,5.0.*只能設置爲 statement
1四、 event_scheduler
事務調度默認是關閉狀態,也推薦源碼編譯的版本可不編譯進來,以及實際生產環境保持默認禁用 狀態,當真正須要用的時候,能夠臨時打開,命令:SET GLOBAL event_scheduler=1;
1五、 skip_external_locking
外部鎖,也即操做系統所實施的鎖,只對MyISAM引擎有效,且容易形成死鎖發生,爲此咱們一概禁用;
1六、 innodb_adaptive_hash_index
InnoDB引擎會根據數據的訪問頻繁度,把表的數據逐漸緩到內存,如果一張表的數據大量緩存在 內存中,則使用散列索引(注:Hash Index)會更高效。InnoDB內有Hash Index機制,監控數據的訪 問狀況,能夠自動建立和維護一個Hash Index,以提供訪問效率,減小內存的使用;
1七、 innodb_max_dirty_pages_pct
InnoDB主線程直接更新Innodb_buffer_pool_size中存在的數據,而且不實時刷回磁盤,而是等待 相關的處罰事件發生,則容許緩存空間的數據量不實時刷回磁盤的最大百分比。比例設置較小,有利於 減小mysqld服務出現問題的時候恢復時間,缺點則是須要更多的物理I/O,爲此咱們必須根據業務特色 和可承受範圍進行一個折中,通常範圍建議設置爲5%~90%,像咱們SNS遊戲行業的寫很是厲害,綜合 各方面因素,設置爲20%;