国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)

這篇具有很好參考價值的文章主要介紹了讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)文章來源地址http://www.zghlxwxcb.cn/news/detail-650169.html

1.?事務(wù)日志

1.1.?事務(wù)日志有助于提高事務(wù)的效率

1.1.1.?存儲引擎只需要更改內(nèi)存中的數(shù)據(jù)副本,而不用每次修改磁盤中的表,這會非常快

1.1.2.?更改的記錄寫入事務(wù)日志中,事務(wù)日志會被持久化保存在硬盤上

1.2.?事務(wù)日志采用的是追加寫操作,是在硬盤中一小塊區(qū)域內(nèi)的順序I/O,而不是需要寫多個地方的隨機I/O,所以寫入事務(wù)日志是一種相對較快的操作

1.3.?大多數(shù)使用這種技術(shù)(write-ahead logging,預(yù)寫式日志)的存儲引擎修改數(shù)據(jù)最終需要寫入磁盤兩次

1.4.?如果修改操作已經(jīng)寫入事務(wù)日志,那么即使系統(tǒng)在數(shù)據(jù)本身寫入硬盤之前發(fā)生崩潰,存儲引擎仍可在重新啟動時恢復(fù)更改

2.?MySQL中的事務(wù)

2.1.?自動提交模式

2.1.1.?AUTOCOMMIT

2.1.2.?通過禁用此模式,可以在事務(wù)中執(zhí)行一系列語句,并在結(jié)束時執(zhí)行COMMIT提交事務(wù)或ROLLBACK回滾事務(wù)

2.2.?可以使用SET命令設(shè)置AUTOCOMMIT變量來啟用或禁用自動提交模式

2.2.1.?啟用可以設(shè)置為1或者ON

2.2.2.?禁用可以設(shè)置為0或者OFF

2.3.?AUTOCOMMIT=0,則當前連接總是會處于某個事務(wù)中,直到發(fā)出COMMIT或者ROLLBACK,然后MySQL會立即啟動一個新的事務(wù)

2.4.?除了在禁用AUTOCOMMIT的事務(wù)中可以使用之外,其他任何時候都不要顯式地執(zhí)行LOCK TABLES,不管使用的是什么存儲引擎

2.5.?執(zhí)行SET TRANSACTION ISOLATION LEVEL命令來設(shè)置隔離級別

2.5.1.?新的隔離級別會在下一個事務(wù)開始的時候生效

2.5.2.?最好在服務(wù)器級別設(shè)置最常用的隔離,并且只在顯式情況下修改

2.6.?MySQL不在服務(wù)器層管理事務(wù),事務(wù)是由下層的存儲引擎實現(xiàn)的

2.6.1.?在同一個事務(wù)中,混合使用多種存儲引擎是不可靠的

2.6.2.?為每張表選擇合適的存儲引擎,并不惜一切代價避免在應(yīng)用中混合使用存儲引擎是非常重要的

2.6.3.?在非事務(wù)表中執(zhí)行事務(wù)相關(guān)操作的時候,MySQL通常不會發(fā)出提醒,也不會報錯

2.6.4.?最好不要在應(yīng)用程序中混合使用存儲引擎

2.6.4.1.?失敗的事務(wù)可能導(dǎo)致不一致的結(jié)果,因為某些部分可以回滾,而其他部分不能回滾

2.7.?InnoDB使用兩階段鎖定協(xié)議

2.7.1.?two-phase locking protocol

2.7.2.?在事務(wù)執(zhí)行期間,隨時都可以獲取鎖

2.7.3.?但鎖只有在提交或回滾后才會釋放,并且所有的鎖會同時釋放

2.8.?InnoDB還支持通過特定的語句進行顯式鎖定

2.8.1.?不屬于SQL規(guī)范

2.9.?支持LOCK TABLES和UNLOCK TABLES命令,這些命令在服務(wù)器級別而不在存儲引擎中實現(xiàn)

2.10.?應(yīng)該使用支持事務(wù)的存儲引擎

2.10.1.?InnoDB支持行級鎖,所以沒必要使用LOCKTABLES

3.?多版本并發(fā)控制

3.1.?MVCC

3.2.?行級鎖的一個變種

3.2.1.?在很多情況下避免了加鎖操作,因此開銷更低

3.2.2.?不僅實現(xiàn)了非阻塞的讀操作,寫操作也只鎖定必要的行

3.3.?Undo日志寫入是服務(wù)器崩潰恢復(fù)過程的一部分,并且是事務(wù)性的

3.3.1.?所有Undo日志寫入也都會寫入Redo日志

3.3.2.?Redo日志和Undo日志的大小也是高并發(fā)事務(wù)工作機制中的重要影響因素

3.4.?僅適用于REPEATABLE READ和READ COMMITTED隔離級別

3.5.?READ UNCOMMITTED與MVCC不兼容

3.5.1.?查詢不會讀取適合其事務(wù)版本的行版本,而是不管怎樣都讀最新版本

