效能優化系列八 MYSQL的配置優化

2022-03-26 14:19:22 字數 4379 閱讀 8132

mysql配置檔案

/etc/my.cnf 或者 /etc/my.cnf.d/server.cnf

幾個關鍵的檔案:

.pid檔案,記錄了程序id

.sock檔案,是內部通訊使用的socket介面,比3306快

.log檔案,日誌檔案

.cnf或.conf檔案,配置檔案

安裝目錄:basedir

資料目錄:datadir

基本配置,指定資料目錄,my.cnf或者server.cnf

[mysqld]

user = mysql

port = 3306

socket = /data/3306/mysql.sock,#這裡指定了乙個特別的連線

basedir = /usr/local/mysql

datadir = /data/3306/data

[client]

port = 3306

socket = /data/3306/mysql.sock,在客戶端也要宣告它,命令列要用到

query_cache_size

query_cache裡的資料又怎麼處理呢?首先要把query_cache和該錶相關的語句全部置為失效,然後在寫入更新。那麼如果query_cache非常大,該錶的查詢結構又比較多,查詢語句失效也慢,乙個更新或是insert就會很慢,這樣看到的就是update或是insert怎麼這麼慢了。所以在資料庫寫入量或是更新量也比較大的系統,該引數不適合分配過大。而且在高併發,寫入量大的系統,建議把該功能禁掉。

query_cache_limit

指定單個查詢能夠使用的緩衝區大小,預設為1m

query_cache_min_res_unit

預設是4kb,設定值大對大資料查詢有好處,但如果你的查詢都是小資料查詢,就容易造成記憶體碎片和浪費

說明:禁掉查詢快取的方法就是直接注釋掉查詢快取的配置,如#query_cache_size=1m, 這樣就可以了

sort_buffer_size = 2m

connection級引數。太大將導致在連線數增高時,記憶體不足。

max_allowed_packet = 32m

網路傳輸中一次訊息傳輸量的最大值。系統預設值 為1mb,最大值是1gb,必須設定1024的倍數。

join_buffer_size = 2m

和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享

tmp_table_size = 256m

預設大小是 32m。group by 多不多的問題

max_heap_table_size = 256m

key_buffer_size = 2048m

索引的緩衝區大小,對於內存在4gb左右的伺服器來說,該引數可設定為256mb或384mb。

read_buffer_size = 1m

read_rnd_buffer_size = 16m

進行排序查詢時,mysql會首先掃瞄一遍該緩衝,以避免磁碟搜尋

bulk_insert_buffer_size = 64m

批量插入資料快取大小,可以有效提高插入效率,預設為8m

innodb_buffer_pool_size = 2048m

只需要用innodb的話則可以設定它高達 70-80% 的可用記憶體。一些應用於 key_buffer 的規則有 ——如果你的資料量不大,並且不會暴增,那麼無需把innodb_buffer_pool_size 設定的太大了。

innodb_additional_mem_pool_size = 16m

網路傳輸中一次訊息傳輸量的最大值。系統預設值為1mb,最大值是1gb,必須設定1024的倍數。

innodb_log_files_in_group = 3

迴圈方式將日誌檔案寫到多個檔案。推薦設定為3

innodb_lock_wait_timeout = 120

innodb 有其內建的死鎖檢測機制,能導致未完成的事務回滾。innodb_file_per_table = 0 獨享表空間,關閉

open_files_limit = 10240

允許開啟的檔案數

back_log = 600

短時間內的多少個請求可以被存在堆疊中

max_connections = 3000

mysql預設的最大連線數為100,mysql伺服器允許的最大連線數16384

max_connect_errors = 6000

設定每個主機的連線請求異常中斷的最大次數,當超過該次數,mysql伺服器將禁止host的連線請求

thread_cache_size = 300

重新利用儲存在快取中線程的數量

thread_concurrency = 8

thread_concurrency應設為總cpu核數的2倍

thread_stack = 192k

