《MySQL技術內幕-InnoDB存儲引擎》學習筆記一 InnoDB 體系架構
2019-04-24 開始學習 ε=(´ο`*)))唉
查看MySQL配置文件
mysql --help | grep my.cof
多個配置,權重按讀取到的最後一個配置文件爲準
查看數據庫存儲路徑
SHOW VARIABLE LIKE 'datadir';
第2章 InnoDB 體系架構
查看InnoDB中的線程信息
查看版本:show variables like 'innodb_version'
查看線程配置:show variables like 'innodb_%io_threads'
這裏對應了兩個相關的配置;innodb_read_io_threads 和 innodb_write_io_threads ,可以再做優化的時候進行
查看狀態:show engine innodb status
查看Purge Thread :show variables like 'innodb_purge_threads'
作爲事務提交後的回收udo頁的線程,參數:innodb_purge_threads 可配置線程 4;
內存相關的東東
查看緩衝池:
show variables like 'innodb_buffer_pool_size' --單位B
SELECT @@innodb_buffer_pool_size/1024/1024/1024;--單位G
這個調整的東西比較多:
來源博客:https://www.cnblogs.com/wanbin/p/9530833.html
官方文檔:https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html
innodb_buffer_pool_size
默認大小爲128M。當緩衝池大小大於1G時,將innodb_buffer_pool_instances
設置大於1的值可以提高服務器的可擴展性。
大的緩衝池可以減小多次磁盤I/O訪問相同的表數據。在專用數據庫服務器上,可以將緩衝池大小設置爲服務器物理內存的80%。在調整緩衝池的時候的規則:增大或減小緩衝池大小時,將以chunk的形式執行操作。chunk大小由
innodb_buffer_pool_chunk_size
配置選項定義,默認值爲128 MB。
配置大小必須是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
的倍數。(如果不是,緩存池大小會被系統默認重置)PS:
innodb_buffer_pool_instances:緩衝池實例個數
innodb_buffer_pool_chunk_size :緩衝池實例最小塊內存單位,默認值爲128 MB。
innodb_buffer_pool_read_requests :它表示從內存中邏輯讀取的請求數。
innodb_buffer_pool_reads :表示InnoDB緩衝池無法滿足的請求數。需要從磁盤中讀取。配置依據:
InnoDB buffer pool 命中率 = innodb_buffer_pool_read_requests / (innodb_buffer_pool_read_requests + innodb_buffer_pool_reads ) * 100
數據獲取:使用show status like 'innodb_buffer_pool_read%';
此值低於99%,則可以考慮增加innodb_buffer_pool_size。查看數據頁(data_page)使用信息:
show global status like '%innodb_buffer_pool_pages%';
最後,備註一下如果加大了很多InnoDB緩衝池的情況下,也要考慮加大一下額外內存池。
查看髒頁刷新值:
show variables like 'innodb_io_capacity' --200
:當IO性能很好的時候可以增加
查看髒頁刷新閥值:
show variables like 'innodb_max_dirty_pages_pct' --75%髒頁時刷新
自適應刷新配置相關:
show variables like 'innodb_adaptive%'
關鍵特性
- 插入緩存(Insert Buffer)
- 兩次寫(Doube Weite)
- 自適應哈希索引
- 異步IO
- 刷新鄰接頁
第3章 文件
慢查詢日誌
查看慢查詢是否開啓等:show variables like 'slow_query_log%'
[默認關閉]
查看慢查詢時間設置:show variables like 'long_query_time' 單位秒
其他的一些配置說明:
slow_query_log=off|on --是否開啓慢查詢日誌
slow_query_log_file=filename --指定保存路徑及文件名,默認爲數據文件目錄,hostname-slow.log
long_query_time=2 --指定多少秒返回查詢的結果爲慢查詢
log_throttle_queries_not_using_indexes – 每分鐘允許記錄到日誌且沒有使用索引的sql語句數量
分析日誌:
mysqlsla: 書中用的是這個,來分析的
percona-toolkit中的pt-query-digest : 不知道是啥
設置日誌輸出格式:
默認是FILE,文件;
修改log_output = ‘TABLE’ ,則可以記錄日誌到表 mysql.slow_log 中;【動態且全局的,可以隨時配置】
二進制日誌 - binary log
默認也是沒有開啓的 ╮(╯_╰)╭
查看開啓狀態:show variables like 'log_bin%'
開啓【參數爲動態的】:SET sql_log_bin=ON/OFF
使用mysqlbinlog 工具來查看;
開啓binary-log 功能配置:
log-bin=mysql-bin
binlog-format=ROW
server-id = 1
expire-logs-days = 14
max-binlog-size = 500M
binlog_formar參數的東西
在使用binlog進行主從同步的時候,如果運行的語句是有rand、uuid等隨機函數的情況下,會出現數據不一致的情況。【下面ROW和MIXED參數可以解決這個問題的,推薦MIXED-會在這種問題的時候自動變爲ROW】
所以這裏有三個參數:
STATEMENT:–記錄的是邏輯SQL,會存在上面這種隨機函數的問題。
ROW:–記錄的是表的行更改情況。Innodb事務隔離設置爲COMMITTED會有更好的併發性。
MIXED:–這個模式默認是STATEMENT,在一些特定情況下會自動變成ROW ╮(╯_╰)╭ 建議使用這個
InnoDB的表空間文件
InnoDB默認有一個10MB的ibdata1文件【.ibd-這個是默認表空間】,這裏有兩個參數對它進行配置:
show variables like ‘innodb_data_file_path’;
innodb_data_file_path=ibdata1:200M:autoextend --這裏可以配置多個目錄以及文件大小和自增
e.g.:innodb_data_file_path=/db/ibdata1:200M;/db/ibdata2:200M:autoextendshow variables like ‘innodb_file_per_table’; --默認啓動 每表獨立表空間文件
InnoDB的重做日誌文件
說的很重要的樣子,在data目錄下面默認的兩個文件:ib_logfile0,ib_logfile1;
但是通常只要用默認的配置就可以了,是爲了引擎提供可靠服務存在的。
到這裏爲止,都是MYSQL本身的架構與配置,都是系統級別的優化。看看就好 ┐(´∇`)┌
這個筆記先到這裏:2019-06-25
ε=(´ο`*)))唉 快學不動了。。。。
(接下來還是要繼續更新的 (ง •_•)ง)