日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL宏观架构与原理

發(fā)布時(shí)間:2024/9/20 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL宏观架构与原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我唯一知道的就是我一無(wú)所知——蘇格拉底

1、Linux安裝MySQL

1.1、安裝參考資料

?

MySQL的刪除:https://blog.csdn.net/weixin_34462581/article/details/113010258

MySQL的安裝:參考官網(wǎng)https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

MySQL的資源:https://dev.mysql.com/downloads/file/?id=484922

MySQL密碼忘記(異常失效):https://www.jb51.net/article/127281.htm

1.2、注意事項(xiàng)

  • 檢查端口3306是否被占用
  • 如果已經(jīng)安裝過(guò)MySQL,并且需要重新安裝,需要前之前安裝的完全卸載。包含mysql相關(guān)的文件夾、文件,尤其注意其配置文件/etc/my.cnf必須要?jiǎng)h掉
  • 按照官網(wǎng)安裝即可

netstat -tunlp | grep 3306?

  • 安裝完成之后,記得把用戶角色的遠(yuǎn)程訪問(wèn)權(quán)限改一下(localhost->%)

?

1.3、常見(jiàn)問(wèn)題記錄

1.3.1、密碼意外丟失

?

2、MySQL執(zhí)行流程與架構(gòu)

2.1、本節(jié)問(wèn)題:

  • 描述一條查詢語(yǔ)句的執(zhí)行流程,什么模塊做了什么事情
  • 記錄redo log和bin log,為什么要要用XA兩階段提交?如果redo log直接寫入成功,bin log寫入失敗,會(huì)出現(xiàn)什么問(wèn)題?

?

2.2、MySQL基礎(chǔ)

2.2.1、MySQL服務(wù)的基本概念

我們的數(shù)據(jù)是存儲(chǔ)在服務(wù)端,我們使用的工具(eg: navicat)是客戶端。如果要讀取數(shù)據(jù),首先要建立客戶端與服務(wù)端的連接, 服務(wù)端運(yùn)行3306的端口,客戶端會(huì)連接到3306。其次兩端必須要規(guī)范協(xié)議,消息報(bào)文格式等。

2.2.1.1、連接方式 :

  • 長(zhǎng)連接(連接一直保持打開(kāi),也就是說(shuō)可以被其他會(huì)話、客戶端復(fù)用。這樣可以減少創(chuàng)建和釋放連接的消耗,但會(huì)消耗服務(wù)端的性能),一般這是種通用方式。
  • 短連接(客戶端操作完后,連接馬上close)

?

查看連接數(shù):

? ?SHOW GLOBAL STATUS LIKE 'Thread%';

客戶端跟服務(wù)端建立一個(gè)連接,對(duì)服務(wù)端來(lái)講就是創(chuàng)建一個(gè)線程來(lái)處理連接。所以查Thread就是查連接數(shù)。這個(gè)命令可以差大已經(jīng)緩存的連接數(shù)、已經(jīng)建立的連接數(shù)、已創(chuàng)建的連接數(shù)、運(yùn)行中的連接數(shù)

2.2.1.2、如何在客戶端查詢相關(guān)配置

  • 舉例:長(zhǎng)連接過(guò)多久不活動(dòng)會(huì)被釋放掉?
-- 連接的超時(shí)時(shí)間 SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; -- 非交互式超時(shí)時(shí)間(沒(méi)有界面的),如JDBC程序 SHOW GLOBAL VARIABLES LIKE 'interactive_timeout'; -- 交互式超時(shí)時(shí)間,如數(shù)據(jù)庫(kù)工具(單位秒,一共8個(gè)小時(shí),如果需要加快回收速度,可以調(diào)小這個(gè)值) -- 允許的最大連接數(shù)(并發(fā)線程數(shù)) SHOW GLOBAL VARIABLES LIKE 'max_connections';

效果:

  • 問(wèn)題:這些變量在哪找?

https://dev.mysql.com/ ?官網(wǎng)下文檔里系統(tǒng)預(yù)設(shè)變量可查到。

?

?

2.2.1.3、如何更改相關(guān)配置

系統(tǒng)中的變量有兩個(gè)級(jí)別session、global:

    • session是會(huì)話級(jí)別,作用域只在當(dāng)前會(huì)話,如果會(huì)話的生命周期結(jié)束,那么當(dāng)前session中的配置也會(huì)失效。舉例:SHOW VARIABLES LIKE 'max_connections' 默認(rèn)的是當(dāng)前會(huì)話的級(jí)別。
    • global是全局級(jí)別

?

修改有兩種方式 :

    • 動(dòng)態(tài)修改
    • 配置文件永久修改 /etc/my.cnf

?

此處以動(dòng)態(tài)配置舉例:

  • 第一步: SHOW VARIABLES LIKE 'autocommit'; 看到是ON

  • 第二步: SET autocommit = off; 在當(dāng)前會(huì)話將ON改為OFF
  • 第三步:SHOW VARIABLES LIKE 'autocommit'; 在當(dāng)前會(huì)話再查一次,看到是OFF。

  • 第四步:SHOW VARIABLES LIKE 'autocommit'; 新開(kāi)一個(gè)會(huì)話再查一次,看到還是ON。因?yàn)檫@里的修改是session級(jí)別,修改只作用于當(dāng)前會(huì)話,所以再打開(kāi)一個(gè)頁(yè)面查詢還是ON。

  • 第五步:總結(jié),當(dāng)前到操作是session級(jí)別,只在當(dāng)前會(huì)話生效。如果要在所有的會(huì)話都生效,要在語(yǔ)句中加上global

`SHOW GLOBAL VARIABLES LIKE 'autocommit';`

?

2.2.2、補(bǔ)充說(shuō)明

  • 通信協(xié)議

TCP/IP ? Unix Socket

MySQL的通訊協(xié)議文件:/var/lib/mysql.socket

?

  • MySQL用的是半雙工

由于是半雙工的模式,客戶端和服務(wù)器的數(shù)據(jù)接收和發(fā)送不能同時(shí)進(jìn)行,必須要等待一個(gè)操作全部執(zhí)行完畢之后才可以下一個(gè)操作。因此,一條sql做大量數(shù)據(jù)的查詢,會(huì)帶來(lái)網(wǎng)絡(luò)和服務(wù)的消耗,所以單條sql盡量小粒度的查詢,比如帶上查詢條件(limit,或者業(yè)務(wù)層代碼寫一個(gè)循環(huán)進(jìn)行分批的查詢)。

?

?

2.3、MySQL服務(wù)層的主要模塊

2.3.1、查詢緩存

MySQL8之前,mysql服務(wù)提供數(shù)據(jù)的緩存(改配置默認(rèn)是關(guān)閉的),目的是將查詢到的結(jié)果以key-value的形式緩存起來(lái),如果下一次遇到同樣的查詢,便可以省去從磁盤獲取數(shù)據(jù)導(dǎo)致的開(kāi)銷,以提升吞吐量。

MySQL8已經(jīng)取消了查詢緩存:

一種說(shuō)法是不建議使用查詢緩存,因?yàn)椴樵兙彺嫱状笥诶>彺娴募?jí)別是針對(duì)于表的,而不是針對(duì)于語(yǔ)句的,如果表中有任意一行數(shù)據(jù)變化,都會(huì)把整個(gè)表的緩存清空。所以不建議在數(shù)據(jù)庫(kù)的服務(wù)端開(kāi)啟緩存。這樣,查詢緩存的失效會(huì)非常頻繁,只要有對(duì)一個(gè)表的更新,這個(gè)表上的所有的查詢緩存都會(huì)被清空。因此很可能你費(fèi)勁地把結(jié)果存起來(lái),還沒(méi)使用呢,就被一個(gè)更新全清空了。對(duì)于更新壓力大的數(shù)據(jù)庫(kù)來(lái)說(shuō),查詢緩存的命中率會(huì)非常低。除非你的業(yè)務(wù)有一張靜態(tài)表,很長(zhǎng)時(shí)間更新一次,比如系統(tǒng)配置表,那么這張表的查詢才適合做查詢緩存。

有觀點(diǎn)認(rèn)為,大多數(shù)應(yīng)用都把緩存做到了應(yīng)用邏輯層,簡(jiǎn)單的如一個(gè)map的mybatis,復(fù)雜的可以用redis或者memcache,直接操作內(nèi)存遠(yuǎn)遠(yuǎn)比走網(wǎng)絡(luò)訪問(wèn)快,所以mysql直接拋棄了查詢緩存。

?

2.3.2、解析環(huán)節(jié)

2.3.2.1、解析器

解析器分為:

    • 詞法解析,把sql語(yǔ)句打碎成一個(gè)一個(gè)的單詞,包含關(guān)鍵字、變量、符號(hào)
    • 語(yǔ)法解析,分析語(yǔ)法是否符合規(guī)則,比如左邊有括號(hào),右邊一定要有對(duì)稱的括號(hào)。

(注:詞法和語(yǔ)法解析是非常基礎(chǔ)且常見(jiàn)的功能,比如jvm、json等有會(huì)有用到。世面上也已經(jīng)有比較好的開(kāi)源的工具)

?

2.3.2.1、預(yù)處理器(得到解析樹(shù))

試想一下:

select * from 不存在的表; 由于表不存在會(huì)報(bào)錯(cuò),又或者 select b.* from user a; 由于別名不存在報(bào)錯(cuò)。

那么是在解析時(shí)報(bào)錯(cuò),還是執(zhí)行的時(shí)候報(bào)錯(cuò)呢?

上一節(jié)我們知道解析器解析的是詞法和語(yǔ)法,如果要解析校驗(yàn)數(shù)據(jù)庫(kù)里有哪些表,表里有哪些字段,就要把表的信息存儲(chǔ)起來(lái)。那么預(yù)處理器就是干這個(gè)的。

?

預(yù)處理器的作用:

    • 權(quán)限
      • 操作的權(quán)限,不允許的ip的訪問(wèn)
      • 用戶的權(quán)限,只讀的權(quán)限不能寫
    • 語(yǔ)義的解析
      • 表名、字段名、別名錯(cuò)誤的識(shí)別

?

2.3.3、優(yōu)化器

對(duì)語(yǔ)句進(jìn)行優(yōu)化,優(yōu)化查詢效率

2.3.3.1、概念

解析樹(shù)的本質(zhì):一種可以被執(zhí)行器執(zhí)行的數(shù)據(jù)結(jié)構(gòu)。

那么在解析環(huán)節(jié)生成的解析樹(shù)是否可以直接交給執(zhí)行器執(zhí)行了呢?或者說(shuō)客戶端發(fā)送的一條SQL語(yǔ)句是不是一定是服務(wù)端執(zhí)行的SQL語(yǔ)句呢?

事實(shí)上,一條SQL語(yǔ)句是有多種執(zhí)行方式(路徑)的。MySQL服務(wù)層有一個(gè)基于成本(cost)的模型算法進(jìn)行計(jì)算,找到代價(jià)最小的路徑,執(zhí)行器最終執(zhí)行的路徑便是進(jìn)過(guò)優(yōu)化器篩選后的路徑。

?

2.3.3.2、查看執(zhí)行成本: SHOW STATUS LIKE 'last_query_cost';

?

2.3.3.3、優(yōu)化器可以做什么事情

舉例:

    • 當(dāng)a join b,在數(shù)據(jù)庫(kù)的底層沒(méi)有辦法同時(shí)讀取幾張表,一定是先訪問(wèn)一張表拿到一些數(shù)據(jù),再基于這些數(shù)據(jù)訪問(wèn)另一張表達(dá)到過(guò)濾數(shù)據(jù)的目的。所以關(guān)聯(lián)查詢時(shí),必然要決定先查詢哪張表,這張表就是基準(zhǔn)表。基準(zhǔn)表的決定需要優(yōu)化器判斷。
    • 條件查詢where a = ? and b < ? and c > ?,每一個(gè)字段都有索引的時(shí)候,既有單列的索引,又有復(fù)合索引,它需要決定要不要使用索引,使用哪幾個(gè)索引。
    • 當(dāng)出現(xiàn)1 = 1恒等式,或者((()))多余的括號(hào),優(yōu)化器可以自動(dòng)去掉。

?

但優(yōu)化器的優(yōu)化作用是有限的,不能全部依賴優(yōu)化器。

經(jīng)過(guò)優(yōu)化器的選擇,最終會(huì)生成一條執(zhí)行計(jì)劃。

?

2.3.4、執(zhí)行計(jì)劃(優(yōu)化器的執(zhí)行結(jié)果,或者叫數(shù)據(jù)結(jié)構(gòu))

執(zhí)行計(jì)劃的工具,查看執(zhí)行路徑

EXPLAIN SELECT * FROM people;

EXPLAIN FORMAT = JSON SELECT * FROM people;

OPTIMIZE trace; -- 執(zhí)行計(jì)劃的開(kāi)關(guān),信息量非常的大

?

舉例:sql語(yǔ)句最終選定的執(zhí)行計(jì)劃

{"query_block": {"select_id": 1,"cost_info": {"query_cost": "0.65" -- 總開(kāi)銷},"table": {"table_name": "people", -- 查哪張表"access_type": "ALL", -- 查詢的范圍"rows_examined_per_scan": 4, -- 預(yù)估要查多少行"rows_produced_per_join": 4, -- 實(shí)際查詢多少行"filtered": "100.00","cost_info": { -- 開(kāi)銷明細(xì)"read_cost": "0.25","eval_cost": "0.40","prefix_cost": "0.65","data_read_per_join": "448"},"used_columns": ["id","name"]}} }

2.3.5、執(zhí)行器

執(zhí)行器按照查詢計(jì)劃調(diào)用存儲(chǔ)引擎,執(zhí)行查詢

?

2.3.6、存儲(chǔ)引擎

2.3.6.1、概念

我們表面上看到的是數(shù)據(jù)放在了一個(gè)二維表結(jié)構(gòu)里(類比excel),但我們用用navicat等工具查詢對(duì)象信息時(shí)看到存儲(chǔ)的表類型是InnoDB,表類型就是存儲(chǔ)引擎。并且存儲(chǔ)引擎的使用單位是表,而不是以數(shù)據(jù)庫(kù)為單位,這意味著表的存儲(chǔ)引擎還可以更改。

2.3.6.2、sql查數(shù)據(jù)庫(kù)中所有的表都使用了什么存儲(chǔ)引擎,SHOW TABLE STATUS FROM hc_goods;

(注:沒(méi)有指定存儲(chǔ)引擎的表都會(huì)默認(rèn)使用InnoDB。)

2.3.6.3、表類型是存儲(chǔ)引擎,存儲(chǔ)引擎是一種存儲(chǔ)方式,那么在服務(wù)器上是怎么體現(xiàn)的呢?

查看數(shù)據(jù)庫(kù)在服務(wù)器上位置: SHOW VARIABLES LIKE 'datadir';

來(lái)到服務(wù)器,可以看到表在服務(wù)上是一個(gè)文件,且存儲(chǔ)引擎,其文件類型(后綴)不同,此處僅體現(xiàn)了InnoDB的idb文件

?

2.3.6.4、數(shù)據(jù)庫(kù)支持哪些存儲(chǔ)引擎, SHOW ENGINES;

2.3.7、總結(jié)

MySQL分為服務(wù)層和存儲(chǔ)引擎層。客戶端以各種方式建立連接,在服務(wù)層又分為解析環(huán)節(jié)、優(yōu)化器、緩存,在存儲(chǔ)引擎層有各種可用的存儲(chǔ)引擎,最終數(shù)據(jù)在硬件的文件系統(tǒng)。

?

2.4、存儲(chǔ)引擎

InnoDB最初是第三方公司針對(duì)MySQL開(kāi)發(fā)的,其自身的存儲(chǔ)引擎是ISAM。

2.4.1、官方網(wǎng)站列舉的存儲(chǔ)引擎

?