每個執行緒的堆疊大小,預設值足夠大,可滿足普通操作。可設定範圍為128k至4gb,預設為192kb。

執行緒池很少配

thread_handling

表示執行緒池模型。

thread_pool_size

表示執行緒池的group個數,一般設定為當前cpu核心數目。理想情況下,乙個group乙個活躍的工作執行緒,達到充分利用cpu的目的。

thread_pool_stall_limit

用於timer執行緒定期檢查group是否「停滯」,引數表示檢測的間隔。

thread_pool_idle_timeout

當乙個worker空閒一段時間後會自動退出,保證執行緒池中的工作執行緒在滿足請求的情況下,保持比較低的水平。60秒

thread_pool_oversubscribe

該引數用於控制cpu核心上「超頻」的執行緒數。這個引數設定值不含listen執行緒計數。

threadpool_high_prio_mode

表示優先佇列的模式。

thread_pool_max_threads

限制執行緒池最大的執行緒數,超過將無法再建立更多的執行緒,預設為100000。

thread_pool_high_prio_tickets

最多語序多少次被放入高優先順序佇列中,預設為4294967295。只有在thread_pool_high_prio_mode為transactions的時候才有效果

說明:

執行緒處理的最小單位是statement(語句)

執行緒池實現在server端,通過建立一定數量的執行緒服務db請求,相對於one-conection-per-thread的乙個執行緒服務乙個連線的方式,執行緒池服務的最小單位是語句,即乙個執行緒可以對應多個活躍的連線。

slow_query_log

是否開啟慢查詢日誌,1表示開啟,0表示關閉。

log-slow-queries

舊版(5.6以下版本)mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案host_name-slow.log

slow-query-log-file

新版(5.6及以上版本)mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案host_name-slow.log

long_query_time

慢查詢閾值,當查詢時間多於設定的閾值時,記錄日誌。

log_queries_not_using_indexes

未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。

log_output

日誌儲存方式。log_output='file'表示將日誌存入檔案,預設值是'file'。log_output='table'表示將日誌存入資料庫,這樣日誌資訊就會被寫入到mysql.slow_log表中。mysql資料庫支援同時兩種日誌儲存方式,配置的時候以逗號隔開即可,如:log_output='file,table'。日誌記錄到系統的專用日誌表中,要比記錄到檔案耗費更多的系統資源,因此對於需要啟用慢查詢日誌,又需要能夠獲得更高的系統效能,那麼建議優先記錄到檔案。

安裝:yum install innotop

啟動:innotop -u root -p 『123』

幫助:?

說明:innotop是乙個實時工具,只能檢視當前的情況,不能記錄歷史情況

檢視幫助的時候輸入乙個 ?

幫助裡面的abcd.....u就是可以檢視對應的指標的情況,如查詢列表輸入q、查詢緩衝區輸入b、命令統計輸入c

說明:lepus是一款開源的資料庫監控工具,能監控各種資料庫,能監控多台資料庫,能檢視歷史情況

效能優化系列八 MYSQL的配置優化

mysql配置檔案 etc my.cnf 或者 etc my.cnf.d server.cnf 幾個關鍵的檔案 pid檔案,記錄了程序id sock檔案,是內部通訊使用的socket介面,比3306快 log檔案,日誌檔案 cnf或.conf檔案,配置檔案 安裝目錄 basedir 資料目錄 dat...

ORACLE SQL效能優化系列 八

16.通過內部函式提高sql效率.select h.empno,e.ename,h.hist type,t.type desc,count from history type t,emp e,emp history h where h.empno e.empno and h.hist type t....

ORACLE SQL效能優化系列 八

25.用索引提高效率 索引是表的乙個概念部分,用來提高檢索資料的效率.實際上,oracle使用了乙個複雜的自平衡b tree結構.通常,通過索引查詢資料比全表掃瞄要快.當oracle找出執行查詢和update語句的最佳路徑時,oracle優化器將使用索引.同樣在聯結多個表時使用索引也可以提高效率.另...