3.6.?SERIALIZABLE與MVCC也不兼容

3.6.1.?讀取會鎖定它們返回的每一行

4.?復(fù)制

4.1.?一種原生方式來將一個節(jié)點執(zhí)行的寫操作分發(fā)到其他節(jié)點

4.2.?對于在生產(chǎn)環(huán)境中運行的任何數(shù)據(jù),都應(yīng)該使用復(fù)制并至少有三個以上的副本

4.3.?理想情況下應(yīng)該分布在不同的地區(qū)(在云托管環(huán)境中,稱為region)用于災(zāi)難恢復(fù)計劃

5.?數(shù)據(jù)文件結(jié)構(gòu)

5.1.?在8.0版本中

5.1.1.?將表的元數(shù)據(jù)重新設(shè)計為一種數(shù)據(jù)字典

5.1.1.1.?在表的.ibd文件中

5.1.1.2.?減少了I/O,非常高效

5.1.2.?刪除了基于文件的表元數(shù)據(jù)存儲

5.2.?引入了字典對象緩存

5.2.1.?基于最近最少使用(LRU)的內(nèi)存緩存

5.2.1.1.?分區(qū)定義

5.2.1.2.?表定義

5.2.1.3.?存儲程序定義

5.2.1.4.?字符集

5.2.1.5.?排序信息

5.2.2.?當前訪問最活躍的那些表,在緩存中最常出現(xiàn)

5.2.2.1.?每個表的.ibd和.frm文件被替換為已經(jīng)被序列化的字典信息(.sdi)

5.3.?原子DDL

5.3.1.?MySQL 8.0引入了原子數(shù)據(jù)定義更改

5.3.2.?數(shù)據(jù)定義語句現(xiàn)在要么全部成功完成,要么全部失敗回滾

6.?InnoDB引擎

6.1.?MySQL主要的改進核心在于InnoDB的演進

6.1.1.?表元數(shù)據(jù)、用戶認證、身份鑒權(quán)這些內(nèi)部統(tǒng)計信息的管理也已經(jīng)調(diào)整為使用InnoDB表來實現(xiàn)

6.2.?MySQL的默認事務(wù)型存儲引擎

6.2.1.?現(xiàn)在已經(jīng)成為金標準,是推薦使用的引擎

6.2.2.?最重要、使用最廣泛的引擎

6.2.3.?為處理大量短期事務(wù)而設(shè)計的,這些事務(wù)通常是正常提交的,很少會被回滾

6.2.4.?幾乎能覆蓋每一種使用場景

6.3.?最佳實踐是使用InnoDB存儲引擎作為所有應(yīng)用程序的默認引擎

6.4.?將數(shù)據(jù)存儲在一系列的數(shù)據(jù)文件中,這些文件統(tǒng)被稱為表空間(tablespace)

6.4.1.?表空間本質(zhì)上是一個由InnoDB自己管理的黑盒

6.5.?使用MVCC來實現(xiàn)高并發(fā)性,并實現(xiàn)了所有4個SQL標準隔離級別

6.5.1.?默認為REPEATABLE READ隔離級別

6.5.2.?通過間隙鎖(next-key locking)策略來防止在這個隔離級別上的幻讀

6.5.2.1.?不只鎖定在查詢中涉及的行,還會對索引結(jié)構(gòu)中的間隙進行鎖定,以防止幻行被插入

6.6.?InnoDB表是基于聚簇索引構(gòu)建的

6.6.1.?聚簇索引提供了非??焖俚闹麈I查找

6.7.?通過一些機制和工具支持真正的在線“熱”備份

6.7.1.?Oracle專有的MySQL Enterprise Backup

6.7.2.?開源的Percona XtraBackup

6.8.?引入了SQL函數(shù)來支持在JSON文檔上的豐富操作