2.4.2、MySQL 8.0支持的存儲(chǔ)引擎

  • InnoDB:MySQL 8.0中的默認(rèn)存儲(chǔ)引擎。 InnoDB是用于MySQL的事務(wù)安全(兼容ACID)的存儲(chǔ)引擎,具有提交,回滾和崩潰恢復(fù)功能來(lái)保護(hù)用戶數(shù)據(jù)。 InnoDB行級(jí)鎖(行鎖是更小粒度的鎖,無(wú)需升級(jí)為更粗粒度的鎖)和Oracle風(fēng)格一致支持讀寫的并發(fā)的操作,可提高并發(fā)性和性能。InnoDB將用戶數(shù)據(jù)存儲(chǔ)在聚集索引中,以減少基于主鍵查詢的I / O。為了保持?jǐn)?shù)據(jù)完整性, InnoDB還支持FOREIGN KEY完整性約束。有關(guān)更多信息InnoDB,請(qǐng)參見(jiàn) 第15章,InnoDB存儲(chǔ)引擎。
  • MyISAM:這些表占用的空間很小。 表級(jí)鎖定 限制了讀/寫運(yùn)行負(fù)載中的性能,因此表鎖通常用于Web和數(shù)據(jù)倉(cāng)庫(kù)配置中的只讀或主要工作負(fù)載中。
  • Memory:將所有數(shù)據(jù)存儲(chǔ)在RAM中,以便在需要快速查找非關(guān)鍵數(shù)據(jù)的環(huán)境中進(jìn)行快速訪問(wèn)。該引擎以前稱為HEAP引擎。它的使用場(chǎng)景正在減少;InnoDB使用其緩沖池內(nèi)存區(qū)域,提供了一種通用且持久的方式來(lái)將大多數(shù)或所有數(shù)據(jù)保留在內(nèi)存中,并 NDBCLUSTER為大型分布式數(shù)據(jù)集提供了快速的鍵值查找。
  • CSV:其表實(shí)際上是帶有逗號(hào)分隔值的文本文件。CSV表使您可以導(dǎo)入或轉(zhuǎn)儲(chǔ)CSV格式的數(shù)據(jù),以便與讀取和寫入相同格式的腳本和應(yīng)用程序交換數(shù)據(jù)。由于CSV表未建立索引,因此通常InnoDB在正常操作期間將數(shù)據(jù)保留在表中,并且僅在導(dǎo)入或?qū)С鲭A段使用CSV表。
  • Archive:存檔的,沒(méi)有索引的表旨在用于存儲(chǔ)和檢索大量很少使用的歷史數(shù)據(jù),歸檔或安全審核信息。
  • Blackhole:Blackhole存儲(chǔ)引擎可以接受但不存儲(chǔ)數(shù)據(jù),類似于Unix/dev/null設(shè)備。查詢總是返回一個(gè)空集。這些表可用于將DML語(yǔ)句發(fā)送到副本服務(wù)器的復(fù)制配置中,但源服務(wù)器不保留其自己的數(shù)據(jù)副本。
  • NDB(也稱為 NDBCLUSTER):此集群數(shù)據(jù)庫(kù)引擎特別適合于需要盡可能高的正常運(yùn)行時(shí)間和可用性的應(yīng)用程序。
  • Merge:使MySQL DBA或開(kāi)發(fā)人員能夠在邏輯上對(duì)一系列相同的MyISAM表進(jìn)行分組并將它們作為一個(gè)對(duì)象引用。適用于VLDB環(huán)境,例如數(shù)據(jù)倉(cāng)庫(kù)。
  • Federated:提供了鏈接單獨(dú)的MySQL服務(wù)器以從許多物理服務(wù)器創(chuàng)建一個(gè)邏輯數(shù)據(jù)庫(kù)的能力。非常適合于分布式或數(shù)據(jù)集市環(huán)境。
  • Example:此引擎作為MySQL源代碼中的示例,說(shuō)明了如何開(kāi)始編寫新的存儲(chǔ)引擎。它主要是開(kāi)發(fā)人員感興趣的。存儲(chǔ)引擎是什么都不做的 “存根”。您可以使用此引擎創(chuàng)建表,但是不能在其中存儲(chǔ)數(shù)據(jù)或從中檢索數(shù)據(jù)。

?

2.4.3、為什么要設(shè)計(jì)這么多存儲(chǔ)引擎?

如上節(jié)所述,因?yàn)橛胁煌臉I(yè)務(wù)場(chǎng)景,對(duì)數(shù)據(jù)的管理和需求是不一樣的。所以誕生了各種各樣的存儲(chǔ)引擎。

如果上述存儲(chǔ)引擎沒(méi)有一個(gè)能滿足需求,怎么辦?MySQL提供自定義存儲(chǔ)引擎的接口。可以自定義一套存儲(chǔ)引擎。

?

2.5、一條查詢語(yǔ)句是如何執(zhí)行的?

2.5.1、執(zhí)行過(guò)程

服務(wù)層:

1、client的查詢請(qǐng)求來(lái)查詢緩存,如果緩存有,則直接返回。

2、解析器進(jìn)行詞法、語(yǔ)法解析。

3、預(yù)處理器判定權(quán)限、表、字段、別名是否有錯(cuò)。

4、優(yōu)化器,選擇開(kāi)銷最小的路徑

5、執(zhí)行計(jì)劃,選擇后的執(zhí)行路徑

6、執(zhí)行器執(zhí)行執(zhí)行計(jì)劃調(diào)用存儲(chǔ)引擎,做查詢

存儲(chǔ)引擎層:

1、引擎讀取磁盤的數(shù)據(jù)文件,將數(shù)據(jù)交給執(zhí)行器。執(zhí)行器把數(shù)據(jù)寫入緩存,并且返回給客戶端(如果有緩存放到緩存,如果沒(méi)有緩存直接返回給客戶端)。 ? ?

2.6、一條更新語(yǔ)句是如何執(zhí)行?

Mybatis源碼的執(zhí)行器Executor只有doQuery和doUpdate。MySQL也是一樣的,update就包含了增刪改。與查詢不同的是,當(dāng)從存儲(chǔ)引擎拿到數(shù)據(jù)之后,將數(shù)據(jù)加載到內(nèi)存(因?yàn)閿?shù)據(jù)在磁盤里,只有將數(shù)據(jù)加載到內(nèi)存中才能修改操作)

?

問(wèn)題:

是不是需要操作多大的數(shù)據(jù),就要一次性從磁盤加載多少數(shù)據(jù)到內(nèi)存?比如需要操作5kb的數(shù)據(jù),就一定要加載5kb的數(shù)據(jù)到內(nèi)存?

我們知道磁盤的IO讀寫相對(duì)內(nèi)存是非常慢,在加上這些數(shù)據(jù)可能在磁盤上分布在不同的位置,意味著很多次尋址、很多次IO操作,這將非常的耗時(shí)。

?

2.6.1、page

預(yù)讀取(為解決上述問(wèn)題),當(dāng)訪問(wèn)到磁盤的一塊位置,就認(rèn)為周圍的數(shù)據(jù)也會(huì)被讀取,所以會(huì)讀取一個(gè)固定大小的范圍(意味著,可能要比想讀取的數(shù)據(jù)大一些),單位page(頁(yè),邏輯單位),在InnoDB默認(rèn)是16kb(注意區(qū)別,與操作系統(tǒng)中從磁盤加載到內(nèi)存的大小4kb是兩碼事),如果想修改,只能修改源碼,重新編譯部署。

?

每一次對(duì)于頁(yè)的操作也需要從磁盤上加載到內(nèi)存中,會(huì)不會(huì)也有IO很慢的問(wèn)題,那么能不能緩存起來(lái)呢,下一次就不用從磁盤中讀了?當(dāng)然可以,InnoDB里有內(nèi)存的緩存池(buffer pool),從磁盤加載數(shù)據(jù)到內(nèi)存中時(shí),會(huì)將數(shù)據(jù)記錄在buffer pool中,下次再讀時(shí)可以直接從buffer pool拿到數(shù)據(jù),提升數(shù)據(jù)的讀寫效率。如果需要修改(先讀再寫)的數(shù)據(jù)以及在內(nèi)存的buffer pool中存在了,會(huì)先修改內(nèi)存中的數(shù)據(jù)page。如果內(nèi)存中的page與磁盤的page不一樣,則內(nèi)存中的page叫dirty page(臟頁(yè),產(chǎn)生本質(zhì)是刷臟時(shí)間差和事務(wù)沒(méi)有提交)。一旦后臺(tái)線程開(kāi)始空閑,就將臟頁(yè)數(shù)據(jù)刷到磁盤文件中,又叫刷臟。

?

2.6.2、redo log

因?yàn)樗⑴K不是實(shí)時(shí)的,如果buffer pool的內(nèi)容還沒(méi)有刷到磁盤,這個(gè)時(shí)候數(shù)據(jù)庫(kù)重啟了或者宕機(jī)了,那么怎么保證緩沖池中數(shù)據(jù)頁(yè)的安全性?沒(méi)有好的辦法,必須要考慮持久化,InnoDB內(nèi)存數(shù)據(jù)頁(yè)持久化的機(jī)制是redo log(重做log),當(dāng)數(shù)據(jù)加載到內(nèi)存中時(shí),也會(huì)記錄在redo log中。當(dāng)數(shù)據(jù)庫(kù)宕機(jī)重啟后,會(huì)依據(jù)redo log里的臟頁(yè)恢復(fù)到磁盤文件中,在InnoDB中叫做crash safe(崩潰恢復(fù)),并且事務(wù)中ACID中的D(持久性,durability)就是靠redo log實(shí)現(xiàn)的。

?

redo log為了提升日志的讀寫效率,也分為兩塊,內(nèi)存和磁盤中各有一塊。

2.6.2.1、redo log在磁盤上體現(xiàn)為什么樣的文件,在安裝目錄下/var/lib/mysql

查詢r(jià)edo log SHOW VARIABLES LIKE '%innodb_log%'; 當(dāng)然,這些都是可修改的。

為什么客戶的更新現(xiàn)在內(nèi)存緩沖池和redo log寫一遍,再寫到磁盤數(shù)據(jù)文件。為什么不直接寫到磁盤?

記錄redo log文件和磁盤數(shù)據(jù)文件有區(qū)別,在于既可以保證數(shù)據(jù)的安全性,還可以減少磁盤刷盤尋址的時(shí)間以降低開(kāi)銷,提升了吞吐量。

順序IO,寫入redo log是追加的過(guò)程,不需要尋址

隨機(jī)IO,每一次都有尋址的時(shí)間

?

redo log的特點(diǎn):(注意redo log的存在不是為了向數(shù)據(jù)文件寫入數(shù)據(jù),只是作為崩潰恢復(fù)時(shí)使用)

1、redo log是InnoDB獨(dú)有的

2、redo log是物理日志,記錄的是數(shù)據(jù)頁(yè)里面做的修改,是絕對(duì)的

3、redo log的大小是固定的,不斷覆蓋,寫入方式如下

2.6.2、undo log(撤銷日志、回滾日志。redo log是物理日志,undo log是邏輯日志)

記錄的是事務(wù)(增刪改)發(fā)生之前數(shù)據(jù)狀態(tài),如果在增刪改過(guò)程中發(fā)生了異常,則會(huì)基于undo log回滾事務(wù),保證了原子性(全部成功,,全部失敗)

undo log相關(guān)的參數(shù): SHOW VARIABLES LIKE '%undo%';?

?

2.6.3、一條更新語(yǔ)句是如何執(zhí)行的

redo log + undo log配合使用

1、存儲(chǔ)引擎層負(fù)責(zé)從RAM或DISK拿到數(shù)據(jù),返回給服務(wù)Server層

2、修改這一行數(shù)據(jù)

3、記錄undo log、redo log

4、調(diào)用存儲(chǔ)引擎的接口,在內(nèi)存buffer pool中修改數(shù)據(jù)page

5、commit

?

redo log兩階段的記錄prepare、commit(跟XA的兩階段提交沒(méi)有任何關(guān)系)

?

2.7、InnoDB架構(gòu)

?

?

?

2.7.1、MySQL sever層也有一個(gè)日志文件binlog(邏輯日志---記錄的是相對(duì)的操作)

  • 記錄的是DDL,DML語(yǔ)句,在哪個(gè)數(shù)據(jù)頁(yè)的哪條數(shù)據(jù)做個(gè)什么樣的改動(dòng)。
  • 沒(méi)有固定大小限制,內(nèi)容可追加(binlog用于數(shù)據(jù)恢復(fù),而redo log只能做崩潰恢復(fù),就是因?yàn)?#xff0c;內(nèi)容不可追加,之前的數(shù)據(jù)會(huì)被覆蓋)
  • Server層實(shí)現(xiàn),可以被所有存儲(chǔ)引擎使用
  • 用于數(shù)據(jù)恢復(fù)和主從復(fù)制

作用:

1、主從同步

2、實(shí)現(xiàn)數(shù)據(jù)的恢復(fù)。既然記錄的是增刪改語(yǔ)句的邏輯日志,從最晚的一次全量備份的時(shí)間,解析binlog,把drop的語(yǔ)句剔除掉后,將其他的DDL、DML重新執(zhí)行一遍

?

?

redolog是prepare,binlog無(wú)記錄。回滾,因?yàn)閿?shù)據(jù)的事務(wù)是以binlog為準(zhǔn)的。

redolog是prepare,binlog有記錄。而數(shù)據(jù)本身的事務(wù)沒(méi)有commit,則會(huì)利用binlog的記錄恢復(fù)事務(wù),將事務(wù)提交。

?

2.7.2、主從同步的原理(擴(kuò)展)

1、從節(jié)點(diǎn)的I/O Thread請(qǐng)求讀取主節(jié)點(diǎn)的binlog

2、主節(jié)點(diǎn)的Log Dump Thread把數(shù)據(jù)發(fā)給從節(jié)點(diǎn)

3、從節(jié)點(diǎn)解析后寫入中繼日志

4、SQL Thread讀取中繼日志的數(shù)據(jù)

5、將解析后的SQL在從節(jié)點(diǎn)的DB中重放(重新執(zhí)行)一遍

?

?

?

?

3、MySQL索引原理與使用原則

3.1、數(shù)據(jù)庫(kù)索引的本質(zhì)

數(shù)據(jù)庫(kù)索引,是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中一個(gè)排序的數(shù)據(jù)結(jié)構(gòu),以協(xié)助快熟查詢、更新數(shù)據(jù)庫(kù)表中數(shù)據(jù)。

沒(méi)有數(shù)據(jù)庫(kù)時(shí),要查找一條數(shù)據(jù),需要進(jìn)行全表的掃描,類似從一本沒(méi)有目錄的書(shū)里找到指定的章節(jié)。而索引就相當(dāng)于給書(shū)加了一份目錄。

3.1.1、索引類型

normal,沒(méi)有任何限制

unique,要求字段的值不重復(fù)

主鍵索引,是unique的一種特例,在unique的基礎(chǔ)上要求不能為空

Full text,全文索引。

如果我們?cè)诒碓O(shè)計(jì)時(shí)用text存放大文本,日后需要用關(guān)鍵字模糊查詢匹配的記錄,如何解決? ? ?

    • like '%關(guān)鍵字%'
    • 建立全文索引,語(yǔ)法:select * from fulltext_test where match(列名) against ('關(guān)鍵字' )
      • MATCH (col1, col2,...) AGAINST (expr [search_modifier]) ?-- where條件后使用
      • 但這不是合適的辦法,用ES更優(yōu)

?

3.1.2、索引存儲(chǔ)結(jié)構(gòu)

InnoDB顯示支持的索引結(jié)構(gòu)只有B+Tree(雖然有hash類型的索引結(jié)構(gòu),但只是在InnoDB buffer pool隱式的使用,由于hash key-vlaue的本質(zhì)和hash沖突的先天短板,因此不能做范圍查詢和大批量數(shù)據(jù)的命中,其作用僅限為小批量數(shù)據(jù)的快速查找——O(1))。

?

3.1.2.1、各數(shù)據(jù)結(jié)構(gòu)如果作為索引選型的區(qū)別

舊金山大學(xué)數(shù)據(jù)結(jié)構(gòu)可視化網(wǎng)站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

?

分析一下,其他數(shù)據(jù)結(jié)構(gòu)為什么不合適。

  • 有序數(shù)組

沒(méi)錯(cuò)有序數(shù)組檢索很快,但是索引的增刪改

  • 鏈表

鏈表增刪改很快,但檢索復(fù)雜

  • BST——Binary Search Tree,二叉查找樹(shù)

