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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql log_来吧,了解下mysql有哪些log

發布時間:2023/12/2 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql log_来吧,了解下mysql有哪些log 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

mysql里面有很多log,比如用于主從同步的bin_log,防止數據丟失的redo_log,慢查詢日志slow_log等等

redo log

InnoDB有buffer pool(簡稱bp)。

bp是數據庫頁面的緩存,對InnoDB的任何修改操作都會首先在bp的page上進行,然后這樣的頁面將被標記為dirty并被放到專門的flush list上,后續將由master thread或專門的刷臟線程階段性的將這些頁面寫入磁盤(disk or ssd)。這樣的好處是避免每次寫操作都操作磁盤導致大量的隨機IO,階段性的刷臟可以將多次對頁面的修改merge成一次IO操作,同時異步寫入也降低了訪問的時延。然而,如果在dirty page還未刷入磁盤時,server非正常關閉,這些修改操作將會丟失,如果寫入操作正在進行,甚至會由于損壞數據文件導致數據庫不可用。為了避免上述問題的發生,Innodb將所有對頁面的修改操作寫入一個專門的文件,并在數據庫啟動時從此文件進行恢復操作,這個文件就是redo log file。 這樣的技術推遲了bp頁面的刷新,從而提升了數據庫的吞吐,有效的降低了訪問時延。 帶來的問題是額外的寫redo log操作的開銷(順序IO,當然很快),以及數據庫啟動時恢復操作所需的時間。

Undo Log

Undo

Log是為了實現事務的原子性,在MySQL數據庫InnoDB存儲引擎中,還用UndoLog來實現多版本并發控制(簡稱:MVCC)。

事務的原子性(Atomicity)

事務中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在執行的過程中發了錯誤,要回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過。

bin-log

binlog有三種格式:Statement、Row以及Mixed。

Statement

基于SQL語句的復制(statement-based replication,SBR),

每一條會修改數據的sql語句會記錄到binlog中。優點是并不需要記錄每一條sql語句和每一行的數據變化,減少了binlog日志量,節約IO,提高性能。缺點是在某些情況下會導致master-slave中的數據不一致(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)

Row

基于行的復制(row-based replication,RBR),默認

不記錄每條sql語句的上下文信息,僅需記錄哪條數據被修改了,修改成什么樣了。而且不會出現某些特定情況下的存儲過程、或function、或trigger的調用和觸發無法被正確復制的問題。缺點是會產生大量的日志,尤其是alter table的時候會讓日志暴漲。

Mixed

混合模式復制(mixed-based replication,MBR)。

以上兩種模式的混合使用,一般的復制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復制的操作使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日志保存方式。

查看binlog_format

show variables like 'binlog_format'

relay_log:

Mysql 主節點將binlog寫入本地,從節點定時請求增量binlog,主節點將binlog同步到從節點。 從節點單獨進程會將binlog

拷貝至本地 relaylog中。

從節點定時重放relay log。

slow-log

慢查詢就是通過設置來記錄超過一定時間的SQL語句,一般通過slowlog找到影響系統性能的sql

開啟slow-log

在my.conf 中增加

slow_query_log = 1 // 開啟slow-log long_query_time = 1 //

查詢時間超過1s的sql會被記錄

分析slow-log

在slow-log目錄下執行

more slow-query.log

Query_time: 查詢耗時

Rows_examined: 檢查了多少條記錄

Rows_sent : 返回了多少行記錄(結果集)

通過分析slow-log文件,可以找到最慢的sql

按Rows_examined 逆序,列出前100條

grep Rows_examined slow-query.log | sort -g -k9 -r|uniq -u |head -100

指定Rows_examined一值,查找

grep -A 1 -B 2 "Rows_examined: 24460" slow-query.log

看到每秒的慢查詢統計

awk '/^#Time:/{print $3,$4,c;c=0}/^# User /{c++}' slow-query.log >/tmp/aaa.log

mysqldumpslow命令

訪問時間最長的10個sql語句

mysqldumpslow -t 10 /usr/local/mysql/log/3304/slowquery.log

訪問次數最多的10個sql語句

mysqldumpslow -s c -t 10 /usr/local/mysql/log/3304/slowquery.log

訪問記錄集最多的10個sql

mysqldumpslow -s r -t 10 /usr/local/mysql/log/3304/slowquery.log

得到按照時間排序的前10條里面含有左連接的查詢語句

mysqldumpslow -s t -t 10 -g “left join” /usr/local/mysql/log/3304/slowquery.log

詳見mysqldumpslow -h

general_log

general_log可以記錄所有執行過的sql,用于排查分析sql性能,但記錄log會增加系統負擔,可以暫時開啟,分析完之后再關閉general_log

開啟general_log

查看general_log

總結

以上是生活随笔為你收集整理的mysql log_来吧,了解下mysql有哪些log的全部內容,希望文章能夠幫你解決所遇到的問題。

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