日韩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ò),歡迎將生活随笔推薦給好友。

久久99精品国产麻豆婷婷 | 天天操天天舔天天爽 | 国产一级精品在线观看 | a极黄色片 | 中文字幕中文字幕在线中文字幕三区 | 在线看的av网站 | 中文在线a天堂 | 不卡精品 | 国产精品中文在线 | 91最新国产 | 亚洲美女在线一区 | 精品9999 | 成人国产精品久久久春色 | 亚洲精品久久久蜜桃 | 精品一区久久 | 美女免费网站 | 午夜精品久久久久久久99 | 亚洲一区二区精品在线 | 欧美成人h版在线观看 | 亚洲一区不卡视频 | 一区二区 精品 | 亚洲免费a | 在线看黄色av | 久草在线视频网站 | 国产精品久久久久久久久久久不卡 | www.久久久com | 日韩精品视频免费专区在线播放 | 免费观看久久 | 久久成人黄色 | www.色婷婷.com| 亚洲欧美日韩在线一区二区 | 新版资源中文在线观看 | 色午夜影院 | 免费av黄色 | 精品欧美乱码久久久久久 | 99久久日韩精品免费热麻豆美女 | 国产精品va在线播放 | 97在线播放视频 | 99欧美精品| 午夜影院日本 | 久草综合在线 | 久久免费资源 | 在线观看国产永久免费视频 | 亚洲精品免费观看 | 99久久免费看 | 国产亚洲成av人片在线观看桃 | 成人国产精品一区二区 | 日韩a免费 | 亚洲 欧洲 国产 日本 综合 | 午夜视频在线瓜伦 | 99视频精品在线 | 中文字幕欧美激情 | 国产在线高清精品 | 久久久久久久久久久久久久免费看 | 在线观看成人 | 五月婷婷爱 | 亚洲japanese制服美女 | 成年性视频 | 欧美 日韩 国产 中文字幕 | 日韩欧美一区二区三区免费观看 | 中文字幕在线观看视频免费 | 91视频在线看 | 米奇四色影视 | 国产精品久久久一区二区三区网站 | 国产精品视频在线观看 | 免费观看视频的网站 | 午夜电影av | 99久久9| 亚洲黄色在线观看 | 日韩视频图片 | 国产精品不卡在线播放 | 成人a免费看 | 香蕉视频网站在线观看 | 十八岁以下禁止观看的1000个网站 | 精品国产一区二区三区久久久久久 | 欧美福利视频 | 精品视频免费播放 | 亚洲欧洲日韩 | 国产精品99久久99久久久二8 | 91视频免费 | 在线视频手机国产 | 欧美精品久久 | 99久久精品网 | 激情文学综合丁香 | 人人澡人人澡人人 | 国产涩涩网站 | 亚洲欧美日韩在线一区二区 | 黄色毛片一级片 | 久久中国精品 | 亚洲精品中文字幕在线 | 色综合狠狠干 | 中文字幕欧美日韩va免费视频 | 欧美激情视频在线观看免费 | 天天操操操操操 | 国产精品美女www爽爽爽视频 | 天堂在线v | 婷婷综合激情 | 天天爱天天操 | 黄色大片国产 | 成人性生交大片免费观看网站 | 9999精品免费视频 | 国产精品久久久久久久午夜 | 日韩一级片大全 | 日韩一区二区免费在线观看 | 亚洲欧洲成人精品av97 | av大全在线| 成人在线免费观看网站 | 日韩视频三区 | 午夜精品久久久久久久99水蜜桃 | 免费不卡中文字幕视频 | 国产999精品久久久久久 | 成人久久久精品国产乱码一区二区 | 婷婷激情在线 | 国产精品美女 | 国产成人精品一区二区在线 | 欧美看片| 久久综合狠狠综合久久狠狠色综合 | 欧美一级在线观看视频 | 久久久国产精品成人免费 | 制服丝袜一区二区 | 狠狠色丁香久久婷婷综 | av视屏在线播放 | 狠狠干狠狠色 | 国内精自线一二区永久 | 香蕉视频在线网站 | 国产一区二区三精品久久久无广告 | 免费日韩一级片 | a久久久久久 | 天天干,夜夜操 | 在线免费看黄网站 | 99精品久久久久久久 | 奇米网8888 | 一本一本久久a久久精品牛牛影视 | 国产精品久久久精品 | 国产免费av一区二区三区 | 97久久精品午夜一区二区 | 精品中文字幕视频 | 九九精品久久 | 国产精品一区二区视频 | www.99久久.com| 亚洲视频国产 | 激情欧美一区二区三区免费看 | 中文字幕一区二区三区在线播放 | 日韩中文字幕a | 久久久免费精品视频 | 五月天婷婷在线播放 | 日韩在线国产精品 | 夜夜爱av | 国产精品白丝jk白祙 | 国产精品美女999 | 欧美黑人性猛交 | 中文字幕乱视频 | 黄色在线观看污 | 日韩在线三级 | 精品999在线观看 | 久久国产影院 | av在线免费网站 | 偷拍精品一区二区三区 | 婷婷草| 99精品视频观看 | 麻豆国产网站 | 丁香久久| 成人免费视频观看 | 婷婷激情欧美 | 奇米影视777四色米奇影院 | 97品白浆高清久久久久久 | 91福利视频免费观看 | 精品国产诱惑 | 91精品夜夜 | 日韩在线观看视频在线 | 黄色视屏av| 日韩18p| 九九免费观看视频 | 国产大陆亚洲精品国产 | 综合久久久久久久 | 最近中文字幕完整视频高清1 | 久久手机看片 | 夜色资源站国产www在线视频 | 中文字幕亚洲综合久久五月天色无吗'' | 五月天婷亚洲天综合网鲁鲁鲁 | 国产精品美女久久久久久免费 | 91av视频导航| 91一区啪爱嗯打偷拍欧美 | 最近中文字幕国语免费高清6 | 天天干天天爽 | 国产999免费视频 | 黄色小说视频网站 | 久久精品国产亚洲 | 四虎天堂 | 在线精品视频在线观看高清 | 成人va天堂 | 天天爽天天爽 | 婷婷色社区 | 激情网五月婷婷 | 亚洲激情综合 | av中文字幕在线免费观看 | 四虎永久网站 | 久久精品免费观看 | 一区二区三区动漫 | 日本性生活一级片 | 国产亚洲婷婷免费 | 日韩电影在线观看中文字幕 | 久操视频在线免费看 | 欧美少妇xx | 色婷婷久久一区二区 | 久草在线免费资源站 | 91人人插 | 韩国在线一区二区 | 亚洲精品一区二区三区在线观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 精精国产xxxx视频在线播放 | 天天综合网在线观看 | 992tv又爽又黄的免费视频 | 天天射狠狠干 | 精品99免费视频 | av日韩国产 | 国产精品9区 | 国产福利小视频在线 | 欧美日韩精品在线 | 亚洲一级电影在线观看 | 国产精品一区二区在线免费观看 | 日韩免费三级 | 欧美精品v国产精品 | 色橹橹欧美在线观看视频高清 | 亚洲欧美日韩在线一区二区 | 国产精品中文 | 成人午夜网 | 精品视频久久 | 97在线公开视频 | 国产日韩欧美精品在线观看 | wwwwww国产 | 亚洲婷婷免费 | 亚洲一区视频在线播放 | 国产成人精品亚洲日本在线观看 | 日韩在线免费不卡 | 久久精品国产一区二区三 | 不卡视频一区二区三区 | 久久人人爽爽人人爽人人片av | 日韩精品欧美视频 | 香蕉精品视频在线观看 | 久久激情综合 | 中文资源在线播放 | 黄p网站在线观看 | 国产在线无 | 久久久久久久18 | 九色自拍视频 | 亚洲每日更新 | 色一级片 | 91在线91拍拍在线91 | 久草视频播放 | 亚洲精品网址在线观看 | 99色在线播放 | 狠狠干干 | 91麻豆免费看 | 国产精品午夜免费福利视频 | 日韩三级视频在线观看 | 欧美日韩在线视频观看 | 亚洲国产剧情av | 久久超碰免费 | 欧美a级成人淫片免费看 | 丰满少妇麻豆av | 日日摸日日添日日躁av | 久久综合五月 | 999久久久 | 亚洲黄色激情小说 | 狠狠色狠狠色 | 久久久免费毛片 | 国产精品1区2区3区 久久免费视频7 | 国产黄a三级三级 | 久久精品久久精品久久39 | 精品一区二区免费在线观看 | 午夜狠狠干 | 日本在线免费看 | 国产1区在线观看 | 日本成址在线观看 | 麻豆免费视频 | 最近中文字幕 | 狠狠狠的干| 久久最新视频 | 日韩精品一区二区三区高清免费 | 五月婷婷免费 | 亚洲综合丁香 | 黄色成人在线观看 | 黄色大片av | 国产黄a三级三级三级三级三级 | 九九精品毛片 | 丁香狠狠| 亚洲国产精品影院 | 国精产品永久999 | 亚洲国产伊人 | 国产在线观看91 | 国产亚洲视频在线观看 | 免费视频一区 | 久久综合天天 | 99热九九这里只有精品10 | 日韩在线精品一区 | 在线v片免费观看视频 | 国产麻豆剧传媒免费观看 | 久久久久久久久久国产精品 | 狠狠插狠狠干 | 亚洲九九| 国产大尺度视频 | 久久精品黄色 | 午夜久久成人 | 97成人精品视频在线观看 | 日韩欧美69 | 亚洲人成人在线 | 国产91亚洲精品 | 日韩精品不卡在线观看 | 精品国产1区| 狠狠干 狠狠操 | 91av九色| 久久久免费毛片 | 国产在线观看地址 | 国产成人精品女人久久久 | 国产午夜在线观看视频 | 国产精品精品久久久久久 | 欧美精品久久久久久久 | 久久视频在线观看免费 | 国产不卡精品 | 日韩在线在线 | 国产日韩欧美在线看 | 国产精品日韩精品 | av黄色成人 | 婷婷久久网站 | 久久看片 | 天天噜天天色 | 在线观看免费色 | 亚洲精品国偷自产在线99热 | 欧美日韩不卡在线观看 | 99热99re6国产在线播放 | 免费av福利 | 精品免费久久久久久 | 欧美日韩中文在线视频 | 国产自在线 | 精品国产一区二区三区四 | 99热在线这里只有精品 | 人人舔人人插 | 999在线观看视频 | 久久精品国产一区 | 国产精选在线观看 | 一区二区激情 | 免费色视频网址 | 成年人黄色免费视频 | 日日躁你夜夜躁你av蜜 | 在线观看免费福利 | 国产成人一区二区三区免费看 | 91久久爱热色涩涩 | 日韩欧美黄色网址 | 黄色aaa毛片| 麻豆免费在线播放 | 九九有精品 | 久久视频99 | 日韩剧 | 亚洲第一中文字幕 | 国产成人精品亚洲日本在线观看 | 国产三级视频在线 | 国产精品久久久久久久久久东京 | 国产精品久久久久一区二区三区 | 午夜av免费 | 国产精品久久电影观看 | 久久久精品亚洲 | 国产麻豆精品在线观看 | 国产91粉嫩白浆在线观看 | 久草在线中文888 | 国产欧美精品一区二区三区 | 涩涩资源网 | 免费日韩视 | 日韩成人精品 | 午夜av免费看 | 91人网站 | 五月天婷亚洲天综合网精品偷 | 日韩在线一二三区 | 最新av网址在线观看 | 久久视频在线观看中文字幕 | 一级片视频在线 | 在线看岛国av | 国产精品96久久久久久吹潮 | 区一区二区三区中文字幕 | 不卡视频一区二区三区 | 免费在线观看视频a | 999亚洲国产996395 | 免费观看www视频 | 久久精品99国产国产精 | 中文字幕资源网 | 激情导航 | 粉嫩av一区二区三区四区 | 麻豆精品视频在线 | 亚洲影音先锋 | 中文字幕一区二区在线观看 | 国产一区二区三区网站 | 天无日天天操天天干 | 97色婷婷成人综合在线观看 | 激情综合一区 | 日韩网站一区二区 | 欧美一级片免费在线观看 | 婷婷精品国产一区二区三区日韩 | 香蕉精品视频在线观看 | 国产精品99久久久久久宅男 | 97精品国产aⅴ | 婷婷亚洲最大 | 成人黄色影片在线 | 久久国产精品免费 | 粉嫩一二三区 | 久热电影 | 亚洲老妇xxxxxx| 亚洲人成在线电影 | 国产精品视频线看 | 国产精品麻豆果冻传媒在线播放 | 欧美在线观看视频 | 国产日韩欧美在线影视 | 日本三级香港三级人妇99 | 一区二区三区在线观看 | 91精品在线免费视频 | 91在线看黄| 天天操天天添天天吹 | 丁香网五月天 | 毛片播放网站 | 国产精品一区二区在线观看免费 | 国产精品久久久久aaaa九色 | 日韩成人在线免费观看 | 国产精品一区二区av麻豆 | 免费观看mv大片高清 | 92中文资源在线 | 在线观看日本高清mv视频 | 国产黄色电影 | 在线观看视频日韩 | 中文字幕一区二 | 日韩系列| 久久久久在线视频 | 中文成人字幕 | 国产精品a久久 | 中文字幕在线日 | 色五丁香 | 婷婷视频在线播放 | 日韩av高潮 | 最新国产一区二区三区 | 国产精品免费久久久久久久久久中文 | www国产在线 | 亚洲一区二区三区毛片 | 久久99精品久久久久久久久久久久 | 9999精品免费视频 | av超碰在线 | japanesexxxhd奶水| 免费看的黄色 | 欧美 亚洲 另类 激情 另类 | 99精品久久99久久久久 | 国产免费久久久久 | 亚洲爱av| 久久免费毛片 | 91亚洲精品久久久蜜桃借种 | 三级黄色网址 | 日韩午夜视频在线观看 | 久久成人精品电影 | 日日爱av | 亚洲精品麻豆视频 | 天天摸日日摸人人看 | 在线观看视频在线观看 | 韩国一区在线 | 中文字幕在线观看第一区 | 久久人91精品久久久久久不卡 | 成人播放器 | 在线观看小视频 | 中文字幕 婷婷 | 国产福利一区二区在线 | 精品国产不卡 | 美女网站在线观看 | 精品国产1区二区 | 亚洲免费观看在线视频 | 婷婷综合伊人 | 国产一线在线 | 国产精品原创在线 | 丁香综合av| 射久久久 | 亚洲黄色免费在线看 | 天天曰天天曰 | 日韩视频专区 | 久草免费资源 | 天天操天天射天天插 | 色香蕉网 | 国产91全国探花系列在线播放 | 久久久久久蜜av免费网站 | 国产玖玖精品视频 | 久久久久福利视频 | 久久久国产日韩 | 亚洲精品国产精品国自产观看 | 国产无套精品久久久久久 | 久久久精品 | 一区二区三区免费在线观看 | 免费a级毛片在线看 | 久草视频在线免费播放 | 这里只有精彩视频 | 成人免费视频a | 伊人首页| 久久午夜影视 | 亚洲欧美在线观看视频 | 91天天视频| 久久影院亚洲 | 国产麻豆传媒 | 懂色av一区二区三区蜜臀 | 国产剧情亚洲 | 99综合电影在线视频 | 国产精品久久久久久影院 | 久久99久久99免费视频 | 亚洲自拍av在线 | 国产美女网站视频 | 国产综合福利在线 | 91视频网址入口 | 日韩av午夜 | 亚洲爽爽网 | 久久精品官网 | 色偷偷97 | 97看片吧| 韩国一区二区三区在线观看 | 精品国产电影一区二区 | 亚洲精品一区二区久 | 久久a热6| 国产 欧美 日产久久 | 国产一区高清在线观看 | 国产免费不卡av | 伊人婷婷在线 | 亚洲国内精品 | av一二三区 | 手机在线看永久av片免费 | 色妞色视频一区二区三区四区 | 中文字幕在线观看视频一区二区三区 | 黄色大片国产 | 综合亚洲视频 | 久草免费在线视频 | 亚洲综合色视频 | 成人av电影免费观看 | 波多野结衣在线观看视频 | 午夜精品电影 | 五月婷婷色播 | 啪啪肉肉污av国网站 | 久久97久久 | 天天天天爱天天躁 | 久久99精品国产99久久6尤 | 久草在线观看资源 | 日韩欧美有码在线 | 四虎国产精品免费观看视频优播 | www·22com天天操 | 日韩激情在线视频 | 日日夜夜精品视频 | 六月丁香激情网 | 色婷婷电影 | 国产亚州av | 99精品国产成人一区二区 | 国产网站av | 久久免费久久 | 夜夜看av | 国产精品久久久久久久久久东京 | 成人va天堂 | 成 人 黄 色 片 在线播放 | 亚洲天天在线日亚洲洲精 | 91伊人| av大全在线免费观看 | 日韩一级片观看 | 91精品在线看 | 久久免费av电影 | 日韩综合一区二区三区 | 天天干天天射天天爽 | 伊人影院得得 | 天天色天天 | www日日夜夜 | 久久久久久久久福利 | 久久精品人人做人人综合老师 | 国产小视频免费观看 | 国产a免费| 国产精品久久久久久久久久新婚 | 日韩av一区二区三区 | 日日操天天操狠狠操 | 91av免费观看 | 国产精品久久久久久爽爽爽 | 亚洲精品播放 | 国产乱码精品一区二区蜜臀 | 99热在线国产 | 91麻豆看国产在线紧急地址 | 91秒拍国产福利一区 | 天天草天天插 | 日韩免费视频网站 | 狠狠狠狠狠操 | 久久黄色小说 | 久久av一区二区三区亚洲 | 成人黄色av免费在线观看 | 国产一区免费观看 | www.色com| 亚洲精选久久 | 在线免费高清 | 97夜夜澡人人双人人人喊 | 久久亚洲精品国产亚洲老地址 | 国产精品毛片久久久久久久久久99999999 | 久久久91精品国产一区二区三区 | 91av资源网 | 6080yy午夜一二三区久久 | 久久久资源 | 久青草国产在线 | 日韩av三区 | 久久五月天色综合 | 97超碰在线播放 | 免费亚洲一区二区 | 久草在线免费播放 | 国产一级视屏 | 天堂在线一区二区 | 丝袜美腿在线视频 | 日韩高清一二区 | av在线h | 成人精品久久久 | 99精彩视频在线观看免费 | av黄色国产 | 精品91视频 | 亚洲专区免费观看 | 激情五月婷婷丁香 | 91在线永久| 日批视频在线观看免费 | 伊人久久国产精品 | 成人97视频 | 国内小视频| 亚洲精品久久激情国产片 | 欧美日韩中文在线观看 | 国产一级在线观看 | 日韩av免费大片 | 亚洲黄色在线看 | 麻豆视频在线观看免费 | 麻豆手机在线 | 在线视频日韩欧美 | 欧美va天堂va视频va在线 | 中文字幕第一页在线vr | 日本特黄特色aaa大片免费 | 午夜视频在线观看一区二区 | 日日爱视频 | 久久在线免费视频 | 天天干天天干天天干 | 午夜精品久久久久久久久久 | 在线小视频你懂的 | 五月婷婷播播 | 91激情视频在线播放 | 日韩精品国产一区 | 综合色狠狠 | 免费一级日韩欧美性大片 | 免费在线一区二区三区 | 国产视频中文字幕在线观看 | 超碰97.com| 日韩美视频 | 久久国产色 | 91精品对白一区国产伦 | 中文字幕麻豆 | 亚洲精品免费在线播放 | 成人性生交大片免费观看网站 | 99久久久久久久 | 久久美女精品 | 国产在线永久 | 久久免费a | 91麻豆国产| 国产1区2区3区精品美女 | 国产精品国产三级国产 | 国产操在线 | 亚洲五月婷 | 国产精品免费久久 | 欧美午夜视频在线 | 久久伦理 | 国产一区二区免费看 | 日韩久久久久久 | 国产免费久久精品 | 亚洲精选在线 | 国产一区二区不卡视频 | 日韩欧美在线观看一区二区三区 | 国产精品电影在线 | 久久久久北条麻妃免费看 | 亚洲精品字幕在线观看 | 精品国产自在精品国产精野外直播 | 欧美精品一区二区三区一线天视频 | 午夜久久视频 | 在线 视频 亚洲 | 久久视频热 | 久久69精品| 91热爆视频 | 中文字幕av免费观看 | 粉嫩一二三区 | 91成版人在线观看入口 | 性色av免费在线观看 | 免费h漫在线观看 | www五月天 | 久久精选视频 | 久久精品8 | 天天操天天草 | 日日操日日插 | 久久国产精品久久w女人spa | 久久色在线播放 | 在线 精品 国产 | 亚洲另类交 | 五月婷婷狠狠 | 在线三级av | 网站免费黄色 | 天天插日日插 | 免费在线观看av网站 | 亚洲九九九 | 精品久久久久久久久久久久久久久久久久 | 二区在线播放 | 日韩欧美成人网 | 中文字幕在线视频网站 | 久久久精品网 | 国产日韩在线播放 | 国产精品av久久久久久无 | 亚洲精区二区三区四区麻豆 | 98超碰人人 | 奇米四色影狠狠爱7777 | 麻豆久久久久久久 | 国产成人精品一区二区在线 | 特级片免费看 | 成人午夜在线电影 | 亚洲片在线观看 | 精品美女久久久久 | 国产在线v| 日本中文字幕在线看 | 探花视频网站 | 免费av福利| 久久久久久蜜av免费网站 | 狠狠狠色丁香综合久久天下网 | 欧美va天堂va视频va在线 | 免费在线观看污 | 国产美女精彩久久 | 99精品国产一区二区三区不卡 | 久精品视频在线 | 久久国产高清视频 | 国产69精品久久app免费版 | 视频在线亚洲 | 91日韩免费 | 久久久久激情电影 | 永久免费的啪啪网站免费观看浪潮 | www.99热精品 | 91刺激视频| 国产精品日韩欧美 | a在线免费 | 91久久久国产精品 | 中文字幕亚洲欧美日韩 | 成人免费av电影 | 夜夜操夜夜干 | av电影在线观看完整版一区二区 | 中文一区在线观看 | 久久久在线 | 丁香av在线 | 午夜视频在线观看欧美 | 精品国产乱码久久久久久1区2匹 | 日日综合网 | 久久躁日日躁aaaaxxxx | 亚州免费视频 | 黄视频网站大全 | 日韩 在线a | 天天操天天干天天 | www.色五月.com | 99性视频| 色综合久久网 | 中文字幕精品三区 | 国产高清视频在线播放 | 九色琪琪久久综合网天天 | 丁香视频在线观看 | 欧美网站黄色 | 91麻豆精品国产91久久久无限制版 | 99视频精品视频高清免费 | 香蕉视频免费看 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品2区 | 国产最新网站 | 欧美日韩精品在线观看视频 | 一区二区三区在线免费 | av在线电影网站 | 色网站国产精品 | 成人在线观看免费 | 天天av资源 | av不卡中文字幕 | 天天操夜夜拍 | 国产又粗又猛又黄视频 | 日韩中文幕 | 午夜精品久久 | 午夜少妇一区二区三区 | 美女网站视频色 | 亚洲国产天堂av | 国产精品手机在线播放 | 日韩欧美在线视频一区二区三区 | 婷婷久久久久 | 欧美日韩首页 | 黄色小视频在线观看免费 | 最新色站| 久久综合色综合88 | 久久精品日产第一区二区三区乱码 | 久久国产精品一二三区 | 韩日电影在线 | 中文字幕 国产视频 | 精品在线视频一区二区三区 | 99视频免费看 | 久久视屏网 | 亚洲人成影院在线 | 日韩大片在线 | 午夜黄色影院 | 91av手机在线| 奇米网在线观看 | a在线免费观看视频 | 美女网站视频久久 | 成人av在线电影 | 久久伦理网| 日韩电影一区二区三区 | 国产伦精品一区二区三区无广告 | 国产伦理久久精品久久久久_ | 国产精品孕妇 | 永久黄网站色视频免费观看w | 在线观看国产区 | 久久在线免费观看视频 | 人人爱爱| 不卡的av在线 | 色干综合 | 日本高清免费中文字幕 | 欧美一级日韩三级 | 色婷婷综合久久久中文字幕 | 亚洲婷婷伊人 | 国产精品一区二区久久精品爱微奶 | 欧美成年人在线观看 | 中文字幕在线看片 | www.狠狠色.com | 日本69hd | 久久久久久欧美二区电影网 | 国产高清av在线播放 | 日韩欧美精选 | 成年人视频免费在线播放 | 超碰在线人人97 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 精品在线一区二区 | 亚洲精品观看 | 日日干 天天干 | 久久综合色一综合色88 | 精品9999| 亚洲精选99 | 免费h精品视频在线播放 | 久久国产精品免费 | 成人亚洲欧美 | 日韩视频在线播放 | 九七视频在线 | 亚洲精品视频免费看 | 中文字幕电影高清在线观看 | 91九色视频导航 | 久久久久久久久久久免费av | 在线观看亚洲视频 | 丁香六月综合网 | 人人澡澡人人 | 天天综合操 | 国产不卡在线播放 | 免费能看的av | 国产成人久久av免费高清密臂 | 九九热1| 午夜a区 | 国产成人三级 | 成人av网站在线播放 | 91黄色在线看 | 亚洲无线视频 | 久久免费大片 | 日产乱码一二三区别在线 | 久久久久久久久久亚洲精品 | 五月婷婷久 | 精品国产1区 | 亚洲狠狠 | 午夜91在线 | 成人全视频免费观看在线看 | 日日操操操 | 国产亚洲精品久久久久久大师 | 国产一级做a爱片久久毛片a | 久久国语露脸国产精品电影 | 国产综合福利在线 | 久久久国产精品人人片99精片欧美一 | 96av视频| 玖玖在线资源 | 久草男人天堂 | 婷婷在线免费 | 色天天综合久久久久综合片 | 国产精品对白一区二区三区 | 国产在线一区二区 | 久久9精品 | 国产麻豆视频免费观看 | 国产视频在线免费观看 | 992tv成人免费看片 | 国产欧美日韩精品一区二区免费 | 伊人婷婷网 | av丁香花 | 国产精品丝袜久久久久久久不卡 | 亚洲精品一区二区精华 | 在线观看免费高清视频大全追剧 | 射九九| 天天色中文 | 亚洲精品视频在线观看免费视频 | 99久久精品国产一区二区三区 | 国产精品一二 | 狠狠狠色丁香综合久久天下网 | 免费国产ww | 国产精品久久久久久久久久久久 | 91亚洲精品国偷拍 | 97国产精品亚洲精品 | 日韩中文在线观看 | 最新国产在线 | 欧美日韩精品网站 | 日本 在线 视频 中文 有码 | 91麻豆精品国产91久久久无限制版 | 婷婷六月天丁香 | www.久久免费视频 | 午夜精品久久久久99热app | 91在线小视频 | 久久久成人精品 | 国产在线色站 | 色综合久久久久久久久五月 | 午夜精品999| 99久久精品免费看国产四区 | 久久精品久久久久久久 | 精品国产99 | 免费欧美精品 | 精品国产成人在线 | 成人黄色中文字幕 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久综合桃花 | 国产免费久久av | 久精品在线观看 | 久久久久久久久久久久av | 国产黄色精品视频 | 国产亚洲免费观看 | 免费在线一区二区 | 国产在线中文 | 国产一区二区高清 | 亚洲婷婷免费 | 久久久久久久久久久免费 | www免费网站在线观看 | 国产亚洲精品女人久久久久久 | 中文字幕91 | 日日操夜夜操狠狠操 | 欧美做受xxx | 久久婷亚洲五月一区天天躁 | 四虎精品成人免费网站 | 伊人狠狠干 | 在线电影中文字幕 | 欧美日韩性视频 | 日韩精品视频久久 | 欧美成人中文字幕 | 四虎影视成人永久免费观看亚洲欧美 | 中文字幕日韩国产 | 就要干b | 亚洲精品乱码久久久久久蜜桃欧美 | 日日夜夜免费精品视频 | 亚洲精品白浆高清久久久久久 | 久久精品一区二区三区国产主播 | 国产精品久久久久一区 | 九九爱免费视频在线观看 | 久草青青在线观看 | 国产一区二区不卡视频 | av不卡网站| 久久99国产精品久久99 | 成人黄色短片 | 欧美一级片播放 | 国产精品福利在线播放 | 51久久夜色精品国产麻豆 | 日韩精品偷拍 | 免费a一级 | 中文字幕一区二区三区久久蜜桃 | 国产精品中文久久久久久久 | 中文字幕精品三区 | 精品国产理论片 | 亚洲一区 影院 | 日韩视频精品在线 | 国产专区在线播放 | 92精品国产成人观看免费 | 91九色视频网站 | 亚洲精品免费在线播放 | 日韩av免费大片 | 手机在线看片日韩 | 国产一区 在线播放 | 黄色91免费观看 | 久草青青在线观看 | 五月天丁香视频 | 天天色视频| 国产又粗又猛又黄又爽的视频 | 久久婷婷国产色一区二区三区 | www.午夜视频 | 日韩二区三区在线 | 免费看片成人 | 免费91麻豆精品国产自产在线观看 | 中文字幕欧美三区 | 久久好看免费视频 | 久久这里有精品 | 最近中文字幕在线中文高清版 | 日本狠狠干| 国产精品 美女 | 婷婷亚洲综合五月天小说 | 精品自拍sae8—视频 | 五月天六月婷婷 | av黄色免费看 | 精品久久毛片 | 精品在线视频观看 | 99看视频在线观看 | 日韩丝袜在线观看 | 日韩精品一区二区三区免费观看 | 久久久久激情电影 | 2021久久| 亚洲高清视频在线观看免费 |