沒(méi)錯(cuò)BST的確可以快速查找和快速變更。但為什么不選擇BST呢?假如,按照大小順序,有序的構(gòu)建二叉查找樹(shù)數(shù),我們會(huì)發(fā)現(xiàn)所謂的BST變成了一個(gè)單鏈表,以這種特殊場(chǎng)景為例,極端情況下,BST檢索的復(fù)雜度是O(n)。所以BST不適合做索引。

  • AVL Tree——Balance Binary Search Tree(平衡二叉查找樹(shù)。發(fā)明人名字的簡(jiǎn)寫是AVL,所以又叫AVL Tree

AVL的特點(diǎn)是:左右子樹(shù)的深度差的絕對(duì)值不能超過(guò)1。所以AVL避免了BST變成單鏈表的問(wèn)題。

看來(lái)似乎已經(jīng)能滿足索引的基本要求了,那么我們假定使用AVL做索引來(lái)分析可能會(huì)出現(xiàn)什么問(wèn)題。

設(shè)定每個(gè)節(jié)點(diǎn)(node),包含三塊數(shù)據(jù):鍵值、數(shù)據(jù)的物理地址、指向左右子節(jié)點(diǎn)的指針,構(gòu)建索引的數(shù)據(jù)如下圖:

問(wèn)題:

    • 索引的內(nèi)容本質(zhì)上是通過(guò)存儲(chǔ)引擎放到磁盤上,比對(duì)時(shí)要把各節(jié)點(diǎn)(Node=Page 16KB)的內(nèi)容拿到server層比較,也就是說(shuō)需要比對(duì)多少節(jié)點(diǎn)就要發(fā)生多少次IO。那么我們來(lái)看AVL,一個(gè)數(shù)據(jù)就是一個(gè)Node,如果對(duì)大量數(shù)據(jù)做索引,會(huì)導(dǎo)致AVL的深度很高,這也意味著要比對(duì)的節(jié)點(diǎn)很多,因此IO的次數(shù)也多,導(dǎo)致浪費(fèi)性能。
    • MySQL的數(shù)據(jù)讀取單位是page,一個(gè)page是16KB,顯然在當(dāng)前Node的設(shè)定(鍵值、物理地址、左右子樹(shù)指針)是遠(yuǎn)遠(yuǎn)達(dá)不到16KB,所以會(huì)很浪費(fèi)空間,且導(dǎo)致樹(shù)的深度過(guò)高。

結(jié)論:

AVL不是索引數(shù)據(jù)結(jié)構(gòu)的最好選擇。

?

  • B Tree——Balanced Tree(B 樹(shù),多路平衡查找樹(shù)

如果page多放點(diǎn)節(jié)點(diǎn)的內(nèi)容(放多個(gè)鍵值;放更多的指針。或者說(shuō)把AVL變成分更多岔的樹(shù)),是不是就解決了AVL的2個(gè)問(wèn)題:1、page浪費(fèi);2、深度過(guò)高。

B Tree的特點(diǎn):度=關(guān)鍵字?jǐn)?shù)+1執(zhí)行分裂、合并保證B樹(shù)的平衡(索引中也是Page的分裂和合并)

舉例:

比如有關(guān)鍵字a、b,且a<b,則子樹(shù)指針指向關(guān)鍵字的區(qū)間為(-∞,a),(a,b),(b,+∞)

B Tree比AVL更適合做索引的數(shù)據(jù)結(jié)構(gòu),那么我們假定使用B Tree做索引來(lái)分析可能會(huì)出現(xiàn)什么問(wèn)題。

設(shè)定每個(gè)節(jié)點(diǎn)(node),包含三塊數(shù)據(jù):鍵值、數(shù)據(jù)的物理地址、指向各子節(jié)點(diǎn)的指針,構(gòu)建索引的數(shù)據(jù)如下圖:

還不夠完美,問(wèn)題:

    • 范圍查找時(shí),需要反復(fù)遍歷樹(shù),效率低下。
    • 每次檢索需要比較的Node次數(shù)不同(IO次數(shù)不同),效率不穩(wěn)定。【注,假如我們知道每次查詢都會(huì)比較的次數(shù)為N,且某一次查詢比較的次數(shù)是n,如果n=N,可以確定的是一定成功】

?

?

  • B+ Tree——B Plus Tree(加強(qiáng)版多路平衡查找樹(shù))

B+ Tree的特點(diǎn):度=關(guān)鍵字?jǐn)?shù);(B樹(shù)是:度=關(guān)鍵字?jǐn)?shù)+1)。

舉例:

比如有關(guān)鍵字a、b、c,且a<b<c,則子樹(shù)指針指向關(guān)鍵字的區(qū)間為[a,b),[b,c),[c,+∞)

?

跟B樹(shù)不同的地方:B樹(shù)的度=關(guān)鍵字?jǐn)?shù)+1,B+樹(shù)的度=關(guān)鍵字?jǐn)?shù),因此同樣數(shù)量的數(shù)據(jù)構(gòu)建出的索引結(jié)構(gòu),相比B+樹(shù)的深度更低,深度低意味著更少的比較次數(shù),等于進(jìn)一步降低IO的次數(shù)。

B+樹(shù)在索引數(shù)據(jù)結(jié)構(gòu)的使用中,只有葉子節(jié)點(diǎn)才放物理地址(永遠(yuǎn)在葉子節(jié)點(diǎn),這樣每次IO的次數(shù)是固定的,且是可預(yù)知的)。并且葉子節(jié)點(diǎn)的page和page之間有雙向指針(讓葉子節(jié)點(diǎn)形成了有序的鏈表結(jié)構(gòu)),便于范圍查詢(排序)。如果沒(méi)有這個(gè)雙向指針,將會(huì)多次遍歷才能找到一個(gè)范圍。

?

3.1.2.2、為什么選擇B+Tree

  • B Tree能解決的問(wèn)題,B+Tree都能解決

B Tree解決了什么問(wèn)題:AVL(平衡二叉查找樹(shù))對(duì)page容量的浪費(fèi)、深度過(guò)高。減少了比對(duì)次數(shù)(比對(duì)時(shí),需要存儲(chǔ)引擎層將數(shù)據(jù)page加載到內(nèi)存,然后由MySQL服務(wù)層執(zhí)行比對(duì)),同樣減少了IO操作。增加了性能。

  • 掃庫(kù)、掃表能力更強(qiáng)

葉子節(jié)點(diǎn)page頁(yè)的雙向鏈表,在范圍查找或全量查詢時(shí),不用對(duì)數(shù)做多余的遍歷。

  • 磁盤讀寫能力更強(qiáng)
  • 排序能力更強(qiáng)
  • 效率更加穩(wěn)定
    • 每次的比較次數(shù)都是可預(yù)期
    • 由于物理地址都在葉子節(jié)點(diǎn),不會(huì)出現(xiàn)AVL、B Tree時(shí),有的在深度為1時(shí)完成查詢,有的在深度為n時(shí)結(jié)束查詢的問(wèn)題。所以效率穩(wěn)定。

?

3.1.3、特殊的索引方法——Hash

3.1.3.1、hash索引簡(jiǎn)介

特點(diǎn):

k-v形式(如下圖),時(shí)間復(fù)雜度=O(1),也因此我們?cè)诒碇锌雌饋?lái)順序排列的數(shù)據(jù),經(jīng)過(guò)散列后分布在磁盤上是亂序的,所以不支持排序和范圍查詢。只能做k=?的查詢

hash天生的缺陷:

hash沖突,需要用額外的方式解決,但也增加了復(fù)雜度,如再hash法、鏈地址法。

?

3.1.3.2、hash索引在InnoDB中的使用

在InnoDB中是不能使用hash建立索引的(存儲(chǔ)引擎選用MEMORY時(shí)可以支持hash索引),親手驗(yàn)證一下:

  • 保存前,注意索引方法是HASH

  • 保存后,索引方法會(huì)自動(dòng)變?yōu)锽TREE

但I(xiàn)nnoDB的確隱式的使用了hash做索引,在哪里用的呢?回到InnoDB的架構(gòu)圖(紅框數(shù)據(jù)緩沖池),為提升內(nèi)存緩存池的熱點(diǎn)數(shù)據(jù)頁(yè)的訪問(wèn)速度,InnoDB自動(dòng)建立的hash索引,是無(wú)法人為干涉的。

3.1.4、補(bǔ)充

為什么索引不考慮紅黑樹(shù)?

這么多定義約束,目的是:最長(zhǎng)的路徑不超過(guò)最短路徑的2。

如果選為數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu),檢索的次數(shù)是不固定的,同理導(dǎo)致IO次數(shù)不固定,因此也可以說(shuō)效率不穩(wěn)定。

?

3.2、索引在不同存儲(chǔ)引擎中的實(shí)現(xiàn)

3.2.1、不同存儲(chǔ)引擎的存儲(chǔ)文件

3.2.1.1、MyISAM

主鍵索引

?

輔助索引

主鍵索引輔助索引都在索引的文件

?

3.2.1.2、InnoDB,索引即數(shù)據(jù)

聚簇索引:索引鍵值邏輯順序與表數(shù)據(jù)行的物理順序一致。因此,主鍵索引一定是聚簇索引,其他的索引都叫二級(jí)索引英文字典,第一個(gè)字母是第一個(gè)索引

一張表沒(méi)有主鍵

?

3.2.1.3、聚集索引和二級(jí)索引

每個(gè)InnoDB表都有一個(gè)特殊的索引,稱為聚簇索引 ,用于存儲(chǔ)行數(shù)據(jù)。通常,聚簇索引與主鍵同義 。為了從查詢,插入和其他數(shù)據(jù)庫(kù)操作中獲得最佳性能,您必須了解InnoDB如何使用聚簇索引為每個(gè)表優(yōu)化最常見(jiàn)的查找和DML操作。

  • 在表上定義一個(gè)PRIMARY KEY時(shí),InnoDB將其用作聚簇索引。你要為創(chuàng)建的每個(gè)表定義一個(gè)主鍵。如果沒(méi)有邏輯唯一且非空的列或列集,請(qǐng)?zhí)砑右粋€(gè)新的 自動(dòng)遞增 列,其值設(shè)為自動(dòng)填充。
  • 如果您沒(méi)有為表定義PRIMARY KEY,當(dāng)所有列都是NOT NULL 時(shí),MySQL會(huì)在所有鍵列所在的位置找到第一個(gè)UNIQUE的索引,并將其用作 InnoDB的聚集索引。
  • 如果表即沒(méi)有索引PRIMARY KEY也沒(méi)有合適的 UNIQUE索引,則InnoDB 在內(nèi)部生成一個(gè)隱藏的聚集索引GEN_CLUST_INDEX,該索引是包含行ID值的合成列 。這些行按照InnoDB分配給該表中各行的ID排序 。row_id是一個(gè)6字節(jié)的字段,隨著插入新行而單調(diào)增加。因此,按行ID排序的行實(shí)際上是按物理順序排序。如下圖所示(如果有主鍵,則以主鍵作為rowId,下圖便是這種情況)

InnoDB的表里是不可能沒(méi)有索引的(索引即數(shù)據(jù),數(shù)據(jù)即索引)。

聚集索引如何加快查詢

通過(guò)聚集索引可以快速訪問(wèn)行,因?yàn)闄z索索引可以直接到達(dá)該行的page數(shù)據(jù)頁(yè)。如果表很大, 當(dāng)與索引記錄中使用不同page頁(yè)保存數(shù)據(jù)的其他存儲(chǔ)結(jié)構(gòu)比較時(shí),聚集索引體系結(jié)構(gòu)通常可以節(jié)省磁盤I / O操作 。

二級(jí)索引如何與聚簇索引建立聯(lián)系

除聚集索引之外的所有索引都稱為 輔助索引。在InnoDB中,輔助索引中的每個(gè)記錄都包含該行的主鍵列,以及為輔助索引指定的列。 InnoDB使用此主鍵在聚集索引中搜索行。

如果主鍵很長(zhǎng),則輔助索引將使用更多空間,因此設(shè)置較短的主鍵是有利的。

只有在主鍵索引的葉子節(jié)點(diǎn)才上存儲(chǔ)完整的數(shù)據(jù),輔助索引的葉子節(jié)點(diǎn)存的是主鍵的值。

要使用輔助索引查找數(shù)據(jù),要先在輔助索引的B+Tree檢索一遍得到主鍵索引的值,然后再主鍵索引的B+Tree再檢索一遍才能得到最終的數(shù)據(jù)。所以,輔助索引的效率要比主鍵索引的低。

InnoDB只有一個(gè)文件(xxx.ibd),所以主鍵索引的B+Tree、其他所有輔助索引的B+Tree都在這個(gè)文件上。

?

問(wèn)題:輔助索引的葉子節(jié)點(diǎn),為什么放的是主鍵索引的值,而不是數(shù)據(jù)的物理地址?

原因:上文索引的數(shù)據(jù)結(jié)構(gòu)有說(shuō)過(guò),B+Tree和B Tree一樣是依靠page的分裂、合并保證樹(shù)的平衡,Page頁(yè)的變化,即等于物理地址的變化,顯然不可行。

?

3.3、創(chuàng)建和使用索引的原則

選擇合適字段:頻繁被where、order等做為條件的字段。

3.3.1、列的離散度

離散度公式:count(distinct(column_name)) : count(*),即某一列不重復(fù)的值除總行數(shù),簡(jiǎn)而言之,選擇值重復(fù)低的列。

如下圖所示,如果索引值的重復(fù)率太高(離散度低),再檢索索引時(shí),與根節(jié)點(diǎn)比較后,因?yàn)樽庸?jié)點(diǎn)都一樣,無(wú)法抉擇下一輪是與哪個(gè)子節(jié)點(diǎn)比較,這樣的代價(jià)非常大。極端情況下,還不如把整個(gè)表都比較一遍,此時(shí)存儲(chǔ)引擎甚至?xí)艞壥褂盟饕?/p>

?

3.3.2、聯(lián)合索引

3.3.2.1、概念

創(chuàng)建name+phone聯(lián)合索引:ALTER TABLE people ADD INDEX `comidx_name_phone` (`name`, `phone`);

構(gòu)建所得索引的數(shù)據(jù)結(jié)構(gòu)如下

?

順序建立包含a、b、c三個(gè)列的聯(lián)合索引,功能上相當(dāng)與建立了a、ab、abc三個(gè)索引。因此,使用聯(lián)合索引要求最左匹配原則,參考下圖。如果不是按照創(chuàng)建字段的順序使用,則達(dá)不到使用聯(lián)合索引的目的。

?

3.3.2.2、問(wèn)題:如下sql,哪些能用到索引:

  • EXPLAIN SELECT * FROM people WHERE `name` = '張三' AND phone = '100'; ? 顯然可以,查詢條件完全符合聯(lián)合索引的字段,且滿足最左匹配原則。

  • EXPLAIN SELECT * FROM people WHERE phone = '100' AND `name` = '張三'; ?可以。雖然查詢條件符合聯(lián)合索引的字段,但不滿足最左匹配原則。但是優(yōu)化器會(huì)自動(dòng)調(diào)整條件的順序,達(dá)到使用聯(lián)合索引的目的。

  • EXPLAIN SELECT * FROM people WHERE `name` = '張三'; ?可以,聯(lián)合索引的最左匹配原則,相當(dāng)于建立了一個(gè)name的索引。

  • EXPLAIN SELECT * FROM people WHERE phone = '100'; ? 不滿足最左匹配原則。

3.3.2.3、假如有如下場(chǎng)景,應(yīng)該如何創(chuàng)建索引

第2個(gè)就夠了,由于聯(lián)合索引的最左匹配原則,相當(dāng)于額外獲得了name的索引,因此沒(méi)必要?jiǎng)?chuàng)建多余的name索引

?

3.3.3、覆蓋索引

3.3.3.1、什么是回表?

上文提過(guò),在使用輔助索引時(shí):

第一步、查輔助索引得到主鍵索引的值。

第二步、利用主鍵索引的值去查主鍵索引得到數(shù)據(jù)。

其中第二步便是“回表”。

3.3.3.2、什么是覆蓋索引?

要查詢的數(shù)據(jù)列,已經(jīng)包含在所用到的索引里。

比如,創(chuàng)建了name的索引,然后select name from people where name = ?,這個(gè)查詢操作在輔助索引的Tree上就能實(shí)現(xiàn),不需要回表,這就叫覆蓋索引。

舉例,已創(chuàng)建了name+phone的聯(lián)合索引,下列查詢哪些是覆蓋索引?

  • EXPLAIN SELECT NAME FROM people WHERE `name` = '張三'; ?

-- 可以,輔助索引的Tree能滿足查詢

  • EXPLAIN SELECT NAME FROM people WHERE `name` = '張三' AND phone = '100';

-- 可以

  • EXPLAIN SELECT NAME FROM people WHERE phone = '100';

-- 可以,優(yōu)化器的操作,的確不符合最左匹配原則,但如果不用聯(lián)合索引,就要從主鍵索引里查,既然兩個(gè)索引的樹(shù)都能查到name,從概率上講,聯(lián)合索引的tree的開(kāi)銷更小

  • EXPLAIN SELECT * FROM people WHERE `name` = '張三';

-- 不可以,雖然聯(lián)合索引上存在name=張三,但沒(méi)有其他數(shù)據(jù),還是要回到主鍵索引的樹(shù)去查

?

3.3.4、sql索引使用常識(shí)

  • 表的索引越全越好,因?yàn)椴还苁裁辞闆r都能用到索引,對(duì)嗎?

不對(duì)

1、占用磁盤。索引也是數(shù)據(jù)結(jié)構(gòu),需要使用存儲(chǔ)空間保存。

