MySQL 日誌的意義

2021-09-10 07:08:30 字數 1754 閱讀 2345

日誌是在邏輯事務對資料庫做dml操作時,其所包含的物理事務mtr所記錄的,針對所以涉及的buffer pool頁面的修改記錄

假如沒有寫日誌

假如沒有寫日誌,那資料庫在做了任何修改之後,必須要直接將buffer page刷磁碟,不然如果此時資料庫掛了,即使事務已經提交,這些修改還是沒辦法恢復。這將帶來的災難是,io大量增加。此時的資料庫,相當於是乙個簡單的檔案系統,無論寫什麼資料,都必須馬上刷入磁碟,buffer pool的作用可能只是乙個用來修改檔案頁面的臨時快取而已。

假如沒有寫日誌,在資料庫做了dml操作之後,資料庫可能在事務沒有提交時就將buffer page刷到磁碟了,但此時需要回滾。而我們知道,回滾段的內容也是通過buffer pool管理的,它的每個頁和b樹頁面也是一樣的,只是作用不一樣而已。由此可知,回滾段資料也是通過redo日誌來保證完整性的。那麼如果沒有了日誌,buffer page中的回滾段頁面也需要直接寫入,沒有了任何快取,效能就會非常低。

假如沒有寫日誌,資料在關閉後再啟動時,就不需要做redo操作了,但需要做undo操作,因為undo不是通過redo來恢復的,而是自己寫入,所以回滾段是有效的,還可以讓沒有提交的事務回滾掉,勉強還可以保證資料庫的完整性。

綜合上面的假設,現在已經明白,日誌的作用就是用來保證buffer pool頁面的資料寫入不丟失。反過來說,如果每個buffer pool中的page每次都刷入到磁碟中,這樣就不需要redo日誌了,此時的資料庫就成了乙個檔案系統,因為buffer pool每次都進行刷盤,相當於每次寫完直接寫檔案。所以說,日誌是資料庫管理系統與檔案系統最核心的區別。

所以如果沒有日誌,資料庫的效能就低到完全沒有辦法用了。因為io太大了,同時,這種io操作都是隨機寫入,很容易導致io到達瓶頸,所以為了提高資料庫效能,就必須要使用redo日誌操作。

使用日誌能提高效能的關鍵原因:

因為日誌是用來記錄buffer pool中page的修改記錄的,所以把對page的寫入轉化為對日誌的寫入,那此時page就需要每次都刷盤,寫page頁面只需要在記憶體中寫入即可,效能會非常好

通常,乙個頁面是16kb,如果不寫日誌的話,每次的寫入單位還是16kb,即使修改很少量的資料,也是如此。這樣會導致無效io非常嚴重,反過來說,也只有通過日誌機制,才能真正體現出真實寫入的資料量,不會存在對io的浪費,page的刷盤數量會大大減少

如果沒有寫日誌,就會每次都刷page,而這些page的相對位置是亂的,並不是順序的,刷盤大多都是隨機io,這對於機械硬碟來說,效能是非常差的,而有了日誌,就可以巧妙地將隨機io轉化成日誌的順序io,這將大大地提高iops,效能也會非常好

日誌檔案大小的區別

使用日誌對資料庫的效能有很大的影響,那對於日誌來說,還有什麼其他因素會影響資料庫的效能呢?那就是日誌檔案空間容量。

日誌在設定好後其容量是固定的,它是迴圈使用的,如果不夠用了,引發的事件是做乙個檢查點,讓最小有效的lsn向前推,讓出一部分空間給新產生的日誌來使用。也就是說,只要這個日誌空間未用完,那麼buffer pool中的page就會一直不刷盤,任何修改都是在記憶體中發生的。

假如當前日誌容量設定為128mb,某乙個dml操作只針對某一行記錄一直做修改操作。每次操作產生日誌量為1kb,這樣算下來,128mb的日誌量可以容納對這條記錄的131072(128mb/1kb)次修改。也就是說,在這麼多次修改之後,這個頁面才需要刷盤,才會產生一次隨機刷盤操作。而如果把日誌檔案設定為128mb,很容易知道,這將容納對這條記錄的131072次修改,這麼多次修改只產生一次隨機刷盤操作。而如果還是128mb的話,則需要10次隨機刷盤。很明顯,日誌容量對資料庫的效能還是有很大影響的。

但也不是設定得越大越好,這裡有以下兩點需要注意。

MySQL索引的意義

幾乎所有的索引都建立在字段上 索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案 檔案能夠實現快速的匹配資料,並且能夠快速的找到對應表中的記錄 1.提公升查詢資料的效率 2.約束資料的有效性 唯一性等 增加索引的前提條件 索引本身會產生索引檔案 有時候有可能比資料檔案還大 ...

mysql 表 日誌 檢視mysql的日誌

mysql日誌的種類,一般來說,日誌有五種,分別為 錯誤日誌 log err 記錄啟動,執行,停止mysql時出現的資訊 二進位制日誌 log bin 記錄所有更改資料的語句,還用於複製,恢復資料庫用 查詢日誌 log 記錄建立的客戶端連線和執行的語句 慢查詢日誌 log slow queries ...

mysql的日誌問卷 檢視MySQL的日誌

1.檢視mysql日誌是否啟用,on表示開啟 mysql show variables like log bin 2.檢視mysql日誌的名字 mysql show master status 3.檢視mysql的data目錄 4.切換到mysql的安裝目錄下 cd usr local tools ...