凡是需要耐心。
- 參數為靜態參數則黃色字體標記。
- 參數為全局變量則粗體標記。
- 參數為會話變量則下划線標記。
- 參數為全局、會話變量則不標記。
auto_increment_increment
auto_increment_offset
這兩個參數對master-master replication與自增長列有所影響。 為保持數據一致性,復制過程中應設置相同的值。 參數1指定自增長起點,參數2指定偏移量(步長)。
autocommit
事務操作中是否自動提交,如果為1則自動提交,為0則需要commit。
automatic_sp_privileges
該參數控制着server是否自動分配execute和alter權限給創建routine的用戶。 默認為1,自動賦權。
back_log
mysql服務在很短的時間內有很多的連接請求時該參數就會發揮作用。 如果短時間內有很大連接數可考慮增加該值。不過限制於系統層面的連接數。 5.6.6之前默認50, 5.6.6之后基於50+(max_connections/5)公式,上限900
basedir
mysql安裝目錄
big_tables
如果設置為1,則所有的臨時表不會在內存中存儲,而是在磁盤上。明顯這會影響性能。 正常來說,不需要改變默認值,mysql會自動識別是否需要磁盤空間。
bind_address
mysql服務綁定的地址,默認是0.0.0.0,也就是說接受來自不同網卡的請求。 如果機器上有多塊網卡,而只需要監聽一個網卡,則可通過綁定指定ip實現。
binlog_cache_size
默認值32K,該參數生產過程中一般需要調整。binlog在恢復及復制過程中發揮着不可或缺的作用,因此生產過程中必定是打開(log_bin=1)的,在向磁盤寫binlog之前,mysql會將數據的修改帶來的binlog記錄在一塊內存中,然后刷盤。如果一條dml帶來的binlog信息很大,導致binlog_cache_size不足,就會導致使用磁盤臨時文件來存儲。性能影響嚴重。
根據狀態參數binlog_cache_use及binlog_cache_disk_use調諧。前者表示使用了多少binlog_cache,后者表示使用了多少次磁盤空間。可通過百分比適當調整。
binlog_checksum
該參數好像卵用不大,大概就是對每個binlog文件checksum。 不過需要注意的是mysql5.6.6版本之后,復制過程中如果主上設定的參數值(例如CRC32)從上不能識別,則會因出錯停止復制。
binlog_direct_non_transactional_updates
如果事務性操作中含有非事務性表,回滾時只能回滾事務性的表。
在mysql 5.6中,binlog的記錄格式為row或者是mixed時。該參數不起作用。 5.7中也不可以。
binlog_format
binlog的記錄格式。 一般row模式,好處是能保證主從的數據一致性。缺點是binlog記錄的是每一行的改變情況,因此磁盤空間占用比較大。 statement格式,好處,由於記錄的是邏輯語句。所以磁盤占用率小,但是由於機器上的環境差異及UDF可能會帶來數據不一致。
mixed格式。混合記錄格式,並不完善
binlog_max_flush_queue_time
這個參數基本上不需要動。默認0,意味着服務器對事務的支持沒有延遲。 主要是防止並發事務過高,導致某些事務的RT上升。
binlog_order_commits
當設置為0時,事務可能以和binlog不相同的順序被提交,從下面的測試也可以看出,這會稍微提升點性能。這不會帶來數據不一致,不過會影響熱備份。
binlog_row_image
5.6.2新增參數,可選值
full:默認值,記錄所有的行信息,和5.6之前記錄的沒有區別。 minimal:只記錄要修改的值 noblob:記錄除了blog和text之外的所有字段。 需要注意的是在row模式才起作用。 此參數作用意義:當一個表中含有blob、text類型字段時,會導致binary log日志量暴漲, 特別是有一些游戲數據庫。update的時候,即使不更新這些字段, before image和after image都會被寫入到binary log日志,我們為了節省磁盤,內存,網絡流量等,設置此參數來達到這些需求
binlog_rows_query_log_events
通過設置binlog_rows_query_log_events為on,可以在binlog_format=row中記錄執行的SQL語句。
binlog_stmt_cache_size
如果事務需要內存超過此字節數,服務器生成如下錯誤 ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage;max_binlog_cache_size最低值是4096, 最大可能值為16EB(艾字節)。推薦的最大值為4GB ;因為目前的MySQL當二進制日志位置大於4GB時並不生效。
connect_timeout
這個超時使用在MySQL服務器和客戶端交換授權包時。默認10秒。
log_bin
打開或關閉binlog的參數。需要指定server-id。
foreign_key_check
外鍵檢查約束。為保證數據一致性,該參數一般打開。在批量導入數據的情況下,可以臨時關閉從而提高數據導入的效率。
innodb_adaptive_flushing
innodb自適應刷新,打開該參數,innodb能智能的根據系統的io負載結合緩沖池的情況進行io操作(主要是write操作)。默認打開。
innodb_adaptive_hash_index
innodb的一個特性,即使熱數據緩存在緩沖池中,頻繁訪問一些數據,B+樹的樹高會起到一定影響,innodb能智能的根據訪問的頻率從而產生類似鍵值對的訪問,從而避免樹高帶來的微小消耗。
innodb_additional_mem_pool_size
單位字節數,默認8M,該參數指定的若干大小內存被分配用以存儲數據字典信息和一些其他的內部數據結構,應用中表越多,調用了內存越多。如果用完了該塊內存,就會調用操作系統的內存,同時也會在error_log中寫入警告信息。 5.6.3中被棄用。5.7.4移除了。
innodb_autoinc_lock_mode
mysql自增長鎖的模式。
須知
插入操作insert的幾種類型 形如insert into table_name values();的插入均為簡單插入。sample insert 形如insert ... select,replace ... select 和load data語句為bulk insert 形如INSERT INTO t1 (c1,c2) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d')的為mixed insert 以上統稱insert-like 0表示表鎖模式,即第一條語句執行完成釋放lock。保證了增長列的有序性,並發性能不好 1表示simple insert時仍然等待auto-Inc locking的釋放,對於bulk insert仍然會采用傳統的表鎖模式, 回滾操作會帶來增長列的不連續行。並發性能好。 2表示完全互斥量模式,這是並發性能最高的方式,不過這種需要配合row模式才能保證復制的一致性。 綜上所述。個人認為,如果不需要必須的自增長值的連續性,可以考慮將binlog_format設置為row, innodb_autoinc_lock_mode=2來支持最大並發同時也能保證數據的一致性。
innodb_buffer_pool_dump_at_shutdown
這個參數的作用在於是否在mysql服務關閉時將buffer_pool里面的數據寫入至磁盤文件中。這樣做的目的是大大縮小了innodb緩沖池的預熱時間。
innodb_buffer_pool_dump_at_now
同上,顯而易見,服務運行過程中直接dump進磁盤文件中。
innodb_buffer_pool_instances
這個參數的作用在於將buffer pool化成多個小的pool,好處是一定程度上解決了高並發下線程爭用臨界資源(有關free lists, flush lists, LRUs,latch鎖的mutex及rw lock)問題。缺點是需要一定的額外內存空間。設置多個的前提條件是緩沖池>1G
innodb_buffer_pool_load_at_startup
啟動的時候加載關閉前dump出的buffer_pool數據至緩沖池中。
innodb_buffer_pool_load_at_now
服務運行過程中即刻加載。
innodb_buffer_pool_size
如果是其他參數是一間房間的點綴,那么該參數就是一間屋子的大小。屋子的大小很大程度上決定着性能。 個人總結的看法時。隨着數據庫的運行,緩沖池不可能緩存所有的數據。那么就需要將一些熱的數據緩存進來。熱數據量過大時,考慮表的拆分,並發的訪問過大,考慮用nosql抵擋洪流。 可以根據系統狀態參數Innodb_buffer_pool_read_requests/(Innodb_data_reads+Innodb_buffer_pool_read_requests)計算出讀命中率,一般來說不低於95才算正常。 注意:在某些情況下,盡管命中率達到很多個9,由於數據的訪問異常頻繁。導致分母很大。這時候Innodb_data_reads的量即使很大,也不會導致命中率下降。但是由於物理讀的頻率的限制,也會出現命中率很高的情況下,性能受到很大的影響。 一般來說。該值為系統物理內存的60%-80%。留一定的內存空間至操作系統,避免出現使用swap的情況。
對於swap的看法。 如果物理內存已滿時,系統會將一些未結束程序swap out到swap空間里。需要的時候在swap in. 這樣就是與磁盤打交道了。性能顯而易見。。存在少量的page out不可怕,最糟糕的是有大量page in。 意味着置換的非常頻繁。
innodb_change_buffer_max_size
占buffer_pool最大的比例。 innodb的核心特性之insert buffer(高版本為change buffer)不再贅述。 如果mysql存在大量的insert,update(非唯一索引列),delete時。可能需要增加該值。用以提升io性能。
innodb_change_buffering
change_buffering支持的類型,可選值有none,inserts,deletes,changes,purges,all 默認為all.即所有能用到change buffer的時候都使用該功能。
innodb_doublewrite
innodb核心特性之一,能確保數據在寫入過程中,不會因為寫中斷而導致redo和原數據都懵逼的狀態。 因為redo log的寫入是原子性的,所以不需要都double write特性。
innodb_fast_shutdown
innodb關閉的幾種模式。動態參數,默認值為1,可選值為0,1,2
- 為0時,全部臟葉刷盤並且change buffer合並。關閉緩慢。
- 為1時,跳過以上操作。關閉迅速。
- 為2時,innodb只會刷新他的log,當mysql崩潰的時候,提交的事務不會丟失。但是恢復的時間會很長。
一般來說,使用innodb_fast_shutdown在緊急情況下或者troubleshooting中。比如數據有在內存中有雪崩的危險。
innodb_file_per_table
innodb數據的存儲分為獨享表空間與共享表空間。 獨享表空間中每個表的數據和索引被單獨存放在各自的.ibd文件中。共享表空間在系統表空間中。 相比之下,獨享比共享的性能和效率要更高一些。
innodb_flush_log_at_timeout
默認情況下,innodb每隔一秒鍾刷新log buffer里面的日志。這里可以調整刷新頻率。 我的看法是,一般不需調整。
innodb_flush_log_at_trx_commit
動態參數,可選值為0,1,2
- 默認值為1,事務的每次提交都會寫日志並且刷盤。可完全支持事務ACID的特性。
- 0表示不立即刷新,根據innodb_flush_log_at_timeout設置的秒數刷新。這樣當mysql crash之后就會丟失一秒鍾的事務量。
- 2表示刷到操作系統的緩存中,系統crash會帶來丟失數據的風險。
一般情況下,如果要保證數據的一致性,該參數設置為1並sync_binlog=1。 在一些主從的架構中,由於異步復制導致的主從延遲較大,可考慮在從上適當調整這兩個參數值。
innodb_flush_method
定義flush 數據(data和log)的方式,影響着io的生產力。 默認調用系統的fsync()。 可選值有fsync、O_DSYNC、O_DIRECT_NO_FSYNC
innodb_flush_neighbors
刷新臨近頁,innodb在從buffer pool中刷臟葉的同時也會刷新同在一個區里面的臟葉。為的是減少io壓力。
-
默認為1,意為刷新一個區的中的臨近頁。
-
為0時,則不刷新臨近頁。
-
為2時,刷新整個區的頁。
-
對於HDD,刷新打開臨近頁功能相對於不同時間刷新獨立頁因減少了大量的尋道時間能緩解io壓力。
-
對於SSD,可不打開。因為過多的刷新也許是不必要的刷新,從而到導致不必要的讀入。
innodb_ft_*
有關於innodb全文索引特性的一些參數。感興趣可根據官方文檔了解。
innodb_io_capacity
對於innodb的刷臟葉,指定了io能力,這個參數可以根據磁盤的io能力進行調整。如果存在大量的寫入操作。則可以考慮增大這個參數。前提當然也是硬件支持。
innodb_io_capacity_max
如果io能力在innodb_io_capacity的設置仍然存在io瓶頸。則系統會參考這個限制。
innodb_rollback_on_timeout
當查詢因鎖等待錯誤而中斷時,只有最后一條語句回滾了,整個事務還沒有中止。如果將該選項設置為1會在鎖等待超時后立即回滾。
innodb_large_prefix
支持更長的索引前綴,776字節到3072字節的提升。
innodb_lock_wait_timeout
innodb等待行鎖超時的時間。如果在高並發的OLTP系統。可考慮增加該值。默認50秒。 這個參數不會影響死鎖的釋放時間,mysql對於死鎖有位圖的方式。至於回滾哪一個事務,不僅僅是看事務的權重,也有不存在臟讀的一致性要求。
更正:之前認為將這個變量設得很大來防止查詢失敗。后來了解到這只會導致更嚴重的問題,因為許多堵塞的事務會互相鎖住。所以對於需要立即返回結果的影響程序應該減小該值。像電商網站。
innodb_log_buffer_size
innodb 日志緩沖池的大小,默認8M。獨立於buffer pool之外的內存。每秒中會對這塊內存進行刷盤。達到1/2大小、checkpoint點時都會進行刷盤。我的看法是,結合數據寫的情況,適當調整,一般設置成50M足以。可以根據Innodb_log_waits狀態參數,看是否因為該參數過小帶來不必要的性能影響。
innodb_log_file_size
設置每個log file的大小,默認48M。過小日志輪轉(rotate)受影響,影響checkpoint,過大恢復緩慢。設置多大是一門技術,優化是一個調優的過程。
innodb_log_file_in_group
設置log file的組數。冗余的作用。印象中該參數可能不起作用。
innodb_log_group_home_dir
innodb redo log的位置。
innodb_lru_scan_depth
如果free鏈不夠用了。innodb會在lru的冷端掃描一定深度的頁進行刷盤。 如果臟葉寫的速度過慢,過少,可根據硬件情況酌情調整。io調整參數。
innodb_max_dirty_page_pct
buffer pool中臟葉所占的比例。不會影響刷新的頻率。影響池中可存在臟葉的比例。默認值75.
innodb_old_blocks_pct
lru鏈上mid point的位置。為防止大量的表掃將緩沖池中的熱數據沖刷出來可適當調大這個比例。
innodb_old_blocks_time
設置多長時間內再訪問就會被挪至lru的熱端。
innodb_online_alter_log_max_size
innodb支持在線ddl產生的臨時log文件的限制。
innodb_open_files
innodb同一時刻可以使用的表空間。默認自動調整的。
innodb_page_size
innodb 數據頁的大小,這是讀入內存的最小單元。 一般來說不需要更改。默認16KB
innodb_purge_threads
innodb后台清理線程數,當系統中有大量的dml操作時增加線程數可以帶來性能的提升。 也要依據CPU的核數。5.7。7之前默認一個,之后4個。
innodb_random_read_ahead
打開innodb的隨機預讀機制可以優化io,除表掃之外,也會帶來不必要的讀。默認關閉。 狀態參數Handler_read_rnd_next的值如果非常高,則代表開啟了預讀模式,並且存在大量的表掃。 Handler_read_key也是相關狀態變量,表示讀取索引的請求數目,正常情況下,該值不應該過多的小於Handler_read_rnd_next的值。因為這意味着大部分行的讀取都沒有使用到索引。 此外Handler_read_first表示讀索引中第一項的次數。如果為1,可以看做是一次全索引掃描的標志。
innodb_read_io_threads
innodb后台讀線程數。
innodb_write_io_threads
innodb后台寫線程數。
innodb_read_only
innodb存儲引擎只讀參數。
innodb_sort_buffer_size
用於innodb排序緩沖的大小。可根據Sort_merge_passes狀態參數調整。 Sort_merge_passes 表示當需要排序時,在排序緩沖中無法將結果完全存放,則將會基於磁盤創建臨時文件進行排序。如果該值較高,則應提高sort_buffer_size大小。最好的辦法是找到是由哪些排序SQL造成的。
sort_buffer_size
每個線程需要排序的時候會分配此緩存。查明是否需要增加此緩存的大小、檢查sort_merge_passed狀態變量。也可以檢查sort_range、sort_rows和sort_scan來查明你執行了多少個排序操作。 需要注意的是,因為該參數針對每個線程,所以過大的參數會導致資源浪費。 應set 會話級別的。
innodb_stats_*
有關innodb收集統計信息的參數。尤其重要的是cardinality值及估計的行數。 列舉其中重要的幾個。
innodb_stats_method
統計信息時,關於null值的看待。 可選值nulls_equal、nulls_unequal、nulls_ignored,默認nulls_equal
innodb_stats_persistent
表示是否將統計信息保存在磁盤上,以便下一次讀取不需要額外收集。
innodb_stats_persistent_sample_pages
保存在磁盤上的收集信息,每次采樣的頁數。默認采樣20個頁。
innodb_stats_transient_sample_pages
臨時統計(保存在內存中)采樣的頁數。默認采樣8頁
innodb_strict_mode
如果該參數為on,則對於warning也作為error返回。也就是嚴格檢查插入innodb表中的數據。
innodb_support_xa
支持分布性事務(兩階段提交)。redo log與binlog的寫入用了該特性。默認開啟。 在主從復制架構中為了保證數據一致性不要關閉該參數。
innodb_sync_spin_loops
該參數設定了一個線程等待mutex鎖前自旋的次數(為減少context switch帶來的CPU損失時間),默認30次。若最終仍為獲取,則進入suspended狀態。 很多時候,為了避免堵塞。也有可能將該值設定為0.(baofoo是這么干的)
innodb_table_locks
此變量定義了innodb是如何處理lock tables語句發出的表鎖請求。默認立刻返回並且內部將表鎖住。當關閉時(設置為0),它會接受lock table語句線程直到所有鎖釋放后才從lock tables ... write返回。
innodb_thread_concurrency
innodb可限制並發線程數。如果參數設置大於0,則表示檢查機制開啟,允許進入的線程數就是參數的值。如果設置過大會因為增加消耗系統層面的連接和資源導致性能退化。 一般情況下,值得設定應小於CPU的核數。 根據系統的負載,硬件環境調整參數。
innodb_undo_directory
undo空間獨立出來的目錄。關於將undo獨立出來,是很有必要的,如果將undo文件部署在ssd類的高速盤上,可以大大加快io,從而提升數據庫性能。
innodb_undo_logs
設置undo使用回滾段的個數。替代了老版本的innodb_rollback_segments 默認128。1個回滾段支持1024事務(早期中,能滿則大部分應用),128*1024就是現在能支持的事務數。
innodb_undo_tablespaces
設定undo的表空間數。 如果等於4,則就有undo001~undo004的undo tablespace文件。
innodb_use_native_aio
指定mysql是否使用Linux 異步io子系統。該參數值針對Linux系統。並且不能在服務運行的時候更改。一般來說,不需要動這個參數,默認開啟的。
insert_id
沒什么作用,alter 或者insert對於自增長列的使用。
join_buffer_size
連接查詢(mysql將所有查詢均認為是連接查詢,即使是單表查詢)時所需要的。當沒有使用到索引時(連接結果集相對較大),該參數尤其重要。。
為了查出是否需要增加join_buffer_size,可以檢查select_scan狀態選項,它包括第一張表執行完整掃描的連接數量,同樣select_full_range_join,它包含使用范圍搜索的鏈接數量。這些狀態變量的值不會隨着join_buffer_size的值變化而變化,這樣就可以利用他們來查處是否需要大的join_buffer_size,而不是衡量該值改變后的有效性。
keep_files_on_create
創建myisam表時的選項,關於是否將.MYD文件存放在數據字典中。
key_buffer_size
索引塊緩沖對所有的線程共享。myisam表的 1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
key_cache_age_threshold
這個作用於myisam參數有點像innodb的lru鏈的mid_point點。 當MyISAM的key_buffer_size被分為熱鏈和溫鏈時,key_cache_age_threshold就被用來控制什么樣的情況下處於熱鏈的數據會被轉移到溫鏈中。key_cache_age_threshold是指的block個數,如果在最近的 (key_cache_age_threshold * key_cache_division_limit/100)次訪問中,處於熱鏈頂部的block沒有被訪問到,那么這些塊將被移到溫鏈的頂部(處於溫鏈頂部的block會很快被移除出key cache)。
large_page_size
如果該參數被應用,將會顯示內存頁的大小。
last_insert_id
最后一個自增列插入的auto_increment值。
local_infile
如果禁用此項,將會導致LOAD DATA INFILE語句不可用。
lock_wait_timeout
鎖等待超時時間
locked_in_memory
log_bin
開始binlog,指定server id。
log_bin_basename
binlog的命名格式。
log_bin_index
binlog index的名字。
log_bin_trust_function_creates
關於binlog記錄的權限相關。
log_bin_use_v1_row_events
log_error
錯誤日志指定的位置及名字 。
log_output
日志的輸出格式,可選的有file,table,none.
log_queries_not_using_indexes
記錄不走索引的查詢,即使該查詢不是慢查詢。我之前實驗過一次,好像有問題。
log_slave_updates
從上的binlog是否開啟。一般用於從又生從(或者雙主情況下).
log_slow_admin_statements
不僅僅記錄dml的慢查詢,同時記錄ddl等其他sql語句的慢日志。
log_slow_slave_statements
當慢查詢打開了,該參數支持將在從上執行超過指定時間的查詢記錄下來(記錄在主上)。
log_throttle_queries_not_using_indexes
log_warnings
控制mysql 將警告信息也記錄到錯誤日志文件里
long_query_time
超過該秒數的查詢將會被記錄到滿日志中。
low_priority_updates
如果設置為1,將會優先select或者lock table read語句,INSERT, UPDATE, DELETE, and LOCK TABLE WRITE 語句將會被等待。只存在表級鎖上,也就是在innodb上不起作用。
lower_case_file_system
關於文件系統大小寫是否敏感的設置。
lower_case_table_names
關於表名是否敏感的設置。
master_info_repository
在從上對主信息的保存方式,文件形式或者表形式。
master_verify_checksum
開啟這個功能,將會導致主將會在讀binlog的時候進行檢測校驗。
max_allowed_packet
mysql允許的傳輸包的最大限制。在bulk insert以及大過程函數的時候可能需要注意該點。 防止出現因max_allowed_packet的限制導致失敗。5.6.6之前1M,之后默認4M。
max_binlog_cache_size
事務語句binlog使用內存的最大量。
max_binlog_size
如果寫一個超過該值的binlog,mysql會輪轉binlog file。
max_connect_errors
一個連接失敗次數超過該值,就會出現斷開。
max_connections
允許最大並發的連接數。如果因為max_connections而導致的連接錯誤,會導致狀態參數Connection_errors_max_connections的增加。
max_error_count
show warnings語句最多能顯示的error,warnings。
max_heap_table_size
對用戶創建memory表的最大限制。
max_insert_delayed_threads
5.6.7之后就被棄用了。
max_join_size
指定查詢結果最大返回集,超過該值就會報錯。當調試找出沒有索引的查詢時,該選項會有很大幫助。
max_length_for_sort_data
結果排序的最大長度,優化group by,order by的參數。
max_sort_length
排序的最大結果集,剩下的將會被忽略。如果要增大該值,一般也要增大sort_buffer_size
max_prepared_stmt_count
prepare語句的數量上限。
max_rely_log_size
與主上的max_binlog_size效果類似。在從上如果relay log造成file大於這個值,就是輪轉relay log file
group_concat_max_len
限制了group_concat函數可以返回的字節數。
用於myisam表
myisam_recover_options
myisam_repair_threads
myisam_sort_buffer_size
myisam_stats_method
myisam_use_mmap
net_*
new
old
old_alter_table
old_passwords
open_file_limit
optimizer_prune_level
如果該變量設置為on,優化器刪除即時搜索發現不太有效的計划;如果設置為off,優化器使用詳盡的搜索。默認值為1(on),如果懷疑優化器選擇的不是最優路徑,可以考慮改變它的值。
optimizer_search_depth
優化器搜索的最大深度。。該值越大,優化器越有可能為復雜的查詢找到最優計划。提高該值的代價就是優化器在搜索計划時的時間開銷增大。如果設置為0,服務器會自動選擇一個合理的值。默認為62(最大值)。
optimizer_switch
該變量控制各種優化器特性。合理使用該參數,需要知道優化器的工作原理並且具有豐富的經驗。
- index_merge:啟用或禁用合並優化,該優化幾個從合並掃描中獲取的行記錄。並把結果並為一條記錄。在EXPLAIN的輸出中,Merge列顯示的就是這個選項。
Value: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index _merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mr r=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization =on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on, use_index_extensions=on
optimizer_trace enabled=off,one_line=off
optimizer_trace_features
greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subse lect=on
optimizer_trace_max_mem_size optimizer_trace_offset performance_schema performance_schema_accounts_size performance_schema_digests_size performance_schema_events_stages_history_long_size performance_schema_events_stages_history_size performance_schema_events_statements_history_long_size performance_schema_events_statements_history_size performance_schema_events_waits_history_long_size performance_schema_events_waits_history_size performance_schema_hosts_size performance_schema_max_cond_classes performance_schema_max_cond_instances performance_schema_max_file_classes performance_schema_max_file_handles performance_schema_max_file_instances performance_schema_max_mutex_classes performance_schema_max_mutex_instances performance_schema_max_rwlock_classes performance_schema_max_rwlock_instances performance_schema_max_socket_classes performance_schema_max_socket_instances performance_schema_max_stage_classes performance_schema_max_statement_classes performance_schema_max_table_handles performance_schema_max_table_instances performance_schema_max_thread_classes performance_schema_max_thread_instances performance_schema_session_connect_attrs_size performance_schema_setup_actors_size performance_schema_setup_objects_size performance_schema_users_size pid_file plugin_dir port preload_buffer_size profiling profiling_history_size protocol_version proxy_user pseudo_slave_mode pseudo_thread_id query_alloc_block_size
query_cache_limit
不緩存超過這個字節的查詢結果集。
query_cache_min_res_unit
查詢緩存分配的塊的最小大小(以字節為單位)。 默認值為4096(4KB)
query_cache_size
mysql服務器存儲查詢及其結果集的緩存大小。增大該值,可以提高性能,因為查詢插入到緩存里,接下來,執行相同的查詢不需要查詢解析、優化和執行,就可以從緩存中取到結果集。但是,該變量不要設置的過大,因為當需要從緩存中刪除查詢時,即修改表數據,互斥體爭用將阻塞並行查詢,尤其是多核計算機和高並發環境下。該變量的合理值是小於100M,盡管可以接受突然宕機而設置的大一點。
最佳實踐是query_cache_size設置的偏小一些,使用flush query cache定期整理碎片,而不是增大query_cache_size的值。為了確定查詢緩存是否有效,可以查看Qcache_free_blocks、Qcache_free_memory、Qcache_hits、Qcache_inserts、
Qcache_lowmem_prunes
查看有多少次查詢緩存失效是由於內存不足導致的。
Qcache_not_cached、Qcach_queries_in_cache何Qcache_total_blocks狀態變量。
cache_type
query_cache_wlock_invalidate
如果某個數據表被其他的鏈接鎖住,是否仍然從查詢緩存中返回數據。通常不需要改變。 query_prealloc_size rand_seed1 rand_seed2 range_alloc_block_size read_buffer_size read_only read_rnd_buffer_size relay_log relay_log_basename relay_log_index relay_log_info_file relay_log_info_repository relay_log_purge relay_log_recovery relay_log_space_limit report_host report_password report_port report_user rpl_stop_slave_timeout secure_auth secure_file_priv server_id server_id_bits server_uuid skip_external_locking skip_name_resolve skip_networking skip_show_database slave_allow_batching slave_checkpoint_group slave_checkpoint_period slave_compressed_protocol slave_exec_mode slave_load_tmpdir slave_max_allowed_packet slave_net_timeout slave_parallel_workers slave_pending_jobs_size_max slave_rows_search_algorithms slave_skip_errors slave_sql_verify_checksum slave_transaction_retries slave_type_conversions slow_launch_time slow_query_log slow_query_log_file socket sort_buffer_size sql_auto_is_null sql_big_selects
sql_buffer_result
當此變量設置時,服務器會把篾條select語句的結果緩存到臨時表中。當客戶端查詢需要長時間獲取結果時這有助於提前釋放表鎖。在把結果存儲到臨時表中之后,服務器會釋放原表上的鎖,在第一個客戶端仍獲取結果時讓其他線程可訪問。
為了找出查詢是否在結果集上消耗過多時間。執行show processlist來檢查查詢在“Sending data”狀態下的時間。
sql_log_bin
sql_log_off
sql_mode
- STRICT_TRANS_TABLES:如果一個值不能插入一個事務性表,那么中止該語句。對於非事務性表,如果該問題發生在一個影響到表中單行數據的語句中或是發生在一個影響到表中多行數據的語句中的數據的第一行,那么中止該語句。
- NO_ENGINE_SUBSTITUTION:如果沒有指定的存儲引擎則報錯
- ansi_quotes:該模式告訴mysql服務器使用ANSI SQL標准中定義的引號,而不使用mysql本身默認的引號。
sql_notes sql_quote_show_create sql_safe_updates sql_select_limit sql_slave_skip_counter sql_warnings ssl_ca ssl_capath ssl_cert ssl_cipher ssl_crl ssl_crlpath ssl_key storage_engine stored_program_cache sync_binlog sync_frm sync_master_info sync_relay_log sync_relay_log_info system_time_zone
table_definition_cache
存儲在緩沖中的表定義的數量。當表數量很大時,可以增大該值。如果需要,可以調整該值,以便最近的表刷新(FLUSH TABLES)后,保持Opended_table_definitions小於或等於Open_table_definitions。
table_open_cache
緩存表的數量。狀態參數Open_tables反應了問題,保持Opened_tables小於等於Opentables的數量。
innodb_print_all_deadlocks
啟用此選項時,有關innodb用戶事務中所有死鎖的信息都記錄在mysqld錯誤日志中,否則將使用show engine innodb status查看有關僅最后一個死鎖的信息。
table_open_cache_instances
thread_cache_size
為將來使用緩存起來的線程數量。當一個客戶端斷開連接時,通常其線程也被銷毀。如果該選項設置為正值N,那么連接斷開后的N個線程將被緩存起來。對於一個應用使用成百上千鏈接的情況,還是很有用的。 thread_concurrency thread_handling
thread_stack
每個線程的棧大小。如果該值設置的過小,將會限制sql語句的復雜性,存儲過程的遞歸深度等等。。 如果出現類似'Thread stack overrun'的錯誤信息,請增大該參數。 time_format time_zone timed_mutexes timestamp
tmp_table_size
內存中,內部臨時表的最大值。服務器默認設置為max_heap_table_size和tmp_table_size二者中的最小值。如果有足夠的內存,並且Created_tmp_disk_tables狀態變量在增大,增大該值很有必要。
event_scheduler
是否打開時間調度器。默認關閉。打開后, 可通過show processlist查看到user為event_scheduler的工作線程。
log_bin_trust_function_creators
當啟用二進制日志記錄時,此變量適用。 它控制存儲的函數創建器是否可信,不創建將導致不安全事件寫入二進制日志的存儲函數。 如果設置為0(默認值),則不允許用戶創建或更改存儲的函數,除非它們具有除CREATE ROUTINE或ALTER ROUTINE特權之外的SUPER特權。 設置為0還強制限制必須使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性來聲明函數。 如果變量設置為1,MySQL不會對存儲函數創建執行這些限制。 此變量也適用於觸發器創建。
tmpdir transaction_alloc_block_size transaction_allow_batching transaction_prealloc_size tx_isolation tx_read_only unique_checks updatable_views_with_limit version version_comment version_compile_machine version_compile_os
wait_timeout
服務器關閉非交互連接之前等待活動的秒數
MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,應該斷開連接並釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。
warning_count
系統狀態變量
關於query_cache
Com_select
處理的select的次數。
Qcache_insert
將結果集insert進緩存的次數。 在緩存完成預熱后,我們總希望Qcache_inserts遠遠小於Com_select。不過由於緩存與服務器內部的復雜與多樣性。仍然很難說,這個比率多少才是一個合理的值。
Qchche_hits
Qcache_inserts
當這兩個狀態變量的比值大於3:1時 通常查詢緩存是有效的。不過這個比率最好能夠達到10:1
sql_safe_updates
打開這個系統變量,防止數據被意外更新,或者刪除。