2、更新數(shù)據(jù)變慢,會(huì)發(fā)生大量的索引結(jié)構(gòu)的調(diào)整。

  • 為什么不要在性別字段上建索引?

離散度低,做索引時(shí)開(kāi)銷大

  • 模糊查詢like abc%,like %abc%,like %abc都用不到索引?
    • like abc%,可以,索引的最左前綴。
    • like %abc%,like %abc,不一定,當(dāng)索引條件下推時(shí)會(huì)使用(ICP--Index Condition Push Down)。

我們知道獲取數(shù)據(jù)是在存儲(chǔ)引擎層,過(guò)濾、排序、比較等邏輯操作在server層。

當(dāng)用不到索引的條件(比如like條件)先在存儲(chǔ)引擎層過(guò)濾時(shí)開(kāi)銷更小時(shí),會(huì)把這條件先在存儲(chǔ)引擎過(guò)濾,叫做索引條件下推。

舉例:

  • 不要使用select *,寫明具體的查詢字段。
    • 用不到覆蓋索引
  • 負(fù)向的查詢!=、<>、NOT IN、NOT LIKE能否用到索引?
    • NOT LIKE,不能

    • !=、<>、NOT IN,可以

用不用索引,是由基于成本的優(yōu)化器(Cost Based Optimizer)決定的。

?

3.3.5、長(zhǎng)字段如何建索引

長(zhǎng)字段建立索引,1、page頁(yè)的容量更小,大量數(shù)據(jù)時(shí)比較的次數(shù)多,IO多。2、索引占用大量磁盤空間。

  • 可以截取定長(zhǎng)字段建立索引
  • 也可對(duì)該字段做hash運(yùn)算,再用hash字段做索引

?

3.3.6、為嘛推薦使用遞增的id作為主鍵索引?雪花算法?

InnoDB使用的是聚集索引,數(shù)據(jù)記錄在主鍵索引的葉子節(jié)點(diǎn)上,且葉子節(jié)點(diǎn)是彼此鏈接且順序排列。如果使用遞增主鍵,對(duì)于主鍵索引的B+Tree,每新增一個(gè)主鍵,對(duì)于B+Tree的構(gòu)建,其page頁(yè)的分裂與合并對(duì)于包含數(shù)據(jù)的子節(jié)點(diǎn),只需在最后一個(gè)page后續(xù)上當(dāng)前需要插入的頁(yè),在物理結(jié)構(gòu)上是相對(duì)連續(xù)的,有益于磁盤的使用效率。如果是非自增的隨機(jī)主鍵,主鍵索引葉子節(jié)點(diǎn)page頁(yè)和非葉子節(jié)點(diǎn)的page的分裂與合并也是隨機(jī)的,造成更大的IO開(kāi)銷。

1、主鍵自增時(shí),會(huì)按照順序?qū)憹M每一個(gè)頁(yè)。而主鍵隨機(jī)時(shí),必然會(huì)發(fā)生插入已經(jīng)寫滿的page頁(yè),將導(dǎo)致大量的page的分裂合并的開(kāi)銷

2、為什么是主鍵索引

3、相對(duì)其它互斥的主鍵索引占用的空間小

4、MySQL事務(wù)與鎖詳解

  • 問(wèn)題1:事務(wù)的特性原子性,隔離性,持久性是通過(guò)什么技術(shù)實(shí)現(xiàn)的?

原子性,借助undo log,實(shí)現(xiàn)回滾,達(dá)到全部失敗的目的。沒(méi)有異常就全部成功。

隔離性,利用事務(wù)的隔離機(jī)制,解決數(shù)據(jù)并發(fā)讀取的問(wèn)題。為了保證數(shù)據(jù)讀取的一致性,使用LBCC和MVCC(僅有RR和RC使用)技術(shù)對(duì)數(shù)據(jù)庫(kù)加鎖。

持久性,數(shù)據(jù)庫(kù)崩潰時(shí)利用redo log和雙寫緩沖,保證事務(wù)能夠恢復(fù),

  • 問(wèn)題2:三種事務(wù)并發(fā)帶來(lái)的問(wèn)題,與四種事務(wù)隔離級(jí)別的關(guān)系。

三種問(wèn)題分別是臟讀、不可重復(fù)讀、幻讀。

四種隔離級(jí)別是未提交讀、已提交讀、可重復(fù)度、序列化。

RU:事務(wù)未提交的數(shù)據(jù)對(duì)其他事務(wù)是可見(jiàn)的,未解決任何并發(fā)問(wèn)題。

RC:事務(wù)開(kāi)始后能看見(jiàn)其他事務(wù)已提交的的修改,解決了臟讀,但會(huì)出現(xiàn)不可重復(fù)讀。

RR:在同一事務(wù)中多次讀取同樣的數(shù)據(jù)結(jié)果是一樣的,解決了臟讀和不可重復(fù)讀。在InnoDB中由于RR的MVCC技術(shù)中使用了間隙鎖,該鎖本身就對(duì)插入阻塞,所以不存在幻讀的情況。

Serializable:事務(wù)中最高的隔離級(jí)別,強(qiáng)制事務(wù)串行執(zhí)行。雖然有效抑制了并發(fā)問(wèn)題的發(fā)生,但極大影響并發(fā)度。所以,一般不使用。

4.1、什么是數(shù)據(jù)庫(kù)事務(wù)

數(shù)據(jù)庫(kù)事務(wù)的場(chǎng)景,增刪改,@Transaction、xml、AOP

維基百科的定義:事務(wù)是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)執(zhí)行過(guò)程中的一個(gè)邏輯單位(前文說(shuō)過(guò),page也是邏輯單位,是不可拆分的),由一個(gè)有限的數(shù)據(jù)庫(kù)操作序列構(gòu)成。

兩個(gè)關(guān)鍵點(diǎn):

  • 它是數(shù)據(jù)庫(kù)最小的工作單元,是不可以再分的(所有的 CUD 操作都是事務(wù),即使單條 SQL)
  • 它可能包含了一個(gè)或者一系列的DML語(yǔ)句,包括 insert delete update。(單條DDL(create drop)和 DCL(grant revoke)也會(huì)有事務(wù))

?

哪些存儲(chǔ)引擎支持事務(wù),InnoDB,NDB(一個(gè)集群的存儲(chǔ)引擎),也是5.5之后放棄MyISAM的誘因

4.2、數(shù)據(jù)庫(kù)事務(wù)的四大特性

4.2.1、事務(wù)的四大特性:

  • 原子性,Atomicity 最小的邏輯單位,事務(wù)的多個(gè)DML作為一個(gè)整體,不可分隔執(zhí)行。對(duì)數(shù)據(jù)庫(kù)的一系列的DML操作,要么都成功,要么都失敗。

實(shí)現(xiàn)原理,在InnoDB中依賴 undo log(記錄的是事務(wù)(增刪改)發(fā)生之前數(shù)據(jù)狀態(tài))回滾,將數(shù)據(jù)恢復(fù)到原來(lái)的版本。

?

  • 一致性 Consistency,指的是數(shù)據(jù)完整性的約束不會(huì)被破壞,事務(wù)執(zhí)行的前后都是合法的數(shù)據(jù)狀態(tài)。

完整性約束包含:數(shù)據(jù)庫(kù)自身的完整性約束(比如主鍵必須是唯一的,字段長(zhǎng)度符合要求),用戶自定義的完整性約束(通常在代碼中控制)。(賬戶A-100,B+50,轉(zhuǎn)賬A0-50,B0+50)

?

  • 隔離性 Isolation,各事務(wù)是個(gè)邏輯單位,包含多個(gè)dml,事務(wù)之間,的dml語(yǔ)句并發(fā)執(zhí)行,互相不干擾。在數(shù)據(jù)庫(kù)里面會(huì)有很多的事務(wù)同時(shí)去操作同一張表或者同一行數(shù)據(jù),必然會(huì)產(chǎn)生一些并發(fā)或者干擾的操作,那么我們對(duì)隔離性的定義,就是這些很多個(gè)的事務(wù),對(duì)表或者行的并發(fā)操作,應(yīng)該是透明的,互相不干擾的。

?

  • 持久性 durability,事務(wù)提交成功,寫入到磁盤后狀態(tài)應(yīng)該是永久的。即使數(shù)據(jù)庫(kù)中途崩潰(崩潰恢復(fù)redo log)、重啟后恢復(fù)到之前的狀態(tài)

雙寫緩沖,重要特性。頁(yè)的備份

操作系統(tǒng)的page是4k,數(shù)據(jù)庫(kù)的page是16k。當(dāng)數(shù)據(jù)從內(nèi)存向磁盤寫時(shí),需要寫4個(gè)操作系統(tǒng)的page才能寫完。假設(shè)寫完第一個(gè)page時(shí)數(shù)據(jù)庫(kù)崩潰,那么16k的數(shù)據(jù)庫(kù)頁(yè)也僅被寫入了4k,如果崩潰,再恢復(fù)由于page已經(jīng)不完整,所以不能再寫入。所以要把數(shù)據(jù)庫(kù)頁(yè)做個(gè)備份,叫雙寫緩沖。

?

原子性、隔離性、持久性都是為了實(shí)現(xiàn)一致性。

?

4.2.2、數(shù)據(jù)庫(kù)如何開(kāi)啟一個(gè)事務(wù)

SELECT VERSION(); -- 查看數(shù)據(jù)庫(kù)版本SHOW VARIABLES LIKE '%ENGINE%'; -- 查看存儲(chǔ)引擎SHOW GLOBAL VARIABLES LIKE 'tx_isolation'; -- 查看事務(wù)隔離級(jí)別

?

如何開(kāi)啟事務(wù)?

  • 單條增刪改,自動(dòng)開(kāi)啟,自動(dòng)提交。如果結(jié)果不提交,是個(gè)在內(nèi)存里臟數(shù)據(jù)。

SHOW VARIABLES LIKE 'autocommit'; ?-- 查看是否開(kāi)啟自動(dòng)啟用事務(wù)?

  • 手動(dòng)開(kāi)啟 ?
    • BEGIN;
    • START TRANSACTION;
-- BEGIN; -- 開(kāi)啟事務(wù) START TRANSACTION; -- 開(kāi)啟事務(wù),這兩種都可以用,但start命令可用更多的參數(shù) UPDATE people SET `name` = '張三123' WHERE id = 1; ROLLBACK; -- 回滾 -- COMMIT; -- 提交

?

如果事務(wù)執(zhí)行一半,會(huì)話斷開(kāi),事務(wù)回滾。

事務(wù)結(jié)束的時(shí)候,事務(wù)所持有的鎖就會(huì)釋放。

?

?

4.2.3、事務(wù)并發(fā)問(wèn)題

只要涉及增刪改都會(huì)有事務(wù),時(shí)時(shí)刻刻會(huì)有很多事務(wù)在執(zhí)行。事務(wù)并發(fā)操作同一行數(shù)據(jù),就會(huì)導(dǎo)致并發(fā)問(wèn)題,隔離性怎么實(shí)現(xiàn)?(不要跟事務(wù)隔離級(jí)別混淆)

事務(wù)并發(fā)問(wèn)題:

  • 臟讀,讀到了另一事物未提交的結(jié)果,重點(diǎn)是未提交被讀到。

事務(wù)A有兩次讀操作,先讀到age=16,事務(wù)B執(zhí)行更新(事務(wù)尚未結(jié)束,數(shù)據(jù)還在內(nèi)存中),事務(wù)A再次讀取到age=18。即事務(wù)A讀到事務(wù)B尚未提交的數(shù)據(jù)。

P1 ("Dirty read"): SQL-transaction T1 modifies a row. SQL-transaction T2 then reads that row before T1 performs a COMMIT.

If T1 then performs a ROLLBACK, T2 will have read a row that was never committed and that may thus be considered to have never existed.

  • 不可重復(fù)度,在同一時(shí)間內(nèi),一樣的查詢語(yǔ)句先后讀到是另一事物未提交和提交后的結(jié)果。重點(diǎn)是已提交導(dǎo)致兩次讀結(jié)果不一致。

事務(wù)A有兩次讀操作,先讀到age=16,事務(wù)B執(zhí)行更新并且事務(wù)提交,事務(wù)A再次讀取到age=18。即事務(wù)A讀到事務(wù)B提交后的數(shù)據(jù)。

P2 ("Non-repeatable read"): SQL-transaction T1 reads a row. SQL- transaction T2 then modifies or deletes that row and performs a COMMIT.

If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted.

  • 幻讀,范圍查詢時(shí),在其他事務(wù)插入的數(shù)據(jù)的前后,讀的結(jié)果不同。

事務(wù)A先讀到1條數(shù)據(jù),事務(wù)B執(zhí)行插入并且事務(wù)提交,事務(wù)A再次讀取到2條數(shù)據(jù)。即事務(wù)A先后兩次讀到結(jié)果數(shù)不同。

P3 ("Phantom"): SQL-transaction T1 reads the set of rows N that satisfy some . SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the ?used by SQL-transaction T1.

If SQL-transaction T1 then repeats the initial read with the same, it obtains a different collection of rows.

怎么區(qū)分臟讀、不可重復(fù)讀、幻讀:

臟讀:讀到另一事物未提交的數(shù)據(jù)

不可重復(fù)讀:在另一事物做delete、update且提交時(shí),先后讀到的數(shù)據(jù)不一樣,影響的是精確查詢的結(jié)果。

幻讀:在另一事物做insert且提交時(shí),先后讀到的數(shù)量不一樣,影響的是范圍查詢的數(shù)量。

?

4.2.4、事務(wù)隔離級(jí)別

事務(wù)并發(fā)的三大問(wèn)題其實(shí)都是讀一致性問(wèn)題(明明是相同的查詢操作,但是讀到了不同的結(jié)果)。作為服務(wù)提供方,必須由數(shù)據(jù)庫(kù)提供一定得事務(wù)隔離機(jī)制來(lái)解決,保證數(shù)據(jù)一致性的問(wèn)題。所以,有數(shù)據(jù)庫(kù)的專家達(dá)成共識(shí)聯(lián)合制定了一個(gè)標(biāo)準(zhǔn),建議數(shù)據(jù)庫(kù)廠商一定程度上實(shí)現(xiàn)數(shù)據(jù)一致性的問(wèn)題。

SQL92 ANSI/ISO標(biāo)準(zhǔn):http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

__Table_9-SQL-transaction_isolation_levels_and_the_three_phenomena_

?

_Level__________________P1______P2_______P3________________________| READ UNCOMMITTED | Possib|e Possib|e Possible || | | | || READ COMMITTED | Not | Possibl| Possible |Possible| REPEATABLE READ | Not | Not | Possible || | Possib|e Possib|e || | | | || SERIALIZABLE | Not | Not | Not Possible ||______________________|_Possib|e_Possib|e_________________________|| | | | |

串行化,所有的事務(wù)都要排隊(duì)執(zhí)行,所以就不會(huì)再有事務(wù)隔離性可能出現(xiàn)的3種現(xiàn)象。缺點(diǎn),極大降低數(shù)據(jù)庫(kù)并發(fā)度。

?

在InnoDB默認(rèn)的數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別RR中,已經(jīng)解決了幻讀的問(wèn)題,所以不需要用Serializable這么高的隔離級(jí)別,而且會(huì)帶來(lái)較高的并發(fā)度。

怎么解決幻讀的?使用了間隙鎖,阻塞插入,所以避免幻讀。

?

如果要解決讀一致性問(wèn)題,保證一個(gè)事務(wù)中前后兩次讀取的數(shù)據(jù)結(jié)果一致,實(shí)現(xiàn)事務(wù)隔離,應(yīng)該怎么做?

方案:

  • 在讀取數(shù)據(jù)前對(duì)其加鎖,阻止其他事務(wù)對(duì)數(shù)據(jù)進(jìn)行修改(LBCC--Lock Based Concurrency Control,基于并發(fā)控制的鎖)。問(wèn)題:為了讀而阻塞了寫,導(dǎo)致并發(fā)度降低。適合需要加鎖的讀(當(dāng)前讀),比如要求讀取最新的數(shù)據(jù)。
  • 快照,生成一個(gè)數(shù)據(jù)請(qǐng)求時(shí)間點(diǎn)的一致性數(shù)據(jù)快照(SnapShot),并用這個(gè)快照來(lái)提供一定級(jí)別(語(yǔ)句級(jí)或事務(wù)級(jí))的一致性讀取(MVCC--Multi Version Concurrency Control,多版本的并發(fā)控制)

MVCC的思想,只能查找創(chuàng)建時(shí)間小于等于當(dāng)前事務(wù)ID的(已提交的)數(shù)據(jù),和刪除時(shí)間大于都去哪干事務(wù)ID的行(或未刪除)。

