日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql业务 日志_mysql笔记之日志篇

發布時間:2023/12/19 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql业务 日志_mysql笔记之日志篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql中日志主要分為以下幾種:錯誤日志、慢查詢日志、二進制日志和事務日志。

1. 錯誤日志

記錄mysql啟動時發生的錯誤信息,沒什么好說的,因為工作中不常用。

2. 慢查詢日志

這是mysql維護的一個日志文件,它用來自動記錄執行時間超過某個閾值的SQL語句,通過查看這個日志,我們一般可以發現運行的慢SQL,

這個閾值通過long_query_time 變量可以控制,默認是10,我們可以使用如下命令查看和修改

show variables like 'long_query_time' ;

set global long_query_time = 1;

一般來說,并發量高的業務的SQL都需要走索引,正常走索引的查詢SQL會控制在幾十ms以內,如果表數據量很小的話,幾ms就夠了,所以long_query_time設置的小一點比較好,例如200ms。

當然,mysql記錄這個日志肯定是需要耗費一定的性能的,所以它設置了一個變量slow_query_log來控制是否記錄慢查詢日志(默認是關閉的),個人感覺不會造成多大的壓力,如果你的工程沒有在業務層做sql監控的話,這個還是很有必要的。

3. binlog日志(歸檔日志)

這個大家應該聽的比較多,數據備份恢復、主從同步等之類的都是依賴這個實現的,有些還要監聽binlog做一些數據同步,例如同步到es中等等。

那么binlog到底是什么東西呢?

binlog又叫二進制日志文件,它會將mysql中所有修改數據庫數據的請求以二進制的形式記錄到日志文件中,所以像一些select就不會存儲在這里。binlog是Server層的日志,也就是所有存儲引擎(innodb、myisam等)都會有binlog日志。

一般來說,binlog日志是不會開啟的,開啟之后性能會有 1% 的下降。想要開啟這個日志的話,我們可以在my.ini中添加如下配置

log-bin = [ on | filename ] ; 【filename表示生成的日志文件名字】

例如:log-bin = mysql-bin

binlog 是以二進制形式存儲的邏輯日志,每次有需要記錄的日志,就會追加在文件的末尾,一般,binlog有兩種模式:

statement 格式:記錄的是執行的sql

row 格式:記錄的是sql影響的行的內容,記錄兩條,更新前和更新后的。

4.事務日志

事務日志是innodb獨有的日志文件:包括redo log 和 undo log。它是用來做崩潰恢復和事務回滾的。

redo Log : 是物理日志,記錄的是某個數據頁的物理修改,而不是某一行或某幾行修改成怎樣怎樣,它用來恢復提交后的物理數據頁(恢復數據頁,且只能恢復到最后一次提交的位置)。

undo Log : 是邏輯日志,根據每行記錄進行記錄,用來回滾到某個版本,它和redo log正相反,記錄某數據被修改前的值,可以用來在事務失敗時進行rollback。

重點可以說一下redo log,它的空間是固定大小的,在邏輯上是一個閉環,從頭開始寫,寫到末尾之后又從頭開始寫,所以,redo log 維護了兩個指針位置:

write point :當前可寫的位置,不斷寫不斷往后移動

check point當前要擦除的位置,擦了之后往后移動。

從這里我們就可以看出redo log 有兩個特性:順序寫和批量提交。

說了這么多,我們可以來用一個簡單的例子來大致看一下這些日志記錄的 順序與區別:(假設binlog 是statement模式的)。

例如我們要執行:

update tableA set a = 1 where id = 1000000

語句經過優化器生成執行計劃,然后發現Id是主鍵索引,可以選擇Id索引。

執行器拿到這個sql后,調用存儲引擎接口,去索引樹上找id = 1 的數據,如果正好在內存中有,則直接返回數據;如果沒有,則去磁盤中把對應的數據頁讀到內存中返回(可能不止一次IO操作);

執行器拿到數據之后,將 a 賦值為1,然后再調用引擎接口寫入這個修改后數據。

引擎收到更新請求,生成一個全局唯一的事務ID(XID),然后將這個記錄更新到緩存,然后記錄redo log (包含XID)和 undo log, 此時redo log 狀態變為 prepare 狀態,并返回成功給執行器。

執行器收到成功之后,記錄這個操作的binlog 日志(其中包含XID)

執行器調用引擎的commit接口,將redo log 改成commit狀態,結束。

待續......

總結

以上是生活随笔為你收集整理的mysql业务 日志_mysql笔记之日志篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。