MySQL快取問題調整

2021-08-20 13:18:06 字數 2564 閱讀 3495

優化mysql配置檔案名稱my.ini

table_cache=1024

物理記憶體越大,設定就越大.預設為2402,調到512-1024最佳。由於每個客戶端連線都會至少訪問乙個表,因此此引數的值與max_connections有關。當某一連線訪問乙個表時,mysql會檢查當前已快取表的數量。如果該錶已經在快取中開啟,則會直接訪問快取中的表已加快查詢速度;如果該錶未被快取,則會將當前的表新增進快取並進行查詢。在執行快取操作之前,table_cache用於限制快取表的最大數目:如果當前已經快取的表未達到table_cache,則會將新錶新增進來;若已經達到此值,mysql將根據快取表的最後查詢時間、查詢率等規則釋放之前的快取。

innodb_additional_mem_pool_size=4m

預設為2m

innodb_thread_concurrency=8

你的伺服器cpu有幾個就設定為幾,建議用預設一般為8

key_buffer_size=256m

預設為218,調到128最佳/用於快取myisam表的索引塊。決定資料庫索引處理的速度(尤其是索引讀),批定用於索引的緩衝區大小,增加它可以得到更好的索引處理效能,對於內存在4gb左右的伺服器來說,該引數可設定為256mb或384mb。

tmp_table_size=64m

預設為16m,調到64-256最佳

read_buffer_size=4m

預設為64k讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該引數對應的分配記憶體也是每連線獨享。 對錶進行順序掃瞄的請求將分配乙個讀入緩衝區,mysql會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃瞄請求非常頻繁,並且你認為頻繁掃瞄進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能。和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享。

read_rnd_buffer_size=16m

預設為256k, mysql的隨機讀(查詢操作)緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配乙個隨機讀快取區。進行排序查詢時,mysql會首先掃瞄一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但mysql會為每個客戶連線發放該緩衝空間,所以應盡量適當設定該值,以避免記憶體開銷過大。

sort_buffer_size=32m

預設為256ksort_buffer_size 並不是越大越好,由於是connection級的引數,過大的設定+高併發可能會耗盡系統記憶體資源。例如:500個連線將會消耗 500*sort_buffer_size(8m)=4g記憶體,sort_buffer_size 超過2kb的時候,就會使用mmap() 而不是 malloc() 來進行記憶體分配,導致效率降低。

join_buffer_size = 8m

聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該引數對應的分配記憶體也是每連線獨享。

innodb_buffer_pool_size=105m

innodb使用緩衝池來快取索引和行資料。該值設定的越大,則磁碟io越少。一般將該值設為物理記憶體的80%。這對innodb表來說非常重要。innodb相比myisam表對緩衝更為敏感。myisam可以在預設的 key_buffer_size 設定下執行的可以,然而innodb在預設的 innodb_buffer_pool_size 設定下卻跟蝸牛似的。由於innodb把資料和索引都快取起來,無需留給作業系統太多的記憶體,因此如果只需要用innodb的話則可以設定它高達 70-80% 的可用記憶體。一些應用於 key_buffer 的規則有 — 如果你的資料量不大,並且不會暴增,那麼無需把 innodb_buffer_pool_size 設定的太大了

myisam_max_sort_file_size=100g

mysql重建索引時允許使用的臨時檔案最大大小,myisam表發生變化時重新排序所需的緩衝

query_cache_size=64m

查詢快取大小,用於快取select查詢結果。如果有許多返回相同查詢結果的select查詢,並且很少改變表,可以設定query_cache_size大於0,可以極大改善查詢效率。而如果表資料頻繁變化,就不要使用這個,會適得其反.對於使用mysql的使用者,對於這個變數大家一定不會陌生。前幾年的myisam引擎優化中,這個引數也是乙個重要的優化引數。但隨著發展,這個引數也爆露出來一些問題。機器的記憶體越來越大,人們也都習慣性的把以前有用的引數分配的值越來越大。這個引數加大後也引發了一系列問題。我們首先分析一下 query_cache_size的工作原理:乙個select查詢在db中工作後,db會把該語句快取下來,當同樣的乙個sql再次來到db裡呼叫時,db在該錶沒發生變化的情況下把結果從快取中返回給client。這裡有乙個關建點,就是db在利用query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該錶在發生變更時,query_cache裡的資料又怎麼處理呢?首先要把query_cache和該錶相關的語句全部置為失效,然後在寫入更新。那麼如果query_cache非常大,該錶的查詢結構又比較多,查詢語句失效也慢,乙個更新或是insert就會很慢,這樣看到的就是update或是insert怎麼這麼慢了。所以在資料庫寫入量或是更新量也比較大的系統,該引數不適合分配過大。而且在高併發,寫入量大的系統,建議把該功能禁掉。

mysql,連線快取問題 flush hosts

程式過多的誤鏈結,導致mysql host is blocked because of many connection errors unblock with mysqladmin flush hosts 參考url 引數名稱max connection errors有誤 思路分析 1,錯誤連線引數...

mysql 引數調整

mysql 預設連線數 最大連線數100 最大錯誤連線數10 檢視最大連線數 show variables like connections 或者 show status like thread 修改最大連線數 方式1 臨時修改,重啟就失效 最大連線數 set global max connecti...

快取 快取問題

指的是對某個一定不存在的資料進行請求,該請求將會穿透快取到達資料庫。解決方案 指的是由於資料沒有載入到快取中,或者快取資料在同一時間出現大面積的失效 過期 又或者是快取伺服器崩潰,導致大量的請求都到達資料庫。在有快取的系統中,系統非常的依賴快取,快取分擔了很大一部分的資料請求,當發生快取雪崩時,資料...