MVCC用在已提交讀RC和可重復(fù)讀RR,為什么在已提交讀RC還會(huì)出現(xiàn)不可重復(fù)讀幻讀,:

RR的快照建立的時(shí)間是第一次查詢的時(shí)候,所以未提交的事務(wù)和其后的事務(wù)都是不能看見(jiàn)的,

RC的快照建立的時(shí)間是當(dāng)前select,所以能看見(jiàn)其他事務(wù)已提交的數(shù)據(jù)。具體的機(jī)制是兩種隔離級(jí)別下的ReadView的差異。

?

簡(jiǎn)單單一的select是快照讀

存在加鎖的for update或DML的事務(wù)中select是當(dāng)前讀

4.2、MySQL中InnoDB鎖的基本類型

官網(wǎng)InnoDB鎖的介紹:https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html

4.2.1、行鎖與表鎖

4.2.1.1、行鎖

  • 共享鎖,又稱讀鎖,簡(jiǎn)稱S鎖

指多個(gè)事務(wù)對(duì)于同一數(shù)據(jù)可以共享一把鎖,都能訪問(wèn)到數(shù)據(jù),但只能讀不能改(如果修改,可能會(huì)發(fā)生死鎖)。

加鎖方式: SELECT * FROM people WHERE id = 1 LOCK IN SHARE MODE;?

釋放鎖方式:事務(wù)結(jié)束

驗(yàn)證:分別在兩個(gè)會(huì)話里對(duì)同一行數(shù)據(jù)加鎖,都能加鎖成功

  • 排他鎖,又稱寫鎖,簡(jiǎn)稱X鎖

排他鎖不能與其他鎖并存,如果一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排他鎖,其他事務(wù)就不能再獲取該行的鎖(共享鎖,排他鎖),只有獲取到排他鎖的事務(wù)能對(duì)數(shù)據(jù)行進(jìn)行讀取和修改。

加鎖方式:

    • 自動(dòng):delete、update、insert默認(rèn)加上X鎖
    • 手動(dòng):SELECT * FROM people WHERE id = 1 FOR UPDATE;

釋放鎖方式:事務(wù)結(jié)束

驗(yàn)證:在會(huì)話1中,自動(dòng)給改行數(shù)據(jù)加一個(gè)排他鎖,在會(huì)話2中分別嘗試加共享鎖和手動(dòng)排他鎖都被阻塞,無(wú)法獲取鎖,需要手動(dòng)停止。

  • 官網(wǎng)里的其他行級(jí)別的鎖:意向共享鎖(IS)/意向排他鎖(IX)

意向鎖是數(shù)據(jù)庫(kù)存儲(chǔ)引擎自己維護(hù)的,用戶無(wú)法手動(dòng)操作意向鎖。

    • 意向共享鎖(IS--Intention Shared Lock):指事務(wù)準(zhǔn)備給數(shù)據(jù)行加共享鎖,也就是說(shuō)給數(shù)據(jù)行加共享鎖前,必須先獲得該表的IS鎖(表級(jí)別的意向的共享鎖)
    • 意向排他鎖(IX--Intention Exclusive Lock):指事務(wù)準(zhǔn)備給數(shù)據(jù)行加排他鎖,也就是說(shuō)給數(shù)據(jù)行加排他鎖前,必須先獲得該表的IX鎖(表級(jí)別的意向的共享鎖)

干嘛要鎖定一張表呢?

事務(wù)要成功的給一張表加上表鎖,前提必須是:沒(méi)有其他任何事務(wù)已經(jīng)鎖定了該表的任意一行數(shù)據(jù)。

如何確認(rèn)數(shù)據(jù)沒(méi)有被加鎖?比如全表掃描,一行一行確認(rèn)沒(méi)被加鎖,但是并發(fā)場(chǎng)景下不可避免一行數(shù)據(jù)在掃描中途被加鎖,顯然是不可行的。意向鎖就是解決這個(gè)問(wèn)題的辦法,相當(dāng)于表是否被加行鎖的標(biāo)志,類比火車衛(wèi)生間的燈,只要標(biāo)識(shí)未被加鎖便可以后續(xù)操作,提升了加鎖的效率。

驗(yàn)證:會(huì)話1給數(shù)據(jù)行加排他鎖, 存儲(chǔ)引擎會(huì)自動(dòng)鎖表。會(huì)話2手動(dòng)鎖表被阻塞。

4.3、InnoDB行鎖到底鎖住了什么

鎖的作用:解決資源競(jìng)爭(zhēng)的問(wèn)題。

鎖住了什么:一行數(shù)據(jù)?一個(gè)字段?

4.3.1、鎖的原理

  • 沒(méi)有索引,兩個(gè)會(huì)話,select ... where name = 'a' for update和select ... where name = 'b' for update先后執(zhí)行后,發(fā)現(xiàn)會(huì)話2失敗,證明是鎖表。
  • 主鍵索引,兩個(gè)會(huì)話,select ... where id= 1 for update和select ... where id= 2 for update先后執(zhí)行后,發(fā)現(xiàn)都可以查詢,證明是鎖行。
  • 主鍵索引+唯一索引,兩個(gè)會(huì)話,select ... where id= 1 for update和select ... where name = 'b' for update先后執(zhí)行后,發(fā)現(xiàn)都可以查詢,證明是鎖行。

鎖的是聚簇索引

1、沒(méi)有索引為什么會(huì)鎖表?

聚簇索引:主鍵索引、第一個(gè)唯一索引、rowId。當(dāng)沒(méi)有索引時(shí)加排他鎖查詢,需要全表掃描,因此會(huì)鎖住所有的rowId。

2、通過(guò)唯一索引加鎖,為什么會(huì)阻塞主鍵索引的加鎖?

二級(jí)索引加鎖,先會(huì)把name字段鎖住,接著把id鎖住

4.4、行鎖的算法:鎖住了什么范圍

假設(shè)表里已有id=1、4、7、10的記錄。即索引記錄有1、4、7、10。由這四個(gè)存在的索引記錄隔開(kāi)的區(qū)間,叫間隙。由間隙組成的左開(kāi)右閉的區(qū)間叫臨鍵。

無(wú)論用的哪種查詢(范圍查詢或者等值查詢),只要沒(méi)有命中任何一個(gè)索引,就會(huì)鎖住兩個(gè)記錄之間的區(qū)間。查詢的相同間隙鎖(select ... for update)不排斥,因?yàn)楸緛?lái)就沒(méi)有數(shù)據(jù),排斥也沒(méi)有愿意。 但是排斥插入

?

4.5、總結(jié)

  • Read Uncommited,不加鎖。生產(chǎn)中不會(huì)用到。
  • Serializable,所有的select語(yǔ)句都會(huì)被隱式的轉(zhuǎn)化為select ... in share mode,會(huì)和update、delete互斥(因?yàn)槭桥潘i,排他鎖存在時(shí)不允許有任何鎖)。生產(chǎn)中不會(huì)用到。

?

?

?

?

5、MySQL性能優(yōu)化總結(jié)

優(yōu)化從何入手?

硬件的優(yōu)化,操作系統(tǒng)的配置:基于硬件的實(shí)際情況調(diào)優(yōu)。

操作系統(tǒng)、數(shù)據(jù)庫(kù)配置

架構(gòu)層次,緩存,集群,讀寫分離,分庫(kù)分表

5.1、連接問(wèn)題優(yōu)化

客戶端與服務(wù)端簡(jiǎn)歷連接,可能有什么問(wèn)題?

服務(wù)端:連接數(shù)不夠,

回收連接時(shí)間太長(zhǎng),導(dǎo)致連接沒(méi)有及時(shí)釋放。(默認(rèn)8個(gè)小時(shí))

客戶端:怎么減少?gòu)姆?wù)端獲取的連接數(shù)?

不要每次執(zhí)行一條sql語(yǔ)句時(shí)就去和服務(wù)端建立一個(gè)新的TCP連接。

連接池,用完之后將連接歸還到連接池(不是close),便于其他業(yè)務(wù)使用,這種方法在并發(fā)程度不高的情況下,可以大大減少頻繁創(chuàng)建和關(guān)閉連接的開(kāi)銷。(比如ali的Druid,Spring Boot的Hikari)

緩存,將查詢到的數(shù)據(jù),暫存在緩存中,減少對(duì)數(shù)據(jù)庫(kù)的讀。

集群,這種情況下要保證數(shù)據(jù)一致性的問(wèn)題(重放bin log中的DML)。

基于集群,實(shí)現(xiàn)讀寫分離

分庫(kù)分表,數(shù)據(jù)量多大,數(shù)據(jù)庫(kù)扛不住并發(fā)壓力。

垂直分庫(kù),基于業(yè)務(wù)角度劃分不同的庫(kù)

水平分庫(kù),基于數(shù)據(jù)劃分,一張表數(shù)據(jù)量過(guò)大,將一張表水平拆分成多個(gè)表。

5.2、基于優(yōu)化器

5.2.1、哪些SQL語(yǔ)句慢?

5.2.1.1、slow query log,慢查詢?nèi)罩?/p>

(默認(rèn)關(guān)閉,原因是在DML執(zhí)行過(guò)程中要多記錄一個(gè)日志,會(huì)消耗性能)

結(jié)果中/var/lib/mysql/mine-slow.log就是慢查詢記錄的文件。

執(zhí)行時(shí)間多久的sql會(huì)被定義為慢查詢語(yǔ)句記錄到日志中(默認(rèn)10秒)

動(dòng)態(tài)修改set語(yǔ)句,重啟就會(huì)失效,可以從服務(wù)器上修改配置文件/etc/my.cnf。

SHOW GLOBAL VARIABLES LIKE 'slow_query%'; SHOW VARIABLES LIKE 'long_query%';SET long_query_time = 0; -- 臨時(shí)設(shè)置慢查詢的條件是0秒 SET GLOBAL slow_query_log = ON; -- 臨時(shí)開(kāi)啟慢查詢?nèi)罩維ELECT * FROM people;

慢查詢?nèi)罩纠锬芸吹骄唧w的sql、執(zhí)行時(shí)間、操作的用戶、IP、消耗時(shí)間、獲取鎖的時(shí)間、篩選了多少行、預(yù)計(jì)篩選多少行。

統(tǒng)計(jì)慢查詢結(jié)果,系統(tǒng)自帶了分析工具——mysqldumpslow

比如查詢用時(shí)最多的2條語(yǔ)句: mysqldumpslow -s t -t 2 -g 'select' mine-slow.log

?

5.2.1.2、PROFILE

谷歌工程師提供的工具,默認(rèn)是不開(kāi)啟的。

  • SHOW PROFILES; 看到的所有執(zhí)行的時(shí)間。

  • SHOW PROFILE; 與DML連用,查看該DML語(yǔ)句在每一個(gè)環(huán)節(jié)所消耗的時(shí)間。

5.2.2、查看server層的運(yùn)行信息

5.2.2.1、服務(wù)器狀態(tài)信息SHOW STATUS;

也可以使用通配符,比如查詢select一共執(zhí)行多少次:(記錄的是數(shù)據(jù)庫(kù)每一次啟動(dòng)之后的情況,如果數(shù)據(jù)庫(kù)重啟則會(huì)被重置)

5.2.2.2、查看服務(wù)端線程的信息(對(duì)應(yīng)的是客戶端的連接)SHOW PROCESSLIST;

如果想殺死某個(gè)線程,可以使用KILL + ID;

其數(shù)據(jù)來(lái)源是MySQL的表,如下。所以也可以直接使用sql查表

5.2.2.3、查看存儲(chǔ)引擎層的運(yùn)行信息

SHOW ENGINE INNODB STATUS \G;

