《MySQL技術內幕一》InnoDB 體系架構

《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

官方參考參數地址:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#replication-optvars-binlog

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:autoextend

show variables like ‘innodb_file_per_table’; --默認啓動 每表獨立表空間文件

InnoDB的重做日誌文件

說的很重要的樣子,在data目錄下面默認的兩個文件:ib_logfile0,ib_logfile1;
但是通常只要用默認的配置就可以了,是爲了引擎提供可靠服務存在的。


到這裏爲止,都是MYSQL本身的架構與配置,都是系統級別的優化。看看就好 ┐(´∇`)┌

這個筆記先到這裏:2019-06-25

ε=(´ο`*)))唉 快學不動了。。。。

(接下來還是要繼續更新的 (ง •_•)ง)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章