mysql每一步花费时间_MySQL之:日志
日志:
事務日志:transaction log
中繼日志:reley log
錯誤日志:error log
通用日志:general log
慢查詢日志:slow query log
二進制日志:binary log
事務日志:transaction log
事務型存儲引擎自行管理和使用,建議和數據文件分開存放
修改配置文件:/etc/my.cnf
[mysqld]
innodb_log_file_size=1G
innodb_log_file_in_group=5
innodb_log_group_home_dir=/data/innodb_log #自定義目錄,和數據不要放在同一磁盤上
功能:
redo log
undo log
Innodb事務日志相關配置:
MariaDB [test]> show variables like '%innodb_log%';
+---------------------------+---------+
| Variable_name | Value |
+---------------------------+---------+
| innodb_log_block_size | 512 | #事務日志塊大小
| innodb_log_buffer_size | 8388608 | #事務日志寫入緩存大小
| innodb_log_file_size | 5242880 | #每個事務日志文件大小
| innodb_log_files_in_group | 2 | #事務日志組成員個數
| innodb_log_group_home_dir | ./ | #事務文件路徑
+---------------------------+---------+
5 rows in set (0.00 sec)
中繼日志:relay log
主從復制架構中,從服務器用于保存從主服務器的二進制日志中讀取到的事件
錯誤日志:
mysqld啟動和關閉過程中輸出的事件信息
mysqld運行中產生的錯誤信息
event scheduler運行一個event時產生的日志信息
在主從復制架構中的從服務器上啟動從服務器線程時產生的信息
錯誤日志相關配置:
SHOW GLOBAL VARIABLES LIKE 'log_error';
錯誤文件路徑:
log_error=/PATH/TO/LOG_ERROR_FILE
是否記錄警告信息至錯誤日志文件
log_warnings=1|0默認值1
通用日志:
記錄對數據庫的通用操作,包括錯誤的SQL語句,通常在排錯時才會啟用
文件:file,默認值
表:table
通用日志相關設置:
general_log=ON|OFF
general_log_file=HOSTNAME.log
log_output=TABLE|FILE|NONE
慢查詢日志:
記錄執行查詢時長超出指定時長的操作
開啟或關閉慢查詢
slow_query_log=ON|OFF
慢查詢的閾值,單位秒
long_query_time=N
慢查詢日志文件
slow_query_log_file=HOSTNAME-slow.log
定義哪些類型查詢時長超過long_query_time的值,則記錄日志
log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
不使用索引或使用全索引掃描的,不論是否達到慢查詢閾值的語句是否需要記錄日志;默認OFF,即不記錄
log_queries_not_using_indexes=ON
多少次查詢才記錄,mariadb特有
log_slow_rate_limit=1
記錄內容的詳細程度
log_slow_verbosity=Query_plan,explain
同slow_query_log,新版已廢棄
log_slow_queries=OFF
profileing變量:
分析查詢語句的執行過程,每一步所花費的時間,進而優化查詢語句
MariaDB [test]> SHOW VARIABLES LIKE 'profil%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| profiling | OFF |
| profiling_history_size | 15 |
+------------------------+-------+
2 rows in set (0.00 sec)
MariaDB [test]> SHOW profiles;
+----------+------------+-------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------+
| 1 | 0.00026302 | select * from students |
| 2 | 0.00017646 | SELECT * FROM students |
| 3 | 0.00039128 | SHOW VARIABLES LIKE 'profil%' |
+----------+------------+-------------------------------+
3 rows in set (0.00 sec)
MariaDB [test]> SHOW profile FOR QUERY 3;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000050 |
| Opening tables | 0.000035 |
| After opening tables | 0.000004 |
| System lock | 0.000003 |
| Table lock | 0.000003 |
| After table lock | 0.000005 |
| init | 0.000009 |
| optimizing | 0.000007 |
| statistics | 0.000014 |
| preparing | 0.000008 |
| executing | 0.000003 |
| Filling schema table | 0.000187 |
| executing | 0.000004 |
| Sending data | 0.000022 |
| end | 0.000003 |
| query end | 0.000003 |
| closing tables | 0.000001 |
| removing tmp table | 0.000003 |
| closing tables | 0.000002 |
| freeing items | 0.000003 |
| updating status | 0.000019 |
| cleaning up | 0.000003 |
+----------------------+----------+
22 rows in set (0.00 sec)
二進制日志
記錄導致數據改變或潛在導致數據改變的SQL語句
記錄已提交的日志
不依賴于存儲引擎類型
功能:通過“重放”日志文件中的事件來生成數據副本
注意:建議二進制日志和數據文件分開存放
二進制日志記錄格式:
二進制日志記錄三種格式:
基于“語句”記錄:statement,記錄語句,默認模式
基于“行”記錄:row,記錄數據,日志量較大(強烈建議生產環境中配置此格式)
混合模式:mixed,讓系統自行判定該基于哪種方式進行
格式配置
show variables like '%binlog_format%';
二進制日志文件的構成:
有兩類文件:
日志文件:mysql|mariadb-bin.文件名后綴,二進制格式
如:mysql-bin.000001
索引文件:mysql|mariadb-bin.index,文本格式
二進制日志相關的服務器變量:
sql_log_bin=ON|OFF:是否記錄二進制日志,默認ON
log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認OFF,表示不啟用二進制日志功能,上述兩項都開啟才可
binlog_format=STATEMENT|ROW|MIXED:二進制日志記錄的格式,默認STATEMENT(建議改成 ROW)
max_binlog_size=1073741824:單個二進制日志文件的最大體積,到達最大值會自動滾動,默認為1G(文件達到上限時的大小未必為指定的精確值)
sync_binlog=1|0:設定是否啟動二進制日志即時同步磁盤功能,默認0,由操作系統負責同步日志到磁盤
expire_log_days=N:二進制日志可以自動刪除的天數。默認為0,即不自動刪除
二進制日志相關配置
查看mariadb自行管理使用中的二進制日志文件列表,及大小
SHOW {BINARY|MASTER} LOGS
查看使用中的二進制日志文件
SHOW MASTER STATUS
查看二進制文件中的指定內容
SHOW BINLOG EBENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 6516 LIMIT 2,3;
二進制日志的客戶端命令工具:mysqlbinlog
格式:
mysqlbinlog [OPTIONS] log_file...
--start-position=# 指定開始位置
--stop-position=#
--start-datetime=
--stop-datetime=
時間格式:YYYY-MM-DD hh:mm:ss
--base64-output[=name]
示例:
mysqlbinlog --start-position=6787 --stop-position=7527 /var/lib/mysql/mariadb-bin.000003
mysqlbinlog --start-datetime=:2018-01-30 20:30:10" --stop-datetime="2018-01-30 20:35:22" mariadb-bin.000003;
清除指定二進制日志:
PURGE {BINARY | MASTER} LOGS {TO 'log_name' | BEFORE datetime_expr}
示例:
PURGE BINARY LOGS TO 'mariadb-bin.000003';:刪除3之前的日志
PURGE BINARY LOGS BEFORE '2017-01-23';:刪除指定日期之前的日志
PURGE BINARY LOGS BEFORE '2017-01-23 09:25:30';:刪除指定時間之前的日志
刪除所有二進制日志,index文件重新記數
RESET MASTER [TO #];:日志文件從 # 開始記數,默認從1開始,一般是 master 第一次啟動時執行,MariaDB10.1.6 開始支持 TO #
切換日志文件:
FLUSH LOGS;
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql每一步花费时间_MySQL之:日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宝马车漆有没有350微米厚的
- 下一篇: 英菲尼迪自动挡车子电瓶没电怎么换空挡?