mysql>show engine innodb status +----------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Type | Name | Status | +----------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | InnoDB | | ===================================== 2016-05-12 08:52:28 2b6142bc7700 INNODB MONITOR OUTPUT ===================================== Per second averages calculated from the last 50 seconds //最近50秒內(nèi)每2秒的平均值 ----------------- BACKGROUND THREAD //backgroup 線程 ----------------- srv_master_thread loops: 1332198 srv_active, 0 srv_shutdown, 64396 srv_idle srv_master_thread log flush and writes: 1396594 ---------- SEMAPHORES // 信號(hào)量 ---------- OS WAIT ARRAY INFO: reservation count 118146 //os wait 的信息 ,reservation count 表示InnoDB產(chǎn)生了多少次OS WAIT OS WAIT ARRAY INFO: signal count 186714 // 進(jìn)行OS WAIT線程,接收到多少次信號(hào)(single)被喚醒,如果這個(gè)single數(shù)值越大,幾十萬(wàn)或者幾百萬(wàn),可能是很多I/0等待或者是InnoDB爭(zhēng)用問(wèn)題(關(guān)于爭(zhēng)用問(wèn)題可能與OS調(diào)度有關(guān),可以嘗試減少innodb_thread_concurrency參數(shù)) Mutex spin waits 1664035, rounds 4276317, OS waits 20348 // Mutex spin線程無(wú)法獲取鎖而進(jìn)入Spin wait ,rounds是spin wait 進(jìn)行輪詢檢查mutextes的次數(shù),os wait 線程放棄spin-wait 進(jìn)入掛起狀態(tài) RW-shared spins 302454, rounds 11667281, OS waits 69050 //RW-shared 共享鎖, RW-excl spins 83942, rounds 4021896, OS waits 28377 // RW-excl 排他鎖 Spin rounds per wait: 2.57 mutex, 38.58 RW-shared, 47.91 RW-excl // 備注:要明白Innodb如何處理互斥量(Mutexes),以及什么是兩步獲得鎖(two-step approach)。首先進(jìn)程, 試圖獲得一個(gè)鎖,如果此鎖被它人占用。它就會(huì)執(zhí)行所謂的spin wait,即所謂循環(huán)的查詢”鎖被釋放了嗎?”。 如果在循環(huán)過(guò)程中,一直未得到鎖釋放的信息,則其轉(zhuǎn)入OS WAIT,即所謂線程進(jìn)入掛起(suspended)狀態(tài)。 直到鎖被釋放后,通過(guò)信號(hào)(singal)喚醒線程 Spin wait的消耗遠(yuǎn)小于OS waits。Spinwait利用cpu的空閑時(shí)間,檢查鎖的狀態(tài), OS Wait會(huì)有所謂content switch,從CPU內(nèi)核中換出當(dāng)前執(zhí)行線程以供其它線程使用。 你可以通過(guò)innodb_sync_spin_loops參數(shù)來(lái)平衡spin wait和os wait------------------------ LATEST DETECTED DEADLOCK ------------------------ 2016-05-11 18:52:09 2b6677e07700 //死鎖發(fā)生的時(shí)間 *** (1) TRANSACTION: TRANSACTION 495116414, ACTIVE 0.092 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT 14 lock struct(s), heap size 6544, 20 row lock(s), undo log entries 6 LOCK BLOCKING MySQL thread id: 870003 block 876753 MySQL thread id 876753, OS thread handle 0x2b6685903700, query id 315677415 10.168.152.132 dsc Searching rows for update update aaaaset xxx=xxx+(-1)where id=412 and xxx+(-1)>=0 //顯示第一個(gè)死鎖的的第一個(gè)事務(wù) *** (1) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 558 page no 5 n bits 144 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116414 lock_mode X locks rec but not gap waiting Record lock, heap no 17 PHYSICAL RECORD: n_fields 23; compact format; info bits 0 // 以上表示死鎖發(fā)生時(shí)事務(wù)1等待的鎖,事務(wù)想獲得aaaa表的idx_aaaa_unique索引對(duì)應(yīng)的X排他鎖(Innodb的鎖是與索引相關(guān))0: len 8; hex 8000000000000001; asc ;;1: len 2; hex 5748; asc WH;;2: len 8; hex 800000000000004b; asc K;;3: len 8; hex 8000000000000002; asc ;;4: len 8; hex 8000000000002725; asc '%;;5: len 8; hex 8000000000000215; asc ;;6: len 2; hex 5a50; asc ZP;;7: len 8; hex 4231363033313441; asc B160314A;;8: len 6; hex 00001d82e06a; asc j;;9: len 7; hex 1d00000235151a; asc 5 ;;10: len 8; hex 800000000000019c; asc ;;11: len 8; hex 8000000000000000; asc ;;12: len 5; hex 9998da0000; asc ;;13: len 5; hex 999f5a0000; asc Z ;;14: len 10; hex 5a303230323032303031; asc Z020202001;;15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc ;;16: len 4; hex 80001b2f; asc /;;17: len 7; hex 80000000000000; asc ;;18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;19: len 22; hex 53493230313630343136303030303136333531313735; asc SI20160416000016351175;;20: len 5; hex 99992b1384; asc + ;;21: SQL NULL;22: len 5; hex 99994d7c8d; asc M| ;; *** (2) TRANSACTION: // 事務(wù)2的狀態(tài) TRANSACTION 495116394, ACTIVE 0.246 sec fetching rows mysql tables in use 1, locked 1 17 lock struct(s), heap size 2936, 18 row lock(s), undo log entries 21 MySQL thread id 870003, OS thread handle 0x2b6677e07700, query id 315677426 10.168.152.132 dsc Searching rows for update update aaaaset xxx=xxx+(-2)where id=430 and xxx+(-2)>=0 *** (2) HOLDS THE LOCK(S): // 表示事務(wù)2獲得的鎖 RECORD LOCKS space id 558 page no 5 n bits 144 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116394 lock_mode X locks rec but not gap Record lock, heap no 17 PHYSICAL RECORD: n_fields 23; compact format; info bits 00: len 8; hex 8000000000000001; asc ;;1: len 2; hex 5748; asc WH;;2: len 8; hex 800000000000004b; asc K;;3: len 8; hex 8000000000000002; asc ;;4: len 8; hex 8000000000002725; asc '%;;5: len 8; hex 8000000000000215; asc ;;6: len 2; hex 5a50; asc ZP;;7: len 8; hex 4231363033313441; asc B160314A;;8: len 6; hex 00001d82e06a; asc j;;9: len 7; hex 1d00000235151a; asc 5 ;;10: len 8; hex 800000000000019c; asc ;;11: len 8; hex 8000000000000000; asc ;;12: len 5; hex 9998da0000; asc ;;13: len 5; hex 999f5a0000; asc Z ;;14: len 10; hex 5a303230323032303031; asc Z020202001;;15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc ;;16: len 4; hex 80001b2f; asc /;;17: len 7; hex 80000000000000; asc ;;18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;19: len 22; hex 53493230313630343136303030303136333531313735; asc SI20160416000016351175;;20: len 5; hex 99992b1384; asc + ;;21: SQL NULL;22: len 5; hex 99994d7c8d; asc M| ;;Record lock, heap no 59 PHYSICAL RECORD: n_fields 23; compact format; info bits 00: len 8; hex 8000000000000001; asc ;;1: len 2; hex 5748; asc WH;;2: len 8; hex 800000000000004b; asc K;;3: len 8; hex 8000000000000002; asc ;;4: len 8; hex 800000000000276a; asc 'j;;5: len 8; hex 80000000000002c2; asc ;;6: len 2; hex 5a50; asc ZP;;7: len 9; hex 423136303231374341; asc B160217CA;;8: len 6; hex 00001d82e06a; asc j;;9: len 7; hex 1d00000235169f; asc 5 ;;10: len 8; hex 80000000000001db; asc ;;11: len 8; hex 8000000000000000; asc ;;12: len 5; hex 9998a20000; asc ;;13: len 5; hex 99a2600000; asc ` ;;14: len 10; hex 5a303230323032303031; asc Z020202001;;15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc ;;16: len 4; hex 80000772; asc r;;17: len 7; hex 80000000000000; asc ;;18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;19: len 22; hex 53493230313630343136303030303137333630353531; asc SI20160416000017360551;;20: len 5; hex 99992b1385; asc + ;;21: SQL NULL;22: len 5; hex 99994d7c8d; asc M| ;;*** (2) WAITING FOR THIS LOCK TO BE GRANTED: // 表示事務(wù)2等待的鎖 RECORD LOCKS space id 558 page no 4 n bits 152 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116394 lock_mode X locks rec but not gap waiting Record lock, heap no 63 PHYSICAL RECORD: n_fields 23; compact format; info bits 00: len 8; hex 8000000000000001; asc ;;1: len 2; hex 5748; asc WH;;2: len 8; hex 800000000000004b; asc K;;3: len 8; hex 8000000000000002; asc ;;4: len 8; hex 8000000000000065; asc e;;5: len 8; hex 80000000000000a8; asc ;;6: len 2; hex 5a50; asc ZP;;7: len 9; hex 423136303232314b41; asc B160221KA;;8: len 6; hex 00001d82e07e; asc ~;;9: len 7; hex 2b000001d920ad; asc + ;;10: len 8; hex 80000000000001c8; asc ;;11: len 8; hex 8000000000000000; asc ;;12: len 5; hex 9998aa0000; asc ;;13: len 5; hex 99a2680000; asc h ;;14: len 10; hex 5a303230323032303031; asc Z020202001;;15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc ;;16: len 4; hex 80000b14; asc ;;17: len 7; hex 80000000000000; asc ;;18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;19: len 22; hex 53493230313630343136303030303137333630353531; asc SI20160416000017360551;;20: len 5; hex 99992b1385; asc + ;;21: SQL NULL;22: len 5; hex 99994d7c8d; asc M| ;;*** WE ROLL BACK TRANSACTION (1) // 表示選擇了哪個(gè)事務(wù)回滾,避免無(wú)限期死鎖等待 // innodb有一個(gè)內(nèi)在的死鎖檢測(cè)工具,當(dāng)死鎖超過(guò)一定時(shí)間后,會(huì)回滾其中一個(gè)事務(wù),innodb_lock_wait_timeout 可配置死鎖等待超時(shí)時(shí)間------------ TRANSACTIONS // 包含了InnoDB事務(wù)(transaction)的統(tǒng)計(jì)信息 ------------ Trx id counter 495910498 // 當(dāng)前的transaction id ,這是個(gè)系統(tǒng)變量,隨著每次新的transaction產(chǎn)生而增加 Purge done for trx's n:o < 495910389 undo n:o < 0 state: running but idle //正在進(jìn)行清空的操作操作的transaction ID History list length 2606 // 記錄了undo spaces 內(nèi)unpurged 的事務(wù)個(gè)數(shù) //Purge的原則就是記錄沒(méi)有被其它事務(wù)繼續(xù)使用了LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 329193748744296, not started MySQL thread id 909825, OS thread handle 0x2b6142bc7700, query id 325773092 10.143.34.172 dsc init show engine innodb status ---TRANSACTION 329193658413160, not started MySQL thread id 909832, OS thread handle 0x2b667d881700, query id 325773024 10.168.108.146 dsc cleaning up.....此處省略...---TRANSACTION 329194102134888, not started MySQL thread id 886232, OS thread handle 0x2b6686c40700, query id 325769275 10.252.160.92 dsc cleaning up -------- FILE I/O // 顯示了I/O Helper thread d的狀態(tài),包含一些統(tǒng)計(jì)信息 -------- I/O thread 0 state: waiting for i/o request (insert buffer thread) I/O thread 1 state: waiting for i/o request (log thread) I/O thread 2 state: waiting for i/o request (read thread) I/O thread 3 state: waiting for i/o request (read thread) I/O thread 4 state: waiting for i/o request (read thread) I/O thread 5 state: waiting for i/o request (read thread) I/O thread 6 state: waiting for i/o request (write thread) I/O thread 7 state: waiting for i/o request (write thread) I/O thread 8 state: waiting for i/o request (write thread) I/O thread 9 state: waiting for i/o request (write thread) // 以上顯示了I/O Helper thread的狀態(tài) Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0 Pending flushes (fsync) log: 0; buffer pool: 0 // 顯示各個(gè)I/O Helper thread的pending operations,pending的log和buffer pool thread的fsync()調(diào)用 2531032 OS file reads, 61115257 OS file writes, 51279005 OS fsyncs //顯示了reads writes fsync() 調(diào)用次數(shù) 0.00 reads/s, 0 avg bytes/read, 46.64 writes/s, 39.30 fsyncs/s ------------------------------------- INSERT BUFFER AND ADAPTIVE HASH INDEX ------------------------------------- Ibuf: size 1, free list len 3606, seg size 3608, 38466 merges // seg size 表示當(dāng)前插入緩沖的大小為3608*16KB,大約為57728KB。free list len代表了空閑列表的長(zhǎng)度,merges 表示合并次數(shù) merged operations:insert 34642, delete mark 1008134, delete 0 //insert 插入的記錄數(shù),delete mark 打上的標(biāo)記,delete 刪除的次數(shù) discarded operations:insert 0, delete mark 0, delete 0 AHI PARTITION 1: Hash table size 4980539, node heap has 161 buffer(s) AHI PARTITION 2: Hash table size 4980539, node heap has 90 buffer(s) AHI PARTITION 3: Hash table size 4980539, node heap has 225 buffer(s) AHI PARTITION 4: Hash table size 4980539, node heap has 352 buffer(s) AHI PARTITION 5: Hash table size 4980539, node heap has 3556 buffer(s) AHI PARTITION 6: Hash table size 4980539, node heap has 4393 buffer(s) AHI PARTITION 7: Hash table size 4980539, node heap has 3052 buffer(s) AHI PARTITION 8: Hash table size 4980539, node heap has 145 buffer(s) 26.62 hash searches/s, 51.78 non-hash searches/s --- LOG // 記錄了transaction log 子系統(tǒng)的信息 --- Log sequence number 264509449071 //顯示當(dāng)前l(fā)og sequence number表示有多少字節(jié)寫入到log文件內(nèi) Log flushed up to 264509449064 //顯示已經(jīng)被flushed(寫入磁盤)的logs Pages flushed up to 264509446093 Last checkpoint at 264509412298 //顯示最后一個(gè)checkpoint 的logs 0 pending log flushes, 0 pending chkp writes 27332545 log i/o's done, 16.22 log i/o's/second // 顯示pending log 的統(tǒng)計(jì)信息 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 20653670400; in additional pool allocated 0 // 顯示分配給innodb 的內(nèi)存大小,以及additional pool 使用的大小 (0表示沒(méi)有使用) Dictionary memory allocated 1905658 Buffer pool size 1228800 // buffer pool size > database pages 因?yàn)閎uffer pool size 還會(huì)存放lock index hash index 等一些其他系統(tǒng)信息 Free buffers 8192 Database pages 1208634 Old database pages 445992 Modified db pages 8 Pending reads 0 //顯示了pending的reads 和writes Pending writes: LRU 0, flush list 0, single page 0 // 顯示InnoDB讀寫和創(chuàng)建的頁(yè)面(pages) Pages made young 842882, not young 127112054 0.00 youngs/s, 0.00 non-youngs/s Pages read 2637230, created 729565, written 30484675 0.00 reads/s, 0.34 creates/s, 24.06 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 //顯示buffer pool 的命中率 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 1208634, unzip_LRU len: 0 I/O sum[9624]:cur[0], unzip sum[0]:cur[0] ---------------------- INDIVIDUAL BUFFER POOL INFO ---------------------- ---BUFFER POOL 0 Buffer pool size 153600 Free buffers 1024 Database pages 151095 Old database pages 55755 Modified db pages 2 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 32021, not young 15238551 0.00 youngs/s, 0.00 non-youngs/s Pages read 326672, created 90881, written 6387155 0.00 reads/s, 0.00 creates/s, 4.80 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151095, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 1 Buffer pool size 153600 Free buffers 1024 Database pages 151061 Old database pages 55742 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 32063, not young 15503760 0.00 youngs/s, 0.00 non-youngs/s Pages read 327353, created 91471, written 978265 0.00 reads/s, 0.00 creates/s, 0.24 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151061, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 2 Buffer pool size 153600 Free buffers 1024 Database pages 151107 Old database pages 55759 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 32746, not young 14789866 0.00 youngs/s, 0.00 non-youngs/s Pages read 328273, created 91339, written 4147582 0.00 reads/s, 0.00 creates/s, 3.50 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151107, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 3 Buffer pool size 153600 Free buffers 1024 Database pages 151088 Old database pages 55752 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 31950, not young 15539726 0.00 youngs/s, 0.00 non-youngs/s Pages read 329629, created 91566, written 2998238 0.00 reads/s, 0.00 creates/s, 1.68 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151088, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 4 Buffer pool size 153600 Free buffers 1024 Database pages 151063 Old database pages 55743 Modified db pages 1 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 323393, not young 17803631 0.00 youngs/s, 0.00 non-youngs/s Pages read 337003, created 90967, written 3974291 0.00 reads/s, 0.08 creates/s, 4.38 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151063, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 5 Buffer pool size 153600 Free buffers 1024 Database pages 151066 Old database pages 55744 Modified db pages 3 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 323468, not young 18135650 0.00 youngs/s, 0.00 non-youngs/s Pages read 335789, created 90992, written 3382034 0.00 reads/s, 0.26 creates/s, 3.04 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151066, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 6 Buffer pool size 153600 Free buffers 1024 Database pages 151073 Old database pages 55747 Modified db pages 2 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 34315, not young 15008240 0.00 youngs/s, 0.00 non-youngs/s Pages read 324769, created 91064, written 5580181 0.00 reads/s, 0.00 creates/s, 4.66 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151073, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] ---BUFFER POOL 7 Buffer pool size 153600 Free buffers 1024 Database pages 151081 Old database pages 55750 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 32926, not young 15092630 0.00 youngs/s, 0.00 non-youngs/s Pages read 327742, created 91285, written 3036929 0.00 reads/s, 0.00 creates/s, 1.76 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 151081, unzip_LRU len: 0 I/O sum[1203]:cur[0], unzip sum[0]:cur[0] -------------- ROW OPERATIONS //顯示了row operations 及其他一些統(tǒng)計(jì)信息 -------------- 0 queries inside InnoDB, 0 queries in queue //顯示了有多少個(gè)線程在InnoDB內(nèi)核 52 read views open inside InnoDB // 有多少個(gè)read view 被打開(kāi),一個(gè)read view 是一致性保證MVCC "snapshot" Main thread process no. 46196, id 47719070582528, state: sleeping //顯示內(nèi)核main thread的狀態(tài)信息。 Number of rows inserted 35803330, updated 3181469, deleted 14015545, read 7740416065 12.48 inserts/s, 0.68 updates/s, 0.30 deletes/s, 3005.82 reads/s ---------------------------- END OF INNODB MONITOR OUTPUT ============================

5.2.3、SQL慢的原因

  • EXPLAIN Output Columns
ColumnJSON NameMeaning
idselect_idThe SELECT identifier——優(yōu)化器中各表的查詢順序
select_typeNoneThe SELECT type——查詢的類型
tabletable_nameThe table for the output row——訪問(wèn)的表
partitionspartitionsThe matching partitions——分區(qū)
typeaccess_typeThe join type——訪問(wèn)的類型,對(duì)于優(yōu)化非常關(guān)鍵
possible_keyspossible_keysThe possible indexes to choose——可能用到的索引
keykeyThe index actually chosen——實(shí)際用到的索引
key_lenkey_lengthThe length of the chosen key
refrefThe columns compared to the index——索引列做等值查詢時(shí),與索引列比對(duì)的值得信息(如,這個(gè)值是個(gè)常數(shù),或者另一個(gè)列)
rowsrowsEstimate of rows to be examined——預(yù)估要掃描多少數(shù)據(jù)
filteredfilteredPercentage of rows filtered by table condition——交付客戶端/存儲(chǔ)引擎篩選的。(由于有server層的過(guò)濾,索引server過(guò)濾的越少越好)
ExtraNoneAdditional information

?

  • select type查詢類型
select_type ValueJSON NameMeaning
SIMPLENoneSimple SELECT (not using UNION or subqueries)——簡(jiǎn)單查詢,單表查詢
PRIMARYNoneOutermost SELECT——主查詢,有關(guān)聯(lián)查詢時(shí),最外面那層查詢
UNIONNoneSecond or later SELECT statement in a UNION
DEPENDENT UNIONdependent (true)Second or later SELECT statement in a UNION, dependent on outer query
UNION RESULTunion_resultResult of a UNION.
SUBQUERYNoneFirst SELECT in subquery——子查詢,有關(guān)聯(lián)查詢時(shí),第一層子查詢(不管這個(gè)子查詢里又有多少子查詢)
DEPENDENT SUBQUERYdependent (true)First SELECT in subquery, dependent on outer query
DERIVEDNoneDerived table——在得到最終結(jié)果之前,用到的臨時(shí)表
DEPENDENT DERIVEDdependent (true)Derived table dependent on another table
MATERIALIZEDmaterialized_from_subqueryMaterialized subquery
UNCACHEABLE SUBQUERYcacheable (false)A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query
UNCACHEABLE UNIONcacheable (false)The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

?

  • type 針對(duì)單表的訪問(wèn)方法