到了這里,關(guān)于讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《高性能MySQL》——查詢性能優(yōu)化(筆記)

    《高性能MySQL》——查詢性能優(yōu)化(筆記)

    將查詢看作一個任務(wù),那么它由一系列子任務(wù)組成,實際我們所做的就是: 消除一些子任務(wù) 減少子任務(wù)的執(zhí)行次數(shù) 讓子任務(wù)運行更快 查詢的生命周期大概可分為 = { 客戶端 服務(wù)器 : 進行解析 , 生成執(zhí)行計劃 執(zhí)行:包括到存儲引擎的調(diào)用,以及用后的數(shù)據(jù)處理 { 排序 分組

    2024年02月13日
    瀏覽(95)
  • 讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    2.4.2.1.?按照索引列中的數(shù)據(jù)大小順序存儲的 2.4.3.1.?鍵前綴查找只適用于根據(jù)最左前綴的查找 2.4.4.1.?在查詢某些條件的數(shù)據(jù)時,存儲引擎不再需要進行全表掃描 2.4.4.2.?通過比較節(jié)點頁的值和要查找的值可以找到合適的指針進入下層子節(jié)點,這些指針實際上定義了子節(jié)點頁中

    2024年02月08日
    瀏覽(98)
  • 讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    1.4.4.1.?InnoDB的二級索引在葉子節(jié)點中保存了記錄的主鍵值,所以如果二級索引能夠覆蓋查詢,則可以避免對主鍵索引的二次查詢 7.1.5.1.?常見的類似錯誤通常是由于嘗試使用rsync備份InnoDB導(dǎo)致的 7.3.3.1.?否則,對于范圍查詢、索引覆蓋掃描等操作來說,速度可能會降低很多 7

    2024年02月08日
    瀏覽(103)
  • 讀高性能MySQL(第4版)筆記11_查詢性能優(yōu)化(中)
  • 讀高性能MySQL(第4版)筆記12_查詢性能優(yōu)化(下)

    讀高性能MySQL(第4版)筆記12_查詢性能優(yōu)化(下)

    2.3.1.1.?讀取行指針和需要排序的字段,對其進行排序,然后再根據(jù)排序結(jié)果讀取所需要的數(shù)據(jù)行 2.3.1.2.?即需要從數(shù)據(jù)表中讀取兩次數(shù)據(jù),第二次讀取數(shù)據(jù)的時候,因為是讀取排序列進行排序后的所有記錄,這會產(chǎn)生大量的隨機I/O,所以兩次傳輸排序的成本非常高 2.3.2.1.?先

    2024年02月08日
    瀏覽(22)
  • 讀高性能MySQL(第4版)筆記10_查詢性能優(yōu)化(上)

    讀高性能MySQL(第4版)筆記10_查詢性能優(yōu)化(上)

    4.11.1.1.?在存儲引擎層完成的 4.11.2.1.?直接從索引中過濾不需要的記錄并返回命中的結(jié) 4.11.2.2.?在MySQL服務(wù)器層完成的,但無須再回表查詢記錄 4.11.3.1.?在MySQL服務(wù)器層完成 4.11.3.2.?需要先從數(shù)據(jù)表中讀出記錄然后過濾 4.13.2.1.?使用單獨的匯總表 5.5.1.1.?定期清除大量數(shù)據(jù)時,

    2024年02月08日
    瀏覽(33)
  • 讀高性能MySQL(第4版)筆記18_擴展MySQL

    讀高性能MySQL(第4版)筆記18_擴展MySQL

    4.2.2.1.?增加更多應(yīng)用節(jié)點可以擴展服務(wù)用戶請求的客戶端數(shù) 4.2.2.2.?最終會被單源數(shù)據(jù)庫主機的能力所限制,該數(shù)據(jù)庫主機將要負責響應(yīng)所有的讀取請求 4.2.2.3.?高CPU使用率意味著服務(wù)器正花費所有的時間處理查詢 4.2.2.4.?CPU的使用率越高,查詢的延遲也會越長 6.9.1.1.?負載均

    2024年02月08日
    瀏覽(22)
  • 讀高性能MySQL(第4版)筆記03_監(jiān)控

    讀高性能MySQL(第4版)筆記03_監(jiān)控

    7.1.1.1.?200響應(yīng)代碼 7.1.2.1.?202已接受 10.3.2.1.?連接的線程數(shù)(threads_connected)很高,但運行的線程數(shù)(threads_running)仍然很低 10.3.3.1.?連接的線程數(shù)(threads_connected)和運行的線程數(shù)(threads_running)都處于高值并持續(xù)增加 10.5.1.1.?數(shù)據(jù)庫工程師不斷努力的目標之一

    2024年02月12日
    瀏覽(30)
  • 讀高性能MySQL(第4版)筆記17_復(fù)制(下)

    讀高性能MySQL(第4版)筆記17_復(fù)制(下)

    1.3.1.1.?安全補丁 1.3.1.2.?內(nèi)核更新 1.3.1.3.?一些配置選項更改后需要重新啟動才能生效 1.3.2.1.?確定將哪個副本切換為新的源 1.3.2.1.1.?一個包含所有數(shù)據(jù)的副本 1.3.2.2.?檢查延時,確保延時在秒級別 1.3.2.3.?通過設(shè)置super_read_only停止數(shù)據(jù)寫入源服務(wù)器 1.3.2.4.?等待副本與目標完

    2024年02月08日
    瀏覽(29)
  • 讀高性能MySQL(第4版)筆記16_復(fù)制(上)

    讀高性能MySQL(第4版)筆記16_復(fù)制(上)

    4.1.1.1.?通過記錄所有在源端執(zhí)行的數(shù)據(jù)變更語句來實現(xiàn)的 4.1.1.2.?簡單且緊湊 4.1.1.3.?一條更新了大量數(shù)據(jù)的SQL語句,在二進制日志中可能僅僅需要幾十字節(jié)存儲 4.1.1.4.?“不確定性”的SQL語句問題 4.1.1.4.1.?如果在源和副本上,記錄的排序不同,這條SQL語句在源和副本上刪除

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包