九、MySQL邏輯架構介紹

1、概述:
MySQL按照邏輯劃分主要分爲三層:服務層,核心層和存儲引擎層其各層在整個架構中所扮演的角色以下:
服務層:爲客戶端作鏈接處理,受權和安全認證相關工做
核心層:查詢解析,分析,優化SQL語句,緩存結果等等
存儲引擎層:存儲和提取數據及事物的處理php

角色分擔
客戶端:MySQL客戶端指的是不一樣程序語言編寫的前端應用程序,及所調用的API接口(Java語言:JDBC是一種用於執行SQL語句的javaAPI),php語言的PDO擴展爲PHP訪問數據庫定義了一個輕量級的異質性的接口,它提供了一個數據訪問抽象層,這樣不管使用什麼數據庫均可以經過一致的函數執行查詢和提取數據。
服務層:MySQL屬於單進程多線層結構。
核心層:完成數據的查詢,緩存及優化的操做。
存儲引擎層:MyISAMM,InnoDB,CLuster和Memory
存儲引擎層是最貼近文件系統的功能層。
MySQL整體架構:前端

2、MySQL經常使用的存儲引擎
查看當前MySQL所支持的存儲引擎
mysql> show engines;
2.1 MyISAM存儲引擎:
特色:支持全文索引,
可以對整張表進行加鎖,不支持行鎖,及鎖粒度較大。
缺點:不支持事物,及沒有rollback功能。
應用:日誌系統,讀表的操做,沒有事物第併發的網站
2.2 InnoDB存儲引擎:
特色:MySQL5.7以前的版本不支持全文索引,5.7及之後的支持
支持行級鎖,鎖粒度小
支持ACID(事物完整性和異質性)
獨有的彙集索引主鍵設計方式,可大發提高併發讀寫性能
支持外鍵,支持崩潰數據的自我修復
注意問題
a) 全部InnoDB數據表都建立一個和業務無關的自增數字型做爲主鍵,對保證性能頗有幫助;
b) 杜絕使用text/blob,確實須要使用的,儘量拆分出去成一個獨立的表;
c) 時間建議使用 TIMESTAMP 類型存儲;
d) IPV4 地址建議用 INT UNSIGNED 類型存儲;
e) 性別等非是即非的邏輯,建議採用 TINYINT 存儲,而不是 CHAR(1);bool
f) 存儲較長文本內容時,建議採用JSON/BSON格式存儲;
2.3memory存儲引擎:
(1)memory存儲引擎相比前面的一些存儲引擎,有點不同,其使用存儲在內存中的數據來建立表,並且全部的數據也都存儲在內存中。
(2)每一個基於memory存儲引擎的表實際對應一個磁盤文件,該文件的文件名和表名是相同的,類型爲.frm。該文件只存儲表的結構,而其數據文件,都是存儲在內存中,這樣有利於對數據的快速處理,提升整個表的處理能力。
(3)memory存儲引擎默認使用哈希(HASH)索引,其速度比使用B-+Tree型要快,若是讀者但願使用B樹型,則在建立的時候能夠引用。
(4)memory存儲引擎文件數據都存儲在內存中,若是mysqld進程發生異常,重啓或關閉機器這些數據都會消失。因此memory存儲引擎中的表的生命週期很短,通常只使用一次。java

主:表級鎖:分爲讀鎖和寫鎖,其中讀鎖是共享的,能夠供多人使用,而寫鎖是排他的,噹噹前表被寫鎖鎖定的時候,其餘沒法讀取和修改,若是是讀鎖則是能夠其餘程序能夠查看。mysql

注意:行級鎖可能會形成「死鎖」現象
緣由分析:
一、MySQL行級鎖並非直接鎖記錄,而是鎖索引,索引分爲主鍵和非主鍵索引兩種,若是一條SQL語句操做了主鍵索引,那麼MySQL就會鎖定這個主鍵索引,若是SQL語句操做的事非主鍵索引,那麼MySQL會先鎖定這個非主鍵索引,再去鎖定主鍵索引。
二、在update和delete操做時MySQL不只會鎖定全部where條件掃描過的索引,還會鎖定相鄰索引(被修改的字段)。sql

三、MySQL鎖定狀態
show processlist命令能夠查看當前那些線程正在運行,若是用戶擁有SUPER權限能夠查看所用線程,若是線程的狀態有update或init某個表,則說明此事進程的status爲updateing data或在sending data。
對於「too many connections」的錯誤信息,而且想要了解正在發生的狀況則show processlist則很是有用。
相關查看命令:
show processlist;默認顯示100條信息
show full processlist;顯示所有線程信息
show open tables;查看哪些表是打開的。數據庫

查看服務器狀態
mysql> show status like '%lock%';vim

查看innodb運行時的信息
mysql> show engine innodb status\G
查看服務器配置參數:
mysql> show variables like '%timeout%';緩存

4、指定MySQL存儲引擎
4.1 修改配置文件是設置默認存儲引擎
vim /etc/my.cnf
default-storage-engine=innodb
保存以後重啓存儲引擎
建立表時指定存儲引擎
create table <tb_name>(<col> ) ennine=Innodb default charset=utf8;安全

相關文章
相關標籤/搜索