從上到下=從優(yōu)到劣

    • const,唯一性索引和常數(shù)(常數(shù)不用計(jì)算,如子查詢等等)的匹配,id=1
    • system,訪問(wèn)系統(tǒng)表,且表里只有一行數(shù)據(jù)
    • eq_ref,多表的關(guān)聯(lián)查詢時(shí),與被驅(qū)動(dòng)表比較時(shí)用到了被驅(qū)動(dòng)表唯一性索引
    • ref,用了普通的索引(不是唯一性索引)
    • range,對(duì)索引的范圍掃描,><,between and
    • index,對(duì)索引全量掃描,比如(id是索引)select id from teacher;
    • all,沒(méi)有用到任何索引,就要對(duì)表全量掃描

?

  • Extra,額外的信息
    • using index(覆蓋索引)
    • using where 存儲(chǔ)引擎返回的數(shù)據(jù),并不都滿足客戶端的篩選條件時(shí),需要server層再過(guò)濾
    • using index Condition(索引下推)
    • using filesort 排序的列不是索引
    • using temporary 過(guò)濾或排序時(shí),需要暫存數(shù)據(jù)到臨時(shí)表,(比如,distinct、group by時(shí))。可以對(duì)這些列創(chuàng)建索引,以消除using temporary

5.2.4、優(yōu)化的參考

數(shù)據(jù)庫(kù)優(yōu)化的目標(biāo),就是基于Explain的信息盡量的使用索引。當(dāng)然在業(yè)務(wù)上也要考慮優(yōu)化,盡量減少的數(shù)據(jù)庫(kù)訪問(wèn)負(fù)擔(dān)。

  • 表結(jié)構(gòu)的優(yōu)化
    • 字段的定義,類型和長(zhǎng)度。選擇滿足需要的最小數(shù)據(jù)類型(int,tinyint),字符char,verchar,能用定長(zhǎng)就不要用變長(zhǎng)。
    • 不建議用外鍵、觸發(fā)器、視圖 因?yàn)椴豢梢?jiàn),降低可讀性。外鍵,數(shù)據(jù)一致性的約束放在代碼層。
    • 大文件的存儲(chǔ),圖片、文本、視頻最好不要base64編碼后存在數(shù)據(jù)庫(kù),會(huì)占用大量空間。可以上傳到ftp服務(wù)器。
    • 字段適當(dāng)冗余,解決重關(guān)聯(lián)的問(wèn)題,避免太多表聯(lián)合查詢。
    • 表的拆分,盡可能滿足第三范式,拒絕表字段大而全。
    • 關(guān)系型數(shù)據(jù)庫(kù)如果不滿足,可以用nosql,大數(shù)據(jù) 。

?

  • sql的優(yōu)化(簡(jiǎn)單寫寫 )
    • 調(diào)整表查詢的順序,用小表驅(qū)動(dòng)大表
    • join 代替 in
    • union 代替or
    • union all(不需要去重) 效率大于 union
    • limit 大偏移量時(shí),比如要從100萬(wàn)開(kāi)始,可以先把數(shù)據(jù)過(guò)濾,再limit

?

?

?

?

?

附錄:

1、取消MySQL密碼檢驗(yàn)程序:在mysql客戶端執(zhí)行UNINSTALL COMPONENT 'file://component_validate_password';https://www.yuque.com/u8021948/zt89r2/kf7qxxhttps://www.yuque.com/u8021948/zt89r2/kf7qxx

參考:https://dev.mysql.com/doc/refman/8.0/en/validate-password-installation.html

2、服務(wù)器上的localhost:用戶root,密碼1qazxsw2!

遠(yuǎn)程連接:用戶customer,密碼123qwe

來(lái)源:https://www.yuque.com/u8021948/zt89r2/kf7qxx

?

總結(jié)

