MySQL如何避免使用swap

2021-09-20 23:54:45 字數 843 閱讀 3760

linux有很多很好的記憶體、io排程機制,但是並不會適用於所有場景。

對於dba來說linux比較讓人頭疼的乙個地方是,它不會因為mysql很重要就避免將分配給mysql的位址空間對映到swap上。對於頻繁進行讀寫操作的系統而言,資料看似在記憶體而實際上在磁碟是非常糟糕的,響應時間的增長很可能直接拖垮整個系統。這篇blog主要講講我們作為dba,怎樣盡量避免mysql慘遭swap的毒手。 首先我們要了解點基礎的東西,比如說為什麼會產生swap。假設我們的物理記憶體是16g,swap是4g。如果mysql本身已經占用了12g物理記憶體,而同時其他程式或者系統模組又需要6g記憶體,這時候作業系統就可能把mysql所擁有的一部分位址空間對映到swap上去。 cp乙個大檔案,或用mysqldump匯出乙個很大的資料庫的時候,檔案系統往往會向linux申請大量的記憶體作為cache,一不小心就會導致l使用swap。

這個情景比較常見,以下是最簡單的三個調整方法:

2、修改mysql的配置引數innodb_flush_method,開啟o_direct模式。 這種情況下,innodb的buffer pool會直接繞過檔案系統cache來訪問磁碟,但是redo log依舊會使用檔案系統cache。值得注意的是,redo log是覆寫模式的,即使使用了檔案系統的cache,也不會占用太多。

3、新增mysql的配置引數memlock 這個引數會強迫mysqld程序的位址空間一直被鎖定在物理記憶體上,對於os來說是非常霸道的乙個要求。必須要用root帳號來啟動mysql才能生效。 還有乙個比較複雜的方法,指定mysql使用大頁記憶體(large page)。linux上的大頁記憶體是不會被換出物理記憶體的,和memlock有異曲同工之妙。具體的配置方法可以參考: ... pages-on-linux.html

如何避免mysql死鎖

1.經常提交你的事務,小事務更少的傾向於衝突 2.以固定的順序訪問你的表和行,這樣事務就會形成良好的查詢並且沒有思索 3.講精心選定的索引新增到你的表中,這樣你的查詢就只需要掃瞄更少的索引記錄,並且因此可以設定更好的鎖定 4.不要把無關緊要的操作放到事務裡面 5.盡量按照主鍵索引去查詢記錄,範圍查詢...

Mysql如何避免死鎖

這裡為各位讀者介紹一些在innodb引擎使用過程中減少死鎖的建議。正確使用讀操作語句 經過之前文章介紹,我們知道一般的快照讀是不會給資料表任何鎖的。那麼這些快照讀操作也就不涉及到參與任何鎖等待的情況。那麼對於類似insert select這樣需要做當前讀操作的語句 但又不是必須進行當前讀的操作 筆者...

避免mysql回表 mysql如何避免回表查詢

select id,name where name shenjian select id,name,where name shenjian 多查詢了乙個屬性,為何檢索過程完全不同?什麼是回表查詢?什麼是索引覆蓋?如何實現索引覆蓋?哪些場景,可以利用索引覆蓋來優化sql?這些,這是今天要分享的內容。畫...