以上是生活随笔為你收集整理的MySQL宏观架构与原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产精品igao视频网入口 | 成人9ⅰ免费影视网站 | 少妇性色午夜淫片aaaze | 欧美日韩另类在线观看 | 国产女人免费看a级丨片 | 日韩免费视频观看 | 日韩激情三级 | 特级黄色片免费看 | av黄色亚洲 | 婷婷去俺也去六月色 | 亚洲作爱 | 一本一道久久a久久精品 | 992tv成人免费看片 | 三级av中文字幕 | 午夜一级免费电影 | 亚洲精品国产精品久久99 | 免费裸体视频网 | bbbbb女女女女女bbbbb国产 | 成人一级在线观看 | 超碰在线人人97 | 久久久久国产精品www | 国产亚洲精品久久久久动 | 久久久久国产一区二区 | 欧美久久综合 | 午夜免费在线观看 | 丁香视频五月 | 久久久久日本精品一区二区三区 | a视频在线观看免费 | 亚洲综合在线视频 | 中国美女一级看片 | 精品国产一区二区三区不卡 | 免费在线观看成人av | 欧美一级免费黄色片 | 又黄又爽的视频在线观看网站 | 免费成人黄色av | 久久精品国产久精国产 | 91亚洲精品国偷拍自产在线观看 | 久久国产亚洲精品 | 91大神dom调教在线观看 | 婷婷丁香国产 | 亚洲综合成人在线 | 成人av午夜 | 五月激情av| 992tv在线观看 | 99久久这里有精品 | 中文字幕在线观看视频一区二区三区 | 欧美国产日韩激情 | 亚洲在线网址 | 麻豆视频在线 | 亚洲最大的av网站 | 五月天国产精品 | 久久人人爽人人爽 | 久久免费播放视频 | 成人中文字幕+乱码+中文字幕 | 特片网久久 | 欧美资源在线观看 | 久久人人97超碰com | 一区二区久久 | 亚洲资源网| 97精品国自产拍在线观看 | 欧洲高潮三级做爰 | 一级黄色片在线观看 | 日韩大片在线免费观看 | 成人免费视频播放 | 亚洲激情在线播放 | 色婷婷97| www.狠狠干 | 麻花天美星空视频 | www色综合| 亚洲精品综合在线观看 | 日韩在线观看中文 | 日本久久中文 | 婷婷在线综合 | 97成人啪啪网 | 亚洲一级片av | 日本精品久久久一区二区三区 | 五月婷婷.com| 丁香婷五月 | 国产精品大全 | 亚洲精品日韩一区二区电影 | 在线观看国产永久免费视频 | 久久天天拍 | 日韩视频中文字幕 | 在线性视频日韩欧美 | 国产小视频在线观看 | 综合网伊人 | 黄色av观看 | 亚洲色图色 | 美女视频黄的免费的 | 中中文字幕av| 丰满少妇在线观看资源站 | 日韩欧美在线播放 | 亚洲欧美婷婷六月色综合 | 天天艹天天爽 | 国产一区在线精品 | 色 中文字幕 | 国产亚洲成av人片在线观看桃 | 国产成人精品999在线观看 | 在线观看视频你懂得 | 99久久精品国产网站 | 91麻豆精品国产91久久久久久久久 | 狠狠色丁香婷婷综合 | 欧美性天天 | 色综合天天综合 | 国产亚洲成av片在线观看 | 日日碰狠狠添天天爽超碰97久久 | 欧美日韩一级在线 | 四虎影院在线观看av | 在线日韩亚洲 | 欧美日韩国产一二三区 | 精品一区二区av | 亚洲视频h | 国产成人精品免高潮在线观看 | 国产精品大片在线观看 | 久久久精品二区 | 综合网天天色 | 国产午夜精品久久久久久久久久 | 精品一区精品二区高清 | 中文字幕一区在线 | 中文国产在线观看 | 爱av在线网 | 亚洲国产黄色片 | av免费在线网 | 天天躁天天操 | 国产成人精品不卡 | 亚洲 欧美 国产 va在线影院 | 国产美女精彩久久 | 色九色| 青青河边草免费直播 | 国产精品一区在线 | 天堂av在线免费 | 黄色av一级 | 亚洲国产偷 | 国产一级一片免费播放放 | 日韩一区二区免费播放 | 狠狠干美女 | 中文字幕av在线电影 | 在线观看韩国av | 久久综合影音 | 中文在线字幕免费观看 | 波多野结衣网址 | 午夜精品久久久久久久久久久久 | 国产精品久久久电影 | 国产人免费人成免费视频 | 久久九九免费 | 国产一区二区在线影院 | 97色涩| 亚洲精品在线二区 | 免费在线观看一区 | 在线视频日韩精品 | 国产中文字幕视频在线 | 成人啪啪18免费游戏链接 | 成年人在线免费视频观看 | 国产精品自产拍在线观看蜜 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久久久久久久电影 | 国产午夜精品理论片在线 | 欧美日韩不卡在线视频 | 18性欧美xxxⅹ性满足 | 精品九九九 | 亚洲 综合 国产 精品 | 婷婷激情网站 | 91精品国产自产在线观看 | 国产精品美女久久久网av | 久草精品资源 | 亚洲男男gaygay无套同网址 | 亚洲最大激情中文字幕 | 特级大胆西西4444www | 国产精品久久伊人 | 久精品视频在线观看 | 草久在线播放 | 99在线观看精品 | 久久久久久久久国产 | 爱射综合| 国产特级毛片aaaaaaa高清 | 成年人电影免费看 | 亚洲成av片人久久久 | 丁香在线视频 | 91精品国产亚洲 | 在线观看av的网站 | 99久久99久久免费精品蜜臀 | 久久av中文字幕片 | 欧美成亚洲| www..com黄色片 | 久久草视频 | 国产午夜精品一区二区三区 | 91九色在线视频观看 | 国产日韩精品在线观看 | 久久精品久久久久 | 久久99精品国产99久久 | 中文字幕国产精品 | 亚洲精品成人av在线 | 国产高清视频免费观看 | 久久艹中文字幕 | 欧美日韩国产一区二区三区在线观看 | 国产成人精品久久久 | 亚洲精品在线二区 | av丁香花| 在线观看黄| 亚洲精品456在线播放乱码 | 天天插夜夜操 | 精品亚洲男同gayvideo网站 | 免费日韩电影 | 97爱爱爱 | 国产精品wwwwww | 国产一级片免费视频 | 天天·日日日干 | 亚洲成人资源在线观看 | 国产成人高清 | 久久毛片高清国产 | 人人干在线| 一区二区理论片 | 久久超级碰视频 | 国产精品毛片久久久 | 久草在线免费新视频 | 精品亚洲免费 | 欧女人精69xxxxxx| 国产成人精品一二三区 | 国产成人精品一区二区三区福利 | 国产精品黄网站在线观看 | 久久亚洲综合色 | 在线 国产一区 | 国产在线观看一 | 网站在线观看日韩 | 天天综合成人 | 精品久久免费看 | 色综合久久久久综合99 | 免费在线色 | 狠狠操狠狠插 | 久久午夜色播影院免费高清 | 一区二区三区四区不卡 | wwwww.国产 | 日韩久久久久久 | www.在线观看视频 | 成人网色 | 五月婷婷亚洲 | 久久久久久久久影院 | 国产69久久久欧美一级 | 黄色av电影在线观看 | 国产视频一区在线免费观看 | 久久久免费看片 | 欧美狠狠色| 免费看成人 | 免费精品| 精品免费一区二区三区 | 国产专区第一页 | avcom在线| 亚洲国产精品久久久 | 亚洲第一区在线观看 | 亚洲成年人在线播放 | 日韩精品免费一区二区在线观看 | 亚洲九九 | 特及黄色片 | 亚洲 综合 精品 | 青青河边草观看完整版高清 | 91精品国产91久久久久久三级 | 日日干激情五月 | 国产黄色电影 | 日韩视频一区二区三区在线播放免费观看 | 欧美日本在线视频 | 在线精品视频免费观看 | 香蕉视频一级 | 色人久久 | 亚洲欧美日韩国产一区二区三区 | 亚洲国产精品影院 | 国产精品国产三级国产aⅴ无密码 | 日韩精品视频在线观看网址 | 精品1区2区3区 | 韩国精品一区二区三区六区色诱 | www.狠狠操 | 久久精品系列 | 91av视屏 | 6080yy精品一区二区三区 | 欧美精品做受xxx性少妇 | 黄色软件视频网站 | 国产精品美女久久久 | 久久综合久久伊人 | 黄色毛片电影 | 国产视频亚洲 | 日日草天天干 | 天天干天天干天天 | 久草电影免费在线观看 | 探花视频在线观看免费 | 国产精品久久久99 | 天天摸夜夜添 | 亚洲激情网站免费观看 | 亚洲欧美成人综合 | 日韩欧美一区二区三区免费观看 | 色综合天天狠狠 | 黄av免费在线观看 | 日韩久久精品一区 | 一区二区三区在线观看免费 | 亚洲手机av | 在线观看免费视频 | 国产高清不卡av | 精品影院一区二区久久久 | 中文字幕文字幕一区二区 | 亚洲五月婷 | 久久午夜国产 | .精品久久久麻豆国产精品 亚洲va欧美 | 青青看片 | 日本视频高清 | 四虎成人精品永久免费av | 99色免费 | 精品99999| 一区二区欧美日韩 | 国产精品黄网站在线观看 | 亚洲黄色在线观看 | av福利在线| 国产手机在线观看 | 精品国产一区二区三区噜噜噜 | 久久观看 | 99久久精品国产免费看不卡 | 91mv.cool在线观看 | 国产亚洲精品久久久久久久久久 | 国内精品久久久久久中文字幕 | 又黄又刺激 | 999一区二区三区 | 青草视频在线 | 精品国偷自产国产一区 | av黄色免费看 | 午夜久久美女 | 天天操夜夜操国产精品 | 开心激情网五月天 | 91亚洲精品久久久蜜桃网站 | 久久一区二区三区超碰国产精品 | 97热久久免费频精品99 | 国产成人av电影在线观看 | 香蕉视频免费在线播放 | 一级黄色视屏 | 欧美日韩一区二区在线 | 亚洲午夜精品一区二区三区电影院 | 四虎永久精品在线 | 九九九在线观看 | 黄色av影院 | 国产伦精品一区二区三区高清 | 精品国产视频在线观看 | 亚洲精品456在线播放第一页 | 久久综合九色综合欧美狠狠 | 五月天狠狠操 | 成人免费视频视频在线观看 免费 | 免费h在线观看 | 中文永久字幕 | 国产a精品| 2024av| 日韩欧美成 | 日韩欧美视频在线 | 欧美日韩xxx| 成人久久久电影 | 日韩 国产 | 国产电影黄色av | 99爱视频在线观看 | 亚洲一级在线观看 | 色大片免费看 | 亚洲国产片 | 国产午夜三级一二三区 | 精品视频在线看 | 九九在线视频免费观看 | 91免费网站在线观看 | www.com.黄 | 欧美精品三级 | 日韩av电影免费在线观看 | 草久久久| 亚洲天堂自拍视频 | 美女视频久久黄 | 国产裸体无遮挡 | 成人亚洲网 | 久久久久久久久毛片精品 | 视频91| 精品嫩模福利一区二区蜜臀 | 成人午夜毛片 | 亚洲视频中文 | 亚洲精品自拍 | 中文字幕日韩有码 | 99超碰在线观看 | 中文字幕高清有码 | a视频免费在线观看 | 少妇视频一区 | 国产麻豆精品免费视频 | 欧美日韩一区二区三区在线观看视频 | 欧美精品久久久久久久久久丰满 | 中文字幕精品一区久久久久 | 区一区二区三区中文字幕 | 精品三级av| 深爱婷婷 | 日韩视频免费观看高清完整版在线 | 精品国内自产拍在线观看视频 | 九七人人干 | 日韩精品欧美一区 | 精品福利视频在线观看 | 国产黄色片一级 | 波多野结衣资源 | 丁香激情综合久久伊人久久 | 国产 视频 高清 免费 | 91av片| 天天操天天操天天 | 东方av在| 久草剧场| 国产99久久久国产精品免费二区 | 日韩免费区 | 亚洲精选99 | 三级黄免费看 | 国模精品一区二区三区 | 综合久久久久 | 久久精品一 | 欧美性直播 | 成年人天堂com | 国产精品免费高清 | 久久久国产精品电影 | 亚洲欧洲精品一区二区精品久久久 | 婷婷久久久久 | 久久久久久久久久电影 | 午夜精品av在线 | 日韩在线第一区 | 五月激情久久久 | 人人干人人艹 | av久久久 | 免费三级骚 | 日本3级在线观看 | 亚洲在线免费视频 | 国产亚洲精品久久久久久移动网络 | 西西444www高清大胆 | 97超碰在线久草超碰在线观看 | 看黄色91| 成人免费看片98欧美 | 久久婷婷视频 | 97视频总站 | 91中文字幕一区 | 麻豆手机在线 | 久久精选视频 | 成人午夜在线电影 | 国产精品久久久久一区二区三区共 | 国产麻豆剧传媒免费观看 | 香蕉视频一级 | 色婷婷激情四射 | 美女啪啪图片 | 97人人添人澡人人爽超碰动图 | 久久超| 亚洲精品久久视频 | 国产香蕉久久精品综合网 | 久久久av电影 | 日韩一区二区三区视频在线 | 国产高清久久久 | 国产精品久久一区二区三区不卡 | 婷婷 综合 色 | 色综合久久久久综合体桃花网 | 国产主播大尺度精品福利免费 | 人人射av | 五月天激情在线 | 国产精品视频你懂的 | 国产不卡av在线播放 | 国产一级免费电影 | 国产视频资源在线观看 | 午夜12点| 黄色国产成人 | 精品国产一区在线观看 | 日日碰狠狠躁久久躁综合网 | 色五月成人 | 国产美女精彩久久 | 日韩精品一区二区免费视频 | 麻豆av一区二区三区在线观看 | www亚洲一区 | 欧美性受极品xxxx喷水 | 日韩在线观看小视频 | 久久视频在线 | 日韩在线免费小视频 | 亚洲在线不卡 | 天天操夜夜逼 | 久久精品之| 99精品在线免费在线观看 | 成人国产精品一区二区 | 国产电影黄色av | 中文字幕在线免费看 | 国产精品18久久久久久久 | www.av在线.com | 天堂视频中文在线 | 99av国产精品欲麻豆 | 91成人免费电影 | 激情av综合 | 免费国产黄线在线观看视频 | 81国产精品久久久久久久久久 | 开心丁香婷婷深爱五月 | 久久精品一二三区白丝高潮 | 黄色在线网站噜噜噜 | 在线黄色观看 | 婷婷久久丁香 | 国产一区视频在线观看免费 | 国产精品欧美一区二区三区不卡 | 国内精品久久久久影院一蜜桃 | 99久久精品久久亚洲精品 | www夜夜操 | 色多多污污在线观看 | 丁香花在线观看免费完整版视频 | 天堂在线一区 | 亚洲国产无 | 成人在线电影观看 | 免费在线日韩 | 国产二区免费视频 | 日韩日韩日韩日韩 | av电影av在线 | 国产精品永久久久久久久www | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 欧美亚洲国产精品久久高清浪潮 | 亚洲人成在线电影 | 欧美色888 | 久久久精品二区 | 久久人人插 | 99在线精品视频观看 | 成 人 黄 色 视频 免费观看 | 亚洲国产影院av久久久久 | 男女视频91| 国产在线观看免费av | 国产亚洲在线 | 久草精品视频在线看网站免费 | 国产在线2020 | 成人wwwxxx视频| 国产成人一区二区三区久久精品 | 黄色看片| 国产精品视频最多的网站 | 国产午夜小视频 | 97视频在线看 | 精品一区精品二区高清 | 国产又黄又爽又猛视频日本 | 亚洲欧美视屏 | 成人激情开心网 | 精品视频123区在线观看 | 中文字幕 欧美性 | www.夜夜爱 | 国产美女主播精品一区二区三区 | 日韩精品一区二区在线观看视频 | 久久99精品久久久久蜜臀 | 国产成人不卡 | 91爱在线 | 久草在线播放视频 | 黄色a大片 | 99婷婷狠狠成为人免费视频 | 日操干| www.亚洲精品视频 | 国产精品亚洲a | 亚洲精品88欧美一区二区 | 亚洲欧美一区二区三区孕妇写真 | 日韩最新中文字幕 | 久久国产a| 日本三级香港三级人妇99 | 国内外成人在线视频 | 国产裸体视频网站 | 免费视频97| 久久综合给合久久狠狠色 | 国产午夜精品一区二区三区欧美 | 精品国产免费久久 | 午夜精品在线看 | 国产乱对白刺激视频不卡 | 日韩在线第一区 | 久久er99热精品一区二区三区 | 国产九色91 | 在线免费观看视频 | 91在线看黄| 亚洲精品久久久蜜桃直播 | 国产一区二区三区免费在线观看 | 久久刺激视频 | 超碰在线观看av.com | 日韩欧美一区二区在线 | 精品国模一区二区三区 | 日韩在线观看三区 | 成人一级在线观看 | 久久免费精品一区二区三区 | 69av免费视频 | 黄色毛片在线 | 综合网天天 | 婷婷久久久久 | 亚洲成熟女人毛片在线 | 中文久草| 一区二区精品视频 | 色国产精品一区在线观看 | 黄色三级免费观看 | 国产亚洲成人精品 | 国产精品综合在线 | 欧美ⅹxxxxxx | 中文字幕三区 | 亚洲最新毛片 | 亚洲精选国产 | 欧美精品v国产精品v日韩精品 | 日韩午夜在线观看 | 免费在线黄网 | 日日夜夜91 | 亚洲激情在线视频 | 97在线观看免费观看高清 | 久草五月 | 中文字幕av有码 | 婷婷色在线 | 亚洲免费视频观看 | 麻花豆传媒一二三产区 | 亚洲色图激情文学 | 日韩欧美精品在线视频 | 国产午夜精品视频 | 啪啪av在线| 中文字幕一区二区三区四区久久 | 99色婷婷 | 热九九精品| 999免费视频| 久久久久久久久艹 | 久久人91精品久久久久久不卡 | 国产在线播放一区二区三区 | 99在线观看免费视频精品观看 | 久草视频在线资源站 | 91精品啪啪 | 久久9视频 | 国产精品欧美日韩在线观看 | 九九久久婷婷 | 亚洲黄a| 97精品久久人人爽人人爽 | 91成年人在线观看 | 天天草夜夜 | 色就色,综合激情 | 日韩a级黄色 | 精品一区二区视频 | 热久久影视 | 婷婷久操 | 天天摸天天干天天操天天射 | 中文字幕精品三级久久久 | 人人插人人搞 | 国产精品毛片一区视频播 | 国产男男gay做爰 | 超碰在线中文字幕 | 国产精品久久久 | 中文字幕在线乱 | 免费av高清| 日韩动漫免费观看高清完整版在线观看 | 久久精品中文字幕一区二区三区 | 天天摸夜夜添 | 中文字幕制服丝袜av久久 | 国内精品免费久久影院 | 麻豆视频观看 | 日韩欧美精品免费 | 91最新在线观看 | 日韩一区二区三区在线看 | 亚欧日韩成人h片 | 在线精品在线 | 国精产品999国精产品岳 | 在线观看日韩精品 | 国产裸体视频网站 | 91九色视频观看 | 天天摸天天操天天舔 | 免费看三级黄色片 | 成人av.com| 亚洲午夜久久久久久久久电影网 | 久久亚洲福利视频 | 中文字幕人成人 | 精品国产电影 | 美女视频永久黄网站免费观看国产 | 欧美一级电影片 | 久久不卡电影 | 操操操操网 | 久久久精品网 | 日韩精选在线 | 精品欧美一区二区三区久久久 | 精品一区二三区 | 国产精品一区在线 | 丁香婷五月 | 欧美成天堂网地址 | 久久不射电影院 | 91网址在线观看 | 五月婷婷丁香六月 | 特及黄色片 | 五月天国产 | 在线а√天堂中文官网 | 国产精品v欧美精品 | 欧美日韩伦理在线 | 久草.com| 天天操夜操视频 | 黄色一区三区 | 在线观看日韩中文字幕 | 久久久久免费精品视频 | 成人久久毛片 | 最新的av网站 | 久久a国产 | 久久tv| 久久99精品久久久久久 | 狠狠的干狠狠的操 | 中文字幕色综合网 | 少妇精品久久久一区二区免费 | 国产高清av | 色婷婷综合久色 | 日韩欧美一级二级 | 久久人网| 天天色综合1| 99热国产在线中文 | a电影免费看 | 成人av在线影院 | 97国产精品亚洲精品 | av3级在线 | 九九九电影免费看 | 欧美电影黄色 | 91中文在线观看 | 日韩成人邪恶影片 | 亚洲精品资源在线观看 | 色a资源在线 | 成人app在线免费观看 | 亚洲精品在线观看免费 | 成人app在线播放 | 久草视频中文在线 | 国产日韩在线观看一区 | 国产在线 一区二区三区 | 日韩午夜在线播放 | 9797在线看片亚洲精品 | 精品在线视频一区二区三区 | 中文在线免费观看 | 亚洲国产精品视频在线观看 | 五月天亚洲婷婷 | 婷婷在线看 | 成人免费观看视频大全 | 水蜜桃亚洲一二三四在线 | 韩日在线一区 | 五月激情丁香图片 | 日韩av不卡在线观看 | www.国产在线观看 | 久草在线手机观看 | 欧美a级成人淫片免费看 | 91福利小视频 | 久久草在线精品 | 99久久精品日本一区二区免费 | 国产亚洲婷婷免费 | 欧美伦理电影一区二区 | 91精品国产99久久久久 | 亚洲三级黄 | 欧美成年人在线观看 | 在线观看成年人 | 五月开心六月伊人色婷婷 | 免费观看高清 | 一级淫片a | 亚洲高清视频在线 | 麻豆久久久久 | 日韩欧美国产精品 | 永久免费的啪啪网站免费观看浪潮 | 碰超在线 | 国产精品一区二区在线免费观看 | 国产成人三级一区二区在线观看一 | 久草在线中文视频 | 人人插人人插 | 成片人卡1卡2卡3手机免费看 | 国产做a爱一级久久 | 久久国内精品视频 | 欧美最爽乱淫视频播放 | 国产亚洲精品久久久久久 | 天天亚洲 | av资源免费看 | 久久久网 | 涩涩成人在线 | 99久久夜色精品国产亚洲 | 国产亚洲片 | 亚洲,播放| 日日射天天射 | 国产中文字幕在线视频 | 精品国产精品一区二区夜夜嗨 | 亚洲精选视频免费看 | 久久韩国免费视频 | 色99久久| 超碰97人人干 | 久久免费视频这里只有精品 | 日韩激情网 | 成人三级av | 婷婷色中文网 | 最新一区二区三区 | www国产亚洲精品 | 久久综合桃花 | 国产在线理论片 | 怡春院av | 日本中文字幕网站 | 在线观看免费91 | 国产成人精品一区二区三区 | 国内揄拍国产精品 | 亚洲视频高清 | 免费观看版 | 四虎影视成人精品国库在线观看 | 狠狠狠的干 | 国产成人久久久久 | 在线观看国产日韩欧美 | 国产精品久久99综合免费观看尤物 | 国产玖玖在线 | 综合网伊人 | 中文乱幕日产无线码1区 | 亚洲欧洲精品久久 | 中文字幕资源在线 | 91精品久久久久久 | 成人av免费在线播放 | 国产xxxx性hd极品 | 亚洲三级在线免费观看 | 在线观看中文字幕一区 | 一级α片免费看 | 久精品视频在线观看 | 国产成人av福利 | 夜夜骑日日操 | 免费高清看电视网站 | 天天爽夜夜爽精品视频婷婷 | 美国av大片| 久久综合激情 | av色图天堂网| 美女网站一区 | 国产精品永久免费 | 日韩欧美电影在线 | 亚洲最大的av网站 | 日韩专区在线播放 | 一区二区伦理 | 欧美欧美 | 亚洲黄色在线播放 | 久久精品中文字幕少妇 | 欧美贵妇性狂欢 | 亚洲h在线播放在线观看h | 美女福利视频一区二区 | 久热精品国产 | 中文字幕免费观看全部电影 | 韩国精品在线观看 | 99久久久久免费精品国产 | 亚洲成年人在线播放 | 免费视频xnxx com| av高清一区二区三区 | 日本一区二区高清不卡 | 久久伦理电影 | 色欧美成人精品a∨在线观看 | 中文在线字幕免 | 日本公妇在线观看 | adc在线观看 | 成人av在线电影 | 欧美色综合天天久久综合精品 | 九九热国产视频 | 免费看片黄色 | 国产精品一区二区av影院萌芽 | 国产精品1区2区在线观看 | 成人国产精品 | 久久性生活片 | 国产精品久久久久久一区二区三区 | 中文字幕亚洲综合久久五月天色无吗'' | 成人黄色在线播放 | 久久手机精品视频 | www.色五月 | 久久99视频 | 人人爽人人舔 | 国产第一页精品 | 777视频在线观看 | 色姑娘综合天天 | 久久国产精品久久久 | 国产高清在线a视频大全 | 免费观看黄 | 日韩av一区二区在线播放 | 日本天天色 | 一区二区三区视频在线 | 日韩国产高清在线 | 五月婷婷久 | 亚洲国产精品成人精品 | 色就色,综合激情 | 精品人人爽 | 色综合久久久久综合 | 日韩在线国产精品 | 日三级在线| 久久国产视频网站 | 一本一道波多野毛片中文在线 | 国产成人精品一区二区 | 天天干人人 | 一区二区三区四区久久 | 免费电影一区二区三区 | 日韩高清一二三区 | 97超碰人人模人人人爽人人爱 | 午夜精品一区二区三区视频免费看 | 精品一区久久 | 久久免费精品国产 | 亚洲最大av网站 | 二区三区在线视频 | 国产在线观看h | 狠狠综合 | 日韩专区视频 | 中文字幕在线网 | 国产精品久久久久999 | 国产精品中文在线 | 久久亚洲电影 | 国产成人av电影在线观看 | 精品视频999 | 国产91国语对白在线 | 国产精品伦一区二区三区视频 | 97人人视频 | 国产99久久99热这里精品5 | 韩日精品中文字幕 | 天天操天天色综合 | 国产精品一区二区三区观看 | 国产精品人人做人人爽人人添 | 99这里有精品 | 国产特黄色片 | 91视频链接| 国产特级毛片aaaaaa高清 | 欧美午夜精品久久久久 | 美女网站一区 | 日韩成人不卡 | 亚洲不卡在线 | 国产中文字幕在线看 | av电影免费在线看 | 国产三级精品在线 | 国产精品99久久久久久小说 | 亚洲黄色小说网址 | 亚洲一区二区三区精品在线观看 | 欧美了一区在线观看 | www.成人精品| 国产视频在线免费观看 | 久久久久成人精品免费播放动漫 | 久久久久免费精品国产小说色大师 | 国产女教师精品久久av | 五月天婷婷免费视频 | 久久久精品影视 | 国产精品久久一区二区三区, | 欧美一二区视频 | 亚洲综合视频在线 | 天天天天色射综合 | 国产午夜视频在线观看 | 国产精品成人品 | 日韩在线网 | 永久av免费在线观看 | 久久久久亚洲精品中文字幕 | 欧美一级片在线播放 | 丝袜制服天堂 | 青青河边草观看完整版高清 | 色开心| 日韩成人看片 | 91九色自拍| av在线a| 欧美少妇18p | 免费视频在线观看网站 | 欧美国产精品久久久久久免费 | 99精品国产一区二区三区不卡 | 日本中文乱码卡一卡二新区 | 超碰人人国产 | 亚洲一区二区三区在线看 | 国产伦理久久 | 6080yy午夜一二三区久久 | www.五月天色 | 超碰在线个人 | 99r在线精品 | 九九精品视频在线看 | 色婷婷五 | 成人在线中文字幕 | 日本中文字幕在线一区 | 美女网站视频色 | 久久久婷| 成人久久18免费 | 精品国产一区二区三区男人吃奶 | 中字幕视频在线永久在线观看免费 | 国产成年免费视频 | 欧美一级片免费在线观看 | 国产精品a久久久久 | 久久久精品午夜 | 最新黄色av网址 | 玖玖999 | 国产超碰在线观看 | 99在线观看免费视频精品观看 | 久久精品在线视频 | 91精品1区2区 | 黄色片免费电影 | www·22com天天操 | 欧美日韩另类在线 | 久久在草 | 91人人在线| 日韩特级毛片 | 2017狠狠干| 91在线一区 | 久久精品国产亚洲a | 91九色在线| 丁香激情综合 | 五月天综合激情 | 欧美一二区在线 | 国产精品成人av电影 | 久久精品xxx | 国产专区在线视频 | 日本护士撒尿xxxx18 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产成人av网址 | 成人在线视频在线观看 | 午夜精品一区二区三区视频免费看 | 在线观看成人国产 | 国产91精品一区二区绿帽 | 精品国产免费久久 | 久久开心激情 | 超碰在线人人97 | 久久久久久网站 | 毛片无卡免费无播放器 | 蜜臀av.com| 福利视频第一页 | 91av国产视频 | 国产黄色免费 | 国产日韩欧美在线观看视频 | 成年人免费看的视频 | 久久99精品国产99久久6尤 | 人人澡人| 国产亚洲精品中文字幕 | 日韩一区二区三区在线看 | 永久免费在线 | 久久久综合精品 | 欧美日韩亚洲精品在线 | 最近中文字幕免费 | 日日草夜夜操 | 尤物97国产精品久久精品国产 | 狠狠躁夜夜躁人人爽超碰97香蕉 |